package org.springframework.data.simpledb.repository; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.simpledb.domain.SimpleDbUser; import org.springframework.data.simpledb.repository.BasicSimpleDbUserRepository; import org.springframework.data.simpledb.repository.util.SimpleDbUserBuilder; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:simpledb-consistent-repository-context.xml") public class BasicSimpleDbUserConsistentPropertyRepositoryTest { @Autowired BasicSimpleDbUserRepository repository; @After public void tearDown() { repository.deleteAll(); } @Test public void save_should_persist_single_item() { String itemName = "FirstItem"; SimpleDbUser user = SimpleDbUserBuilder.createUserWithSampleAttributes(itemName); repository.save(user); SimpleDbUser foundUser = repository.findOne(user.getItemName()); assertEquals(user.getItemName(), foundUser.getItemName()); assertEquals(user, foundUser); } @Test public void save_should_persist_item_list() { List<SimpleDbUser> list = SimpleDbUserBuilder.createListOfItems(3); repository.save(list); assertEquals(list.size(), repository.count()); } @Test public void save_should_create_new_item_for_modified_item_name() { String itemName = "FirstItem"; SimpleDbUser user = SimpleDbUserBuilder.createUserWithSampleAttributes(itemName); repository.save(user); itemName = "SecondItem"; user.setItemName(itemName); repository.save(user); SimpleDbUser foundUser = repository.findOne("SecondItem"); assertNotNull(foundUser); assertEquals(user, foundUser); foundUser = repository.findOne("FirstItem"); assertNotNull(foundUser); } @Test public void delete_should_remove_item() { String itemName = "FirstItem"; SimpleDbUser user = SimpleDbUserBuilder.createUserWithSampleAttributes(itemName); user = repository.save(user); repository.delete(user); user = repository.findOne(itemName); assertNull(user); } @Test public void delete_should_remove_item_by_itemName() { String itemName = "FirstItem"; SimpleDbUser user = SimpleDbUserBuilder.createUserWithSampleAttributes(itemName); repository.save(user); repository.delete(itemName); user = repository.findOne(itemName); assertNull(user); } @Test public void delete_should_remove_list_of_items() { List<SimpleDbUser> list = SimpleDbUserBuilder.createListOfItems(3); repository.save(list); repository.delete(list); assertEquals(0, repository.count()); } @Test public void findOne_should_return_one_item() { String itemName = "FirstItem"; SimpleDbUser user = SimpleDbUserBuilder.createUserWithSampleAttributes(itemName); repository.save(user); SimpleDbUser foundUser = repository.findOne(itemName); assertNotNull(foundUser); assertEquals(user.getItemName(), foundUser.getItemName()); assertEquals(user, foundUser); } @Test public void findAll_should_return_all_items() { List<SimpleDbUser> testUsers = SimpleDbUserBuilder.createListOfItems(3); repository.save(testUsers); Iterable<SimpleDbUser> users = repository.findAll(); assertNotNull(users); assertEquals(testUsers.size(), count(users)); } @Test public void findAll_with_iterable_should_return_a_list_of_items() { List<SimpleDbUser> testUsers = SimpleDbUserBuilder.createListOfItems(3); repository.save(testUsers); SimpleDbUser first = testUsers.get(0); Iterable<String> ids = Arrays.asList(new String[] { first.getItemName() }); Iterable<SimpleDbUser> foundUsers = repository.findAll(ids); assertNotNull(foundUsers); assertEquals(first.getItemName(), foundUsers.iterator().next().getItemName()); } @Test public void exists_should_return_true_for_existing_items() { String itemName = "FirstItem"; SimpleDbUser user = SimpleDbUserBuilder.createUserWithSampleAttributes(itemName); repository.save(user); assertTrue(repository.exists(user.getItemName())); } @Test public void consistent_find_should_return_updated_item_with_no_delay() { String itemName = "FirstItem"; SimpleDbUser user = SimpleDbUserBuilder.createUserWithSampleAttributes(itemName); repository.save(user); assertNotNull(repository.findOne(itemName)); repository.delete(itemName); assertNull(repository.findOne(itemName)); } @Test public void consistent_count_should_return_total_number_of_item_with_no_delay() { String itemName = "FirstItem"; SimpleDbUser user = SimpleDbUserBuilder.createUserWithSampleAttributes(itemName); repository.save(user); assertEquals(1, repository.count()); repository.delete(itemName); assertEquals(0, repository.count()); } @Test public void save_should_generateId() { SimpleDbUser user = SimpleDbUserBuilder.createUserWithSampleAttributes(null); user = repository.save(user); assertNotNull(user.getItemName()); } private int count(Iterable<SimpleDbUser> users) { Iterator<SimpleDbUser> iterator = users.iterator(); int count = 0; while(iterator.hasNext()) { count++; iterator.next(); } return count; } }