package ca.ualberta.cs.cmput301f14t14.questionapp.test.data;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import ca.ualberta.cs.cmput301f14t14.questionapp.MainActivity;
import ca.ualberta.cs.cmput301f14t14.questionapp.data.ClientData;
import android.test.ActivityInstrumentationTestCase2;
public class ClientDataTest extends ActivityInstrumentationTestCase2<MainActivity> {
private ClientData clientData;
public ClientDataTest() {
super(MainActivity.class);
}
protected void setUp() throws Exception {
super.setUp();
clientData = new ClientData(getInstrumentation().getTargetContext().getApplicationContext());
clientData.clear();
}
/**
* Test that we can set a username from the initial state of 'null'
*/
public void testSetFirstUsername() {
assertEquals(null, clientData.getUsername());
clientData.setUsername("Username");
assertEquals("Username", clientData.getUsername());
}
/**
* Test that we can change a username after the initial set
*/
public void testResetUsername() {
clientData.setUsername("User");
assertEquals("User", clientData.getUsername());
clientData.setUsername("Someone else");
assertEquals("Someone else", clientData.getUsername());
}
/**
* Test that the favorite list is not initialized to null
*/
public void testGetFavorite_emptyList() {
List<UUID> list = clientData.getFavorites();
assertEquals(new ArrayList<UUID>(), list);
}
/**
* Test that a single favorite item can be added
*/
public void testAddFavorite() {
UUID id = UUID.randomUUID();
List<UUID> list = new ArrayList<UUID>();
list.add(id);
clientData.saveFavorites(list);
assertEquals(1, clientData.getFavorites().size());
assertTrue(clientData.getFavorites().contains(id));
}
/**
* Test that multiple favorites can be added
*/
public void testAddFavorite_multiple() {
List<UUID> list = new ArrayList<UUID>();
for (int i = 0; i < 10; i++) {
UUID id = UUID.randomUUID();
list.add(id);
}
clientData.saveFavorites(list);
assertEquals(10, clientData.getFavorites().size());
}
/**
* Test that duplicate favorites cannot be added
*/
public void testAddFavorite_duplicate() {
UUID id = UUID.randomUUID();
List<UUID> list = new ArrayList<UUID>();
list.add(id);
list.add(id);
clientData.saveFavorites(list);
assertEquals(1, clientData.getFavorites().size());
assertTrue(clientData.getFavorites().contains(id));
}
/**
* Test that a single item can be marked as upvoted
*/
public void testSetUpvoted() {
UUID id = UUID.randomUUID();
assertFalse(clientData.isItemUpvoted(id));
clientData.markItemUpvoted(id);
assertTrue(clientData.isItemUpvoted(id));
}
/**
* Test marking multiple items as upvoted
*/
public void testSetUpvoted_multiple() {
List<UUID> list = new ArrayList<UUID>();
for (int i = 0; i < 10; i++) {
UUID id = UUID.randomUUID();
list.add(id);
}
for (UUID id: list) {
assertFalse(clientData.isItemUpvoted(id));
}
for (UUID id: list) {
clientData.markItemUpvoted(id);
}
for (UUID id: list) {
assertTrue(clientData.isItemUpvoted(id));
}
}
/**
* Test that an item cannot be marked as upvoted twice
*/
public void testMarkUpvoted_duplicate() {
UUID id = UUID.randomUUID();
clientData.markItemUpvoted(id);
clientData.markItemUpvoted(id);
assertTrue(clientData.isItemUpvoted(id));
}
/**
* Test that an empty read later list does not return null
*/
public void testGetReadLater_empty() {
List<UUID> list = clientData.getReadLaterItems();
assertEquals(new ArrayList<UUID>(), list);
}
/**
* Test that a single item can be marked as read later
*/
public void testMarkReadLater() {
UUID id = UUID.randomUUID();
assertFalse(clientData.isReadLater(id));
clientData.markReadLater(id);
assertTrue(clientData.isReadLater(id));
assertEquals(1, clientData.getReadLaterItems().size());
assertTrue(clientData.getReadLaterItems().contains(id));
clientData.unmarkReadLater(id);
assertFalse(clientData.getReadLaterItems().contains(id));
assertEquals(0, clientData.getReadLaterItems().size());
}
/**
* Test marking multiple items as read later
*/
public void testMarkReadLater_multiple() {
for (int i = 0; i < 10; i++) {
UUID id = UUID.randomUUID();
clientData.markReadLater(id);
}
assertEquals(10, clientData.getReadLaterItems().size());
}
/**
* Test that an item cannot be marked as read later twice
*/
public void testMarkReadLater_duplicate() {
UUID id = UUID.randomUUID();
clientData.markReadLater(id);
clientData.markReadLater(id);
assertEquals(1, clientData.getReadLaterItems().size());
assertTrue(clientData.getReadLaterItems().contains(id));
}
/**
* Test that an item not on the read later list can safely be unmarked
*/
public void testUnmarkReadLater_notSet() {
UUID id1 = UUID.randomUUID();
UUID id2 = UUID.randomUUID();
clientData.markReadLater(id1);
clientData.markReadLater(id2);
assertEquals(2, clientData.getReadLaterItems().size());
clientData.unmarkReadLater(id1);
assertEquals(1, clientData.getReadLaterItems().size());
clientData.unmarkReadLater(id1);
assertEquals(1, clientData.getReadLaterItems().size());
assertTrue(clientData.isReadLater(id2));
assertFalse(clientData.isReadLater(id1));
}
}