package crmdna.interaction; 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; import crmdna.common.contact.ContactProp; import crmdna.group.Group; import crmdna.group.Group.GroupProp; import crmdna.member.Member; import crmdna.member.MemberProp; import crmdna.user.User; import crmdna.user.UserProp; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class InteractionScoreTest { private final LocalServiceTestHelper datastoreHelper = new LocalServiceTestHelper( new LocalDatastoreServiceTestConfig().setApplyAllHighRepJobPolicy()); private final String client = "isha"; MemberProp member1, member2; private UserProp user1, user2; @Before public void setUp() { datastoreHelper.setUp(); ObjectifyFilter.complete(); Client.create(client); // can call getAll without any groups List<GroupProp> centers = Group.getAll(client, false); assertEquals(0, centers.size()); GroupProp prop = Group.create(client, "Chennai", User.SUPER_USER); assertEquals(1, prop.groupId); user1 = User.create(client, "user1@valid.com", prop.groupId, User.SUPER_USER); assertEquals(1, User.get(client, user1.email).toProp(client).userId); user2 = User.create(client, "user2@valid.com", prop.groupId, User.SUPER_USER); assertEquals(2, User.get(client, user2.email).toProp(client).userId); ContactProp contact = new ContactProp(); contact.email = "member1@gmail.com"; contact.asOfyyyymmdd = 20150801; member1 = Member.create(client, prop.groupId, contact, false, User.SUPER_USER); contact = new ContactProp(); contact.email = "member2@gmail.com"; contact.asOfyyyymmdd = 20150801; member2 = Member.create(client, prop.groupId, contact, false, User.SUPER_USER); } @After public void tearDown() { ObjectifyFilter.complete(); datastoreHelper.tearDown(); } @Test public void incrementBy1Test() { //when there is no previous interaction InteractionScoreProp prop = InteractionScore.incrementBy1(client, user1.email, member1.memberId); assertEquals(1, prop.interactionScore); assertEquals(user1.userId, prop.userId); assertEquals(member1.memberId, prop.memberId); UserMemberProp userMemberProp = new UserMemberProp(); userMemberProp.memberId = member1.memberId; userMemberProp.userId = user1.userId; List<InteractionScoreProp> props = InteractionScore.get(client, Utils.getList(userMemberProp)); assertEquals(1, props.size()); assertEquals(1, props.get(0).interactionScore); assertEquals(member1.memberId, props.get(0).memberId); assertEquals(user1.userId, props.get(0).userId); //again increment prop = InteractionScore.incrementBy1(client, user1.email, member1.memberId); assertEquals(2, prop.interactionScore); assertEquals(user1.userId, prop.userId); assertEquals(member1.memberId, prop.memberId); props = InteractionScore.get(client, Utils.getList(userMemberProp)); assertEquals(1, props.size()); assertEquals(2, props.get(0).interactionScore); assertEquals(member1.memberId, props.get(0).memberId); assertEquals(user1.userId, props.get(0).userId); } @Test public void getTest() { InteractionScore.incrementBy1(client, user1.email, member1.memberId); InteractionScore.incrementBy1(client, user1.email, member1.memberId); List<UserMemberProp> userMemberProps = new ArrayList<>(); UserMemberProp userMemberProp = new UserMemberProp(); userMemberProp.memberId = member1.memberId; userMemberProp.userId = user1.userId; userMemberProps.add(userMemberProp); userMemberProp = new UserMemberProp(); userMemberProp.memberId = member2.memberId; userMemberProp.userId = user2.userId; userMemberProps.add(userMemberProp); List<InteractionScoreProp> props = InteractionScore.get(client, userMemberProps); assertEquals(2, props.size()); assertEquals(2, props.get(0).interactionScore); assertEquals(user1.userId, props.get(0).userId); assertEquals(member1.memberId, props.get(0).memberId); assertEquals(0, props.get(1).interactionScore); assertEquals(user2.userId, props.get(1).userId); assertEquals(member2.memberId, props.get(1).memberId); } @Test public void queryTest() { //when no interactions present InteractionScoreQueryCondition qc = new InteractionScoreQueryCondition(); List<InteractionScoreProp> props = InteractionScore.query(client, qc, 100); assertTrue(props.isEmpty()); qc.memberIds.add(member1.memberId); qc.memberIds.add(member2.memberId); qc.userIds.add(user1.userId); qc.userIds.add(user2.userId); props = InteractionScore.query(client, qc, 100); assertTrue(props.isEmpty()); //set up scores like this //user1, member1: 0 //user1, member2: 1 //user2, member1: 2 //user2, member2: 3 //user1, member2 InteractionScore.incrementBy1(client, user1.email, member2.memberId); //user2, member1 InteractionScore.incrementBy1(client, user2.email, member1.memberId); InteractionScore.incrementBy1(client, user2.email, member1.memberId); //user2, member2 InteractionScore.incrementBy1(client, user2.email, member2.memberId); InteractionScore.incrementBy1(client, user2.email, member2.memberId); InteractionScore.incrementBy1(client, user2.email, member2.memberId); props = InteractionScore.query(client, qc, 100); assertEquals(3, props.size()); //should be sorted in desc by scores assertEquals(3, props.get(0).interactionScore); assertEquals(user2.userId, props.get(0).userId); assertEquals(member2.memberId, props.get(0).memberId); assertEquals(2, props.get(1).interactionScore); assertEquals(user2.userId, props.get(1).userId); assertEquals(member1.memberId, props.get(1).memberId); assertEquals(1, props.get(2).interactionScore); assertEquals(user1.userId, props.get(2).userId); assertEquals(member2.memberId, props.get(2).memberId); } }