package org.springframework.data.simpledb.core.domain; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.data.simpledb.core.SimpleDb; import org.springframework.data.simpledb.core.domain.DomainManagementPolicy; import org.springframework.data.simpledb.core.domain.DomainManager; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.amazonaws.services.simpledb.AmazonSimpleDB; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:simpledb-repository-context.xml") public class DomainManagerTest { @Autowired private ApplicationContext appContext; private AmazonSimpleDB sdb; @Before public void setup() { SimpleDb simpleDb = appContext.getBean(SimpleDb.class); sdb = simpleDb.getSimpleDbClient(); } @Test public void manageDomains_with_DROP_CREATE_should_create_new_domain() { final String domainName = getDomainName("test_domain"); DomainManager manager = new DomainManager(); manager.manageDomain(domainName, DomainManagementPolicy.DROP_CREATE, sdb); assertTrue(manager.exists(domainName, sdb)); // cleanup manager.dropDomain(domainName, sdb); } @Test public void manageDomains_with_NONE_should_NOT_create_domain() { final String domainName = getDomainName("sample"); DomainManager manager = new DomainManager(); manager.manageDomain(domainName, DomainManagementPolicy.NONE, sdb); assertFalse(manager.exists(domainName, sdb)); manager.dropDomain(domainName, sdb); } @Test public void manageDomains_with_UPDATE_should_create_domain_if_not_existing() { final String domainName = getDomainName("sample_update"); DomainManager manager = new DomainManager(); manager.manageDomain(domainName, DomainManagementPolicy.UPDATE, sdb); assertTrue(manager.exists(domainName, sdb)); // cleanup manager.dropDomain(domainName, sdb); } @Test public void manageDomains_with_UPDATE_should_use_default_UPDATE_policy() { final String domainName = getDomainName("test_domain_update"); DomainManager manager = new DomainManager(); manager.manageDomain(domainName, null, sdb); assertTrue(manager.exists(domainName, sdb)); manager.dropDomain(domainName, sdb); } @Test public void managing_same_domain_more_than_once_should_return_false() { final String domainName = getDomainName("test_domain_multiple"); DomainManager manager = new DomainManager(); boolean result = manager.manageDomain(domainName, null, sdb); assertTrue(result); result = manager.manageDomain(domainName, null, sdb); assertFalse(result); } @Test(expected = InvalidDataAccessApiUsageException.class) public void manageDomain_should_throw_AmazonClientException_translated_to_spring_dao_core_exception() { DomainManager manager = new DomainManager(); manager.dropDomain(null, sdb); } private String getDomainName(final String domain) { return System.getProperty("user.name") + "." + domain; } }