directive @TestDirective(name: String!, enum: TestEnum) on INPUT_OBJECT | OBJECT

scalar TestScalar @TestDirective(name: "SomeName")

enum TestEnum @TestDirective(name: "SomeName") {
  EnumA
  EnumB @TestDirective(name: "SomeName")
  EnumC
}

enum _TestUnderscoredType {
  _TestUnderscoredType
}

enum testCharCases {
  lowerCaseA
  UpperCaseB
  _underscoredC
}

input Coordinates @TestDirective(name: "SomeName") {
  latitude: TestScalar!
  longitude: Int! = 4 @TestDirective(name: "SomeName")
}

type Address {
  street: [[[[String!]!]!]]
  score: Float! @TestDirective(name: "SomeName")
}

type User {
  type: String!
  address(coordinates: Coordinates!, type: String): Int!
  friend(id: ID!, cityID: TestEnum): User!
  CharCases: testCharCases
  _underscored: _TestUnderscoredType
}

union TestUnion @TestDirective(name: "SomeName") = User | Address

type MyQuery {
  user: User!
  testUnion: TestUnion
}

type MyMutation {
  newUser: User!
}

schema {
  query: MyQuery
  mutation: MyMutation
}
