Search in sources :

Example 11 with Post

use of com.android.example.devsummit.archdemo.vo.Post in project dev-summit-architecture-demo by yigit.

the class FetchFeedJob method handleResponse.

@Nullable
private Post handleResponse(FeedResponse body) {
    // not save their post so we don't care.
    if (body.getUsers() != null) {
        mUserModel.saveAll(body.getUsers());
    }
    Post oldest = null;
    if (body.getPosts() != null) {
        mPostModel.saveAll(body.getPosts());
        long since = 0;
        for (Post post : body.getPosts()) {
            if (post.getCreated() > since) {
                since = post.getCreated();
            }
            if (oldest == null || oldest.getCreated() > post.getCreated()) {
                oldest = post;
            }
        }
        if (since > 0) {
            mFeedModel.saveFeedTimestamp(since, mUserId);
        }
    }
    return oldest;
}
Also used : Post(com.android.example.devsummit.archdemo.vo.Post) Nullable(android.support.annotation.Nullable)

Example 12 with Post

use of com.android.example.devsummit.archdemo.vo.Post in project dev-summit-architecture-demo by yigit.

the class SaveNewPostJob method onAdded.

@Override
public void onAdded() {
    Post post = new Post();
    post.setText(mText);
    post.setId(mFeedModel.generateIdForNewLocalPost());
    post.setClientId(mClientId);
    post.setUserId(mUserId);
    post.setPending(true);
    // make sure whatever time we put here is greater / eq to last known time in database.
    // this will work around issues related to client's time.
    // this time is temporary anyways as it will be overriden when it is synched to server
    long feedTs = mFeedModel.getLatestTimestamp(null);
    long now = System.currentTimeMillis();
    post.setCreated(Math.max(feedTs, now) + 1);
    L.d("assigned timestamp %s to the post", post.getCreated());
    mPostModel.save(post);
    mEventBus.post(new NewPostEvent(post));
}
Also used : Post(com.android.example.devsummit.archdemo.vo.Post) NewPostEvent(com.android.example.devsummit.archdemo.event.post.NewPostEvent)

Example 13 with Post

use of com.android.example.devsummit.archdemo.vo.Post in project dev-summit-architecture-demo by yigit.

the class SaveNewPostJob method onRun.

@Override
public void onRun() throws Throwable {
    Post post = mPostModel.loadByClientIdAndUserId(mClientId, mUserId);
    if (post != null && !post.isPending()) {
        // looks like post probably arrived from somewhere else. Good Job!
        mEventBus.post(new UpdatedPostEvent(post));
        return;
    }
    Response<NewPostResponse> response = mApiService.sendPost(mText, mClientId, mUserId).execute();
    if (response.isSuccess()) {
        NewPostResponse body = response.body();
        body.getPost().setPending(false);
        mPostModel.save(body.getPost());
        mUserModel.save(body.getUser());
        mEventBus.post(new UpdatedPostEvent(body.getPost()));
    } else {
        throw new NetworkException(response.code());
    }
}
Also used : NewPostResponse(com.android.example.devsummit.archdemo.api.NewPostResponse) Post(com.android.example.devsummit.archdemo.vo.Post) UpdatedPostEvent(com.android.example.devsummit.archdemo.event.post.UpdatedPostEvent) NetworkException(com.android.example.devsummit.archdemo.job.NetworkException)

Example 14 with Post

use of com.android.example.devsummit.archdemo.vo.Post in project dev-summit-architecture-demo by yigit.

the class FetchFeedJobTest method testRun.

@Test
public void testRun() throws Throwable {
    FeedResponse response = new FeedResponse();
    List<User> users = Arrays.asList(createDummyUser(), createDummyUser());
    List<Post> posts = Arrays.asList(createDummyPost(users.get(0).getId()), createDummyPost(users.get(0).getId()), createDummyPost(users.get(1).getId()));
    posts.get(0).setCreated(10);
    posts.get(1).setCreated(11);
    posts.get(2).setCreated(12);
    response.setPosts(posts);
    response.setUsers(users);
    FetchFeedJob job = new FetchFeedJob(BaseJob.BACKGROUND, 101L);
    when(mApiService.userFeed(101L, 0L)).thenReturn(createCall(response));
    job.inject(getTestComponent());
    job.onRun();
    FetchedFeedEvent event = mLoggingBus.findEvent(FetchedFeedEvent.class);
    assertThat(event, notNullValue());
    assertThat(event.isSuccess(), is(true));
    assertThat(event.getUserId(), is(101L));
    // TODO Better to mock the models and verify the save calls so that this test wont
    // be effected by model failures.
    assertThat(mUserModel.load(users.get(0).getId()), notNullValue());
    assertThat(mUserModel.load(users.get(1).getId()), notNullValue());
    assertThat(mPostModel.load(posts.get(0).getId()), notNullValue());
    assertThat(mPostModel.load(posts.get(1).getId()), notNullValue());
    assertThat(mPostModel.load(posts.get(2).getId()), notNullValue());
    assertThat(mFeedModel.getLatestTimestamp(101L), is(12L));
}
Also used : TestUtil.createDummyUser(com.android.example.devsummit.archdemo.util.TestUtil.createDummyUser) User(com.android.example.devsummit.archdemo.vo.User) Post(com.android.example.devsummit.archdemo.vo.Post) TestUtil.createDummyPost(com.android.example.devsummit.archdemo.util.TestUtil.createDummyPost) FeedResponse(com.android.example.devsummit.archdemo.api.FeedResponse) FetchedFeedEvent(com.android.example.devsummit.archdemo.event.feed.FetchedFeedEvent) BaseTest(com.android.example.devsummit.archdemo.BaseTest) Test(org.junit.Test)

Example 15 with Post

use of com.android.example.devsummit.archdemo.vo.Post in project dev-summit-architecture-demo by yigit.

the class FeedModelTest method loadFeed.

@Test
public void loadFeed() {
    NewPostResponse response = new NewPostResponse();
    Post post = TestUtil.createDummyPost();
    User user = TestUtil.createDummyUser();
    post.setUserId(user.getId());
    response.setUser(user);
    response.setPost(post);
    mPostModel.save(post);
    mUserModel.save(user);
    assertThat(mUserModel.load(user.getId()), notNullValue());
    assertThat(mPostModel.load(post.getId()), notNullValue());
    List<FeedItem> feed = mFeedModel.loadFeed(0, user.getId());
    assertThat(feed, notNullValue());
    assertThat(feed.size(), is(1));
    FeedItem loaded = feed.get(0);
    assertThat(loaded.getUser().getId(), is(user.getId()));
    assertThat(loaded.getPost().getId(), is(post.getId()));
}
Also used : NewPostResponse(com.android.example.devsummit.archdemo.api.NewPostResponse) User(com.android.example.devsummit.archdemo.vo.User) FeedItem(com.android.example.devsummit.archdemo.vo.FeedItem) Post(com.android.example.devsummit.archdemo.vo.Post) Test(org.junit.Test) BaseTest(com.android.example.devsummit.archdemo.BaseTest)

Aggregations

Post (com.android.example.devsummit.archdemo.vo.Post)20 Test (org.junit.Test)11 BaseTest (com.android.example.devsummit.archdemo.BaseTest)9 FeedItem (com.android.example.devsummit.archdemo.vo.FeedItem)5 User (com.android.example.devsummit.archdemo.vo.User)5 FetchedFeedEvent (com.android.example.devsummit.archdemo.event.feed.FetchedFeedEvent)4 FeedResponse (com.android.example.devsummit.archdemo.api.FeedResponse)2 NewPostResponse (com.android.example.devsummit.archdemo.api.NewPostResponse)2 NetworkException (com.android.example.devsummit.archdemo.job.NetworkException)2 FeedModel (com.android.example.devsummit.archdemo.model.FeedModel)2 Nullable (android.support.annotation.Nullable)1 DeletePostEvent (com.android.example.devsummit.archdemo.event.post.DeletePostEvent)1 NewPostEvent (com.android.example.devsummit.archdemo.event.post.NewPostEvent)1 UpdatedPostEvent (com.android.example.devsummit.archdemo.event.post.UpdatedPostEvent)1 TestUtil.createDummyPost (com.android.example.devsummit.archdemo.util.TestUtil.createDummyPost)1 TestUtil.createDummyUser (com.android.example.devsummit.archdemo.util.TestUtil.createDummyUser)1 ArrayList (java.util.ArrayList)1