]> WPIA git - gigi.git/blob - tests/org/cacert/gigi/pages/TestVerify.java
fix: ResultSet.getDate is often wrong as it fetches day-precision times
[gigi.git] / tests / org / cacert / gigi / pages / TestVerify.java
1 package org.cacert.gigi.pages;
2
3 import static org.junit.Assert.*;
4
5 import java.util.Locale;
6 import java.util.regex.Matcher;
7 import java.util.regex.Pattern;
8
9 import org.cacert.gigi.GigiApiException;
10 import org.cacert.gigi.dbObjects.EmailAddress;
11 import org.cacert.gigi.testUtils.ClientBusinessTest;
12 import org.cacert.gigi.testUtils.TestEmailReceiver.TestMail;
13 import org.hamcrest.CustomMatcher;
14 import org.junit.Test;
15
16 public class TestVerify extends ClientBusinessTest {
17
18     @Test
19     public void testVerify() throws GigiApiException {
20         EmailAddress ea = new EmailAddress(u, "test@example.com", Locale.ENGLISH);
21         TestMail tm = getMailReceiver().receive();
22         Pattern p = Pattern.compile(".*hash=(.*)");
23         Matcher m = p.matcher(tm.extractLink());
24         assertTrue(m.matches());
25         String correctToken = m.group(1);
26
27         // Assert initial state
28         assertFalse(ea.isVerified());
29
30         // wrong hashes
31         assertFalse(ea.isVerifyable(correctToken + "w"));
32         assertFalse(ea.isVerifyable(""));
33         // correct token
34         assertTrue(ea.isVerifyable(correctToken));
35         // state transition not possible with wrong token
36         org.hamcrest.Matcher<String> isInvalidToken = verificationDoesNotWork(ea);
37         assertThat(correctToken + "a", isInvalidToken);
38         assertThat("", isInvalidToken);
39
40         // state transition
41         assertFalse(ea.isVerified());
42         ea.verify(correctToken);
43         assertTrue(ea.isVerified());
44
45         // no token is correct anymore
46         assertFalse(ea.isVerifyable(correctToken));
47         assertFalse(ea.isVerifyable(""));
48         // no verification is possible anymore
49         assertThat(correctToken + "a", isInvalidToken);
50         assertThat(correctToken, isInvalidToken);
51         assertThat("", isInvalidToken);
52     }
53
54     private org.hamcrest.Matcher<String> verificationDoesNotWork(final EmailAddress ea) {
55         return new CustomMatcher<String>("Invalid token for validation.") {
56
57             @Override
58             public boolean matches(Object item) {
59                 if ( !(item instanceof String)) {
60                     return false;
61                 }
62                 String s = (String) item;
63                 try {
64                     ea.verify(s);
65                     return false;
66                 } catch (IllegalArgumentException e) {
67                     return true;
68                 } catch (GigiApiException e) {
69                     throw new Error(e);
70                 }
71             }
72         };
73     }
74 }