X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=tests%2Forg%2Fcacert%2Fgigi%2FdbObjects%2FTestAssurance.java;h=14c7b35b0361f6d6a5a382697bae188674a20f90;hp=e7ea35e10da9230429302f3d0e335e3495a6719e;hb=9def69bd08ea69eb27786d5b34f00e154e09e9f3;hpb=952f3ddd9438cf10ba25a5d9f1e9d8a04d75e0dc diff --git a/tests/org/cacert/gigi/dbObjects/TestAssurance.java b/tests/org/cacert/gigi/dbObjects/TestAssurance.java index e7ea35e1..14c7b35b 100644 --- a/tests/org/cacert/gigi/dbObjects/TestAssurance.java +++ b/tests/org/cacert/gigi/dbObjects/TestAssurance.java @@ -5,35 +5,46 @@ import static org.junit.Assert.*; import java.io.IOException; import java.sql.Timestamp; +import org.cacert.gigi.GigiApiException; import org.cacert.gigi.database.GigiPreparedStatement; -import org.cacert.gigi.testUtils.ManagedTest; +import org.cacert.gigi.testUtils.BusinessTest; +import org.cacert.gigi.util.DayDate; +import org.cacert.gigi.util.Notary; +import org.junit.Before; import org.junit.Test; -public class TestAssurance extends ManagedTest { +public class TestAssurance extends BusinessTest { - private final Timestamp yesterday = new Timestamp(System.currentTimeMillis() - 24L * 60 * 60 * 1000L); + private final Timestamp yesterday = new Timestamp(System.currentTimeMillis() - DayDate.MILLI_DAY); - private final Timestamp tomorrow = new Timestamp(System.currentTimeMillis() + 24L * 60 * 60 * 1000L); + private final Timestamp tomorrow = new Timestamp(System.currentTimeMillis() + DayDate.MILLI_DAY); /** * at least 39 months ago, so is outside the window of * {@link User#VERIFICATION_MONTHS} */ - private final Timestamp min39month = new Timestamp(System.currentTimeMillis() - 24L * 60 * 60 * 39 * 31 * 1000L); + private final Timestamp min39month = new Timestamp(System.currentTimeMillis() - DayDate.MILLI_DAY * 39 * 31); /** * at least 24 months ago (but less than 39), so is inside the window of * {@link User#VERIFICATION_MONTHS} */ - private final Timestamp min24month = new Timestamp(System.currentTimeMillis() - 24L * 60 * 60 * 24 * 31 * 1000L); + private final Timestamp min24month = new Timestamp(System.currentTimeMillis() - DayDate.MILLI_DAY * 24 * 31); - private final int agentID; + private int agentID; - private final int applicantID; + private int agent2ID; + + private int applicantID; + + private int applicantNameID; + + private User applicant; + + private int applicantMultID; + + public TestAssurance() throws GigiApiException { - public TestAssurance() { - agentID = createAssuranceUser("a", "b", createUniqueName() + "@example.com", TEST_PASSWORD); - applicantID = createVerifiedUser("a", "c", createUniqueName() + "@example.com", TEST_PASSWORD); } // test for verification in 39 month period @@ -73,6 +84,18 @@ public class TestAssurance extends ManagedTest { } } + private void enterAssuranceWhen(int agentID, int applicantID, Timestamp when, int points) { + try (GigiPreparedStatement ps = new GigiPreparedStatement("INSERT INTO `notary` SET `from`=?, `to`=?, `points`=?, `location`=?, `date`=?, `when`=? ")) { + ps.setInt(1, agentID); + ps.setInt(2, applicantID); + ps.setInt(3, points); + ps.setString(4, "test-location"); + ps.setString(5, "2010-01-01"); + ps.setTimestamp(6, when); + ps.execute(); + } + } + private void enterAssuranceDeleted(int agentID, int applicantID, Timestamp deleted) { try (GigiPreparedStatement ps = new GigiPreparedStatement("INSERT INTO `notary` SET `from`=?, `to`=?, `points`=?, `location`=?, `date`=?, `deleted`=? ")) { ps.setInt(1, agentID); @@ -85,45 +108,126 @@ public class TestAssurance extends ManagedTest { } } + @Before + public void initTest() throws GigiApiException { + agentID = createAssuranceUser("a", "b", createUniqueName() + "@example.com", TEST_PASSWORD); + agent2ID = createAssuranceUser("a", "d", createUniqueName() + "@example.com", TEST_PASSWORD); + applicantID = createVerifiedUser("a", "c", createUniqueName() + "@example.com", TEST_PASSWORD); + applicant = User.getById(applicantID); + applicantNameID = User.getById(applicantID).getPreferredName().getId(); + applicantMultID = createVerifiedUser("a", "e", createUniqueName() + "@example.com", TEST_PASSWORD); + } + @Test public void testVerificationYesterday() throws IOException { - enterAssuranceWhen(agentID, applicantID, yesterday); - assertTrue(User.isInVerificationLimit(applicantID)); + enterAssuranceWhen(agentID, applicantNameID, yesterday); + assertTrue(applicant.isInVerificationLimit()); } @Test public void testApprox24MonthAgo() throws IOException { - enterAssuranceWhen(agentID, applicantID, min24month); - assertTrue(User.isInVerificationLimit(applicantID)); + enterAssuranceWhen(agentID, applicantNameID, min24month); + assertTrue(applicant.isInVerificationLimit()); } @Test public void testApprox39MonthAgo() throws IOException { - enterAssuranceWhen(agentID, applicantID, min39month); - assertFalse(User.isInVerificationLimit(applicantID)); + enterAssuranceWhen(agentID, applicantNameID, min39month); + assertFalse(applicant.isInVerificationLimit()); } @Test public void testTomorrowExpired() throws IOException { - enterAssuranceExpired(agentID, applicantID, tomorrow); - assertTrue(User.isInVerificationLimit(applicantID)); + enterAssuranceExpired(agentID, applicantNameID, tomorrow); + assertTrue(applicant.isInVerificationLimit()); } @Test public void testYesterdayExpired() throws IOException { - enterAssuranceExpired(agentID, applicantID, yesterday); - assertFalse(User.isInVerificationLimit(applicantID)); + enterAssuranceExpired(agentID, applicantNameID, yesterday); + assertFalse(applicant.isInVerificationLimit()); } @Test public void testNormal() throws IOException { - enterAssurance(agentID, applicantID); - assertTrue(User.isInVerificationLimit(applicantID)); + enterAssurance(agentID, applicantNameID); + assertTrue(applicant.isInVerificationLimit()); } @Test public void testDeletedYesterday() throws IOException { - enterAssuranceDeleted(agentID, applicantID, yesterday); - assertFalse(User.isInVerificationLimit(applicantID)); + enterAssuranceDeleted(agentID, applicantNameID, yesterday); + assertFalse(applicant.isInVerificationLimit()); + } + + @Test + public void testMultipleAssurancePossible() throws IOException { + User agent = User.getById(agentID); + User applicantMult = User.getById(applicantMultID); + + enterAssuranceWhen(agentID, applicantMult.getPreferredName().getId(), min39month); + + // test that new entry would be possible + assertTrue(Notary.checkAssuranceIsPossible(agent, applicantMult.getPreferredName())); + + // enter new entry + enterAssuranceWhen(agentID, applicantMult.getPreferredName().getId(), yesterday); + + // test that new entry is not possible + assertFalse(Notary.checkAssuranceIsPossible(agent, applicantMult.getPreferredName())); + + } + + @Test + public void testMultipleAssurancePointsCalculation() throws IOException { + + User agent = User.getById(agentID); + User applicantMult = User.getById(applicantMultID); + + enterAssuranceWhen(agentID, applicantMult.getPreferredName().getId(), min39month); + int xPoints = agent.getExperiencePoints(); + + // test that VP after first entry + + assertEquals(applicantMult.getAssurancePoints(), 10); + + // enter second entry to check correct calculation with larger points + enterAssuranceWhen(agentID, applicantMult.getPreferredName().getId(), min24month, 20); + assertEquals(applicantMult.getAssurancePoints(), 20); + + // test correct XP calculation + assertEquals(agent.getExperiencePoints(), xPoints); + + // enter third entry to check correct calculation with less points + enterAssuranceWhen(agentID, applicantMult.getPreferredName().getId(), yesterday, 15); + assertEquals(applicantMult.getAssurancePoints(), 15); + + // test correct XP calculation + assertEquals(agent.getExperiencePoints(), xPoints); + + // enter expired entry + enterAssuranceExpired(agentID, applicantMult.getPreferredName().getId(), yesterday); + assertEquals(applicantMult.getAssurancePoints(), 15); + + // enter deleted entry same agent + enterAssuranceDeleted(agentID, applicantMult.getPreferredName().getId(), yesterday); + assertEquals(applicantMult.getAssurancePoints(), 15); + + // enter expired entry future + enterAssuranceExpired(agentID, applicantMult.getPreferredName().getId(), tomorrow); + assertEquals(applicantMult.getAssurancePoints(), 10); + + // test correct XP calculation + assertEquals(agent.getExperiencePoints(), xPoints); + + // enter entry from different agent + enterAssuranceWhen(agent2ID, applicantMult.getPreferredName().getId(), yesterday); + assertEquals(applicantMult.getAssurancePoints(), 20); + + // enter entry for second applicant + enterAssuranceWhen(agentID, applicant.getPreferredName().getId(), yesterday); + + assertEquals(agent.getExperiencePoints(), xPoints + 2); + } }