View Javadoc

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  }