use of com.amplifyframework.testmodels.commentsblog.Blog in project amplify-android by aws-amplify.
the class GsonPendingMutationConverterTest method convertPendingMutationToRecordAndBack.
/**
* Validate that the {@link GsonPendingMutationConverter} can be
* used to convert a sample {@link PendingMutation} to a
* {@link PendingMutation.PersistentRecord}, and vice-versa.
* @throws DataStoreException from DataStore conversion
* @throws AmplifyException On failure to arrange model schema
*/
@Test
public void convertPendingMutationToRecordAndBack() throws AmplifyException {
// Arrange a PendingMutation<Blog>
Blog blog = Blog.builder().name("A neat blog").owner(BlogOwner.builder().name("Joe Swanson").build()).build();
ModelSchema schema = ModelSchema.fromModelClass(Blog.class);
PendingMutation<Blog> originalMutation = PendingMutation.creation(blog, schema);
String expectedMutationId = originalMutation.getMutationId().toString();
// Instantiate the object under test
PendingMutation.Converter converter = new GsonPendingMutationConverter();
// Try to construct a record from the PendingMutation instance.
PendingMutation.PersistentRecord record = converter.toRecord(originalMutation);
assertNotNull(record);
assertEquals(expectedMutationId, record.getId());
// Now, try to convert it back...
PendingMutation<Blog> reconstructedItemChange = converter.fromRecord(record);
assertEquals(originalMutation, reconstructedItemChange);
}
use of com.amplifyframework.testmodels.commentsblog.Blog in project amplify-android by aws-amplify.
the class GsonPendingMutationConverterTest method convertPendingMutationWithSerializedModelWithChildToRecordAndBackWithNestedModelSchema.
/**
* Validate that the {@link GsonPendingMutationConverter} can be
* used to convert a sample {@link PendingMutation} to a
* {@link PendingMutation.PersistentRecord}, and vice-versa.
* @throws DataStoreException from DataStore conversion
* @throws AmplifyException On failure to arrange model schema
*/
@Test
public void convertPendingMutationWithSerializedModelWithChildToRecordAndBackWithNestedModelSchema() throws AmplifyException {
ModelSchema blogOwnerSchema = ModelSchema.fromModelClass(BlogOwner.class);
// register BlogOwner schema to ensure nested SerializedModel to be set with it's schema
schemaRegistry.register("BlogOwner", blogOwnerSchema);
// Arrange a PendingMutation<SerializedModel>
Blog blog = Blog.builder().name("A neat blog").owner(BlogOwner.builder().name("Joe Swanson").build()).build();
ModelSchema schema = ModelSchema.fromModelClass(Blog.class);
SerializedModel serializedBlog = SerializedModel.create(blog, schema);
PendingMutation<SerializedModel> originalMutation = PendingMutation.creation(serializedBlog, schema);
String expectedMutationId = originalMutation.getMutationId().toString();
// Instantiate the object under test
PendingMutation.Converter converter = new GsonPendingMutationConverter();
// Try to construct a record from the PendingMutation instance.
PendingMutation.PersistentRecord record = converter.toRecord(originalMutation);
assertNotNull(record);
assertEquals(expectedMutationId, record.getId());
// Now, try to convert it back...
PendingMutation<SerializedModel> reconstructedItemChange = converter.fromRecord(record);
assertEquals(originalMutation, reconstructedItemChange);
}
use of com.amplifyframework.testmodels.commentsblog.Blog in project amplify-android by aws-amplify.
the class GsonPendingMutationConverterTest method convertPendingMutationWithSerializedModelWithChildToRecordAndBack.
/**
* Validate that the {@link GsonPendingMutationConverter} can be
* used to convert a sample {@link PendingMutation} to a
* {@link PendingMutation.PersistentRecord}, and vice-versa.
* @throws DataStoreException from DataStore conversion
* @throws AmplifyException On failure to arrange model schema
*/
@Test
public void convertPendingMutationWithSerializedModelWithChildToRecordAndBack() throws AmplifyException {
// Arrange a PendingMutation<SerializedModel>
Blog blog = Blog.builder().name("A neat blog").owner(BlogOwner.builder().name("Joe Swanson").build()).build();
ModelSchema schema = ModelSchema.fromModelClass(Blog.class);
SerializedModel serializedBlog = SerializedModel.create(blog, schema);
PendingMutation<SerializedModel> originalMutation = PendingMutation.creation(serializedBlog, schema);
String expectedMutationId = originalMutation.getMutationId().toString();
// Instantiate the object under test
PendingMutation.Converter converter = new GsonPendingMutationConverter();
// Try to construct a record from the PendingMutation instance.
PendingMutation.PersistentRecord record = converter.toRecord(originalMutation);
assertNotNull(record);
assertEquals(expectedMutationId, record.getId());
// Now, try to convert it back...
PendingMutation<SerializedModel> reconstructedItemChange = converter.fromRecord(record);
assertEquals(originalMutation, reconstructedItemChange);
}
use of com.amplifyframework.testmodels.commentsblog.Blog in project amplify-android by aws-amplify.
the class SQLiteStorageAdapterDeleteTest method deleteModelCascades.
/**
* Assert that delete deletes item in the SQLite database without
* violating foreign key constraints.
* @throws DataStoreException On unexpected failure manipulating items in/out of DataStore
*/
@Test
public void deleteModelCascades() throws DataStoreException {
// Create 1 blog owner, which has 3 blogs each, which has 3 posts each.
// Insert 1 blog owner, 3 blogs, 9 posts
Set<String> expected = new HashSet<>();
BlogOwner ownerModel = BlogOwner.builder().name("Blog Owner 1").build();
adapter.save(ownerModel);
expected.add(ownerModel.getId());
for (int blog = 1; blog <= 3; blog++) {
Blog blogModel = Blog.builder().name("Blog " + blog).owner(ownerModel).build();
adapter.save(blogModel);
expected.add(blogModel.getId());
for (int post = 1; post <= 3; post++) {
Post postModel = Post.builder().title("Post " + post).status(PostStatus.INACTIVE).rating(5).blog(blogModel).build();
adapter.save(postModel);
expected.add(postModel.getId());
}
}
// Observe deletions
TestObserver<String> deleteObserver = adapter.observe().filter(change -> StorageItemChange.Type.DELETE.equals(change.type())).map(StorageItemChange::item).map(Model::getId).test();
// Triggers a delete.
// Deletes every saved model to prevent foreign key constraint violation
adapter.delete(ownerModel);
// Assert that cascaded deletions are observed.
deleteObserver.assertValueCount(13);
assertEquals(expected, new HashSet<>(deleteObserver.values()));
// Get data from the database and assert that everything is deleted.
assertTrue(adapter.query(BlogOwner.class).isEmpty());
assertTrue(adapter.query(Blog.class).isEmpty());
assertTrue(adapter.query(Post.class).isEmpty());
}
use of com.amplifyframework.testmodels.commentsblog.Blog in project amplify-android by aws-amplify.
the class SQLiteStorageAdapterObserveQueryTest method querySavedDataWithNumericalPredicates.
/**
* Test querying the saved item in the SQLite database with
* predicate conditions.
*
* @throws DataStoreException On unexpected failure manipulating items in/out of DataStore
* @throws InterruptedException On unexpected failure manipulating items in/out of DataStore
*/
@Test
public void querySavedDataWithNumericalPredicates() throws DataStoreException, InterruptedException {
CountDownLatch latch = new CountDownLatch(1);
CountDownLatch changeLatch = new CountDownLatch(1);
final List<Post> savedModels = new ArrayList<>();
final int numModels = 10;
BlogOwner blogOwner = BlogOwner.builder().name("Test Dummy").build();
adapter.save(blogOwner);
Blog blog = Blog.builder().name("Blogging for Dummies").owner(blogOwner).build();
adapter.save(blog);
for (int counter = 0; counter < numModels; counter++) {
final Post post = Post.builder().title("titlePrefix:" + counter).status(PostStatus.INACTIVE).rating(counter).blog(blog).build();
adapter.save(post);
savedModels.add(post);
}
// 1, 4, 5, 6
QueryPredicate predicate = Post.RATING.ge(4).and(Post.RATING.lt(7)).or(Post.RATING.eq(1).and(Post.RATING.ne(7)));
Consumer<Cancelable> observationStarted = NoOpConsumer.create();
AtomicInteger count = new AtomicInteger(0);
Consumer<DataStoreQuerySnapshot<Post>> onQuerySnapshot = value -> {
if (count.get() == 0) {
List<Post> expected = Arrays.asList(savedModels.get(1), savedModels.get(4), savedModels.get(5), savedModels.get(6));
assertEquals(new HashSet<>(expected), new HashSet<>(value.getItems()));
latch.countDown();
} else if (count.get() == 2) {
assertEquals(5, value.getItems().size());
assertTrue(value.getItems().contains(savedModels.get(1)));
assertTrue(value.getItems().contains(savedModels.get(4)));
assertTrue(value.getItems().contains(savedModels.get(5)));
assertTrue(value.getItems().contains(savedModels.get(6)));
assertTrue(value.getItems().contains(savedModels.get(11)));
changeLatch.countDown();
}
count.incrementAndGet();
};
Consumer<DataStoreException> onObservationError = NoOpConsumer.create();
Action onObservationComplete = NoOpAction.create();
adapter.observeQuery(Post.class, new ObserveQueryOptions(predicate, null), observationStarted, onQuerySnapshot, onObservationError, onObservationComplete);
assertTrue(latch.await(15, TimeUnit.SECONDS));
for (int counter = 3; counter < 5; counter++) {
final Post post = Post.builder().title("titlePrefix:" + counter + "change").status(PostStatus.INACTIVE).rating(counter).blog(blog).build();
adapter.save(post);
savedModels.add(post);
}
assertTrue(changeLatch.await(30, TimeUnit.SECONDS));
}
Aggregations