11package com .jaspersoft .jasperserver .jaxrs .client .core ;
22
3+ import com .jaspersoft .jasperserver .jaxrs .client .core .enums .AuthenticationType ;
4+ import com .jaspersoft .jasperserver .jaxrs .client .filters .BasicAuthenticationFilter ;
5+ import com .jaspersoft .jasperserver .jaxrs .client .filters .SessionOutputFilter ;
36import java .lang .reflect .Field ;
7+ import java .net .URI ;
8+ import java .util .HashMap ;
9+ import javax .ws .rs .client .Entity ;
10+ import javax .ws .rs .client .Invocation ;
11+ import javax .ws .rs .client .WebTarget ;
12+ import javax .ws .rs .core .Cookie ;
13+ import javax .ws .rs .core .Form ;
14+ import javax .ws .rs .core .MediaType ;
15+ import javax .ws .rs .core .NewCookie ;
16+ import javax .ws .rs .core .Response ;
17+ import org .glassfish .jersey .client .ClientProperties ;
418import org .mockito .Mock ;
519import org .powermock .core .classloader .annotations .PrepareForTest ;
620import org .powermock .modules .testng .PowerMockTestCase ;
721import org .testng .annotations .AfterMethod ;
822import org .testng .annotations .BeforeMethod ;
923import org .testng .annotations .Test ;
1024
25+ import static org .mockito .Matchers .any ;
26+ import static org .mockito .Matchers .anyBoolean ;
27+ import static org .mockito .Matchers .anyString ;
28+ import static org .mockito .Matchers .isA ;
1129import static org .mockito .Mockito .doNothing ;
30+ import static org .mockito .Mockito .doReturn ;
31+ import static org .mockito .Mockito .never ;
1232import static org .mockito .Mockito .reset ;
1333import static org .mockito .Mockito .spy ;
34+ import static org .mockito .Mockito .verify ;
1435import static org .mockito .MockitoAnnotations .initMocks ;
1536import static org .powermock .api .mockito .PowerMockito .whenNew ;
1637import static org .powermock .api .support .membermodification .MemberMatcher .field ;
1738import static org .powermock .api .support .membermodification .MemberMatcher .method ;
1839import static org .powermock .api .support .membermodification .MemberModifier .suppress ;
1940import static org .testng .Assert .assertEquals ;
41+ import static org .testng .AssertJUnit .assertNotNull ;
2042
2143/**
2244 * Unit tests for {@link JasperserverRestClient}
@@ -34,6 +56,15 @@ public class JasperserverRestClientTest extends PowerMockTestCase {
3456 private Session sessionMock ;
3557 @ Mock
3658 AnonymousSession anonymousSessionMock ;
59+ @ Mock
60+ private WebTarget webTargetMock ;
61+ @ Mock
62+ private WebTarget rootTargetMock ;
63+ @ Mock
64+ private Invocation .Builder invocationBuilderMock ;
65+ @ Mock
66+ private Response responseMock ;
67+
3768
3869 final String USER_NAME = "John" ;
3970 final String PASSWORD = "John's_super_secret_password" ;
@@ -129,6 +160,91 @@ public void should_return_proper_Session_object() throws Exception {
129160 assertEquals (retrieved , sessionMock );
130161 }
131162
163+ @ Test
164+ public void should_involve_login_method_and_return_proper_session_object () throws Exception {
165+ // Given
166+ final URI location = new URI ("location" );
167+ final JasperserverRestClient client = new JasperserverRestClient (configurationMock );
168+
169+ whenNew (AuthenticationCredentials .class )
170+ .withArguments (USER_NAME , PASSWORD )
171+ .thenReturn (credentialsMock );
172+
173+ whenNew (SessionStorage .class )
174+ .withArguments (configurationMock , credentialsMock )
175+ .thenReturn (sessionStorageMock );
176+ doReturn (credentialsMock ).when (sessionStorageMock ).getCredentials ();
177+ doReturn (rootTargetMock ).when (sessionStorageMock ).getRootTarget ();
178+ doReturn (AuthenticationType .SPRING ).when (configurationMock ).getAuthenticationType ();
179+ doReturn (USER_NAME ).when (credentialsMock ).getUsername ();
180+ doReturn (PASSWORD ).when (credentialsMock ).getPassword ();
181+ doReturn (webTargetMock ).when (rootTargetMock ).path (anyString ());
182+ doReturn (webTargetMock ).when (webTargetMock ).property (anyString (), anyBoolean ());
183+ doReturn (invocationBuilderMock ).when (webTargetMock ).request ();
184+ doReturn (responseMock ).when (invocationBuilderMock ).post (any (Entity .class ));
185+ doReturn (location ).when (responseMock ).getLocation ();
186+ doReturn (302 ).when (responseMock ).getStatus ();
187+ doReturn (new HashMap <String , NewCookie >() {{
188+ put ("JSESSIONID" , new NewCookie (new Cookie ("JSESSIONID" , "AC0C233ED7E9BE5DD0D4A286E6C8BBAE" )));
189+ }}).when (responseMock ).getCookies ();
190+ doReturn (rootTargetMock ).when (rootTargetMock ).register (any (SessionOutputFilter .class ));
191+
192+ // When
193+ Session session = client .authenticate (USER_NAME , PASSWORD );
194+
195+ // Then
196+ assertNotNull (session );
197+ verify (sessionStorageMock ).getCredentials ();
198+ verify (sessionStorageMock ).getRootTarget ();
199+ verify (configurationMock ).getAuthenticationType ();
200+ verify (sessionStorageMock ).getCredentials ();
201+ verify (rootTargetMock , never ()).register (isA (BasicAuthenticationFilter .class ));
202+ verify (rootTargetMock ).path ("/j_spring_security_check" );
203+ verify (webTargetMock ).property (ClientProperties .FOLLOW_REDIRECTS , Boolean .FALSE );
204+ verify (webTargetMock ).request ();
205+ verify (invocationBuilderMock ).post (Entity .entity (any (Form .class ), MediaType .APPLICATION_FORM_URLENCODED_TYPE ));
206+ verify (responseMock ).getLocation ();
207+ verify (responseMock ).getCookies ();
208+ verify (sessionStorageMock ).setSessionId ("AC0C233ED7E9BE5DD0D4A286E6C8BBAE" );
209+ verify (rootTargetMock ).register (isA (SessionOutputFilter .class ));
210+ }
211+
212+ @ Test
213+ public void should_involve_login_method_and_return_proper_session_object_within_basic_authorization () throws Exception {
214+ // Given
215+ final JasperserverRestClient client = new JasperserverRestClient (configurationMock );
216+
217+ whenNew (AuthenticationCredentials .class )
218+ .withArguments (USER_NAME , PASSWORD )
219+ .thenReturn (credentialsMock );
220+
221+ whenNew (SessionStorage .class )
222+ .withArguments (configurationMock , credentialsMock )
223+ .thenReturn (sessionStorageMock );
224+ doReturn (credentialsMock ).when (sessionStorageMock ).getCredentials ();
225+ doReturn (rootTargetMock ).when (sessionStorageMock ).getRootTarget ();
226+ doReturn (AuthenticationType .BASIC ).when (configurationMock ).getAuthenticationType ();
227+ doReturn (USER_NAME ).when (credentialsMock ).getUsername ();
228+ doReturn (PASSWORD ).when (credentialsMock ).getPassword ();
229+ doReturn (rootTargetMock ).when (rootTargetMock ).register (isA (BasicAuthenticationFilter .class ));
230+
231+ // When
232+ Session session = client .authenticate (USER_NAME , PASSWORD );
233+
234+ // Then
235+ assertNotNull (session );
236+ verify (sessionStorageMock ).getCredentials ();
237+ verify (sessionStorageMock ).getRootTarget ();
238+ verify (configurationMock ).getAuthenticationType ();
239+ verify (sessionStorageMock ).getCredentials ();
240+ verify (rootTargetMock ).register (isA (BasicAuthenticationFilter .class ));
241+ verify (rootTargetMock , never ()).path ("/j_spring_security_check" );
242+ verify (webTargetMock , never ()).property (ClientProperties .FOLLOW_REDIRECTS , Boolean .FALSE );
243+ verify (webTargetMock , never ()).request ();
244+ verify (invocationBuilderMock , never ()).post (Entity .entity (any (Form .class ), MediaType .APPLICATION_FORM_URLENCODED_TYPE ));
245+ verify (rootTargetMock , never ()).register (isA (SessionOutputFilter .class ));
246+ }
247+
132248 @ Test
133249 public void should_return_proper_anonymousSession_object () throws Exception {
134250
0 commit comments