Search in sources :

Example 1 with Blog

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);
}
Also used : ModelSchema(com.amplifyframework.core.model.ModelSchema) Blog(com.amplifyframework.testmodels.commentsblog.Blog) Test(org.junit.Test)

Example 2 with Blog

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);
}
Also used : ModelSchema(com.amplifyframework.core.model.ModelSchema) SerializedModel(com.amplifyframework.core.model.SerializedModel) Blog(com.amplifyframework.testmodels.commentsblog.Blog) Test(org.junit.Test)

Example 3 with Blog

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);
}
Also used : ModelSchema(com.amplifyframework.core.model.ModelSchema) SerializedModel(com.amplifyframework.core.model.SerializedModel) Blog(com.amplifyframework.testmodels.commentsblog.Blog) Test(org.junit.Test)

Example 4 with Blog

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());
}
Also used : BeforeClass(org.junit.BeforeClass) Blog(com.amplifyframework.testmodels.commentsblog.Blog) QueryPredicates(com.amplifyframework.core.model.query.predicate.QueryPredicates) StorageItemChange(com.amplifyframework.datastore.storage.StorageItemChange) BlogOwner(com.amplifyframework.testmodels.commentsblog.BlogOwner) Model(com.amplifyframework.core.model.Model) Set(java.util.Set) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) StrictMode(com.amplifyframework.datastore.StrictMode) SynchronousStorageAdapter(com.amplifyframework.datastore.storage.SynchronousStorageAdapter) HashSet(java.util.HashSet) DataStoreException(com.amplifyframework.datastore.DataStoreException) List(java.util.List) TestObserver(io.reactivex.rxjava3.observers.TestObserver) After(org.junit.After) QueryPredicate(com.amplifyframework.core.model.query.predicate.QueryPredicate) AmplifyModelProvider(com.amplifyframework.testmodels.commentsblog.AmplifyModelProvider) Post(com.amplifyframework.testmodels.commentsblog.Post) PostStatus(com.amplifyframework.testmodels.commentsblog.PostStatus) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) Before(org.junit.Before) Post(com.amplifyframework.testmodels.commentsblog.Post) StorageItemChange(com.amplifyframework.datastore.storage.StorageItemChange) BlogOwner(com.amplifyframework.testmodels.commentsblog.BlogOwner) Blog(com.amplifyframework.testmodels.commentsblog.Blog) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 5 with Blog

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));
}
Also used : Arrays(java.util.Arrays) BeforeClass(org.junit.BeforeClass) ObserveQueryOptions(com.amplifyframework.core.model.query.ObserveQueryOptions) Blog(com.amplifyframework.testmodels.commentsblog.Blog) ArrayList(java.util.ArrayList) SynchronousStorageAdapter(com.amplifyframework.datastore.storage.SynchronousStorageAdapter) HashSet(java.util.HashSet) Consumer(com.amplifyframework.core.Consumer) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) After(org.junit.After) QueryPredicate(com.amplifyframework.core.model.query.predicate.QueryPredicate) NoOpConsumer(com.amplifyframework.core.NoOpConsumer) PostStatus(com.amplifyframework.testmodels.commentsblog.PostStatus) DataStoreQuerySnapshot(com.amplifyframework.datastore.DataStoreQuerySnapshot) Before(org.junit.Before) BlogOwner(com.amplifyframework.testmodels.commentsblog.BlogOwner) Comment(com.amplifyframework.testmodels.commentsblog.Comment) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) Action(com.amplifyframework.core.Action) StrictMode(com.amplifyframework.datastore.StrictMode) TimeUnit(java.util.concurrent.TimeUnit) DataStoreException(com.amplifyframework.datastore.DataStoreException) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) Cancelable(com.amplifyframework.core.async.Cancelable) Assert.assertFalse(org.junit.Assert.assertFalse) QuerySortBy(com.amplifyframework.core.model.query.QuerySortBy) Comparator(java.util.Comparator) NoOpAction(com.amplifyframework.core.NoOpAction) AmplifyModelProvider(com.amplifyframework.testmodels.commentsblog.AmplifyModelProvider) Post(com.amplifyframework.testmodels.commentsblog.Post) Collections(java.util.Collections) QueryPredicate.not(com.amplifyframework.core.model.query.predicate.QueryPredicate.not) Assert.assertEquals(org.junit.Assert.assertEquals) DataStoreException(com.amplifyframework.datastore.DataStoreException) Action(com.amplifyframework.core.Action) NoOpAction(com.amplifyframework.core.NoOpAction) QueryPredicate(com.amplifyframework.core.model.query.predicate.QueryPredicate) Post(com.amplifyframework.testmodels.commentsblog.Post) ArrayList(java.util.ArrayList) CountDownLatch(java.util.concurrent.CountDownLatch) DataStoreQuerySnapshot(com.amplifyframework.datastore.DataStoreQuerySnapshot) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ObserveQueryOptions(com.amplifyframework.core.model.query.ObserveQueryOptions) BlogOwner(com.amplifyframework.testmodels.commentsblog.BlogOwner) ArrayList(java.util.ArrayList) List(java.util.List) Blog(com.amplifyframework.testmodels.commentsblog.Blog) Cancelable(com.amplifyframework.core.async.Cancelable) HashSet(java.util.HashSet) Test(org.junit.Test)

Aggregations

Blog (com.amplifyframework.testmodels.commentsblog.Blog)30 Test (org.junit.Test)30 BlogOwner (com.amplifyframework.testmodels.commentsblog.BlogOwner)26 Post (com.amplifyframework.testmodels.commentsblog.Post)16 HashSet (java.util.HashSet)12 QueryPredicate (com.amplifyframework.core.model.query.predicate.QueryPredicate)11 DataStoreException (com.amplifyframework.datastore.DataStoreException)10 StrictMode (com.amplifyframework.datastore.StrictMode)10 SynchronousStorageAdapter (com.amplifyframework.datastore.storage.SynchronousStorageAdapter)10 AmplifyModelProvider (com.amplifyframework.testmodels.commentsblog.AmplifyModelProvider)10 PostStatus (com.amplifyframework.testmodels.commentsblog.PostStatus)10 Collections (java.util.Collections)10 List (java.util.List)10 After (org.junit.After)10 Assert.assertEquals (org.junit.Assert.assertEquals)10 Assert.assertTrue (org.junit.Assert.assertTrue)10 Before (org.junit.Before)10 BeforeClass (org.junit.BeforeClass)10 Comment (com.amplifyframework.testmodels.commentsblog.Comment)9 ArrayList (java.util.ArrayList)9