1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.client.enduser;
20
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22 import static org.junit.jupiter.api.Assertions.assertNotNull;
23 import static org.junit.jupiter.api.Assertions.assertNull;
24 import static org.junit.jupiter.api.Assertions.assertTrue;
25
26 import java.io.IOException;
27 import java.security.AccessControlException;
28 import java.util.Map;
29 import java.util.concurrent.ExecutionException;
30 import javax.ws.rs.BadRequestException;
31 import org.apache.commons.lang3.StringUtils;
32 import org.apache.syncope.client.enduser.pages.Dashboard;
33 import org.apache.syncope.client.enduser.pages.Login;
34 import org.apache.syncope.common.lib.SyncopeClientCompositeException;
35 import org.apache.syncope.common.lib.SyncopeClientException;
36 import org.apache.syncope.common.lib.types.ClientExceptionType;
37 import org.apache.wicket.feedback.FeedbackMessage;
38 import org.apache.wicket.util.tester.FormTester;
39 import org.junit.jupiter.api.Test;
40
41 public class SyncopeEnduserApplicationTest extends AbstractTest {
42
43 @Test
44 public void securityHeaders() throws IOException {
45 Map<String, String> securityHeaders = PROPS.getSecurityHeaders();
46 assertEquals(4, securityHeaders.size());
47
48
49 TESTER.startPage(Login.class);
50 TESTER.assertRenderedPage(Login.class);
51 securityHeaders.forEach((key, value) -> assertEquals(value, TESTER.getLastResponse().getHeader(key)));
52
53
54 FormTester formTester = TESTER.newFormTester("login");
55 formTester.setValue("username", "username");
56 formTester.setValue("password", "password");
57 formTester.submit("submit");
58
59 TESTER.assertRenderedPage(Dashboard.class);
60 securityHeaders.forEach((key, value) -> assertEquals(value, TESTER.getLastResponse().getHeader(key)));
61 }
62
63 @Test
64 public void errors() {
65 SyncopeEnduserSession session = SyncopeEnduserSession.get();
66
67 assertNull(session.getFeedbackMessages().first());
68
69 session.onException(new AccessControlException("JWT Expired"));
70 FeedbackMessage message = session.getFeedbackMessages().first();
71 assertNotNull(message);
72 assertTrue(message.isError());
73 assertEquals(SyncopeEnduserSession.Error.SESSION_EXPIRED.fallback(), message.getMessage());
74 session.getFeedbackMessages().clear();
75
76 session.onException(new AccessControlException("Auth Exception"));
77 message = session.getFeedbackMessages().first();
78 assertNotNull(message);
79 assertTrue(message.isError());
80 assertEquals(SyncopeEnduserSession.Error.AUTHORIZATION.fallback(), message.getMessage());
81 session.getFeedbackMessages().clear();
82
83 session.onException(new BadRequestException());
84 message = session.getFeedbackMessages().first();
85 assertNotNull(message);
86 assertTrue(message.isError());
87 assertEquals(SyncopeEnduserSession.Error.REST.fallback(), message.getMessage());
88 session.getFeedbackMessages().clear();
89
90 SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidUser);
91 sce.getElements().add("Error 1");
92 session.onException(sce);
93 message = session.getFeedbackMessages().first();
94 assertNotNull(message);
95 assertTrue(message.isError());
96 assertEquals(ClientExceptionType.InvalidUser.name() + ": Error 1", message.getMessage());
97 session.getFeedbackMessages().clear();
98
99 sce = SyncopeClientException.build(ClientExceptionType.InvalidUser);
100 sce.getElements().add("Error 1");
101 sce.getElements().add("Error 2");
102 session.onException(sce);
103 message = session.getFeedbackMessages().first();
104 assertNotNull(message);
105 assertTrue(message.isError());
106 assertEquals(ClientExceptionType.InvalidUser.name() + ": Error 1, Error 2", message.getMessage());
107 session.getFeedbackMessages().clear();
108
109 SyncopeClientCompositeException scce = SyncopeClientException.buildComposite();
110 scce.addException(SyncopeClientException.build(ClientExceptionType.InvalidUser));
111 scce.addException(SyncopeClientException.build(ClientExceptionType.InvalidExternalResource));
112 session.onException(new ExecutionException(scce));
113 message = session.getFeedbackMessages().first();
114 assertNotNull(message);
115 assertTrue(message.isError());
116 assertTrue(StringUtils.contains((CharSequence) message.getMessage(),
117 ClientExceptionType.InvalidExternalResource.name()));
118 assertTrue(StringUtils.contains((CharSequence) message.getMessage(), ClientExceptionType.InvalidUser.name()));
119 session.getFeedbackMessages().clear();
120 }
121 }