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