# load_all(); testthat::test_file(file.path("tests", "testthat", "test-gqlr_schema.R")); # nolint
test_that("gqlr_schema information", {
resolve_my_scalar <- function(a, b) {
"scalar"
}
resolve_my_object <- function(a, b) {
"object"
}
resolve_my_other_object <- function(a, b) {
"other_object"
}
resolve_my_enum <- function(a, b) {
"enum"
}
resolve_my_interface <- function(a, b) {
"interface"
}
resolve_my_union <- function(a, b) {
"union"
}
resolve_my_directive <- function(a, b) {
"directive"
}
"
scalar MyScalar
type MyObject {
fieldA: Int
fieldB: String
}
type MyOtherObject {
fieldC: Boolean
}
enum MyEnum {
ValA
ValB
}
interface MyInterface {
fieldA: Int
}
union MyUnion = MyObject | MyOtherObject
input MyInput {
key: String!
answer: Int = 42
}
directive @MyDirective(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
" %>%
Schema$new() ->
MySchema
schema <- gqlr_schema(
MySchema,
MyScalar = resolve_my_scalar,
MyObject = resolve_my_object,
MyOtherObject = resolve_my_other_object,
MyEnum = resolve_my_enum,
MyInterface = resolve_my_interface,
MyUnion = resolve_my_union,
MyInput = list(),
MyDirective = resolve_my_directive
)
expect_equal(schema$get_scalar("MyScalar")$.resolve, resolve_my_scalar)
expect_equal(schema$get_object("MyObject")$.resolve, resolve_my_object)
expect_equal(schema$get_object("MyOtherObject")$.resolve, resolve_my_other_object)
expect_equal(schema$get_enum("MyEnum")$.resolve, resolve_my_enum)
expect_equal(schema$get_interface("MyInterface")$.resolve_type, resolve_my_interface)
expect_equal(schema$get_union("MyUnion")$.resolve_type, resolve_my_union)
expect_equal(schema$get_directive("MyDirective")$.resolve, resolve_my_directive)
expect_equal(schema$get_scalar("MyScalar")$description, NULL)
expect_equal(schema$get_object("MyObject")$description, NULL)
expect_equal(schema$get_object("MyOtherObject")$description, NULL)
expect_equal(schema$get_enum("MyEnum")$description, NULL)
expect_equal(schema$get_interface("MyInterface")$description, NULL)
expect_equal(schema$get_union("MyUnion")$description, NULL)
expect_equal(schema$get_input_object("MyInput")$description, NULL)
expect_equal(schema$get_directive("MyDirective")$description, NULL)
expect_equal(schema$get_object("MyObject")$fields[[1]]$description, NULL)
expect_equal(schema$get_object("MyObject")$fields[[2]]$description, NULL)
d <- list(
MyScalar = "MyScalar desc",
MyObject = "MyObject desc",
MyOtherObject = "MyOtherObject desc",
MyEnum = "MyEnum desc",
MyInterface = "MyInterface desc",
MyUnion = "MyUnion desc",
MyInput = "MyInput desc",
MyDirective = "MyDirective desc",
fieldA = "fieldA desc",
fieldB = "fieldB desc",
fieldC = "fieldC desc",
ValA = "ValA desc",
ValB = "ValB desc"
)
parse_my_scalar <- function(a, b) {
"parse"
NULL
}
schema <- gqlr_schema(
MySchema,
MyScalar = list(
resolve = resolve_my_scalar,
description = d$MyScalar,
parse_ast = parse_my_scalar
),
MyObject = list(
resolve = resolve_my_object,
description = d$MyObject,
fields = list(
fieldA = d$fieldA,
fieldB = d$fieldB
)
),
MyOtherObject = list(
resolve = resolve_my_other_object,
description = d$MyOtherObject,
fields = list(
fieldC = d$fieldC
)
),
MyEnum = list(
resolve = resolve_my_enum,
description = d$MyEnum,
values = list(
ValA = d$ValA,
ValB = d$ValB
)
),
MyInterface = list(
resolve_type = resolve_my_interface,
description = d$MyInterface
),
MyUnion = list(
resolve_type = resolve_my_union,
description = d$MyUnion
),
MyInput = list(
description = d$MyInput
),
MyDirective = list(
resolve = resolve_my_directive,
description = d$MyDirective
)
)
expect_equal(schema$get_scalar("MyScalar")$.resolve, resolve_my_scalar)
expect_equal(schema$get_object("MyObject")$.resolve, resolve_my_object)
expect_equal(schema$get_object("MyOtherObject")$.resolve, resolve_my_other_object)
expect_equal(schema$get_enum("MyEnum")$.resolve, resolve_my_enum)
expect_equal(schema$get_interface("MyInterface")$.resolve_type, resolve_my_interface)
expect_equal(schema$get_union("MyUnion")$.resolve_type, resolve_my_union)
expect_equal(schema$get_directive("MyDirective")$.resolve, resolve_my_directive)
expect_equal(schema$get_scalar("MyScalar")$description, d$MyScalar)
expect_equal(schema$get_object("MyObject")$description, d$MyObject)
expect_equal(schema$get_object("MyOtherObject")$description, d$MyOtherObject)
expect_equal(schema$get_enum("MyEnum")$description, d$MyEnum)
expect_equal(schema$get_interface("MyInterface")$description, d$MyInterface)
expect_equal(schema$get_union("MyUnion")$description, d$MyUnion)
expect_equal(schema$get_input_object("MyInput")$description, d$MyInput)
expect_equal(schema$get_directive("MyDirective")$description, d$MyDirective)
expect_equal(schema$get_object("MyObject")$fields[[1]]$description, d$fieldA)
expect_equal(schema$get_object("MyObject")$fields[[2]]$description, d$fieldB)
expect_error({
gqlr_schema(
MySchema,
5
)
},
"must be uniquely named arguments"
)
expect_error({
gqlr_schema(
MySchema,
DoesntExist = list(
description = "No where"
)
)
},
"could not find schema definition"
)
expect_error({
gqlr_schema(
MySchema,
MyScalar = 5
)
},
"named arguments should either be a named list"
)
expect_error({
gqlr_schema(
MySchema,
MyScalar = list(
other_field = 5
)
)
},
"ScalarTypeDefinition"
)
expect_error({
gqlr_schema(
MySchema,
MyObject = list(
other_field = 5
)
)
},
"ObjectTypeDefinition"
)
expect_error({
gqlr_schema(
MySchema,
MyEnum = list(
other_field = 5
)
)
},
"EnumTypeDefinition"
)
expect_error({
gqlr_schema(
MySchema,
MyInterface = list(
other_field = 5
)
)
},
"InterfaceTypeDefinition"
)
expect_error({
gqlr_schema(
MySchema,
MyUnion = list(
other_field = 5
)
)
},
"UnionTypeDefinition"
)
expect_error({
gqlr_schema(
MySchema,
MyInput = list(
other_field = 5
)
)
},
"InputObjectTypeDefinition"
)
expect_error({
gqlr_schema(
MySchema,
MyDirective = list(
other_field = 5
)
)
},
"DirectiveDefinition"
)
expect_error({
gqlr_schema(
MySchema,
MyObject = list(
description = "desc 1",
description = "desc 2"
)
)
},
"uniquely named"
)
expect_error({
gqlr_schema(
MySchema,
MyObject = list(
fields = list(
fieldZ = "fieldZ desc"
)
)
)
},
"Could not find field"
)
expect_error({
gqlr_schema(
MySchema,
MyEnum = list(
values = list(
ValZ = "ValZ desc"
)
)
)
},
"Could not find value"
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.