Skip to content

Commit 51aa295

Browse files
Merge pull request #818 from commercetools/attribute-time-deserialize-fix
Fix deserialization of time attributes/custom-fields
2 parents 0320b3c + 29851e7 commit 51aa295

File tree

7 files changed

+71
-6
lines changed

7 files changed

+71
-6
lines changed

commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/json/AttributeDeserializer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ public class AttributeDeserializer extends JsonDeserializer<AttributeImpl> {
2525

2626
private static Pattern p = Pattern.compile("^[0-9]");
2727
private static Pattern dateTime = Pattern
28-
.compile("^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,6})?(Z|[+-][0-9]{2}:[0-9]{2})");
28+
.compile("^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,9})?(Z|[+-][0-9]{2}:[0-9]{2})");
2929
private static Pattern date = Pattern.compile("^[0-9]{4}-[0-9]{2}-[0-9]{2}");
30-
private static Pattern time = Pattern.compile("^[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,6})?");
30+
private static Pattern time = Pattern.compile("^[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,9})?");
3131

3232
private final boolean deserializeAsDate;
3333

commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/json/CustomFieldDeserializer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ public class CustomFieldDeserializer extends JsonDeserializer<FieldContainerImpl
2323

2424
private static Pattern p = Pattern.compile("^[0-9]");
2525
private static Pattern dateTime = Pattern
26-
.compile("^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,6})?(Z|[+-][0-9]{2}:[0-9]{2})");
26+
.compile("^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,9})?(Z|[+-][0-9]{2}:[0-9]{2})");
2727
private static Pattern date = Pattern.compile("^[0-9]{4}-[0-9]{2}-[0-9]{2}");
28-
private static Pattern time = Pattern.compile("^[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,6})?");
28+
private static Pattern time = Pattern.compile("^[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,9})?");
2929

3030
private final boolean deserializeAsDate;
3131
private final boolean deserializeNumberAsDouble;

commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/AttributesTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,4 +468,18 @@ public void setNestedAttributesTypedAccessor() throws IOException {
468468
assertThat(nested.get(0).asEnum("set-nested-enum")).isInstanceOf(AttributePlainEnumValue.class);
469469
assertThat(nested.get(0).asString("set-nested-string")).isInstanceOf(String.class);
470470
}
471+
472+
@Test
473+
public void dateDeserialization() throws IOException {
474+
ProductVariant variant = JsonUtils.fromJsonString(stringFromResource("date-attributes.json"),
475+
ProductVariant.class);
476+
assertThat(variant.getAttributes()).isNotEmpty();
477+
AttributesAccessor attributes = variant.withProductVariant(AttributesAccessor::of);
478+
assertThat(attributes.get("datetime").getValue()).isInstanceOf(ZonedDateTime.class);
479+
assertThat(attributes.get("datetime-simple").getValue()).isInstanceOf(ZonedDateTime.class);
480+
assertThat(attributes.get("datetime-max").getValue()).isInstanceOf(ZonedDateTime.class);
481+
assertThat(attributes.get("time").getValue()).isInstanceOf(LocalTime.class);
482+
assertThat(attributes.get("time-simple").getValue()).isInstanceOf(LocalTime.class);
483+
assertThat(attributes.get("time-max").getValue()).isInstanceOf(LocalTime.class);
484+
}
471485
}

commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/CustomFieldsTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,4 +345,17 @@ public void serializeCustomFields() throws JsonProcessingException {
345345
.isEqualTo(
346346
"{\"bool\":true,\"string\":\"foo\",\"double\":13.0,\"double2\":13.1,\"int\":13,\"enum\":{\"key\":\"foo\",\"label\":\"foo\"},\"setNumber\":[13.0,13,13.1],\"setText\":[\"foo\",\"bar\"]}");
347347
}
348+
349+
@Test
350+
public void dateDeserialization() throws IOException {
351+
String dateFields = stringFromResource("date-customfields.json");
352+
CustomFields customFields = JsonUtils.fromJsonString(dateFields, CustomFields.class);
353+
Map<String, Object> fields = customFields.getFields().values();
354+
assertThat(fields.get("datetime")).isInstanceOf(ZonedDateTime.class);
355+
assertThat(fields.get("datetime-simple")).isInstanceOf(ZonedDateTime.class);
356+
assertThat(fields.get("datetime-max")).isInstanceOf(ZonedDateTime.class);
357+
assertThat(fields.get("time")).isInstanceOf(LocalTime.class);
358+
assertThat(fields.get("time-simple")).isInstanceOf(LocalTime.class);
359+
assertThat(fields.get("time-max")).isInstanceOf(LocalTime.class);
360+
}
348361
}

commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/DateTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
public class DateTest {
1616
@Test
17-
public void t() throws IOException {
17+
public void dateSerialize() throws IOException {
1818
ZonedDateTime t = ZonedDateTime.of(2020, 1, 1, 11, 1, 9, 0, ZoneId.of("Z"));
1919
Cart cart = Cart.builder().createdAt(t).buildUnchecked();
2020

@@ -24,5 +24,4 @@ public void t() throws IOException {
2424
Cart c = JsonUtils.fromJsonString(cartString, Cart.class);
2525
Assertions.assertThat(c.getCreatedAt()).isEqualTo(t);
2626
}
27-
2827
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"attributes": [
3+
{
4+
"name": "datetime",
5+
"value": "2020-01-01T13:15:00.123Z"
6+
},
7+
{
8+
"name": "datetime-simple",
9+
"value": "2020-01-01T13:15:00Z"
10+
},
11+
{
12+
"name": "datetime-max",
13+
"value": "2020-01-01T13:15:00.123456789Z"
14+
},
15+
{
16+
"name": "time",
17+
"value": "13:15:00.123"
18+
},
19+
{
20+
"name": "time-simple",
21+
"value": "13:15:00"
22+
},
23+
{
24+
"name": "time-max",
25+
"value": "13:15:00.123456789"
26+
}
27+
28+
]
29+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"fields": {
3+
"time": "13:15:00.123",
4+
"time-simple": "13:15:00",
5+
"time-max": "13:15:00.123456789",
6+
"datetime": "2020-01-01T13:15:00.123Z",
7+
"datetime-simple": "2020-01-01T13:15:00Z",
8+
"datetime-max": "2020-01-01T13:15:00.123456789Z"
9+
}
10+
}

0 commit comments

Comments
 (0)