package crmdna.client; import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; import com.google.appengine.tools.development.testing.LocalServiceTestHelper; import com.google.gson.Gson; import com.googlecode.objectify.ObjectifyFilter; import crmdna.common.Utils; import crmdna.common.api.APIException; import crmdna.common.api.APIResponse.Status; import crmdna.mail2.Mail; import crmdna.user.User; import crmdna.user.UserEntity; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.List; import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class ClientTest { private final LocalServiceTestHelper helper = new LocalServiceTestHelper( new LocalDatastoreServiceTestConfig().setApplyAllHighRepJobPolicy()); @Before public void setUp() { helper.setUp(); } @After public void tearDown() { ObjectifyFilter.complete(); helper.tearDown(); } @Test public void createTest() { ClientProp clientProp = Client.create("Isha"); assertEquals("isha", clientProp.name); assertEquals("Isha", clientProp.displayName); ClientEntity clientEntity = Client.safeGet(clientProp.name); // should not throw exception assertTrue(clientEntity.name.equals("isha")); assertTrue(clientEntity.displayName.equals("Isha")); // cannot create the same name again try { clientProp = Client.create("Isha"); assertTrue(false); } catch (APIException ex) { assertTrue(ex.statusCode == Status.ERROR_RESOURCE_ALREADY_EXISTS); } // cannot create in different case try { clientProp = Client.create("iSHa"); assertTrue(false); } catch (APIException ex) { assertTrue(ex.statusCode == Status.ERROR_RESOURCE_ALREADY_EXISTS); } // big name should get truncated clientProp = Client.create("Isha Foundation"); System.out.println("entity: " + new Gson().toJson(clientProp)); assertEquals("isha fou", clientProp.name); assertEquals("Isha Foundation", clientProp.displayName); // cannot create same name again try { clientProp = Client.create("Isha Foundation Yoga"); assertTrue(false); } catch (APIException e) { assertEquals(Status.ERROR_RESOURCE_ALREADY_EXISTS, e.statusCode); } } @Test public void safeGetTest() { ClientProp clientProp = Client.create("Isha"); clientProp = Client.safeGet("isha").toProp(); // should not throw exception assertTrue(clientProp.name.equals("isha")); assertTrue(clientProp.displayName.equals("Isha")); // exception for non existant client try { Client.safeGet("nonexist"); // non existant assertTrue(false); } catch (APIException ex) { assertEquals(Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } // exception when client is null try { Client.safeGet(null); // non existant assertTrue(false); } catch (APIException ex) { assertEquals(Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } } @Test public void getTest() { assertTrue(false); } @Test public void getEntitiesTest() { Client.create("isha"); Client.create("barclays"); ObjectifyFilter.complete(); Map<String, ClientEntity> map = Client.getEntities(Utils.getSet("isha", "barclays", "dummy")); assertEquals(2, map.size()); assertTrue(map.containsKey("isha")); assertTrue(map.containsKey("barclays")); } @Test public void updateDisplayName() { ClientProp clientProp = Client.create("Isha"); assertEquals("isha", clientProp.name); clientProp = Client.updateDisplayName("isha", "Isha Foundation"); clientProp = Client.safeGet("isha").toProp(); assertTrue(clientProp.name.equals("isha")); assertTrue(clientProp.displayName.equals("Isha Foundation")); } @Test public void ensureValidClientTest() { // throws exception is client does not exist try { Client.ensureValid("isha"); // non existant assertTrue(false); } catch (APIException ex) { assertEquals(Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } Client.create("isha"); Client.ensureValid("isha"); // no exception } @Test public void getAllTest() { List<ClientProp> all = Client.getAll(); assertEquals(0, all.size()); Client.create("Isha Foundation"); Client.create("Barclays Capital"); all = Client.getAll(); assertEquals(2, all.size()); // should be sorted by name assertEquals("barclays", all.get(0).name); assertEquals("Barclays Capital", all.get(0).displayName); assertEquals("isha fou", all.get(1).name); assertEquals("Isha Foundation", all.get(1).displayName); } @Test public void addUserTest() { ClientProp clientProp = Client.create("isha"); assertEquals("isha", clientProp.name); String email = "sai@ishafoundation.org"; Client.addUser("isha", email); ObjectifyFilter.complete(); assertEquals("isha", CrmDnaUser.getClients(email).first().name); List<UserEntity> users = Client.getAllUsers("isha"); assertEquals(1, users.size()); assertTrue(users.get(0).email.equals(email)); String email2 = "sathyanarayanant@gmail.com"; Client.addUser("isha", email2); Client.addUser("isha", email); ObjectifyFilter.complete(); users = Client.getAllUsers("isha"); assertEquals(2, users.size()); assertEquals(email, users.get(0).email); assertEquals(email2, users.get(1).email); } @Test public void deleteUserTest() { ClientProp clientProp = Client.create("isha"); assertEquals("isha", clientProp.name); String email = "sathya.t@ishafoundation.org"; Client.addUser("isha", email); ObjectifyFilter.complete(); assertEquals("isha", CrmDnaUser.getClients(email).first().name); // now delete it Client.deleteUser("isha", email); ObjectifyFilter.complete(); assertEquals(0, CrmDnaUser.getClients(email).size()); List<UserEntity> users = Client.getAllUsers("isha"); System.out.println("users: " + new Gson().toJson(users)); assertEquals(0, users.size()); // can delete the user again Client.deleteUser("isha", email); // no exception } @Test public void getAllUsersTest() { ClientProp clientProp = Client.create("isha"); assertEquals("isha", clientProp.name); Client.addUser("isha", "email2@email.com"); Client.addUser("isha", "email3@email.com"); Client.addUser("isha", "email1@email.com"); ObjectifyFilter.complete(); List<UserEntity> users = Client.getAllUsers("isha"); assertEquals(3, users.size()); List<UserEntity> list = new ArrayList<>(); list.addAll(users); assertEquals("email1@email.com", list.get(0).email); assertEquals("email2@email.com", list.get(1).email); assertEquals("email3@email.com", list.get(2).email); } @Test public void safeGetSenderNameFromEmailTest() { String client = "isha"; Client.create(client); Client.addOrDeleteAllowedEmailSender(client, "info@ishayoga.org", "Isha Yoga", true, User.SUPER_USER); String name = Client.safeGetSenderNameFromEmail(client, "info@ishayoga.org"); assertEquals("Isha Yoga", name); try { Client.safeGetSenderNameFromEmail(client, "dummy@dummy.com"); assertTrue(false); } catch (APIException ex) { assertEquals(Status.ERROR_RESOURCE_INCORRECT, ex.statusCode); } } }