From be84dc706e02fec03a3ce3020bc2b7a12f9376f4 Mon Sep 17 00:00:00 2001 From: Christopher Brown Date: Thu, 15 Nov 2018 19:08:38 -0500 Subject: [PATCH] fix DateTime literal parsing --- scalars.go | 2 +- scalars_parse_test.go | 54 ++++++++++++++++++++++++++++++++++++++ scalars_parsevalue_test.go | 27 ------------------- 3 files changed, 55 insertions(+), 28 deletions(-) create mode 100644 scalars_parse_test.go delete mode 100644 scalars_parsevalue_test.go diff --git a/scalars.go b/scalars.go index 9131f802..94c1943a 100644 --- a/scalars.go +++ b/scalars.go @@ -561,7 +561,7 @@ var DateTime = NewScalar(ScalarConfig{ ParseLiteral: func(valueAST ast.Value) interface{} { switch valueAST := valueAST.(type) { case *ast.StringValue: - return valueAST.Value + return unserializeDateTime(valueAST.Value) } return nil }, diff --git a/scalars_parse_test.go b/scalars_parse_test.go new file mode 100644 index 00000000..4388e4a9 --- /dev/null +++ b/scalars_parse_test.go @@ -0,0 +1,54 @@ +package graphql_test + +import ( + "reflect" + "testing" + "time" + + "github.com/graphql-go/graphql" + "github.com/graphql-go/graphql/language/ast" +) + +func TestTypeSystem_Scalar_ParseValueOutputDateTime(t *testing.T) { + t1, _ := time.Parse(time.RFC3339, "2017-07-23T03:46:56.647Z") + tests := []dateTimeSerializationTest{ + {nil, nil}, + {"", nil}, + {(*string)(nil), nil}, + {"2017-07-23", nil}, + {"2017-07-23T03:46:56.647Z", t1}, + } + for _, test := range tests { + val := graphql.DateTime.ParseValue(test.Value) + if val != test.Expected { + reflectedValue := reflect.ValueOf(test.Value) + t.Fatalf("failed DateTime.ParseValue(%v(%v)), expected: %v, got %v", reflectedValue.Type(), test.Value, test.Expected, val) + } + } +} + +func TestTypeSystem_Scalar_ParseLiteralOutputDateTime(t *testing.T) { + t1, _ := time.Parse(time.RFC3339, "2017-07-23T03:46:56.647Z") + for name, testCase := range map[string]struct { + Literal ast.Value + Expected interface{} + }{ + "String": { + Literal: &ast.StringValue{ + Value: "2017-07-23T03:46:56.647Z", + }, + Expected: t1, + }, + "NotAString": { + Literal: &ast.IntValue{}, + Expected: nil, + }, + } { + t.Run(name, func(t *testing.T) { + parsed := graphql.DateTime.ParseLiteral(testCase.Literal) + if parsed != testCase.Expected { + t.Fatalf("failed DateTime.ParseLiteral(%T(%v)), expected: %v, got %v", testCase.Literal, testCase.Literal, parsed, testCase.Expected) + } + }) + } +} diff --git a/scalars_parsevalue_test.go b/scalars_parsevalue_test.go deleted file mode 100644 index c04d6a3b..00000000 --- a/scalars_parsevalue_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package graphql_test - -import ( - "reflect" - "testing" - "time" - - "github.com/graphql-go/graphql" -) - -func TestTypeSystem_Scalar_ParseValueOutputDateTime(t *testing.T) { - t1, _ := time.Parse(time.RFC3339, "2017-07-23T03:46:56.647Z") - tests := []dateTimeSerializationTest{ - {nil, nil}, - {"", nil}, - {(*string)(nil), nil}, - {"2017-07-23", nil}, - {"2017-07-23T03:46:56.647Z", t1}, - } - for _, test := range tests { - val := graphql.DateTime.ParseValue(test.Value) - if val != test.Expected { - reflectedValue := reflect.ValueOf(test.Value) - t.Fatalf("failed DateTime.ParseValue(%v(%v)), expected: %v, got %v", reflectedValue.Type(), test.Value, test.Expected, val) - } - } -}