package crmdna.venue;
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.user.User;
import crmdna.user.User.ClientLevelPrivilege;
import crmdna.venue.Venue.VenueProp;
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 VenueTest {
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;
@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, userWithPermission, sgp.groupId, User.SUPER_USER);
assertEquals(2,
User.get(client, userWithPermission).toProp(client).userId);
User.addClientLevelPrivilege(client, userWithPermission,
ClientLevelPrivilege.UPDATE_VENUE, User.SUPER_USER);
}
@After
public void tearDown() {
ObjectifyFilter.complete();
datastoreHelper.tearDown();
}
@Test
public void createTest() {
try {
Venue.create(invalidClient, "Singapore Gujarathi Bhavan",
"13 Cuff Road", sgp.groupId, userWithPermission);
assertTrue(false);
} catch (APIException ex) {
assertEquals("error for invalid client",
Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
try {
Venue.create(client, "Singapore Gujarathi Bhavan", "13 Cuff Road",
sgp.groupId, validUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("user needs permission to create",
Status.ERROR_INSUFFICIENT_PERMISSION, ex.statusCode);
}
VenueProp venueProp = Venue.create(client,
"Singapore Gujarathi Bhavan", "13 Cuff Road", sgp.groupId,
userWithPermission);
venueProp = Venue.safeGet(client, venueProp.venueId).toProp();
assertEquals("first id is 1", 1, venueProp.venueId);
assertEquals("name saved correctly in lower case without spaces",
"singaporegujarathibhavan", venueProp.name);
assertEquals("display name saved correctly",
"Singapore Gujarathi Bhavan", venueProp.displayName);
assertEquals("group id saved correctly", sgp.groupId, venueProp.groupId);
assertEquals("address saved correctly", "13 Cuff Road",
venueProp.address);
// cannot create duplicate
try {
Venue.create(client, "singapore Gujarathi bhavan", "13 Cuff Road",
sgp.groupId, userWithPermission);
assertTrue(false);
} catch (APIException ex) {
assertEquals("cannot create duplicate",
Status.ERROR_RESOURCE_ALREADY_EXISTS, ex.statusCode);
}
venueProp = Venue.create(client, "Chai Chee", "Technopark",
sgp.groupId, userWithPermission);
venueProp = Venue.safeGet(client, venueProp.venueId).toProp();
assertEquals("id assigned in sequence", 2, venueProp.venueId);
}
@Test
public void safeGetTest() {
try {
Venue.safeGet(invalidClient, 1);
assertTrue(false);
} catch (APIException ex) {
assertEquals("client should be valid",
Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
try {
Venue.safeGet(client, 1);
assertTrue(false);
} catch (APIException ex) {
assertEquals("venue id should be valid",
Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
VenueProp venueProp = Venue.create(client,
"Singapore Gujarathi Bhavan", "13 Cuff Road", sgp.groupId,
userWithPermission);
venueProp = Venue.safeGet(client, venueProp.venueId).toProp();
assertEquals("first id is 1", 1, venueProp.venueId);
assertEquals("name saved correctly in lower case without spaces",
"singaporegujarathibhavan", venueProp.name);
assertEquals("display name saved correctly",
"Singapore Gujarathi Bhavan", venueProp.displayName);
assertEquals("group id saved correctly", sgp.groupId, venueProp.groupId);
assertEquals("address saved correctly", "13 Cuff Road",
venueProp.address);
}
@Test
public void safeGetByNameTest() {
try {
Venue.safeGetByIdOrName(invalidClient, "singapore gujarathi bhavan");
assertTrue(false);
} catch (APIException ex) {
assertEquals("client should be valid",
Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
try {
Venue.safeGetByIdOrName(client, "singapore gujarathi bhavan");
assertTrue(false);
} catch (APIException ex) {
assertEquals("venue should be valid",
Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
VenueProp venueProp = Venue.create(client,
"Singapore Gujarathi Bhavan", "13 Cuff Road", sgp.groupId,
userWithPermission);
venueProp = Venue
.safeGetByIdOrName(client, "singaporegujarathI BhaVan")
.toProp();
assertEquals("first id is 1", 1, venueProp.venueId);
assertEquals("name saved correctly in lower case without spaces",
"singaporegujarathibhavan", venueProp.name);
assertEquals("display name saved correctly",
"Singapore Gujarathi Bhavan", venueProp.displayName);
assertEquals("group id saved correctly", sgp.groupId, venueProp.groupId);
assertEquals("address saved correctly", "13 Cuff Road",
venueProp.address);
}
@Test
public void updateTest() {
try {
Venue.update(invalidClient, 1, "Gujarathi Bhavan",
"13 cuff road, singapore", null, validUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("client should be valid",
Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
VenueProp venueProp = Venue.create(client,
"Singapore Gujarathi Bhavan", "13 Cuff Road", sgp.groupId,
userWithPermission);
assertEquals(1, venueProp.venueId);
try {
Venue.update(client, 1, "Gujarathi Bhavan",
"13 cuff road, singapore", null, validUser);
assertTrue(false);
} catch (APIException ex) {
assertEquals("user should have permission",
Status.ERROR_INSUFFICIENT_PERMISSION, ex.statusCode);
}
Venue.update(client, 1, "Gujarathi Bhavan", "13 cuff road, singapore",
null, userWithPermission);
venueProp = Venue.safeGet(client, venueProp.venueId).toProp();
assertEquals("id is correct", 1, venueProp.venueId);
assertEquals("name saved correctly in lower case", "gujarathibhavan",
venueProp.name);
assertEquals("display name saved correctly", "Gujarathi Bhavan",
venueProp.displayName);
assertEquals("group id saved correctly", sgp.groupId, venueProp.groupId);
assertEquals("address saved correctly", "13 cuff road, singapore",
venueProp.address);
// can change name alone
Venue.update(client, 1, "Sgp Gujarathi Bhavan", null, null,
userWithPermission);
venueProp = Venue.safeGet(client, venueProp.venueId).toProp();
assertEquals("id is correct", 1, venueProp.venueId);
assertEquals("name saved correctly in lower case",
"sgpgujarathibhavan", venueProp.name);
assertEquals("display name saved correctly", "Sgp Gujarathi Bhavan",
venueProp.displayName);
assertEquals("group id is unchanged", sgp.groupId, venueProp.groupId);
assertEquals("address is unchanged", "13 cuff road, singapore",
venueProp.address);
// can change address alone
Venue.update(client, 1, null, "13 cuff road, singapore 123234", null,
userWithPermission);
venueProp = Venue.safeGet(client, venueProp.venueId).toProp();
assertEquals("id is correct", 1, venueProp.venueId);
assertEquals("name saved correctly in lower case",
"sgpgujarathibhavan", venueProp.name);
assertEquals("display name saved correctly", "Sgp Gujarathi Bhavan",
venueProp.displayName);
assertEquals("group id is unchanged", sgp.groupId, venueProp.groupId);
assertEquals("address is unchanged", "13 cuff road, singapore 123234",
venueProp.address);
// venue id should be valid
try {
Venue.update(client, 3, "Gujarathi Bhavan",
"13 cuff road, singapore", null, userWithPermission);
assertTrue(false);
} catch (APIException ex) {
assertEquals("venue id should be valid",
Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
}
@Test
public void getAllTest() {
try {
Venue.getAll(invalidClient);
assertTrue(false);
} catch (APIException ex) {
assertEquals("client should be valid",
Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
List<VenueProp> venueProps = Venue.getAll(client);
assertEquals("getAll works when no venues are present", 0,
venueProps.size());
Venue.create(client, "Singapore Gujarathi Bhavan", "13 Cuff Road",
sgp.groupId, userWithPermission);
Venue.create(client, "Chai Chee", "Chai Chee Technopark", sgp.groupId,
userWithPermission);
Venue.create(client, "KLCC", "KL center", kl.groupId,
userWithPermission);
venueProps = Venue.getAll(client);
assertEquals("all venues returnes", 3, venueProps.size());
// should be sorted
assertEquals("name is correct", "chaichee", venueProps.get(0).name);
assertEquals("displayname is correct", "Chai Chee",
venueProps.get(0).displayName);
assertEquals("address is correct", "Chai Chee Technopark",
venueProps.get(0).address);
assertEquals("group id is correct", sgp.groupId,
venueProps.get(0).groupId);
assertEquals("name is correct", "klcc", venueProps.get(1).name);
assertEquals("displayname is correct", "KLCC",
venueProps.get(1).displayName);
assertEquals("address is correct", "KL center",
venueProps.get(1).address);
assertEquals("group id is correct", kl.groupId,
venueProps.get(1).groupId);
assertEquals("name is correct", "singaporegujarathibhavan",
venueProps.get(2).name);
assertEquals("displayname is correct", "Singapore Gujarathi Bhavan",
venueProps.get(2).displayName);
assertEquals("address is correct", "13 Cuff Road",
venueProps.get(2).address);
assertEquals("group id is correct", sgp.groupId,
venueProps.get(2).groupId);
}
@Test
public void getAllForGroupTest() {
try {
Venue.getAllForGroup(invalidClient, sgp.groupId);
assertTrue(false);
} catch (APIException ex) {
assertEquals("client should be valid",
Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
try {
Venue.getAllForGroup(client, 100); // invalid group
assertTrue(false);
} catch (APIException ex) {
assertEquals("group should be valid",
Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
List<VenueProp> venueProps = Venue.getAllForGroup(client, sgp.groupId);
assertEquals("works when no venues are present", 0, venueProps.size());
Venue.create(client, "Singapore Gujarathi Bhavan", "13 Cuff Road",
sgp.groupId, userWithPermission);
Venue.create(client, "Chai Chee", "Chai Chee Technopark", sgp.groupId,
userWithPermission);
Venue.create(client, "KLCC", "KL center", kl.groupId,
userWithPermission);
venueProps = Venue.getAllForGroup(client, sgp.groupId);
assertEquals("all venues returned", 2, venueProps.size());
// should be sorted
assertEquals("name is correct", "chaichee", venueProps.get(0).name);
assertEquals("displayname is correct", "Chai Chee",
venueProps.get(0).displayName);
assertEquals("address is correct", "Chai Chee Technopark",
venueProps.get(0).address);
assertEquals("group id is correct", sgp.groupId,
venueProps.get(0).groupId);
assertEquals("name is correct", "singaporegujarathibhavan",
venueProps.get(1).name);
assertEquals("displayname is correct", "Singapore Gujarathi Bhavan",
venueProps.get(1).displayName);
assertEquals("address is correct", "13 Cuff Road",
venueProps.get(1).address);
assertEquals("group id is correct", sgp.groupId,
venueProps.get(1).groupId);
venueProps = Venue.getAllForGroup(client, kl.groupId);
assertEquals("all venues returned", 1, venueProps.size());
assertEquals("name is correct", "klcc", venueProps.get(0).name);
assertEquals("displayname is correct", "KLCC",
venueProps.get(0).displayName);
assertEquals("address is correct", "KL center",
venueProps.get(0).address);
assertEquals("group id is correct", kl.groupId,
venueProps.get(0).groupId);
}
}