@@ -72,6 +72,19 @@ public class AutoGeneratedTimestampRecordTest extends LocalDynamoDbSyncTestBase
72
72
.tags (autoGeneratedTimestampAttribute ()))
73
73
.build ();
74
74
75
+
76
+ private static final TableSchema <SubNestedRecord > SUB_NESTED_TABLE_SCHEMA =
77
+ StaticTableSchema .builder (SubNestedRecord .class )
78
+ .newItemSupplier (SubNestedRecord ::new )
79
+ .addAttribute (Instant .class , a -> a .name ("subNestedTimeAttribute" )
80
+ .getter (SubNestedRecord ::getSubNestedTimeAttribute )
81
+ .setter (SubNestedRecord ::setSubNestedTimeAttribute )
82
+ .tags (autoGeneratedTimestampAttribute ()))
83
+ .addAttribute (String .class , a -> a .name ("subNestedAttribute" )
84
+ .getter (SubNestedRecord ::getSubNestedAttribute )
85
+ .setter (SubNestedRecord ::setSubNestedAttribute ))
86
+ .build ();
87
+
75
88
private static final TableSchema <NestedRecord > NESTED_TABLE_SCHEMA =
76
89
StaticTableSchema .builder (NestedRecord .class )
77
90
.newItemSupplier (NestedRecord ::new )
@@ -82,6 +95,11 @@ public class AutoGeneratedTimestampRecordTest extends LocalDynamoDbSyncTestBase
82
95
.addAttribute (String .class , a -> a .name ("nestedAttribute" )
83
96
.getter (NestedRecord ::getNestedAttribute )
84
97
.setter (NestedRecord ::setNestedAttribute ))
98
+ .addAttribute (
99
+ EnhancedType .documentOf (SubNestedRecord .class , SUB_NESTED_TABLE_SCHEMA ),
100
+ a -> a .name ("subNestedRecord" )
101
+ .getter (NestedRecord ::getSubNestedRecord )
102
+ .setter (NestedRecord ::setSubNestedRecord ))
85
103
.build ();
86
104
87
105
private static final TableSchema <Record > TABLE_SCHEMA =
@@ -162,14 +180,28 @@ public void deleteTable() {
162
180
163
181
@ Test
164
182
public void putNewRecordSetsInitialAutoGeneratedTimestampIncludingNestedFields () {
165
- Record item = new Record ().setId ("id" ).setAttribute ("one" )
166
- .setNestedRecord (new NestedRecord ().setNestedAttribute ("attribute" ));
183
+ NestedRecord nestedRecord = new NestedRecord ()
184
+ .setNestedAttribute ("nestedAttribute" )
185
+ .setSubNestedRecord (new SubNestedRecord ().setSubNestedAttribute ("subNestedAttribute" ));
186
+
187
+ Record item = new Record ()
188
+ .setId ("id" )
189
+ .setAttribute ("one" )
190
+ .setNestedRecord (nestedRecord );
191
+
167
192
mappedTable .putItem (r -> r .item (item ));
168
193
Record result = mappedTable .getItem (r -> r .key (k -> k .partitionValue ("id" )));
169
194
GetItemResponse itemAsStoredInDDB = getItemAsStoredFromDDB ();
170
195
FlattenedRecord flattenedRecord = new FlattenedRecord ().setGenerated (MOCKED_INSTANT_NOW );
171
- NestedRecord expectedNestedRecord = new NestedRecord ().setNestedTimeAttribute (MOCKED_INSTANT_NOW )
172
- .setNestedAttribute ("attribute" );
196
+
197
+ SubNestedRecord expectedSubNestedRecord = new SubNestedRecord ()
198
+ .setSubNestedTimeAttribute (MOCKED_INSTANT_NOW )
199
+ .setSubNestedAttribute ("subNestedAttribute" );
200
+ NestedRecord expectedNestedRecord = new NestedRecord ()
201
+ .setNestedTimeAttribute (MOCKED_INSTANT_NOW )
202
+ .setNestedAttribute ("nestedAttribute" )
203
+ .setSubNestedRecord (expectedSubNestedRecord );
204
+
173
205
Record expectedRecord = new Record ().setId ("id" )
174
206
.setAttribute ("one" )
175
207
.setLastUpdatedDate (MOCKED_INSTANT_NOW )
@@ -181,7 +213,8 @@ public void putNewRecordSetsInitialAutoGeneratedTimestampIncludingNestedFields()
181
213
assertThat (result , is (expectedRecord ));
182
214
// The data in DDB is stored in converted time format
183
215
assertThat (itemAsStoredInDDB .item ().get ("convertedLastUpdatedDate" ).s (), is ("13 01 2019 14:00:00" ));
184
- assertThat (itemAsStoredInDDB .item ().get ("nestedRecord" ).m ().get ("nestedTimeAttribute" ).s (), is (MOCKED_INSTANT_NOW .toString ()));
216
+ assertThat (itemAsStoredInDDB .item ().get ("nestedRecord" ).m ().get ("nestedTimeAttribute" ).s (),
217
+ is (MOCKED_INSTANT_NOW .toString ()));
185
218
}
186
219
187
220
@ Test
@@ -666,6 +699,7 @@ public String toString() {
666
699
private static class NestedRecord {
667
700
private Instant nestedTimeAttribute ;
668
701
private String nestedAttribute ;
702
+ private SubNestedRecord subNestedRecord ;
669
703
670
704
public Instant getNestedTimeAttribute () {
671
705
return nestedTimeAttribute ;
@@ -676,13 +710,24 @@ public NestedRecord setNestedTimeAttribute(Instant nestedTimeAttribute) {
676
710
return this ;
677
711
}
678
712
679
- public String getNestedAttribute () {return nestedAttribute ;}
713
+ public String getNestedAttribute () {
714
+ return nestedAttribute ;
715
+ }
680
716
681
717
public NestedRecord setNestedAttribute (String nestedAttribute ) {
682
718
this .nestedAttribute = nestedAttribute ;
683
719
return this ;
684
720
}
685
721
722
+ public SubNestedRecord getSubNestedRecord () {
723
+ return subNestedRecord ;
724
+ }
725
+
726
+ public NestedRecord setSubNestedRecord (SubNestedRecord subNestedRecord ) {
727
+ this .subNestedRecord = subNestedRecord ;
728
+ return this ;
729
+ }
730
+
686
731
@ Override
687
732
public boolean equals (Object o ) {
688
733
if (this == o ) {
@@ -693,19 +738,21 @@ public boolean equals(Object o) {
693
738
}
694
739
NestedRecord that = (NestedRecord ) o ;
695
740
return Objects .equals (nestedTimeAttribute , that .nestedTimeAttribute ) &&
696
- Objects .equals (nestedAttribute , that .nestedAttribute );
741
+ Objects .equals (nestedAttribute , that .nestedAttribute ) &&
742
+ Objects .equals (subNestedRecord , that .subNestedRecord );
697
743
}
698
744
699
745
@ Override
700
746
public int hashCode () {
701
- return Objects .hash (nestedTimeAttribute , nestedAttribute );
747
+ return Objects .hash (nestedTimeAttribute , nestedAttribute , subNestedRecord );
702
748
}
703
749
704
750
@ Override
705
751
public String toString () {
706
752
return "NestedRecord{" +
707
753
"nestedTimeAttribute=" + nestedTimeAttribute +
708
- "nestedAttribute=" + nestedAttribute +
754
+ ", nestedAttribute='" + nestedAttribute + '\'' +
755
+ ", subNestedRecord=" + subNestedRecord +
709
756
'}' ;
710
757
}
711
758
}
@@ -761,5 +808,52 @@ public String toString() {
761
808
}
762
809
}
763
810
811
+ private static class SubNestedRecord {
812
+ private Instant subNestedTimeAttribute ;
813
+ private String subNestedAttribute ;
814
+
815
+ public Instant getSubNestedTimeAttribute () {
816
+ return subNestedTimeAttribute ;
817
+ }
818
+
819
+ public SubNestedRecord setSubNestedTimeAttribute (Instant subNestedTimeAttribute ) {
820
+ this .subNestedTimeAttribute = subNestedTimeAttribute ;
821
+ return this ;
822
+ }
823
+
824
+ public String getSubNestedAttribute () {
825
+ return subNestedAttribute ;
826
+ }
827
+
828
+ public SubNestedRecord setSubNestedAttribute (String subNestedAttribute ) {
829
+ this .subNestedAttribute = subNestedAttribute ;
830
+ return this ;
831
+ }
764
832
833
+ @ Override
834
+ public boolean equals (Object o ) {
835
+ if (this == o ) {
836
+ return true ;
837
+ }
838
+ if (o == null || getClass () != o .getClass ()) {
839
+ return false ;
840
+ }
841
+ SubNestedRecord that = (SubNestedRecord ) o ;
842
+ return Objects .equals (subNestedTimeAttribute , that .subNestedTimeAttribute ) &&
843
+ Objects .equals (subNestedAttribute , that .subNestedAttribute );
844
+ }
845
+
846
+ @ Override
847
+ public int hashCode () {
848
+ return Objects .hash (subNestedTimeAttribute , subNestedAttribute );
849
+ }
850
+
851
+ @ Override
852
+ public String toString () {
853
+ return "SubNestedRecord{" +
854
+ "subNestedTimeAttribute=" + subNestedTimeAttribute +
855
+ ", subNestedAttribute='" + subNestedAttribute + '\'' +
856
+ '}' ;
857
+ }
858
+ }
765
859
}
0 commit comments