From c3d70b0553b93a93ee6731eb43bc2b7b4875601c Mon Sep 17 00:00:00 2001 From: Sunli Date: Thu, 17 Sep 2020 08:47:41 +0800 Subject: [PATCH] Add test for ErrorExtensions. --- src/base.rs | 46 ----------------------------- tests/error_ext.rs | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 46 deletions(-) create mode 100644 tests/error_ext.rs diff --git a/src/base.rs b/src/base.rs index 6869487a..ce1674a5 100644 --- a/src/base.rs +++ b/src/base.rs @@ -4,7 +4,6 @@ use crate::{ registry, ContextSelectionSet, FieldResult, InputValueResult, Positioned, Result, Value, }; use std::borrow::Cow; -use std::sync::Arc; /// Represents a GraphQL type /// @@ -113,51 +112,6 @@ impl OutputValueType for &T { } } -impl Type for Box { - fn type_name() -> Cow<'static, str> { - T::type_name() - } - - fn create_type_info(registry: &mut Registry) -> String { - T::create_type_info(registry) - } -} - -#[async_trait::async_trait] -impl OutputValueType for Box { - #[allow(clippy::trivially_copy_pass_by_ref)] - #[allow(clippy::borrowed_box)] - async fn resolve( - &self, - ctx: &ContextSelectionSet<'_>, - field: &Positioned, - ) -> Result { - T::resolve(&*self, ctx, field).await - } -} - -impl Type for Arc { - fn type_name() -> Cow<'static, str> { - T::type_name() - } - - fn create_type_info(registry: &mut Registry) -> String { - T::create_type_info(registry) - } -} - -#[async_trait::async_trait] -impl OutputValueType for Arc { - #[allow(clippy::trivially_copy_pass_by_ref)] - async fn resolve( - &self, - ctx: &ContextSelectionSet<'_>, - field: &Positioned, - ) -> Result { - T::resolve(&*self, ctx, field).await - } -} - impl Type for FieldResult { fn type_name() -> Cow<'static, str> { T::type_name() diff --git a/tests/error_ext.rs b/tests/error_ext.rs new file mode 100644 index 00000000..0c5b10c5 --- /dev/null +++ b/tests/error_ext.rs @@ -0,0 +1,72 @@ +use async_graphql::*; + +#[async_std::test] +pub async fn test_error_extensions() { + struct Query; + + #[GQLObject] + impl Query { + async fn extend_err(&self) -> FieldResult { + Err("my error".extend_with(|err| { + serde_json::json!({ + "msg": err, + "code": 100 + }) + })) + } + + async fn extend_result(&self) -> FieldResult { + Err(FieldError::from("my error")) + .extend_err(|_| { + serde_json::json!({ + "msg": "my error", + "code": 100 + }) + }) + .extend_err(|_| { + serde_json::json!({ + "code2": 20 + }) + }) + } + } + + let schema = Schema::new(Query, EmptyMutation, EmptySubscription); + + assert_eq!( + serde_json::to_value(&schema.execute("{ extendErr }").await).unwrap(), + serde_json::json!({ + "errors": [{ + "message": "my error", + "locations": [{ + "column": 3, + "line": 1, + }], + "path": ["extendErr"], + "extensions": { + "msg": "my error", + "code": 100 + } + }] + }) + ); + + assert_eq!( + serde_json::to_value(&schema.execute("{ extendResult }").await).unwrap(), + serde_json::json!({ + "errors": [{ + "message": "my error", + "locations": [{ + "column": 3, + "line": 1, + }], + "path": ["extendResult"], + "extensions": { + "msg": "my error", + "code": 100, + "code2": 20 + } + }] + }) + ); +}