package crmdna.client; import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; import com.google.appengine.tools.development.testing.LocalServiceTestHelper; import com.googlecode.objectify.ObjectifyFilter; import crmdna.client.CustomFields.CustomFieldProp; import crmdna.common.api.APIException; import crmdna.common.api.APIResponse.Status; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class CustomFieldsTest { private final LocalServiceTestHelper datastoreHelper = new LocalServiceTestHelper( new LocalDatastoreServiceTestConfig().setApplyAllHighRepJobPolicy()); @Before public void setUp() { datastoreHelper.setUp(); ObjectifyFilter.complete(); } @After public void tearDown() { ObjectifyFilter.complete(); datastoreHelper.tearDown(); } @Test public void createTest() { ClientProp client = Client.create("Isha"); CustomFields.create(client.name, "singapore nric"); CustomFields.create(client.name, "international passport"); CustomFields.create(client.name, "indian pan number"); List<CustomFieldProp> props = CustomFields.getAll(client.name); assertEquals(3, props.size()); assertEquals(0, props.get(0).id); assertEquals("singapore nric", props.get(0).name); assertEquals(true, props.get(0).enabled); assertEquals(1, props.get(1).id); assertEquals("international passport", props.get(1).name); assertEquals(true, props.get(1).enabled); assertEquals(2, props.get(2).id); assertEquals("indian pan number", props.get(2).name); assertEquals(true, props.get(2).enabled); // cannot create duplicate try { CustomFields.create(client.name, "Singapore NRIC"); assertTrue(false); } catch (APIException ex) { assertEquals(Status.ERROR_RESOURCE_ALREADY_EXISTS, ex.statusCode); } // cannot add custom field to a non existent client try { CustomFields.create("dummy client", "Singapore NRIC"); assertTrue(false); } catch (APIException ex) { assertEquals(Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } } @Test public void getAllTest() { ClientProp client = Client.create("Isha"); // empty list when no custom fields are present List<CustomFieldProp> props = CustomFields.getAll(client.name); assertEquals(0, props.size()); CustomFields.create(client.name, "singapore nric"); CustomFields.create(client.name, "international passport"); CustomFields.create(client.name, "indian pan number"); props = CustomFields.getAll(client.name); assertEquals(3, props.size()); assertEquals(0, props.get(0).id); assertEquals("singapore nric", props.get(0).name); assertEquals(true, props.get(0).enabled); assertEquals(1, props.get(1).id); assertEquals("international passport", props.get(1).name); assertEquals(true, props.get(1).enabled); assertEquals(2, props.get(2).id); assertEquals("indian pan number", props.get(2).name); assertEquals(true, props.get(2).enabled); // exception for non existent client try { CustomFields.getAll("dummy client"); assertTrue(false); } catch (APIException ex) { assertEquals(Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } } @Test public void updateTest() { ClientProp client = Client.create("Isha"); // cannot update when no custom fields are present try { CustomFields.update(client.name, 3, "newFieldName", true); } catch (APIException ex) { assertEquals(Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } CustomFields.create(client.name, "singapore nric"); // 0 CustomFields.create(client.name, "international passport"); // 1 CustomFields.create(client.name, "indian pan number"); // 2 // cannot update non existent field id try { CustomFields.update(client.name, 6, "newFieldName", true); } catch (APIException ex) { assertEquals(Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } // cannot rename to an another field try { CustomFields.update(client.name, 0, "International Passport", true); } catch (APIException ex) { assertEquals(Status.ERROR_RESOURCE_ALREADY_EXISTS, ex.statusCode); } // can change case CustomFields.update(client.name, 0, "Singapore NRIC", true); CustomFieldProp prop = CustomFields.getAll(client.name).get(0); assertEquals(0, prop.id); assertEquals("Singapore NRIC", prop.name); assertEquals(true, prop.enabled); // can disable a field CustomFields.update(client.name, 2, "Indian PAN No", false); prop = CustomFields.getAll(client.name).get(2); assertEquals(2, prop.id); assertEquals("Indian PAN No", prop.name); assertEquals(false, prop.enabled); // can enable a field CustomFields.update(client.name, 2, "Indian PAN No", true); prop = CustomFields.getAll(client.name).get(2); assertEquals(2, prop.id); assertEquals("Indian PAN No", prop.name); assertEquals(true, prop.enabled); // null should preserve existing value CustomFields.update(client.name, 2, "Indian PAN No.", null); prop = CustomFields.getAll(client.name).get(2); assertEquals(2, prop.id); assertEquals("Indian PAN No.", prop.name); assertEquals(true, prop.enabled); CustomFields.update(client.name, 2, null, false); prop = CustomFields.getAll(client.name).get(2); assertEquals(2, prop.id); assertEquals("Indian PAN No.", prop.name); assertEquals(false, prop.enabled); CustomFields.update(client.name, 2, null, null); prop = CustomFields.getAll(client.name).get(2); assertEquals(2, prop.id); assertEquals("Indian PAN No.", prop.name); assertEquals(false, prop.enabled); } }