"""
type Description: TestEnum

some random enums for test
"""
enum TestEnum {
  """
  enumValue Description: EnumA
  """
  EnumA
  EnumB @deprecated(reason: "test deprecation enumValue")
  """
  enumValue Description: EnumC
  """
  EnumC @deprecated
}

input NestedInputObject {
  fieldTestID: ID!
}

input TestInputObject {
  fieldTestScalar: TestScalar!
  fieldNestedInputObject: [NestedInputObject]!
}

"""
type Description: Coordinates

some random text
"""
input Coordinates {
  """
  inputValue Description: latitude
  """
  latitude: TestScalar!
  """
  inputValue Description: longitude
  some random inputValue details
  """
  longitude: Int!
}

"""
type Description:

  Address
"""
type Address {
  """
  field Description: city
  """
  city: String! @deprecated(reason: "test deprecation field with reason")
  street(
    """
    argument Description: inputObject
    """
    argInputObject: TestInputObject!
    argMaybeString: String
  ): [[[[String!]!]!]] @deprecated
  houseNumber: Int!
}

"""
type Description: TestUnion

some random text for union type
"""
union TestUnion = User | Address

"""
User

MultilineDescription

Test
"""
type User {
  """
  field description: name
  """
  name: String!
  """
  field description: email
  """
  email: String!
  address(coordinates: Coordinates!, comment: String): Address!
  office(zipCode: [Int!], cityID: TestEnum!): Address!
  friend: User
}

type Query {
  user: User!
  testUnion: TestUnion
  fail1: String!
  fail2: Int!
}

type Mutation {
  createUser(userID: String!, userName: String): User!
}

type Subscription {
  newUser: User!
}