Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/main/java/graphql/scalars/datetime/DateTimeScalar.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
import java.time.DateTimeException;
import java.time.OffsetDateTime;
import java.time.ZonedDateTime;
import java.time.Instant;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.DateTimeParseException;
Expand Down Expand Up @@ -50,6 +52,8 @@ public String serialize(Object input, GraphQLContext graphQLContext, Locale loca
offsetDateTime = (OffsetDateTime) input;
} else if (input instanceof ZonedDateTime) {
offsetDateTime = ((ZonedDateTime) input).toOffsetDateTime();
} else if (input instanceof Instant){
offsetDateTime = ((Instant) input).atOffset(ZoneOffset.UTC);
} else if (input instanceof String) {
offsetDateTime = parseOffsetDateTime(input.toString(), CoercingSerializeException::new);
} else {
Expand All @@ -73,6 +77,8 @@ public OffsetDateTime parseValue(Object input, GraphQLContext graphQLContext, Lo
offsetDateTime = (OffsetDateTime) input;
} else if (input instanceof ZonedDateTime) {
offsetDateTime = ((ZonedDateTime) input).toOffsetDateTime();
} else if (input instanceof Instant){
offsetDateTime = ((Instant)input).atOffset(ZoneOffset.UTC);
} else if (input instanceof String) {
offsetDateTime = parseOffsetDateTime(input.toString(), CoercingParseValueException::new);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import graphql.schema.CoercingParseValueException
import graphql.schema.CoercingSerializeException
import spock.lang.Unroll

import static graphql.scalars.util.TestKit.mkInstant
import static graphql.scalars.util.TestKit.mkIntValue
import static graphql.scalars.util.TestKit.mkLocalDT
import static graphql.scalars.util.TestKit.mkOffsetDT
Expand All @@ -33,6 +34,7 @@ class DateTimeScalarTest extends AbstractScalarTest {
"2022-11-24T01:00:01.02+00:00" | mkOffsetDT("2022-11-24T01:00:01.02+00:00")
mkOffsetDT(year: 1980, hour: 3) | mkOffsetDT("1980-08-08T03:10:09+10:00")
mkZonedDT(year: 1980, hour: 3) | mkOffsetDT("1980-08-08T03:10:09+10:00")
mkInstant(year: 1980, hour: 3) | mkOffsetDT("1980-08-08T03:10:09.00Z")
}

@Unroll
Expand All @@ -51,6 +53,7 @@ class DateTimeScalarTest extends AbstractScalarTest {
"2022-11-24T01:00:01.02+00:00" | mkStringValue("2022-11-24T01:00:01.020Z")
mkOffsetDT(year: 1980, hour: 3) | mkStringValue("1980-08-08T03:10:09.000+10:00")
mkZonedDT(year: 1980, hour: 3) | mkStringValue("1980-08-08T03:10:09.000+10:00")
mkInstant(year: 1980, hour: 3) | mkStringValue("1980-08-08T03:10:09.000Z")
}

@Unroll
Expand Down Expand Up @@ -97,6 +100,7 @@ class DateTimeScalarTest extends AbstractScalarTest {
"2022-11-24T01:00:01.02+00:00" | "2022-11-24T01:00:01.020Z"
mkOffsetDT(year: 1980, hour: 3) | "1980-08-08T03:10:09.000+10:00"
mkZonedDT(year: 1980, hour: 3) | "1980-08-08T03:10:09.000+10:00"
mkInstant(year: 1980, hour: 3) | "1980-08-08T03:10:09.000Z"
}

def "datetime serialisation bad inputs"() {
Expand Down
6 changes: 6 additions & 0 deletions src/test/groovy/graphql/scalars/util/TestKit.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import graphql.scalars.country.code.CountryCode

import java.awt.*
import java.time.Duration
import java.time.Instant
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime
Expand Down Expand Up @@ -54,6 +55,11 @@ class TestKit {
args.min ?: 10, args.secs ?: 9, args.nanos ?: 0, ZoneId.ofOffset("", ZoneOffset.ofHours(10)))
}

static Instant mkInstant(args) {
OffsetDateTime.of(args.year ?: 1969, args.month ?: 8, args.day ?: 8, args.hour ?: 11,
args.min ?: 10, args.secs ?: 9, args.nanos ?: 0, ZoneOffset.UTC).toInstant()
}

static Duration mkDuration(String s) {
Duration.parse(s)
}
Expand Down