package crmdna.member;
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.ICode;
import crmdna.common.contact.ContactProp;
import crmdna.group.Group;
import crmdna.group.Group.GroupProp;
import crmdna.member.MemberEntity.MemberFactory;
import crmdna.user.User;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static crmdna.common.TestUtil.ensureResourceIncorrectException;
import static crmdna.common.TestUtil.ensureResourceNotFoundException;
import static org.junit.Assert.assertEquals;
public class MemberFactoryTest {
private final LocalServiceTestHelper datastoreHelper = new LocalServiceTestHelper(
new LocalDatastoreServiceTestConfig().setApplyAllHighRepJobPolicy());
private final String client = "isha";
private final String invalidClient = "invalid";
private GroupProp sgp;
@Before
public void setUp() {
datastoreHelper.setUp();
ObjectifyFilter.complete();
Client.create(client);
sgp = Group.create(client, "Singapore", User.SUPER_USER);
assertEquals(1, sgp.groupId);
}
@After
public void tearDown() {
ObjectifyFilter.complete();
datastoreHelper.tearDown();
}
@Test
public void createTest() {
final ContactProp contact = new ContactProp();
contact.email = "sathya.t@ishafoundation.org";
contact.firstName = "sathya";
contact.asOfyyyymmdd = 20140618;
// client should be valid
ensureResourceNotFoundException(new ICode() {
@Override
public void run() {
MemberFactory.create(invalidClient, 1);
}
;
});
// create 1
MemberEntity memberEntity = MemberFactory.create(client, 1).get(0);
assertEquals(1, memberEntity.memberId); // memberId should be 1
// create many
final List<ContactProp> contacts = new ArrayList<>();
contacts.add(contact);
ContactProp contact2 = new ContactProp();
contact2.asOfyyyymmdd = 20140618;
contacts.add(contact2);
List<MemberEntity> memberEntities = MemberFactory.create(client, contacts.size());
assertEquals(2, memberEntities.size());
assertEquals(2, memberEntities.get(0).memberId);
assertEquals(3, memberEntities.get(1).memberId);
// create 1000
contacts.clear();
for (int i = 0; i < 1000; i++) {
ContactProp c = new ContactProp();
c.asOfyyyymmdd = 20140618;
contacts.add(c);
}
memberEntities = MemberFactory.create(client, contacts.size());
assertEquals(1000, memberEntities.size());
assertEquals(1003, memberEntities.get(999).memberId);
for (int i = 0; i < 20000; i++) {
ContactProp c = new ContactProp();
c.asOfyyyymmdd = 20140618;
contacts.add(c);
}
// cannot create more than 10000 in one shot. (safety feature)
ensureResourceIncorrectException(new ICode() {
@Override
public void run() {
MemberFactory.create(client, contacts.size());
}
});
}
}