Fix a bug that cause generic InputObject
and SimpleObject
is incorrect name. #387
This commit is contained in:
parent
3b9199a931
commit
9c6fe67a23
|
@ -220,9 +220,9 @@ pub fn generate(object_args: &args::InputObject) -> GeneratorResult<TokenStream>
|
|||
code.push(quote! {
|
||||
#[allow(clippy::all, clippy::pedantic)]
|
||||
impl #impl_generics #ident #ty_generics #where_clause {
|
||||
fn __internal_create_type_info(registry: &mut #crate_name::registry::Registry) -> ::std::string::String where Self: #crate_name::InputType {
|
||||
fn __internal_create_type_info(registry: &mut #crate_name::registry::Registry, name: &str) -> ::std::string::String where Self: #crate_name::InputType {
|
||||
registry.create_type::<Self, _>(|registry| #crate_name::registry::MetaType::InputObject {
|
||||
name: ::std::borrow::ToOwned::to_owned(#gql_typename),
|
||||
name: ::std::borrow::ToOwned::to_owned(name),
|
||||
description: #desc,
|
||||
input_fields: {
|
||||
let mut fields = #crate_name::indexmap::IndexMap::new();
|
||||
|
@ -263,7 +263,7 @@ pub fn generate(object_args: &args::InputObject) -> GeneratorResult<TokenStream>
|
|||
}
|
||||
|
||||
fn create_type_info(registry: &mut #crate_name::registry::Registry) -> ::std::string::String {
|
||||
Self::__internal_create_type_info(registry)
|
||||
Self::__internal_create_type_info(registry, #gql_typename)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -210,9 +210,9 @@ pub fn generate(object_args: &args::SimpleObject) -> GeneratorResult<TokenStream
|
|||
impl #impl_generics #ident #ty_generics #where_clause {
|
||||
#(#getters)*
|
||||
|
||||
fn __internal_create_type_info(registry: &mut #crate_name::registry::Registry) -> ::std::string::String where Self: #crate_name::OutputType {
|
||||
fn __internal_create_type_info(registry: &mut #crate_name::registry::Registry, name: &str) -> ::std::string::String where Self: #crate_name::OutputType {
|
||||
registry.create_type::<Self, _>(|registry| #crate_name::registry::MetaType::Object {
|
||||
name: ::std::borrow::ToOwned::to_owned(#gql_typename),
|
||||
name: ::std::borrow::ToOwned::to_owned(name),
|
||||
description: #desc,
|
||||
fields: {
|
||||
let mut fields = #crate_name::indexmap::IndexMap::new();
|
||||
|
@ -246,7 +246,7 @@ pub fn generate(object_args: &args::SimpleObject) -> GeneratorResult<TokenStream
|
|||
}
|
||||
|
||||
fn create_type_info(registry: &mut #crate_name::registry::Registry) -> ::std::string::String {
|
||||
Self::__internal_create_type_info(registry)
|
||||
Self::__internal_create_type_info(registry, #gql_typename)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -70,19 +70,79 @@ pub async fn test_input_object_generic() {
|
|||
|
||||
#[Object]
|
||||
impl Query {
|
||||
async fn q(&self, input: EqualityFilter<i32>) -> i32 {
|
||||
async fn q1(&self, input: EqualityFilter<i32>) -> i32 {
|
||||
input.equals.unwrap_or_default() + input.not_equals.unwrap_or_default()
|
||||
}
|
||||
|
||||
async fn q2(&self, input: EqualityFilter<String>) -> String {
|
||||
input.equals.unwrap_or_default() + &input.not_equals.unwrap_or_default()
|
||||
}
|
||||
}
|
||||
|
||||
let schema = Schema::new(Query, EmptyMutation, EmptySubscription);
|
||||
let query = r#"{
|
||||
q(input: { equals: 7, notEquals: 8 } )
|
||||
q1(input: { equals: 7, notEquals: 8 } )
|
||||
q2(input: { equals: "ab", notEquals: "cd" } )
|
||||
}"#;
|
||||
assert_eq!(
|
||||
schema.execute(query).await.into_result().unwrap().data,
|
||||
value!({
|
||||
"q": 15
|
||||
"q1": 15,
|
||||
"q2": "abcd",
|
||||
})
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
schema
|
||||
.execute(
|
||||
r#"{ __type(name: "IntEqualityFilter") { inputFields { name type { name } } } }"#
|
||||
)
|
||||
.await
|
||||
.into_result()
|
||||
.unwrap()
|
||||
.data,
|
||||
value!({
|
||||
"__type": {
|
||||
"inputFields": [
|
||||
{"name": "equals", "type": { "name": "Int" } },
|
||||
{"name": "notEquals", "type": { "name": "Int" } },
|
||||
]
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
schema
|
||||
.execute(r#"{ __type(name: "Query") { fields { name args { name type { kind ofType { name } } } } } }"#)
|
||||
.await
|
||||
.into_result()
|
||||
.unwrap()
|
||||
.data,
|
||||
value!({
|
||||
"__type": {
|
||||
"fields": [
|
||||
{
|
||||
"name": "q1",
|
||||
"args": [{
|
||||
"name": "input",
|
||||
"type": {
|
||||
"kind": "NON_NULL",
|
||||
"ofType": { "name": "IntEqualityFilter" },
|
||||
},
|
||||
}]
|
||||
},
|
||||
{
|
||||
"name": "q2",
|
||||
"args": [{
|
||||
"name": "input",
|
||||
"type": {
|
||||
"kind": "NON_NULL",
|
||||
"ofType": { "name": "StringEqualityFilter" },
|
||||
},
|
||||
}],
|
||||
}
|
||||
]
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
|
@ -128,4 +188,64 @@ pub async fn test_generic_simple_object() {
|
|||
}
|
||||
})
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
schema
|
||||
.execute(r#"{ __type(name: "MyObjIntString") { fields { name type { kind ofType { name } } } } }"#)
|
||||
.await
|
||||
.into_result()
|
||||
.unwrap()
|
||||
.data,
|
||||
value!({
|
||||
"__type": {
|
||||
"fields": [
|
||||
{
|
||||
"name": "a",
|
||||
"type": {
|
||||
"kind": "NON_NULL",
|
||||
"ofType": { "name": "Int" },
|
||||
},
|
||||
},
|
||||
{
|
||||
"name": "b",
|
||||
"type": {
|
||||
"kind": "NON_NULL",
|
||||
"ofType": { "name": "String" },
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
schema
|
||||
.execute(
|
||||
r#"{ __type(name: "Query") { fields { name type { kind ofType { name } } } } }"#
|
||||
)
|
||||
.await
|
||||
.into_result()
|
||||
.unwrap()
|
||||
.data,
|
||||
value!({
|
||||
"__type": {
|
||||
"fields": [
|
||||
{
|
||||
"name": "q1",
|
||||
"type": {
|
||||
"kind": "NON_NULL",
|
||||
"ofType": { "name": "MyObjIntString" },
|
||||
},
|
||||
},
|
||||
{
|
||||
"name": "q2",
|
||||
"type": {
|
||||
"kind": "NON_NULL",
|
||||
"ofType": { "name": "MyObji64f32" },
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user