Files
briar/briar-android/test/java/briarproject/activity/ForumActivityTest.java
2016-06-17 04:48:13 +00:00

128 lines
4.1 KiB
Java

package briarproject.activity;
import android.content.Intent;
import junit.framework.Assert;
import org.briarproject.BuildConfig;
import org.briarproject.TestUtils;
import org.briarproject.android.controller.handler.UiResultHandler;
import org.briarproject.android.forum.ForumActivity;
import org.briarproject.android.forum.ForumController;
import org.briarproject.android.forum.ForumEntry;
import org.briarproject.api.identity.Author;
import org.briarproject.api.identity.AuthorId;
import org.briarproject.api.sync.GroupId;
import org.briarproject.api.sync.MessageId;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21,
application = TestBriarApplication.class)
public class ForumActivityTest {
private final static String AUTHOR_1 = "Author 1";
private final static String AUTHOR_2 = "Author 2";
private final static String AUTHOR_3 = "Author 3";
private final static String AUTHOR_4 = "Author 4";
private final static String AUTHOR_5 = "Author 5";
private final static String AUTHOR_6 = "Author 6";
private final static String[] AUTHORS = {
AUTHOR_1, AUTHOR_2, AUTHOR_3, AUTHOR_4, AUTHOR_5, AUTHOR_6
};
/*
1
-> 2
-> 3
-> 4
5
6
*/
private final static int[] LEVELS = {
0, 1, 2, 3, 1, 0
};
private TestForumActivity forumActivity;
@Captor
private ArgumentCaptor<UiResultHandler<Boolean>> rc;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
Intent intent = new Intent();
intent.putExtra("briar.GROUP_ID", TestUtils.getRandomId());
forumActivity = Robolectric.buildActivity(TestForumActivity.class)
.withIntent(intent).create().resume().get();
}
private List<ForumEntry> getDummyData() {
ForumEntry[] forumEntries = new ForumEntry[6];
for (int i = 0; i < forumEntries.length; i++) {
forumEntries[i] =
new ForumEntry(new MessageId(TestUtils.getRandomId()),
AUTHORS[i], LEVELS[i], System.currentTimeMillis(),
AUTHORS[i], new AuthorId(TestUtils.getRandomId()),
Author.Status.UNKNOWN);
}
return new ArrayList<>(Arrays.asList(forumEntries));
}
@Test
public void testNestedEntries() {
ForumController mc = forumActivity.getController();
List<ForumEntry> dummyData = getDummyData();
Mockito.when(mc.getForumEntries()).thenReturn(dummyData);
// Verify that the forum load is called once
verify(mc, times(1))
.loadForum(Mockito.any(GroupId.class), rc.capture());
rc.getValue().onResult(true);
verify(mc, times(1)).getForumEntries();
ForumActivity.ForumAdapter adapter = forumActivity.getAdapter();
Assert.assertNotNull(adapter);
// Cascade close
assertEquals(6, adapter.getItemCount());
adapter.hideDescendants(dummyData.get(2));
assertEquals(5, adapter.getItemCount());
adapter.hideDescendants(dummyData.get(1));
assertEquals(4, adapter.getItemCount());
adapter.hideDescendants(dummyData.get(0));
assertEquals(2, adapter.getItemCount());
assertTrue(dummyData.get(0).getText()
.equals(adapter.getVisibleEntry(0).getText()));
assertTrue(dummyData.get(5).getText()
.equals(adapter.getVisibleEntry(1).getText()));
// Cascade re-open
adapter.showDescendants(dummyData.get(0));
assertEquals(4, adapter.getItemCount());
adapter.showDescendants(dummyData.get(1));
assertEquals(5, adapter.getItemCount());
adapter.showDescendants(dummyData.get(2));
assertEquals(6, adapter.getItemCount());
assertTrue(dummyData.get(2).getText()
.equals(adapter.getVisibleEntry(2).getText()));
assertTrue(dummyData.get(4).getText()
.equals(adapter.getVisibleEntry(4).getText()));
}
}