package crmdna.program;
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.Utils.Currency;
import crmdna.common.api.APIException;
import crmdna.common.api.APIResponse.Status;
import crmdna.group.Group.GroupProp;
import crmdna.practice.Practice;
import crmdna.practice.Practice.PracticeProp;
import crmdna.programtype.ProgramType;
import crmdna.programtype.ProgramTypeProp;
import crmdna.teacher.Teacher;
import crmdna.teacher.Teacher.TeacherProp;
import crmdna.user.User;
import crmdna.user.User.GroupLevelPrivilege;
import crmdna.venue.Venue;
import crmdna.venue.Venue.VenueProp;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class ProgramTest {
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 sgpUser = "sgpuser@login.com";
private final String klUser = "kluser@login.com";
private final String sgpAndKlUser = "sgpandkl@login.com";
GroupProp sgp;
GroupProp kl;
PracticeProp suryaNamaskar;
PracticeProp yogaAsanas;
PracticeProp shambhavi;
PracticeProp aumChanting;
PracticeProp ishaKriya;
ProgramTypeProp innerEngineering7Day;
ProgramTypeProp suryaNamaskarAndAsanas;
ProgramTypeProp ishaKriyaTeacherLed;
VenueProp giis;
VenueProp chaichee;
VenueProp gujarathiBhavan;
VenueProp yuhuaCC;
VenueProp woodlandsCC;
TeacherProp tina;
TeacherProp thulasi;
TeacherProp sathya;
@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);
User.create(client, validUser, sgp.groupId, User.SUPER_USER);
assertEquals(1, User.get(client, validUser).toProp(client).userId);
User.create(client, sgpUser, sgp.groupId, User.SUPER_USER);
assertEquals(2, User.get(client, sgpUser).toProp(client).userId);
User.addGroupLevelPrivilege(client, sgp.groupId, sgpUser, GroupLevelPrivilege.UPDATE_PROGRAM,
User.SUPER_USER);
User.addGroupLevelPrivilege(client, sgp.groupId, sgpUser, GroupLevelPrivilege.CHECK_IN,
User.SUPER_USER);
User.create(client, klUser, kl.groupId, User.SUPER_USER);
assertEquals(3, User.get(client, klUser).toProp(client).userId);
User.addGroupLevelPrivilege(client, kl.groupId, klUser, GroupLevelPrivilege.UPDATE_PROGRAM,
User.SUPER_USER);
User.addGroupLevelPrivilege(client, kl.groupId, klUser, GroupLevelPrivilege.CHECK_IN,
User.SUPER_USER);
User.create(client, sgpAndKlUser, sgp.groupId, User.SUPER_USER);
assertEquals(4, User.get(client, sgpAndKlUser).toProp(client).userId);
User.addGroupLevelPrivilege(client, sgp.groupId, sgpAndKlUser, GroupLevelPrivilege.CHECK_IN,
User.SUPER_USER);
User.addGroupLevelPrivilege(client, kl.groupId, sgpAndKlUser, GroupLevelPrivilege.CHECK_IN,
User.SUPER_USER);
suryaNamaskar = Practice.create(client, "Surya Namaskar", User.SUPER_USER);
yogaAsanas = Practice.create(client, "Yoga Asanas", User.SUPER_USER);
shambhavi = Practice.create(client, "Shambhavi", User.SUPER_USER);
ishaKriya = Practice.create(client, "Isha Kriya", User.SUPER_USER);
aumChanting = Practice.create(client, "Aum Chanting", User.SUPER_USER);
Set<Long> practiceIds = new HashSet<>();
practiceIds.add(shambhavi.practiceId);
practiceIds.add(aumChanting.practiceId);
innerEngineering7Day =
ProgramType.create(client, "Inner Engineering 7 day", practiceIds, User.SUPER_USER);
practiceIds.clear();
practiceIds.add(suryaNamaskar.practiceId);
practiceIds.add(yogaAsanas.practiceId);
suryaNamaskarAndAsanas =
ProgramType.create(client, "Hata Yoga (Surya Namaskar & Asanas)", practiceIds,
User.SUPER_USER);
practiceIds.clear();
practiceIds.add(ishaKriya.practiceId);
ishaKriyaTeacherLed = ProgramType.create(client, "Isha Kriya", practiceIds, User.SUPER_USER);
giis = Venue.create(client, "GIIS", "GIIS", sgp.groupId, User.SUPER_USER);
chaichee = Venue.create(client, "Chai Chee", "Chai Chee", sgp.groupId, User.SUPER_USER);
gujarathiBhavan =
Venue.create(client, "Gujarathi Bhavan", "Gujarathi Bhavan", sgp.groupId, User.SUPER_USER);
yuhuaCC = Venue.create(client, "Yuhua CC", "Yuhua CC", sgp.groupId, User.SUPER_USER);
woodlandsCC =
Venue.create(client, "Woodlands CC", "Woodlands CC", sgp.groupId, User.SUPER_USER);
tina = Teacher.create(client, "", "", "tina@ishafoundation.org", sgp.groupId, User.SUPER_USER);
thulasi = Teacher.create(client, "", "", "thulasidhar@gmail.com", sgp.groupId, User.SUPER_USER);
sathya = Teacher.create(client, "", "", "sathya.t@ishafoundation.org", sgp.groupId, User.SUPER_USER);
}
@After
public void tearDown() {
ObjectifyFilter.complete();
datastoreHelper.tearDown();
}
@Test
public void createTest() {
try {
Program.create(invalidClient, sgp.groupId, ishaKriyaTeacherLed.programTypeId,
yuhuaCC.venueId, sathya.teacherId, 20131229, 20131229, 1, null, 0, null, klUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("client should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
// user should have permission to create program for a group
try {
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131229, 1, null, 0, null, klUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("user should have permission", Status.ERROR_INSUFFICIENT_PERMISSION,
ex.statusCode);
}
// group id should be valid
try {
Program.create(client, sgp.groupId + 1000, ishaKriyaTeacherLed.programTypeId,
yuhuaCC.venueId, sathya.teacherId, 20131229, 20131229, 1, null, 0, null, User.SUPER_USER);
assertTrue(false);
} catch (APIException ex) {
assertEquals("group id should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
// teacher should be valid
try {
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId + 1000, 20131229, 20131229, 1, null, 0, null, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("teacher id should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
// program type should be valid
try {
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId + 100, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131229, 1, null, 0, null, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("program type should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
// venue should be valid
try {
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId + 100,
sathya.teacherId, 20131229, 20131229, 1, null, 0, null, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("venue should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
// start date and end date should be correct format
try {
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 29122013, 29122013, 1, null, 0, null, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("start date should be in yyyymmdd", Status.ERROR_RESOURCE_INCORRECT,
ex.statusCode);
}
// start date should be lesser than or equal to end date
try {
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131228, 1, null, 0, null, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("start date should be on or before end date", Status.ERROR_RESOURCE_INCORRECT,
ex.statusCode);
}
// num batches should be valid
try {
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131229, -1, null, 0, null, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("batch should be valid", Status.ERROR_RESOURCE_INCORRECT, ex.statusCode);
}
// fees cannot be negative
try {
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131229, -1, null, -150, null, sgpUser); // negative
// fees
assertTrue(false);
} catch (APIException ex) {
assertEquals("fees cannot be negative", Status.ERROR_RESOURCE_INCORRECT, ex.statusCode);
}
// ccy cannot be null when fees is specified
try {
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131229, -1, null, 150, null, sgpUser); // null
// ccy
assertTrue(false);
} catch (APIException ex) {
assertEquals("ccy cannot be null when fees is specified", Status.ERROR_RESOURCE_INCORRECT,
ex.statusCode);
}
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131229, 2, null, 150, Currency.SGD, sgpUser);
List<ProgramProp> programProps = Program.query(client, null, null, null, null, null, 100);
// specifying null should return all programs
assertEquals(1, programProps.size());
ProgramProp programProp = programProps.get(0);
assertEquals(1, programProp.programId);
assertEquals(ishaKriyaTeacherLed.programTypeId, programProp.programTypeProp.programTypeId);
assertEquals(yuhuaCC.venueId, programProp.venueProp.venueId);
assertEquals(sathya.teacherId, programProp.teacherProp.teacherId);
assertEquals(20131229, programProp.startYYYYMMDD);
assertEquals(20131229, programProp.endYYYYMMDD);
assertEquals(2, programProp.numBatches);
assertEquals(null, programProp.description);
assertEquals("Isha Kriya 29 Dec 13 @ Yuhua CC", programProp.name);
assertTrue(150 == programProp.fee);
assertEquals(Currency.SGD, programProp.ccy);
// cannot create duplicate
try {
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131229, 1, null, 0, null, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("cannot create duplicate", Status.ERROR_RESOURCE_ALREADY_EXISTS, ex.statusCode);
}
// fees can be zero.
programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20140105, 20140105, 2, null, 0, null, sgpUser);
assertTrue(0.0 == programProp.fee);
assertEquals(null, programProp.ccy);
}
@Test
public void getTest() {
ProgramProp programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131229, 1, null, 0, null, sgpUser);
assertEquals(1, programProp.programId);
programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, woodlandsCC.venueId,
sathya.teacherId, 20131229, 20131229, 1, null, 0, null, sgpUser);
assertEquals(2, programProp.programId);
List<Long> programIds = new ArrayList<>();
programIds.add((long) 1);
programIds.add((long) 2);
programIds.add((long) 3); // non existing
Map<Long, ProgramProp> map = Program.getProps(client, programIds);
assertEquals(2, map.size());
assertEquals(yuhuaCC.venueId, map.get(1l).venueProp.venueId);
assertEquals(woodlandsCC.venueId, map.get(2l).venueProp.venueId);
assertEquals(null, map.get(3));
// simple get
programProp = Program.get(client, 1).toProp(client);
assertTrue(programProp != null);
assertEquals(1, programProp.programId);
// should return null for non existent program id
assertTrue(null == Program.get(client, 1002)); // non existent
}
@Test
public void safeGetTest() {
ProgramProp programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131229, 1, null, 0, null, sgpUser);
ProgramEntity programEntity = Program.safeGet(client, programProp.programId);
assertEquals(sgp.groupId, programEntity.groupId);
assertEquals(ishaKriyaTeacherLed.programTypeId, programEntity.programTypeId);
assertEquals(yuhuaCC.venueId, programEntity.venueId);
assertEquals(sathya.teacherId, programEntity.teacherId);
programProp = programEntity.toProp(client);
assertEquals(1, programProp.programId);
assertEquals(ishaKriyaTeacherLed.programTypeId, programProp.programTypeProp.programTypeId);
assertEquals(yuhuaCC.venueId, programProp.venueProp.venueId);
assertEquals(sathya.teacherId, programProp.teacherProp.teacherId);
assertEquals(20131229, programProp.startYYYYMMDD);
assertEquals(20131229, programProp.endYYYYMMDD);
assertEquals(null, programProp.description);
assertEquals("Isha Kriya 29 Dec 13 @ Yuhua CC", programProp.name);
}
@Test
public void updateTest() {
ProgramProp programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131229, 1, null, 0, null, sgpUser);
assertEquals(1, programProp.programId);
// can pass null for non changing values
assertEquals(sathya.teacherId, programProp.teacherProp.teacherId);
Program.update(client, programProp.programId, null, tina.teacherId, null, null, null,
"after update 1", null, null, sgpUser);
programProp = Program.safeGet(client, programProp.programId).toProp(client);
assertEquals(tina.teacherId, programProp.teacherProp.teacherId);
assertEquals("after update 1", programProp.description);
// change batch to 2 and venue to woodlands
Program.update(client, programProp.programId, woodlandsCC.venueId, null, null, null, 2, null,
null, null, sgpUser);
ProgramEntity programEntity = Program.safeGet(client, programProp.programId);
assertEquals(woodlandsCC.venueId, programEntity.venueId);
programProp = programEntity.toProp(client);
assertEquals(1, programProp.programId);
assertEquals(tina.teacherId, programProp.teacherProp.teacherId);
assertEquals(woodlandsCC.venueId, programProp.venueProp.venueId);
assertEquals(20131229, programProp.startYYYYMMDD);
assertEquals(20131229, programProp.endYYYYMMDD);
assertEquals(2, programProp.numBatches);
assertEquals("after update 1", programProp.description);
// change fees to 10 SGD
Program.update(client, programProp.programId, woodlandsCC.venueId, null, null, null, 2, null,
10.0, Currency.SGD, sgpUser);
programProp = Program.safeGet(client, programProp.programId).toProp(client);
assertTrue(10.0 == programProp.fee);
assertEquals(Currency.SGD, programProp.ccy);
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, woodlandsCC.venueId,
sathya.teacherId, 20140105, 20140105, 1, null, 0, null, sgpUser);
// cannot update to another existing program
try {
Program.update(client, programProp.programId, woodlandsCC.venueId, sathya.teacherId,
20140105, 20140105, 1, null, null, null, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals(Status.ERROR_RESOURCE_ALREADY_EXISTS, ex.statusCode);
}
// basic validation checks
programProp =
Program.create(client, sgp.groupId, suryaNamaskarAndAsanas.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20140101, 20140103, 1, null, 0, null, sgpUser);
try {
Program.update(client, programProp.programId, (long) 100, null, null, null, null, null, null,
null, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("Venue should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
try {
Program.update(client, programProp.programId, (long) 100, null, null, null, null, null, null,
null, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("Teacher should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
try {
Program.update(client, programProp.programId, null, null, null, null, -2, null, null, null,
sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("NumBatches cannot be negative", Status.ERROR_RESOURCE_INCORRECT, ex.statusCode);
}
try {
Program.update(client, programProp.programId, null, null, 20140101, 20131231, null, null,
null, null, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("Start and end dates should be valid", Status.ERROR_RESOURCE_INCORRECT,
ex.statusCode);
}
}
@Test
public void setSpecialInstructionTest() {
try {
Program.setSpecialInstruction(invalidClient, 100, "special instruction");
assertTrue(false);
} catch (APIException ex) {
assertEquals("client should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
try {
Program.setSpecialInstruction(client, 100, "special instruction");
assertTrue(false);
} catch (APIException ex) {
assertEquals("program Id should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
ProgramProp programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131229, 1, null, 0, null, sgpUser);
assertEquals(1, programProp.programId);
assertEquals(null, programProp.specialInstruction);
programProp =
Program.setSpecialInstruction(client, programProp.programId, "special instruction");
assertEquals("special instruction", programProp.specialInstruction);
// null should preserve existing value
Program.setSpecialInstruction(client, programProp.programId, null);
programProp = Program.safeGet(client, programProp.programId).toProp(client);
assertEquals("special instruction", programProp.specialInstruction);
}
@Test
public void setSessionTimingsTest() {
try {
Program.setSessionTimings(invalidClient, 100, null, null, null, null, null);
assertTrue(false);
} catch (APIException ex) {
assertEquals("client should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
try {
Program.setSessionTimings(client, 100, null, null, null, null, null);
assertTrue(false);
} catch (APIException ex) {
assertEquals("program Id should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
ProgramProp programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131229, 1, null, 0, null, sgpUser);
assertEquals(1, programProp.programId);
assertEquals(null, programProp.batch1SessionTimings);
assertEquals(null, programProp.batch2SessionTimings);
assertEquals(null, programProp.batch3SessionTimings);
assertEquals(null, programProp.batch4SessionTimings);
assertEquals(null, programProp.batch5SessionTimings);
List<String> b1Timings = new ArrayList<>();
b1Timings.add("10am - 11am");
List<String> b2Timings = new ArrayList<>();
b2Timings.add("12pm - 1pm");
List<String> b3Timings = new ArrayList<>();
b3Timings.add("2pm - 3pm");
List<String> b4Timings = new ArrayList<>();
b4Timings.add("4pm - 5pm");
List<String> b5Timings = new ArrayList<>();
b5Timings.add("6pm - 7pm");
programProp =
Program.setSessionTimings(client, 1, b1Timings, b2Timings, b3Timings, b4Timings, b5Timings);
assertEquals(b1Timings.size(), programProp.batch1SessionTimings.size());
assertEquals(b1Timings.get(0), programProp.batch1SessionTimings.get(0));
// there is only one batch. other timings should be ignored
assertEquals(null, programProp.batch2SessionTimings);
assertEquals(null, programProp.batch3SessionTimings);
assertEquals(null, programProp.batch4SessionTimings);
assertEquals(null, programProp.batch5SessionTimings);
// change program to have 4 batches
programProp = Program.update(client, 1l, null, null, null, null, 4, null, 0.0, null, sgpUser);
assertEquals(4, programProp.numBatches);
programProp =
Program.setSessionTimings(client, 1, b1Timings, b2Timings, b3Timings, b4Timings, b5Timings);
assertEquals(b1Timings.size(), programProp.batch1SessionTimings.size());
assertEquals(b1Timings.get(0), programProp.batch1SessionTimings.get(0));
assertEquals(b2Timings.size(), programProp.batch2SessionTimings.size());
assertEquals(b2Timings.get(0), programProp.batch2SessionTimings.get(0));
assertEquals(b3Timings.size(), programProp.batch3SessionTimings.size());
assertEquals(b3Timings.get(0), programProp.batch3SessionTimings.get(0));
assertEquals(b4Timings.size(), programProp.batch4SessionTimings.size());
assertEquals(b4Timings.get(0), programProp.batch4SessionTimings.get(0));
assertEquals(null, programProp.batch5SessionTimings);
b4Timings.clear();
b4Timings.add("7pm - 8pm");
// null preserves existing values
programProp = Program.setSessionTimings(client, 1, null, null, null, b4Timings, null);
assertEquals(b1Timings.size(), programProp.batch1SessionTimings.size());
assertEquals(b1Timings.get(0), programProp.batch1SessionTimings.get(0));
assertEquals(b2Timings.size(), programProp.batch2SessionTimings.size());
assertEquals(b2Timings.get(0), programProp.batch2SessionTimings.get(0));
assertEquals(b3Timings.size(), programProp.batch3SessionTimings.size());
assertEquals(b3Timings.get(0), programProp.batch3SessionTimings.get(0));
assertEquals(b4Timings.size(), programProp.batch4SessionTimings.size());
assertEquals(b4Timings.get(0), programProp.batch4SessionTimings.get(0));
assertEquals(null, programProp.batch5SessionTimings);
}
@Test
public void queryTest() {
try {
Program.query(invalidClient, null, null, null, null, null, 10);
assertTrue(false);
} catch (APIException ex) {
assertEquals("client should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
List<ProgramProp> programProps = Program.query(client, null, null, null, null, null, 10);
assertEquals(0, programProps.size());
ProgramProp programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20131229, 20131229, 1, null, 0, null, sgpUser);
assertEquals(1, programProp.programId);
programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, woodlandsCC.venueId,
sathya.teacherId, 20131229, 20131229, 1, null, 0, null, sgpUser);
assertEquals(2, programProp.programId);
programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, woodlandsCC.venueId,
sathya.teacherId, 20140105, 20140105, 1, null, 0, null, sgpUser);
assertEquals(3, programProp.programId);
programProp =
Program.create(client, sgp.groupId, innerEngineering7Day.programTypeId, giis.venueId,
tina.teacherId, 20110505, 20110511, 1, null, 0, null, sgpUser);
assertEquals(4, programProp.programId);
programProp =
Program.create(client, kl.groupId, innerEngineering7Day.programTypeId, giis.venueId,
tina.teacherId, 20110405, 20110411, 1, null, 0, null, klUser);
assertEquals(5, programProp.programId);
// get all programs, should be sorted by -start, +program type, +group,
// +venue
programProps = Program.query(client, null, null, null, null, null, null);
assertEquals(5, programProps.size());
assertEquals(3, programProps.get(0).programId);
assertEquals(2, programProps.get(1).programId);
assertEquals(1, programProps.get(2).programId);
assertEquals(4, programProps.get(3).programId);
assertEquals(5, programProps.get(4).programId);
// limit size
programProps = Program.query(client, null, null, null, null, null, 3);
assertEquals(3, programProps.size());
assertEquals(3, programProps.get(0).programId);
assertEquals(2, programProps.get(1).programId);
assertEquals(1, programProps.get(2).programId);
// limit size to zero
programProps = Program.query(client, null, null, null, null, null, 0);
assertEquals(0, programProps.size());
// get all singapore programs
Set<Long> groupIds = new HashSet<>();
groupIds.add(sgp.groupId);
programProps = Program.query(client, null, null, null, groupIds, null, 10);
assertEquals(4, programProps.size());
assertEquals(3, programProps.get(0).programId);
assertEquals(2, programProps.get(1).programId);
assertEquals(1, programProps.get(2).programId);
assertEquals(4, programProps.get(3).programId);
// all isha kriya programs in singapore in 2014
Set<Long> ishaKriyaTeacherLedProgramTypeId = new HashSet<>();
groupIds.add(ishaKriyaTeacherLed.programTypeId);
programProps =
Program.query(client, 20140101, 20141231, ishaKriyaTeacherLedProgramTypeId, groupIds,
null, null);
assertEquals(1, programProps.size());
assertEquals(3, programProps.get(0).programId);
// get all programs in woodlands cc
programProps = Program.query(client, null, null, null, null, woodlandsCC.venueId, 10);
assertEquals(2, programProps.size());
assertEquals(3, programProps.get(0).programId);
assertEquals(2, programProps.get(1).programId);
Set<Long> innerEngineering7DayProgramTypeId = new HashSet<>();
groupIds.add(innerEngineering7Day.programTypeId);
// get all IE 7 day programs
programProps =
Program.query(client, null, null, innerEngineering7DayProgramTypeId, null, null, 10);
assertEquals(2, programProps.size());
assertEquals(4, programProps.get(0).programId);
assertEquals(5, programProps.get(1).programId);
// get all IE 7 day programs in Singapore
programProps =
Program.query(client, null, null, innerEngineering7DayProgramTypeId, groupIds, null, 10);
assertEquals(1, programProps.size());
assertEquals(4, programProps.get(0).programId);
// get all IE 7 days programs in Singapore and KL
groupIds.clear();
groupIds.add(sgp.groupId);
groupIds.add(kl.groupId);
programProps =
Program.query(client, null, null, innerEngineering7DayProgramTypeId, groupIds, null, 10);
assertEquals(2, programProps.size());
assertEquals(4, programProps.get(0).programId);
assertEquals(5, programProps.get(1).programId);
// all programs in 2011
programProps = Program.query(client, 20110101, 20111231, null, null, null, 10);
assertEquals(2, programProps.size());
assertEquals(4, programProps.get(0).programId);
assertEquals(5, programProps.get(1).programId);
// all programs after 20131229
programProps = Program.query(client, 20131229, null, null, null, null, 10);
assertEquals(3, programProps.size());
assertEquals(3, programProps.get(0).programId);
assertEquals(2, programProps.get(1).programId);
assertEquals(1, programProps.get(2).programId);
// all programs before 2014
programProps = Program.query(client, null, 20131231, null, null, null, 10);
assertEquals(4, programProps.size());
assertEquals(2, programProps.get(0).programId);
assertEquals(1, programProps.get(1).programId);
assertEquals(4, programProps.get(2).programId);
assertEquals(5, programProps.get(3).programId);
// can pass 0 sized list for groupIds
groupIds.clear();
programProps = Program.query(client, null, 20131231, null, groupIds, null, 10);
assertEquals(4, programProps.size());
assertEquals(2, programProps.get(0).programId);
assertEquals(1, programProps.get(1).programId);
assertEquals(4, programProps.get(2).programId);
assertEquals(5, programProps.get(3).programId);
}
@Test
public void getOngoingProgramsTest() {
try {
Program.getOngoingPrograms(invalidClient, 20140302, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("client should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
List<ProgramProp> programProps = Program.getOngoingPrograms(client, 20140309, sgpUser);
assertEquals(0, programProps.size());
// date should be in correct format
try {
programProps = Program.getOngoingPrograms(client, 201403029, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals(Status.ERROR_RESOURCE_INCORRECT, ex.statusCode);
}
ProgramProp programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20140309, 20140309, 1, null, 0, null, sgpUser);
assertEquals(1, programProp.programId);
programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, woodlandsCC.venueId,
sathya.teacherId, 20140309, 20140309, 1, null, 0, null, sgpUser);
assertEquals(2, programProp.programId);
programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, woodlandsCC.venueId,
sathya.teacherId, 20140316, 20140316, 1, null, 0, null, sgpUser);
assertEquals(3, programProp.programId);
programProp =
Program.create(client, sgp.groupId, innerEngineering7Day.programTypeId, giis.venueId,
tina.teacherId, 20140312, 20140318, 1, null, 0, null, sgpUser);
assertEquals(4, programProp.programId);
programProp =
Program.create(client, kl.groupId, innerEngineering7Day.programTypeId, giis.venueId,
tina.teacherId, 20140305, 20140311, 1, null, 0, null, klUser);
assertEquals(5, programProp.programId);
programProps = Program.getOngoingPrograms(client, 20140309, sgpUser);
assertEquals(2, programProps.size());
assertEquals(2, programProps.get(0).programId);
assertEquals(1, programProps.get(1).programId);
programProps = Program.getOngoingPrograms(client, 20140309, klUser);
assertEquals(1, programProps.size());
assertEquals(5, programProps.get(0).programId);
programProps = Program.getOngoingPrograms(client, 20140309, sgpAndKlUser);
assertEquals(3, programProps.size());
assertEquals(2, programProps.get(0).programId);
assertEquals(1, programProps.get(1).programId);
assertEquals(5, programProps.get(2).programId);
}
@Test
public void getOngoingSessionsTest() {
try {
Program.getOngoingSessions(invalidClient, 20140302, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("client should be valid", Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
List<SessionProp> sessionProps = Program.getOngoingSessions(client, 20140309, sgpUser);
assertEquals(0, sessionProps.size());
// date should be in correct format
try {
sessionProps = Program.getOngoingSessions(client, 201403029, sgpUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals(Status.ERROR_RESOURCE_INCORRECT, ex.statusCode);
}
ProgramProp programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, yuhuaCC.venueId,
sathya.teacherId, 20140309, 20140309, 1, null, 0, null, sgpUser);
assertEquals(1, programProp.programId);
programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, woodlandsCC.venueId,
sathya.teacherId, 20140309, 20140309, 1, null, 0, null, sgpUser);
assertEquals(2, programProp.programId);
programProp =
Program.create(client, sgp.groupId, ishaKriyaTeacherLed.programTypeId, woodlandsCC.venueId,
sathya.teacherId, 20140316, 20140316, 1, null, 0, null, sgpUser);
assertEquals(3, programProp.programId);
programProp =
Program.create(client, sgp.groupId, innerEngineering7Day.programTypeId, giis.venueId,
tina.teacherId, 20140312, 20140318, 1, null, 0, null, sgpUser);
assertEquals(4, programProp.programId);
programProp =
Program.create(client, kl.groupId, innerEngineering7Day.programTypeId, giis.venueId,
tina.teacherId, 20140305, 20140311, 2, null, 0, null, klUser);
assertEquals(5, programProp.programId);
sessionProps = Program.getOngoingSessions(client, 20140309, sgpUser);
assertEquals(2, sessionProps.size());
assertEquals(2, sessionProps.get(0).programId);
assertEquals(1, sessionProps.get(1).programId);
sessionProps = Program.getOngoingSessions(client, 20140309, klUser);
assertEquals(2, sessionProps.size());
assertEquals(5, sessionProps.get(0).programId);
assertEquals(1, sessionProps.get(0).batchNo);
assertEquals(5, sessionProps.get(1).programId);
assertEquals(2, sessionProps.get(1).batchNo);
sessionProps = Program.getOngoingSessions(client, 20140309, sgpAndKlUser);
assertEquals(4, sessionProps.size());
}
}