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));
}
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());
}
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());
}
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));
}
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));
}
Aggregations