1 package com.atlassian.sal.core.net;
2
3 import static org.mockito.Matchers.anyString;
4 import static org.mockito.Mockito.never;
5 import static org.mockito.Mockito.verify;
6 import static org.mockito.Mockito.when;
7
8 import java.io.UnsupportedEncodingException;
9 import java.net.URLEncoder;
10
11 import org.apache.commons.httpclient.HttpClient;
12 import org.apache.commons.httpclient.HttpMethod;
13 import org.junit.After;
14 import org.junit.Before;
15 import org.junit.Test;
16 import org.junit.runner.RunWith;
17 import org.mockito.Mock;
18 import org.mockito.runners.MockitoJUnitRunner;
19
20 import com.atlassian.sal.core.net.auth.SeraphAuthenticator;
21
22 @RunWith(MockitoJUnitRunner.class)
23 public class TestSeraphAuthenticator
24 {
25 private HttpClient client;
26 private @Mock HttpMethod method;
27
28 @Before
29 public void createClient()
30 {
31 client = new HttpClient();
32 }
33
34 @After
35 public void destroyClient()
36 {
37 client = null;
38 }
39
40 @Test
41 public void verifyThatQueryParamsAreSetWhenNoneExist()
42 {
43 SeraphAuthenticator auth = new SeraphAuthenticator("joe", "bob");
44 auth.process(client, method);
45
46 verify(method).setQueryString("os_username=joe&os_password=bob");
47 }
48
49 @Test
50 public void verifyThatQueryParamsAreAppendedWhenSomeAlreadyExist()
51 {
52 SeraphAuthenticator auth = new SeraphAuthenticator("joe", "bob");
53 when(method.getQueryString()).thenReturn("cool=beans");
54 auth.process(client, method);
55
56 verify(method).setQueryString("cool=beans&os_username=joe&os_password=bob");
57 }
58
59 @Test
60 public void verifyThatQueryParamsAreNotSetWhenOsUsernameAlreadyPresent()
61 {
62 SeraphAuthenticator auth = new SeraphAuthenticator("joe", "bob");
63 when(method.getQueryString()).thenReturn("os_username=joe");
64 auth.process(client, method);
65
66 verify(method, never()).setQueryString(anyString());
67 }
68
69 @Test
70 public void verifyThatQueryParamsAreProperlyUrlEncoded() throws UnsupportedEncodingException
71 {
72 final String username = "joe bob";
73 final String password = ";/?:@&=+$,-_.!~*'()%";
74
75 SeraphAuthenticator auth = new SeraphAuthenticator(username, password);
76 auth.process(client, method);
77
78 verify(method).setQueryString("os_username=" + URLEncoder.encode(username, "UTF-8") +
79 "&os_password=" + URLEncoder.encode(password, "UTF-8"));
80 }
81 }