package crmdna.teacher; import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; import com.google.appengine.tools.development.testing.LocalServiceTestHelper; import com.googlecode.objectify.ObjectifyFilter; import crmdna.client.Client; import crmdna.common.api.APIException; import crmdna.common.api.APIResponse.Status; import crmdna.group.Group.GroupProp; import crmdna.teacher.Teacher.TeacherProp; import crmdna.user.User; import crmdna.user.User.ClientLevelPrivilege; 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 TeacherTest { private final LocalServiceTestHelper datastoreHelper = new LocalServiceTestHelper( new LocalDatastoreServiceTestConfig().setApplyAllHighRepJobPolicy()); private final String client = "isha"; private final String invalidClient = "invalid"; private final String validUser = "valid@login.com"; private final String userWithPermission = "withpermission@login.com"; private GroupProp sgp, kl, iyc; @Before public void setUp() { datastoreHelper.setUp(); ObjectifyFilter.complete(); Client.create(client); sgp = crmdna.group.Group.create(client, "Singapore", User.SUPER_USER); assertEquals(1, sgp.groupId); kl = crmdna.group.Group.create(client, "KL", User.SUPER_USER); assertEquals(2, kl.groupId); iyc = crmdna.group.Group.create(client, "Isha Yoga Center", User.SUPER_USER); assertEquals(3, iyc.groupId); User.create(client, validUser, sgp.groupId, User.SUPER_USER); assertEquals(1, User.get(client, validUser).toProp(client).userId); User.create(client, userWithPermission, sgp.groupId, User.SUPER_USER); assertEquals(2, User.get(client, userWithPermission).toProp(client).userId); User.addClientLevelPrivilege(client, userWithPermission, ClientLevelPrivilege.UPDATE_TEACHER, User.SUPER_USER); } @After public void tearDown() { ObjectifyFilter.complete(); datastoreHelper.tearDown(); } @Test public void createTest() { try { Teacher.create(invalidClient, "", "", "ramesh.c@ishafoundation.org", sgp.groupId, userWithPermission); assertTrue(false); } catch (APIException ex) { assertEquals("error for invalid client", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } try { Teacher.create(client, "", "", "ramesh.c@ishafoundation.org", sgp.groupId, validUser); assertTrue(false); } catch (APIException ex) { assertEquals("user needs permission to create", Status.ERROR_INSUFFICIENT_PERMISSION, ex.statusCode); } TeacherProp teacherProp = Teacher.create(client, "", "", "ramesh.c@IshaFoundation.org", sgp.groupId, userWithPermission); teacherProp = Teacher.safeGet(client, teacherProp.teacherId).toProp(); assertEquals("first id is 1", 1, teacherProp.teacherId); assertEquals("email saved correctly in lower case", "ramesh.c@ishafoundation.org", teacherProp.email); assertEquals("group id saved correctly", sgp.groupId, teacherProp.groupId); // cannot create duplicate try { Teacher.create(client, "", "", "ramesh.c@ishaFoundation.ORG", sgp.groupId, userWithPermission); assertTrue(false); } catch (APIException ex) { assertEquals("cannot create duplicate", Status.ERROR_RESOURCE_ALREADY_EXISTS, ex.statusCode); } teacherProp = Teacher.create(client, "", "", "rams@ishafoundation.org", sgp.groupId, userWithPermission); teacherProp = Teacher.safeGet(client, teacherProp.teacherId).toProp(); assertEquals("id assigned in sequence", 2, teacherProp.teacherId); try { Teacher.create(client, "", "", "bademail", sgp.groupId, userWithPermission); assertTrue(false); } catch (APIException ex) { assertEquals("email should be valid", Status.ERROR_RESOURCE_INCORRECT, ex.statusCode); } } @Test public void safeGetTest() { try { Teacher.safeGet(invalidClient, 1); assertTrue(false); } catch (APIException ex) { assertEquals("client should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } try { Teacher.safeGet(client, 1); assertTrue(false); } catch (APIException ex) { assertEquals("teacher id should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } TeacherProp teacherProp = Teacher.create(client, "", "", "ramS@ishafoundation.org", sgp.groupId, userWithPermission); teacherProp = Teacher.safeGet(client, teacherProp.teacherId).toProp(); assertEquals("first id is 1", 1, teacherProp.teacherId); assertEquals("email saved correctly in lower case", "rams@ishafoundation.org", teacherProp.email); } @Test public void safeGetByIdOrEmailTest() { try { Teacher.safeGetByIdOrEmail(invalidClient, "rams@ishafoundation.org"); assertTrue(false); } catch (APIException ex) { assertEquals("client should exist", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } try { Teacher.safeGetByIdOrEmail(client, "rams@ishafoundation.org"); assertTrue(false); } catch (APIException ex) { assertEquals("teacher email should exist", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } TeacherProp teacherProp = Teacher.create(client, "", "", "ramS@ishafoundation.org", sgp.groupId, userWithPermission); teacherProp = Teacher.safeGetByIdOrEmail(client, "rams@ishafoundation.org").toProp(); assertEquals("first id is 1", 1, teacherProp.teacherId); assertEquals("email saved correctly in lower case", "rams@ishafoundation.org", teacherProp.email); teacherProp = Teacher.safeGetByIdOrEmail(client, teacherProp.teacherId + "").toProp(); assertEquals("get by id", 1, teacherProp.teacherId); assertEquals("get by id", "rams@ishafoundation.org", teacherProp.email); } @Test public void updateTest() { Teacher.create(client, "", "", "ramS@ishafoundation.org", sgp.groupId, userWithPermission); Teacher.create(client, "", "", "ramesh.c@ishayoga.org", sgp.groupId, userWithPermission); try { Teacher.update(invalidClient, 1, null, null, userWithPermission); assertTrue(false); } catch (APIException ex) { assertEquals("client should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } try { Teacher.update(client, 1, null, null, validUser); assertTrue(false); } catch (APIException ex) { assertEquals("user should have permission", Status.ERROR_INSUFFICIENT_PERMISSION, ex.statusCode); } try { Teacher.update(client, 100, null, null, userWithPermission); assertTrue(false); } catch (APIException ex) { assertEquals("teacher id should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } // can update only group id Teacher.update(client, 1, null, iyc.groupId, userWithPermission); TeacherProp teacherProp = Teacher.safeGet(client, 1).toProp(); assertEquals(1, teacherProp.teacherId); assertEquals("email unaffected", "rams@ishafoundation.org", teacherProp.email); assertEquals("group id changed", iyc.groupId, teacherProp.groupId); // can update only email Teacher.update(client, 1, "ramasamy.puLLappan@ishafoundation.org", null, userWithPermission); teacherProp = Teacher.safeGet(client, 1).toProp(); assertEquals(1, teacherProp.teacherId); assertEquals("email changed", "ramasamy.pullappan@ishafoundation.org", teacherProp.email); assertEquals("group id not changed", iyc.groupId, teacherProp.groupId); // can update both email and group id Teacher.update(client, 2, "ramesh.c@ishafoundatIOn.org", iyc.groupId, userWithPermission); teacherProp = Teacher.safeGet(client, 2).toProp(); assertEquals(2, teacherProp.teacherId); assertEquals("email changed", "ramesh.c@ishafoundation.org", teacherProp.email); assertEquals("group id changed", iyc.groupId, teacherProp.groupId); try { Teacher.update(client, 2, "bademail", sgp.groupId, userWithPermission); assertTrue(false); } catch (APIException ex) { assertEquals("email should be valid", Status.ERROR_RESOURCE_INCORRECT, ex.statusCode); } } @Test public void getAllTest() { try { Teacher.getAll(invalidClient); assertTrue(false); } catch (APIException ex) { assertEquals("client should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode); } List<TeacherProp> teacherProps = Teacher.getAll(client); assertEquals("getAll works when no teachers are present", 0, teacherProps.size()); Teacher.create(client, "", "", "ramasamy.pullappan@ishafoundation.org", sgp.groupId, userWithPermission); Teacher.create(client, "", "", "ramesh.c@ishafoundation.org", sgp.groupId, userWithPermission); teacherProps = Teacher.getAll(client); assertEquals("all teachers returned", 2, teacherProps.size()); // should be sorted assertEquals("email is correct", "ramasamy.pullappan@ishafoundation.org", teacherProps.get(0).email); assertEquals("group id is correct", sgp.groupId, teacherProps.get(0).groupId); assertEquals("email is correct", "ramesh.c@ishafoundation.org", teacherProps.get(1).email); assertEquals("group id is correct", sgp.groupId, teacherProps.get(1).groupId); } }