Search in sources :

Example 26 with Blog

use of com.amplifyframework.testmodels.commentsblog.Blog in project amplify-android by aws-amplify.

the class SQLiteStorageAdapterQueryTest method querySavedDataWithIdPredicateOnForeignKey.

/**
 * Test querying with Where.Id predicate condition on connected model.
 * @throws DataStoreException On unexpected failure manipulating items in/out of DataStore
 */
@Test
public void querySavedDataWithIdPredicateOnForeignKey() throws DataStoreException {
    final BlogOwner blogOwner = BlogOwner.builder().name("Jane Doe").build();
    adapter.save(blogOwner);
    final Blog blog = Blog.builder().name("Jane's Commercial Real Estate Blog").owner(blogOwner).build();
    adapter.save(blog);
    final List<Blog> blogsOwnedByJaneDoe = adapter.query(Blog.class, Where.id(blog.getId()));
    assertTrue(blogsOwnedByJaneDoe.contains(blog));
}
Also used : BlogOwner(com.amplifyframework.testmodels.commentsblog.BlogOwner) Blog(com.amplifyframework.testmodels.commentsblog.Blog) Test(org.junit.Test)

Example 27 with Blog

use of com.amplifyframework.testmodels.commentsblog.Blog in project amplify-android by aws-amplify.

the class AppSyncClientInstrumentationTest method testAllOperations.

/**
 * Tests the operations in AppSyncClient.
 * @throws DataStoreException If any call to AppSync endpoint fails to return a response
 * @throws AmplifyException On failure to obtain ModelSchema
 */
@Test
@SuppressWarnings("MethodLength")
public void testAllOperations() throws AmplifyException {
    ModelSchema blogOwnerSchema = ModelSchema.fromModelClass(BlogOwner.class);
    ModelSchema postSchema = ModelSchema.fromModelClass(Post.class);
    ModelSchema blogSchema = ModelSchema.fromModelClass(Blog.class);
    long startTimeSeconds = TimeUnit.MILLISECONDS.toSeconds(new Date().getTime());
    // Create simple model with no relationship
    BlogOwner owner = BlogOwner.builder().name("David").build();
    ModelWithMetadata<BlogOwner> blogOwnerCreateResult = create(owner, blogOwnerSchema);
    BlogOwner actual = blogOwnerCreateResult.getModel();
    ModelAssert.assertEqualsIgnoringTimestamps(owner, actual);
    assertEquals(new Integer(1), blogOwnerCreateResult.getSyncMetadata().getVersion());
    // TODO: BE AWARE THAT THE DELETED PROPERTY RETURNS NULL INSTEAD OF FALSE
    assertNull(blogOwnerCreateResult.getSyncMetadata().isDeleted());
    assertTrue(blogOwnerCreateResult.getSyncMetadata().getId().endsWith(owner.getId()));
    // Subscribe to Blog creations
    Observable<GraphQLResponse<ModelWithMetadata<Blog>>> blogCreations = onCreate(blogSchema);
    // Now, actually create a Blog
    Blog blog = Blog.builder().name("Create test").owner(owner).build();
    ModelWithMetadata<Blog> blogCreateResult = create(blog, blogSchema);
    // Currently cannot do BlogOwner.justId because it will assign the id to the name field.
    // This is being fixed
    assertEquals(blog.getId(), blogCreateResult.getModel().getId());
    assertEquals(blog.getName(), blogCreateResult.getModel().getName());
    assertEquals(blog.getOwner().getId(), blogCreateResult.getModel().getOwner().getId());
    assertEquals(new Integer(1), blogCreateResult.getSyncMetadata().getVersion());
    assertNull(blogCreateResult.getSyncMetadata().isDeleted());
    Temporal.Timestamp createdBlogLastChangedAt = blogCreateResult.getSyncMetadata().getLastChangedAt();
    assertNotNull(createdBlogLastChangedAt);
    assertTrue(createdBlogLastChangedAt.getSecondsSinceEpoch() > startTimeSeconds);
    assertTrue(blogCreateResult.getSyncMetadata().getId().endsWith(blog.getId()));
    // TODO: Subscriptions are currently failing.  More investigation required to fix this part of the test.
    // Validate that subscription picked up the mutation and end the subscription since we're done with.
    // TestObserver<ModelWithMetadata<Blog>> blogCreationSubscriber = TestObserver.create();
    // blogCreations
    // .map(GraphQLResponse::getData)
    // .subscribe(blogCreationSubscriber);
    // blogCreationSubscriber.assertValue(blogCreateResult);
    // Create Posts which Blog hasMany of
    Post post1 = Post.builder().title("Post 1").status(PostStatus.ACTIVE).rating(4).blog(blog).build();
    Post post2 = Post.builder().title("Post 2").status(PostStatus.INACTIVE).rating(-1).blog(blog).build();
    Post post1ModelResult = create(post1, postSchema).getModel();
    Post post2ModelResult = create(post2, postSchema).getModel();
    // Results only have blog ID so strip out other information from the original post blog
    ModelAssert.assertEqualsIgnoringTimestamps(post1.copyOfBuilder().blog(Blog.justId(blog.getId())).build(), post1ModelResult);
    ModelAssert.assertEqualsIgnoringTimestamps(post2.copyOfBuilder().blog(Blog.justId(blog.getId())).build(), post2ModelResult);
    // Update model
    Blog updatedBlog = blog.copyOfBuilder().name("Updated blog").build();
    long updateBlogStartTimeSeconds = TimeUnit.MILLISECONDS.toSeconds(new Date().getTime());
    ModelWithMetadata<Blog> blogUpdateResult = update(updatedBlog, blogSchema, 1);
    assertEquals(updatedBlog.getName(), blogUpdateResult.getModel().getName());
    assertEquals(updatedBlog.getOwner().getId(), blogUpdateResult.getModel().getOwner().getId());
    assertEquals(updatedBlog.getId(), blogUpdateResult.getModel().getId());
    assertEquals(2, blogUpdateResult.getModel().getPosts().size());
    assertEquals(new Integer(2), blogUpdateResult.getSyncMetadata().getVersion());
    assertNull(blogUpdateResult.getSyncMetadata().isDeleted());
    Temporal.Timestamp updatedBlogLastChangedAt = blogUpdateResult.getSyncMetadata().getLastChangedAt();
    assertNotNull(updatedBlogLastChangedAt);
    assertTrue(updatedBlogLastChangedAt.getSecondsSinceEpoch() > updateBlogStartTimeSeconds);
    // Delete one of the posts
    ModelWithMetadata<Post> post1DeleteResult = delete(post1, postSchema, 1);
    ModelAssert.assertEqualsIgnoringTimestamps(post1.copyOfBuilder().blog(Blog.justId(blog.getId())).build(), post1DeleteResult.getModel());
    Boolean isDeleted = post1DeleteResult.getSyncMetadata().isDeleted();
    assertEquals(Boolean.TRUE, isDeleted);
    // Try to delete a post with a bad version number
    List<GraphQLResponse.Error> post2DeleteErrors = deleteExpectingResponseErrors(post2, postSchema, 0);
    assertEquals("Conflict resolver rejects mutation.", post2DeleteErrors.get(0).getMessage());
    // Run sync on Blogs
    // TODO: This is currently a pretty worthless test - mainly for setting a debug point and manually inspecting
    // When you call sync with a null lastSync it gives only one entry per object (the latest state)
    Iterable<ModelWithMetadata<Blog>> blogSyncResult = sync(api.buildSyncRequest(blogSchema, null, 1000, QueryPredicates.all()));
    assertTrue(blogSyncResult.iterator().hasNext());
    // Run sync on Posts
    // TODO: This is currently a pretty worthless test - mainly for setting a debug point and manually inspecting
    // When you call sync with a lastSyncTime it gives you one entry per version of that object which was created
    // since that time.
    Iterable<ModelWithMetadata<Post>> postSyncResult = sync(api.buildSyncRequest(postSchema, startTimeSeconds, 1000, QueryPredicates.all()));
    assertTrue(postSyncResult.iterator().hasNext());
}
Also used : ModelWithMetadata(com.amplifyframework.datastore.appsync.ModelWithMetadata) Post(com.amplifyframework.testmodels.commentsblog.Post) GraphQLResponse(com.amplifyframework.api.graphql.GraphQLResponse) Date(java.util.Date) ModelSchema(com.amplifyframework.core.model.ModelSchema) Temporal(com.amplifyframework.core.model.temporal.Temporal) BlogOwner(com.amplifyframework.testmodels.commentsblog.BlogOwner) Blog(com.amplifyframework.testmodels.commentsblog.Blog) Test(org.junit.Test)

Example 28 with Blog

use of com.amplifyframework.testmodels.commentsblog.Blog in project amplify-android by aws-amplify.

the class BasicCloudSyncInstrumentationTest method createPost1WithCommentThenReassignCommentToPost2.

/**
 * The test is to create a new Post with Comment, reassign Comment to a different Post.
 * @throws DataStoreException On failure to save or query items from DataStore.
 * @throws ApiException On failure to query the API.
 */
@Test
public void createPost1WithCommentThenReassignCommentToPost2() throws DataStoreException, ApiException {
    // Setup
    BlogOwner owner = BlogOwner.builder().name("Owner").build();
    Blog blog = Blog.builder().name("MyBlog").owner(owner).build();
    Post firstPost = Post.builder().title("First Post").status(PostStatus.ACTIVE).rating(3).blog(blog).build();
    Post secondPost = Post.builder().title("Second Post").status(PostStatus.ACTIVE).rating(5).blog(blog).build();
    Comment comment = Comment.builder().content("Some comment").post(firstPost).build();
    String modelName = Comment.class.getSimpleName();
    // Save first post and comment. Then verify that first post and comment were saved.
    HubAccumulator accumulator = HubAccumulator.create(HubChannel.DATASTORE, publicationOf(modelName, comment.getId()), 1).start();
    dataStore.save(owner);
    dataStore.save(blog);
    dataStore.save(firstPost);
    dataStore.save(comment);
    accumulator.await(TIMEOUT_SECONDS, TimeUnit.SECONDS);
    Comment localComment = dataStore.get(Comment.class, comment.getId());
    Assert.assertEquals(comment.getPost().getId(), localComment.getPost().getId());
    Comment remoteComment = api.get(Comment.class, comment.getId());
    Assert.assertEquals(comment.getPost().getId(), remoteComment.getPost().getId());
    // Reassign comment to second post, save and sync
    Comment commentCopy = comment.copyOfBuilder().post(secondPost).build();
    accumulator = HubAccumulator.create(HubChannel.DATASTORE, publicationOf(modelName, commentCopy.getId()), 1).start();
    dataStore.save(secondPost);
    dataStore.save(commentCopy);
    accumulator.await(TIMEOUT_SECONDS, TimeUnit.SECONDS);
    // Verify that comment was reassigned
    Comment currentLocalComment = dataStore.get(Comment.class, comment.getId());
    Assert.assertEquals(secondPost.getId(), currentLocalComment.getPost().getId());
    Comment currentRemoteComment = api.get(Comment.class, comment.getId());
    Assert.assertEquals(secondPost.getId(), currentRemoteComment.getPost().getId());
}
Also used : Comment(com.amplifyframework.testmodels.commentsblog.Comment) Post(com.amplifyframework.testmodels.commentsblog.Post) BlogOwner(com.amplifyframework.testmodels.commentsblog.BlogOwner) HubAccumulator(com.amplifyframework.testutils.HubAccumulator) Blog(com.amplifyframework.testmodels.commentsblog.Blog) Test(org.junit.Test)

Example 29 with Blog

use of com.amplifyframework.testmodels.commentsblog.Blog in project amplify-android by aws-amplify.

the class SQLiteStorageAdapterSaveTest method saveModelWithInvalidForeignKey.

/**
 * Assert that foreign key constraint is enforced.
 * @throws DataStoreException On unexpected failure manipulating items in/out of DataStore
 */
@Test
public void saveModelWithInvalidForeignKey() throws DataStoreException {
    final BlogOwner blogOwner = BlogOwner.builder().name("Alan Turing").build();
    adapter.save(blogOwner);
    final Blog blog = Blog.builder().name("Alan's Blog").owner(BlogOwner.builder().name(// What??
    "Susan Swanson").build()).build();
    Throwable actualError = adapter.saveExpectingError(blog);
    final String expectedError = "FOREIGN KEY constraint failed";
    assertNotNull(actualError.getCause());
    assertNotNull(actualError.getCause().getMessage());
    assertThat(Log.getStackTraceString(actualError), containsString(expectedError));
}
Also used : BlogOwner(com.amplifyframework.testmodels.commentsblog.BlogOwner) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) Blog(com.amplifyframework.testmodels.commentsblog.Blog) Test(org.junit.Test)

Example 30 with Blog

use of com.amplifyframework.testmodels.commentsblog.Blog in project amplify-android by aws-amplify.

the class SQLiteStorageAdapterSaveTest method saveModelWithValidForeignKey.

/**
 * Assert that save stores foreign key in the SQLite database correctly.
 * @throws DataStoreException from possible underlying DataStore exceptions
 */
@Test
public void saveModelWithValidForeignKey() throws DataStoreException {
    final BlogOwner alan = BlogOwner.builder().name("Alan Turing").build();
    adapter.save(alan);
    final Blog blog = Blog.builder().name("Alan's Software Blog").owner(alan).build();
    adapter.save(blog);
    // Get the Blog from the database
    final List<Blog> blogs = adapter.query(Blog.class);
    assertEquals(1, blogs.size());
    assertTrue(blogs.contains(blog));
}
Also used : BlogOwner(com.amplifyframework.testmodels.commentsblog.BlogOwner) Blog(com.amplifyframework.testmodels.commentsblog.Blog) 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