Skip to content

Commit b50840e

Browse files
committed
Merge branch 'main' into dengdan-stress-test
2 parents 3bacf1b + 277aec9 commit b50840e

26 files changed

+139
-282
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,5 @@ build-artifacts.tar.gz
111111

112112
# sample app resources
113113
sample*
114-
.graphqlconfig.yml
114+
.graphqlconfig.yml
115+
aws-datastore/src/androidTest/res/raw/amplifyconfigurationupdated.json

aws-api-appsync/src/main/java/com/amplifyframework/datastore/appsync/ModelMetadata.java

+2-8
Original file line numberDiff line numberDiff line change
@@ -39,27 +39,23 @@ public final class ModelMetadata implements Model {
3939
private final @ModelField(targetType = "Boolean") Boolean _deleted;
4040
private final @ModelField(targetType = "Int") Integer _version;
4141
private final @ModelField(targetType = "AWSTimestamp") Temporal.Timestamp _lastChangedAt;
42-
private final @ModelField(targetType = "String") String __typename;
4342

4443
/**
4544
* Constructor for this metadata model.
4645
* @param id The identifier of the object this is holding the metadata for (also this object's own identifier)
4746
* @param deleted Whether this object was deleted since the last sync time specified
4847
* @param version What version this object was last seen at
4948
* @param lastChangedAt When was this object last changed
50-
* @param typename The type name of the model.
5149
*/
5250
public ModelMetadata(
5351
@NonNull String id,
5452
@Nullable Boolean deleted,
5553
@Nullable Integer version,
56-
@Nullable Temporal.Timestamp lastChangedAt,
57-
@Nullable String typename) {
54+
@Nullable Temporal.Timestamp lastChangedAt) {
5855
this.id = Objects.requireNonNull(id);
5956
this._deleted = deleted;
6057
this._version = version;
6158
this._lastChangedAt = lastChangedAt;
62-
this.__typename = typename;
6359
}
6460

6561
/**
@@ -95,7 +91,7 @@ public Integer getVersion() {
9591
*/
9692
@Nullable
9793
public String getTypename() {
98-
return __typename;
94+
return id.split("\\|")[0];
9995
}
10096

10197
/**
@@ -136,7 +132,6 @@ public int hashCode() {
136132
result = 31 * result + (_deleted != null ? _deleted.hashCode() : 0);
137133
result = 31 * result + (_version != null ? _version.hashCode() : 0);
138134
result = 31 * result + (_lastChangedAt != null ? _lastChangedAt.hashCode() : 0);
139-
result = 31 * result + (__typename != null ? __typename.hashCode() : 0);
140135
return result;
141136
}
142137

@@ -147,7 +142,6 @@ public String toString() {
147142
", _deleted=" + _deleted +
148143
", _version=" + _version +
149144
", _lastChangedAt=" + _lastChangedAt +
150-
", __typename=" + __typename +
151145
'}';
152146
}
153147
}

aws-api-appsync/src/main/java/com/amplifyframework/datastore/appsync/ModelWithMetadata.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public ModelWithMetadata(@NonNull M model, @NonNull ModelMetadata syncMetadata)
4242
this.syncMetadata = new ModelMetadata(model.getModelName() + "|" + model.getPrimaryKeyString(),
4343
syncMetadata.isDeleted(),
4444
syncMetadata.getVersion(),
45-
syncMetadata.getLastChangedAt(), syncMetadata.getTypename());
45+
syncMetadata.getLastChangedAt());
4646
}
4747

4848
/**

aws-api-appsync/src/main/java/com/amplifyframework/datastore/appsync/ModelWithMetadataAdapter.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,14 @@ public JsonElement serialize(
117117
// Flatten out the fields of the model and its metadata into a flat key-value map.
118118
// To do this, serialize each individually, and then add the key/value pairs for each
119119
// object into a new container.
120-
JsonObject serializedMetadata = (JsonObject) context.serialize(src.getSyncMetadata());
120+
ModelMetadata modelMetadata = src.getSyncMetadata();
121+
JsonObject serializedMetadata = (JsonObject) context.serialize(modelMetadata);
121122
for (Map.Entry<java.lang.String, JsonElement> entry : serializedMetadata.entrySet()) {
122123
result.add(entry.getKey(), entry.getValue());
123124
}
125+
// Additionally serialize the stored model name as the typename, mirroring the deserialization process.
126+
result.addProperty(TYPE_NAME, modelMetadata.getTypename());
127+
124128
JsonObject serializedModel = (JsonObject) context.serialize(src.getModel());
125129
for (Map.Entry<java.lang.String, JsonElement> entry : serializedModel.entrySet()) {
126130
result.add(entry.getKey(), entry.getValue());

aws-api-appsync/src/test/java/com/amplifyframework/datastore/appsync/ModelWithMetadataAdapterTest.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public void setup() {
6868
public void adapterCanSerializeMwm() throws JSONException {
6969
Temporal.Timestamp lastChangedAt = Temporal.Timestamp.now();
7070
String modelId = UUID.randomUUID().toString();
71-
ModelMetadata metadata = new ModelMetadata(modelId, false, 4, lastChangedAt, "BlogOwner");
71+
ModelMetadata metadata = new ModelMetadata(modelId, false, 4, lastChangedAt);
7272
BlogOwner model = BlogOwner.builder()
7373
.name("Blog Owner")
7474
.build();
@@ -80,7 +80,7 @@ public void adapterCanSerializeMwm() throws JSONException {
8080
.put("_lastChangedAt", metadata.getLastChangedAt().getSecondsSinceEpoch())
8181
.put("_deleted", metadata.isDeleted())
8282
.put("_version", metadata.getVersion())
83-
.put("__typename", metadata.getTypename())
83+
.put("__typename", mwm.getSyncMetadata().getTypename())
8484
.toString();
8585
String actual = gson.toJson(mwm);
8686
JSONAssert.assertEquals(expected, actual, true);
@@ -97,7 +97,7 @@ public void adapterCanDeserializeJsonIntoMwm() {
9797
.id("45a5f600-8aa8-41ac-a529-aed75036f5be")
9898
.build();
9999
Temporal.Timestamp lastChangedAt = new Temporal.Timestamp(1594858827, TimeUnit.SECONDS);
100-
ModelMetadata metadata = new ModelMetadata(model.getId(), false, 3, lastChangedAt, model.getModelName());
100+
ModelMetadata metadata = new ModelMetadata(model.getId(), false, 3, lastChangedAt);
101101
ModelWithMetadata<BlogOwner> expected = new ModelWithMetadata<>(model, metadata);
102102

103103
// Arrange some JSON, and then try to deserialize it
@@ -133,15 +133,14 @@ public void adapterCanDeserializeJsonOfSerializedModelIntoMwm() throws AmplifyEx
133133
.serializedData(postSerializedData)
134134
.build();
135135
Temporal.Timestamp lastChangedAt = new Temporal.Timestamp(1594858827, TimeUnit.SECONDS);
136-
ModelMetadata metadata = new ModelMetadata(model.getPrimaryKeyString(), false, 3, lastChangedAt,
137-
model.getModelName());
136+
ModelMetadata metadata = new ModelMetadata(model.getPrimaryKeyString(), false, 3, lastChangedAt);
138137
ModelWithMetadata<SerializedModel> expected = new ModelWithMetadata<>(model, metadata);
139138

140139
// Arrange some JSON, and then try to deserialize it
141140
String json = Resources.readAsString("serialized-model-with-metadata.json");
142141
Type type = TypeMaker.getParameterizedType(ModelWithMetadata.class, SerializedModel.class);
143142
ModelWithMetadata<SerializedModel> actual = gson.fromJson(json, type);
144-
143+
145144
// Assert that the deserialized output matches out expected value
146145
Assert.assertEquals(expected, actual);
147146
}

aws-datastore/src/test/java/com/amplifyframework/datastore/AWSDataStorePluginTest.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,7 @@ public void clearStopsSyncAndDeletesDatabase() throws AmplifyException, JSONExce
231231
int indexOfResponseConsumer = 1;
232232
Consumer<GraphQLResponse<ModelWithMetadata<Person>>> onResponse =
233233
invocation.getArgument(indexOfResponseConsumer);
234-
ModelMetadata modelMetadata = new ModelMetadata(person1.getId(), false, 1, Temporal.Timestamp.now(),
235-
"Person");
234+
ModelMetadata modelMetadata = new ModelMetadata(person1.getId(), false, 1, Temporal.Timestamp.now());
236235
ModelWithMetadata<Person> modelWithMetadata = new ModelWithMetadata<>(person1, modelMetadata);
237236
onResponse.accept(new GraphQLResponse<>(modelWithMetadata, Collections.emptyList()));
238237
return mock(GraphQLOperation.class);
@@ -256,7 +255,7 @@ public void clearStopsSyncAndDeletesDatabase() throws AmplifyException, JSONExce
256255
Consumer<GraphQLResponse<ModelWithMetadata<Person>>> onResponse =
257256
invocation.getArgument(indexOfResponseConsumer);
258257
ModelMetadata modelMetadata = new ModelMetadata(person2.getId(), false, 1,
259-
Temporal.Timestamp.now(), "Person");
258+
Temporal.Timestamp.now());
260259
ModelWithMetadata<Person> modelWithMetadata = new ModelWithMetadata<>(person2, modelMetadata);
261260
onResponse.accept(new GraphQLResponse<>(modelWithMetadata, Collections.emptyList()));
262261
return mock(GraphQLOperation.class);
@@ -325,7 +324,7 @@ public void stopStopsSyncUntilNextInteraction() throws AmplifyException, JSONExc
325324
Consumer<GraphQLResponse<ModelWithMetadata<Person>>> onResponse =
326325
invocation.getArgument(indexOfResponseConsumer);
327326
ModelMetadata modelMetadata = new ModelMetadata(person1.getPrimaryKeyString(), false, 1,
328-
Temporal.Timestamp.now(), "Person");
327+
Temporal.Timestamp.now());
329328
ModelWithMetadata<Person> modelWithMetadata = new ModelWithMetadata<>(person1, modelMetadata);
330329
onResponse.accept(new GraphQLResponse<>(modelWithMetadata, Collections.emptyList()));
331330
return mock(GraphQLOperation.class);
@@ -349,7 +348,7 @@ public void stopStopsSyncUntilNextInteraction() throws AmplifyException, JSONExc
349348
Consumer<GraphQLResponse<ModelWithMetadata<Person>>> onResponse =
350349
invocation.getArgument(indexOfResponseConsumer);
351350
ModelMetadata modelMetadata = new ModelMetadata(person2.getPrimaryKeyString(), false, 1,
352-
Temporal.Timestamp.now(), "Person");
351+
Temporal.Timestamp.now());
353352
ModelWithMetadata<Person> modelWithMetadata = new ModelWithMetadata<>(person2, modelMetadata);
354353
onResponse.accept(new GraphQLResponse<>(modelWithMetadata, Collections.emptyList()));
355354
return mock(GraphQLOperation.class);

aws-datastore/src/test/java/com/amplifyframework/datastore/ConflictResolverIntegrationTest.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,7 @@ private Person setupApiMock(CountDownLatch latch, ApiCategory mockApiCategory) {
191191
int indexOfResponseConsumer = 1;
192192
Consumer<GraphQLResponse<ModelWithMetadata<Person>>> onResponse =
193193
invocation.getArgument(indexOfResponseConsumer);
194-
ModelMetadata modelMetadata = new ModelMetadata(person1.getId(), false, 1, Temporal.Timestamp.now(),
195-
"Person");
194+
ModelMetadata modelMetadata = new ModelMetadata(person1.getId(), false, 1, Temporal.Timestamp.now());
196195
ModelWithMetadata<Person> modelWithMetadata = new ModelWithMetadata<>(person1, modelMetadata);
197196
onResponse.accept(new GraphQLResponse<>(modelWithMetadata, Collections.emptyList()));
198197
verify(mockApiCategory, atLeast(2)).mutate(argThat(getMatcherFor(person1)),
@@ -207,7 +206,7 @@ private Person setupApiMock(CountDownLatch latch, ApiCategory mockApiCategory) {
207206
doAnswer(invocation -> {
208207
int indexOfResponseConsumer = 1;
209208
ModelMetadata modelMetadata = new ModelMetadata(person1.getId(), false, 1,
210-
Temporal.Timestamp.now(), "Person");
209+
Temporal.Timestamp.now());
211210
ModelWithMetadata<Person> modelWithMetadata = new ModelWithMetadata<>(person1, modelMetadata);
212211
// Mock the API emitting an ApiEndpointStatusChangeEvent event.
213212
Consumer<GraphQLResponse<PaginatedResult<ModelWithMetadata<Person>>>> onResponse =
@@ -221,7 +220,7 @@ private Person setupApiMock(CountDownLatch latch, ApiCategory mockApiCategory) {
221220
}).doAnswer(invocation -> {
222221
int indexOfResponseConsumer = 1;
223222
Car car = Car.builder().build();
224-
ModelMetadata modelMetadata = new ModelMetadata(car.getId(), false, 1, Temporal.Timestamp.now(), "Person");
223+
ModelMetadata modelMetadata = new ModelMetadata(car.getId(), false, 1, Temporal.Timestamp.now());
225224
ModelWithMetadata<Car> modelWithMetadata = new ModelWithMetadata<>(car, modelMetadata);
226225
Consumer<GraphQLResponse<PaginatedResult<ModelWithMetadata<Car>>>> onResponse =
227226
invocation.getArgument(indexOfResponseConsumer);

aws-datastore/src/test/java/com/amplifyframework/datastore/MutationProcessorRetryTest.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,7 @@ private Person setupApiMock(CountDownLatch latch, ApiCategory mockApiCategory) {
167167
int indexOfResponseConsumer = 1;
168168
Consumer<GraphQLResponse<ModelWithMetadata<Person>>> onResponse =
169169
invocation.getArgument(indexOfResponseConsumer);
170-
ModelMetadata modelMetadata = new ModelMetadata(person1.getId(), false, 1, Temporal.Timestamp.now(),
171-
"Person");
170+
ModelMetadata modelMetadata = new ModelMetadata(person1.getId(), false, 1, Temporal.Timestamp.now());
172171
ModelWithMetadata<Person> modelWithMetadata = new ModelWithMetadata<>(person1, modelMetadata);
173172
onResponse.accept(new GraphQLResponse<>(modelWithMetadata, Collections.emptyList()));
174173
verify(mockApiCategory, atLeast(2)).mutate(argThat(getMatcherFor(person1)),
@@ -183,7 +182,7 @@ private Person setupApiMock(CountDownLatch latch, ApiCategory mockApiCategory) {
183182
doAnswer(invocation -> {
184183
int indexOfResponseConsumer = 1;
185184
ModelMetadata modelMetadata = new ModelMetadata(person1.getId(), false, 1,
186-
Temporal.Timestamp.now(), "Person");
185+
Temporal.Timestamp.now());
187186
ModelWithMetadata<Person> modelWithMetadata = new ModelWithMetadata<>(person1, modelMetadata);
188187
// Mock the API emitting an ApiEndpointStatusChangeEvent event.
189188
Consumer<GraphQLResponse<PaginatedResult<ModelWithMetadata<Person>>>> onResponse =
@@ -197,7 +196,7 @@ private Person setupApiMock(CountDownLatch latch, ApiCategory mockApiCategory) {
197196
}).doAnswer(invocation -> {
198197
int indexOfResponseConsumer = 1;
199198
Car car = Car.builder().build();
200-
ModelMetadata modelMetadata = new ModelMetadata(car.getId(), false, 1, Temporal.Timestamp.now(), "Person");
199+
ModelMetadata modelMetadata = new ModelMetadata(car.getId(), false, 1, Temporal.Timestamp.now());
201200
ModelWithMetadata<Car> modelWithMetadata = new ModelWithMetadata<>(car, modelMetadata);
202201
Consumer<GraphQLResponse<PaginatedResult<ModelWithMetadata<Car>>>> onResponse =
203202
invocation.getArgument(indexOfResponseConsumer);

aws-datastore/src/test/java/com/amplifyframework/datastore/appsync/AppSyncConflictUnhandledErrorFactoryTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void createUnhandledConflictError() {
3838
.name("Blogger Tony")
3939
.build();
4040
Temporal.Timestamp lastChangedAt = new Temporal.Timestamp(1602732606L, TimeUnit.SECONDS);
41-
ModelMetadata metadata = new ModelMetadata(model.getPrimaryKeyString(), true, 6, lastChangedAt, "BlogOwner");
41+
ModelMetadata metadata = new ModelMetadata(model.getPrimaryKeyString(), true, 6, lastChangedAt);
4242
ModelWithMetadata<BlogOwner> serverData = new ModelWithMetadata<>(model, metadata);
4343
AppSyncConflictUnhandledError<BlogOwner> error =
4444
AppSyncConflictUnhandledErrorFactory.createUnhandledConflictError(serverData);

aws-datastore/src/test/java/com/amplifyframework/datastore/appsync/AppSyncConflictUnhandledErrorTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public void conflictErrorExtractedIfPresent() {
124124
assertEquals(
125125
new ModelWithMetadata<>(
126126
new Note("KoolId22", "Resurecting the dataz"),
127-
new ModelMetadata("KoolId22", true, 7, lastChangedAt, "Note")
127+
new ModelMetadata("KoolId22", true, 7, lastChangedAt)
128128
),
129129
conflictUnhandledError.getServerVersion()
130130
);

aws-datastore/src/test/java/com/amplifyframework/datastore/appsync/AppSyncMocking.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -204,8 +204,7 @@ public <T extends Model> CreateConfigurator mockSuccessResponse(
204204
*/
205205
@NonNull
206206
public <T extends Model> CreateConfigurator mockSuccessResponse(@NonNull T model) {
207-
ModelMetadata metadata = new ModelMetadata(model.getPrimaryKeyString(), false, 1, Temporal.Timestamp.now(),
208-
model.getModelName());
207+
ModelMetadata metadata = new ModelMetadata(model.getPrimaryKeyString(), false, 1, Temporal.Timestamp.now());
209208
ModelWithMetadata<T> modelWithMetadata = new ModelWithMetadata<>(model, metadata);
210209
return mockSuccessResponse(model, modelWithMetadata);
211210
}
@@ -313,7 +312,7 @@ public <T extends Model> UpdateConfigurator mockSuccessResponse(
313312
public <T extends Model> UpdateConfigurator mockSuccessResponse(@NonNull T model, int version) {
314313
Temporal.Timestamp lastChangedAt = Temporal.Timestamp.now();
315314
ModelMetadata metadata = new ModelMetadata(model.getPrimaryKeyString(), false, version + 1,
316-
lastChangedAt, model.getModelName());
315+
lastChangedAt);
317316
ModelWithMetadata<T> modelWithMetadata = new ModelWithMetadata<>(model, metadata);
318317
return mockSuccessResponse(model, version, modelWithMetadata);
319318
}
@@ -426,7 +425,7 @@ public <T extends Model> DeleteConfigurator mockSuccessResponse(
426425
public <T extends Model> DeleteConfigurator mockSuccessResponse(@NonNull T model, int version) {
427426
Temporal.Timestamp lastChangedAt = Temporal.Timestamp.now();
428427
ModelMetadata metadata = new ModelMetadata(model.getPrimaryKeyString(), true, version + 1,
429-
lastChangedAt, model.getModelName());
428+
lastChangedAt);
430429
ModelWithMetadata<T> modelWithMetadata = new ModelWithMetadata<>(model, metadata);
431430
return mockSuccessResponse(model, version, modelWithMetadata);
432431
}

aws-datastore/src/test/java/com/amplifyframework/datastore/appsync/AppSyncMockingTest.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public void mockErrorResponseForCreate() {
170170
public void mockSuccessResponseForUpdate() {
171171
ModelMetadata updatedMetadata =
172172
new ModelMetadata(StrawMen.TONY_MODEL.getPrimaryKeyString(), false, 2, StrawMen.JOE_METADATA
173-
.getLastChangedAt(), StrawMen.TONY_MODEL.getModelName());
173+
.getLastChangedAt());
174174
ModelWithMetadata<BlogOwner> tonyWithUpdatedMetadata =
175175
new ModelWithMetadata<>(StrawMen.TONY_MODEL, updatedMetadata);
176176
AppSyncMocking.update(appSync)
@@ -218,7 +218,7 @@ public void mockErrorResponseForUpdate() {
218218
public void mockSuccessResponseForDelete() {
219219
ModelMetadata deletedMetadata =
220220
new ModelMetadata(StrawMen.TONY_MODEL.getPrimaryKeyString(), true, 2,
221-
StrawMen.JOE_METADATA.getLastChangedAt(), StrawMen.TONY_MODEL.getModelName());
221+
StrawMen.JOE_METADATA.getLastChangedAt());
222222
ModelWithMetadata<BlogOwner> tonyWithDeleteMetadata =
223223
new ModelWithMetadata<>(StrawMen.TONY_MODEL, deletedMetadata);
224224
AppSyncMocking.delete(appSync)
@@ -335,17 +335,15 @@ static final class StrawMen {
335335
.name("Joe")
336336
.build();
337337
static final ModelMetadata JOE_METADATA =
338-
new ModelMetadata(JOE_MODEL.getPrimaryKeyString(), false, 1, Temporal.Timestamp.now(),
339-
JOE_MODEL.getModelName());
338+
new ModelMetadata(JOE_MODEL.getPrimaryKeyString(), false, 1, Temporal.Timestamp.now());
340339
static final ModelWithMetadata<BlogOwner> JOE =
341340
new ModelWithMetadata<>(JOE_MODEL, JOE_METADATA);
342341

343342
static final BlogOwner TONY_MODEL = BlogOwner.builder()
344343
.name("Tony")
345344
.build();
346345
static final ModelMetadata TONY_METADATA =
347-
new ModelMetadata(TONY_MODEL.getPrimaryKeyString(), false, 1, Temporal.Timestamp.now(),
348-
TONY_MODEL.getModelName());
346+
new ModelMetadata(TONY_MODEL.getPrimaryKeyString(), false, 1, Temporal.Timestamp.now());
349347
static final ModelWithMetadata<BlogOwner> TONY =
350348
new ModelWithMetadata<>(TONY_MODEL, TONY_METADATA);
351349

aws-datastore/src/test/java/com/amplifyframework/datastore/appsync/AppSyncRequestFactoryTest.java

-2
Original file line numberDiff line numberDiff line change
@@ -422,8 +422,6 @@ public void validateMutationGenerationOnCreateItemWithCustomForeignKeyAndSortKey
422422
ModelSchema schema = ModelSchema.fromModelClass(OtherBlog.class);
423423
String expected = Resources.readAsString("create-other-blog.txt");
424424
String actual = AppSyncRequestFactory.buildCreationRequest(schema, blog, DEFAULT_STRATEGY).getContent();
425-
System.out.println(" Actual: " + actual);
426-
System.out.println("Expected: " + expected);
427425
JSONAssert.assertEquals(
428426
expected,
429427
actual,

0 commit comments

Comments
 (0)