1 package club.wpia.gigi.pages.admin;
3 import static org.hamcrest.CoreMatchers.*;
4 import static org.junit.Assert.*;
6 import java.io.IOException;
7 import java.io.PrintWriter;
8 import java.io.StringWriter;
9 import java.net.MalformedURLException;
10 import java.net.URLConnection;
11 import java.net.URLEncoder;
12 import java.util.HashMap;
13 import java.util.Locale;
15 import org.hamcrest.CoreMatchers;
16 import org.junit.Test;
18 import club.wpia.gigi.GigiApiException;
19 import club.wpia.gigi.dbObjects.Group;
20 import club.wpia.gigi.dbObjects.User;
21 import club.wpia.gigi.localisation.Language;
22 import club.wpia.gigi.pages.account.MyDetails;
23 import club.wpia.gigi.pages.admin.support.SupportUserDetailsPage;
24 import club.wpia.gigi.testUtils.ArrayContains;
25 import club.wpia.gigi.testUtils.IOUtils;
26 import club.wpia.gigi.testUtils.SEClientTest;
27 import club.wpia.gigi.testUtils.TestEmailReceiver.TestMail;
28 import club.wpia.gigi.util.ServerConstants;
29 import club.wpia.gigi.util.ServerConstants.Host;
31 public class TestSEAdminNotificationMail extends SEClientTest {
35 private String targetEmail;
37 public TestSEAdminNotificationMail() throws IOException, GigiApiException {
38 targetEmail = createUniqueName() + "@example.com";
39 String fname = "Först";
40 String lname = "Secönd";
41 targetID = createVerifiedUser(fname, lname, targetEmail, TEST_PASSWORD);
45 public void testChangeAccountData() throws MalformedURLException, IOException {
47 executeBasicWebInteraction(cookie, SupportUserDetailsPage.PATH + targetID + "/", "dobd=1&dobm=2&doby=2000&detailupdate", 0);
50 String message = getMailReceiver().receive(ServerConstants.getSupportMailAddress()).getMessage();
51 assertThat(message, containsString("The DoB was changed"));
52 assertThat(message, containsString("supporter " + u.getPreferredName().toString() + " triggered:"));
54 message = getMailReceiver().receive(targetEmail).getMessage();
55 assertThat(message, containsString("The DoB in your account was changed to 2000-02-01."));
59 public void testPasswordReset() throws MalformedURLException, IOException {
60 executeBasicWebInteraction(cookie, SupportUserDetailsPage.PATH + targetID + "/", "aword=SecretWord&resetPass", 0);
61 getMailReceiver().receive(targetEmail);
62 TestMail tm = getMailReceiver().receive(ServerConstants.getSupportMailAddress());
63 assertThat(tm.getMessage(), containsString("A password reset was triggered and an email was sent to user."));
65 User test = User.getById(targetID);
66 String[] result = test.getAdminLog();
67 assertThat(result, ArrayContains.contains(CoreMatchers.equalTo("SE triggered password reset (a20140808.8)")));
71 public void testGrantUserGroup() throws MalformedURLException, IOException {
72 executeBasicWebInteraction(cookie, SupportUserDetailsPage.PATH + targetID + "/", "addGroup&groupToModify=" + URLEncoder.encode(Group.CODESIGNING.getDBName(), "UTF-8"), 0);
74 StringWriter sw = new StringWriter();
75 PrintWriter pw = new PrintWriter(sw);
76 Group.CODESIGNING.getName().output(pw, Language.getInstance(Locale.ENGLISH), new HashMap<String, Object>());
79 String message = getMailReceiver().receive(ServerConstants.getSupportMailAddress()).getMessage();
80 assertThat(message, containsString("The group permission '" + sw.toString() + "' was granted."));
82 message = getMailReceiver().receive(targetEmail).getMessage();
83 assertThat(message, containsString("The group permission '" + sw.toString() + "' was granted to your account."));
87 public void testRemoveUserGroup() throws MalformedURLException, IOException {
88 executeBasicWebInteraction(cookie, SupportUserDetailsPage.PATH + targetID + "/", "removeGroup&groupToModify=" + URLEncoder.encode(Group.CODESIGNING.getDBName(), "UTF-8"), 0);
90 StringWriter sw = new StringWriter();
91 PrintWriter pw = new PrintWriter(sw);
92 Group.CODESIGNING.getName().output(pw, Language.getInstance(Locale.ENGLISH), new HashMap<String, Object>());
95 String message = getMailReceiver().receive(ServerConstants.getSupportMailAddress()).getMessage();
96 assertThat(message, containsString("The group permission '" + sw.toString() + "' was revoked."));
98 message = getMailReceiver().receive(targetEmail).getMessage();
99 assertThat(message, containsString("The group permission '" + sw.toString() + "' was revoked from your account."));
103 public void testGrantSupporterGroup() throws MalformedURLException, IOException {
104 executeBasicWebInteraction(cookie, SupportUserDetailsPage.PATH + targetID + "/", "addGroup&groupToModify=" + URLEncoder.encode(Group.SUPPORTER.getDBName(), "UTF-8"), 0);
106 StringWriter sw = new StringWriter();
107 PrintWriter pw = new PrintWriter(sw);
108 Group.SUPPORTER.getName().output(pw, Language.getInstance(Locale.ENGLISH), new HashMap<String, Object>());
109 User target = User.getById(targetID);
112 String message = getMailReceiver().receive(ServerConstants.getSupportMailAddress()).getMessage();
113 assertThat(message, containsString("The group permission '" + sw.toString() + "' was granted."));
115 message = getMailReceiver().receive(targetEmail).getMessage();
116 assertThat(message, containsString("The group permission '" + sw.toString() + "' was granted to your account."));
118 message = getMailReceiver().receive(ServerConstants.getBoardMailAddress()).getMessage();
119 assertThat(message, containsString("The group permission '" + sw.toString() + "' was granted for '" + target.getPreferredName().toString() + "'."));
123 public void testRemoveSupporterGroup() throws MalformedURLException, IOException {
124 executeBasicWebInteraction(cookie, SupportUserDetailsPage.PATH + targetID + "/", "removeGroup&groupToModify=" + URLEncoder.encode(Group.SUPPORTER.getDBName(), "UTF-8"), 0);
126 StringWriter sw = new StringWriter();
127 PrintWriter pw = new PrintWriter(sw);
128 Group.SUPPORTER.getName().output(pw, Language.getInstance(Locale.ENGLISH), new HashMap<String, Object>());
129 User target = User.getById(targetID);
132 String message = getMailReceiver().receive(ServerConstants.getSupportMailAddress()).getMessage();
133 assertThat(message, containsString("The group permission '" + sw.toString() + "' was revoked."));
135 message = getMailReceiver().receive(targetEmail).getMessage();
136 assertThat(message, containsString("The group permission '" + sw.toString() + "' was revoked from your account."));
138 message = getMailReceiver().receive(ServerConstants.getBoardMailAddress()).getMessage();
139 assertThat(message, containsString("The group permission '" + sw.toString() + "' was revoked for '" + target.getPreferredName().toString() + "'."));
143 public void testRevokeAllCertificates() throws MalformedURLException, IOException {
144 executeBasicWebInteraction(cookie, SupportUserDetailsPage.PATH + targetID + "/", "revokeall", 1);
145 User user = User.getById(targetID);
148 String message = getMailReceiver().receive(ServerConstants.getSupportMailAddress()).getMessage();
149 assertThat(message, containsString("All certificates in the account " + user.getPreferredName().toString()));
151 message = getMailReceiver().receive(targetEmail).getMessage();
152 assertThat(message, containsString("All certificates in your account have been revoked."));
156 public void testSupportSupporterGroup() throws MalformedURLException, IOException {
157 // supporter adds to his own groups
158 String s = IOUtils.readURL(post(SupportUserDetailsPage.PATH + u.getId() + "/", "addGroup&groupToModify=" + URLEncoder.encode(Group.ORG_AGENT.getDBName(), "UTF-8")));
159 assertThat(s, containsString("Supporter may not modify himself."));
161 // supporter removes from his own groups
162 s = IOUtils.readURL(post(SupportUserDetailsPage.PATH + u.getId() + "/", "removeGroup&groupToModify=" + URLEncoder.encode(Group.ORG_AGENT.getDBName(), "UTF-8")));
163 assertThat(s, containsString("Supporter may not modify himself."));
165 // supporter removes supporter flag
166 URLConnection uc = post(SupportUserDetailsPage.PATH + u.getId() + "/", "removeGroup&groupToModify=" + URLEncoder.encode(Group.SUPPORTER.getDBName(), "UTF-8"));
167 assertEquals("https://" + ServerConstants.getHostNamePortSecure(Host.SECURE) + MyDetails.PATH, uc.getHeaderField("Location"));
168 StringWriter sw = new StringWriter();
169 PrintWriter pw = new PrintWriter(sw);
170 Group.SUPPORTER.getName().output(pw, Language.getInstance(Locale.ENGLISH), new HashMap<String, Object>());
172 String message = getMailReceiver().receive(ServerConstants.getSupportMailAddress()).getMessage();
173 assertThat(message, containsString("The group permission '" + sw.toString() + "' was revoked."));
175 message = getMailReceiver().receive(u.getEmail()).getMessage();
176 assertThat(message, containsString("The group permission '" + sw.toString() + "' was revoked from your account."));
178 message = getMailReceiver().receive(ServerConstants.getBoardMailAddress()).getMessage();
179 assertThat(message, containsString("The group permission '" + sw.toString() + "' was revoked for '" + u.getPreferredName().toString() + "'."));
180 s = IOUtils.readURL(get(cookie, MyDetails.PATH));
181 assertThat(s, not(containsString("supporter")));