PageRenderTime 29ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/src/test/java/com/atlassian/jira/plugins/bitbucket/bitbucket/TestBitbucketCommunicator.java

https://bitbucket.org/atlassian/jira-bitbucket-connector/
Java | 185 lines | 154 code | 31 blank | 0 comment | 0 complexity | 347b149a64411378bf97e076dbf6c44c MD5 | raw file
  1. package com.atlassian.jira.plugins.bitbucket.bitbucket;
  2. import static junit.framework.Assert.*;
  3. import static org.mockito.Matchers.*;
  4. import static org.mockito.Mockito.*;
  5. import java.io.IOException;
  6. import org.apache.commons.io.IOUtils;
  7. import org.apache.http.HttpStatus;
  8. import org.junit.Before;
  9. import org.junit.Test;
  10. import org.mockito.Mock;
  11. import org.mockito.MockitoAnnotations;
  12. import com.atlassian.jira.plugins.bitbucket.api.AuthenticationFactory;
  13. import com.atlassian.jira.plugins.bitbucket.api.SourceControlException;
  14. import com.atlassian.jira.plugins.bitbucket.api.SourceControlRepository;
  15. import com.atlassian.jira.plugins.bitbucket.api.SourceControlUser;
  16. import com.atlassian.jira.plugins.bitbucket.api.impl.BasicAuthentication;
  17. import com.atlassian.jira.plugins.bitbucket.spi.DefaultRequestHelper;
  18. import com.atlassian.jira.plugins.bitbucket.spi.ExtendedResponseHandler;
  19. import com.atlassian.jira.plugins.bitbucket.spi.ExtendedResponseHandler.ExtendedResponse;
  20. import com.atlassian.jira.plugins.bitbucket.spi.ExtendedResponseHandlerFactory;
  21. import com.atlassian.jira.plugins.bitbucket.spi.RepositoryUri;
  22. import com.atlassian.jira.plugins.bitbucket.spi.bitbucket.impl.BitbucketCommunicator;
  23. import com.atlassian.jira.plugins.bitbucket.spi.bitbucket.impl.BitbucketRepositoryUri;
  24. import com.atlassian.sal.api.net.Request;
  25. import com.atlassian.sal.api.net.RequestFactory;
  26. public class TestBitbucketCommunicator
  27. {
  28. @SuppressWarnings("rawtypes")
  29. @Mock
  30. private RequestFactory requestFactory;
  31. @Mock
  32. private AuthenticationFactory authenticationFactory;
  33. @Mock
  34. private SourceControlRepository repository;
  35. @Mock
  36. private Request<?, ?> request;
  37. @Mock
  38. private RepositoryUri repositoryUri;
  39. @Mock
  40. private ExtendedResponseHandlerFactory responseHandlerFactory;
  41. @Mock
  42. private ExtendedResponseHandler extendedResponseHandler;
  43. @Before
  44. public void setup() throws Exception
  45. {
  46. MockitoAnnotations.initMocks(this);
  47. RepositoryUri repositoryUri = new BitbucketRepositoryUri("https", "bitbucket.org","atlassian","jira-bitbucket-connector");
  48. when(repository.getRepositoryUri()).thenReturn(repositoryUri);
  49. }
  50. private String resource(String name) throws IOException
  51. {
  52. return IOUtils.toString(getClass().getClassLoader().getResourceAsStream(name));
  53. }
  54. @Test
  55. public void testUnknownUser() throws Exception
  56. {
  57. when(requestFactory.createRequest(Request.MethodType.GET, "https://api.bitbucket.org/1.0/users/mjensen")).thenReturn(request);
  58. when(request.execute()).thenReturn("");
  59. BitbucketCommunicator communicator = new BitbucketCommunicator(authenticationFactory, new DefaultRequestHelper(requestFactory, responseHandlerFactory));
  60. SourceControlUser user = communicator.getUser(repository, "mjensen");
  61. assertNotNull(user);
  62. assertEquals(SourceControlUser.UNKNOWN_USER, user);
  63. }
  64. @Test
  65. public void testGetUser() throws Exception
  66. {
  67. when(requestFactory.createRequest(Request.MethodType.GET, "https://api.bitbucket.org/1.0/users/mjensen")).thenReturn(request);
  68. when(request.execute()).thenReturn(resource("TestBitbucket-user.json"));
  69. BitbucketCommunicator communicator = new BitbucketCommunicator(authenticationFactory, new DefaultRequestHelper(requestFactory, responseHandlerFactory));
  70. SourceControlUser user = communicator.getUser(repository, "mjensen");
  71. verify(request).setSoTimeout(60000);
  72. verify(request).execute();
  73. verifyNoMoreInteractions(request);
  74. assertEquals("https://secure.gravatar.com/avatar/e0fe5875ffbe955718f93b8a364454fe?d=identicon&s=32", user.getAvatar());
  75. assertEquals("mjensen", user.getUsername());
  76. assertEquals("Matthew", user.getFirstName());
  77. assertEquals("Jensen", user.getLastName());
  78. assertEquals("/1.0/users/mjensen", user.getResourceUri());
  79. }
  80. @Test
  81. public void testAuthenticationAndException() throws Exception
  82. {
  83. when(authenticationFactory.getAuthentication(repository)).thenReturn(new BasicAuthentication("user", "pass"));
  84. when(
  85. requestFactory.createRequest(Request.MethodType.GET,
  86. "https://api.bitbucket.org/1.0/repositories/atlassian/jira-bitbucket-connector/changesets/aaaaa")).thenReturn(request);
  87. when(request.execute()).thenReturn("{I am invalid json}");
  88. when(
  89. requestFactory.createRequest(Request.MethodType.GET,
  90. "https://api.bitbucket.org/1.0/repositories/atlassian/jira-bitbucket-connector/changesets/aaaaa/diffstat")).thenReturn(request);
  91. when(request.execute()).thenReturn("{I am invalid json}");
  92. BitbucketCommunicator communicator = new BitbucketCommunicator(authenticationFactory, new DefaultRequestHelper(requestFactory, responseHandlerFactory));
  93. try
  94. {
  95. communicator.getChangeset(repository, "aaaaa");
  96. fail("Expected exception when parsing invalid response");
  97. } catch (SourceControlException e)
  98. {
  99. assertEquals("Could not parse json result", e.getMessage());
  100. }
  101. verify(request, times(2)).addBasicAuthentication("user", "pass");
  102. }
  103. @Test
  104. public void setupPostcommitHook()
  105. {
  106. when(repository.getAdminUsername()).thenReturn("user");
  107. when(repository.getAdminPassword()).thenReturn("pass");
  108. when(
  109. requestFactory.createRequest(Request.MethodType.POST,
  110. "https://api.bitbucket.org/1.0/repositories/atlassian/jira-bitbucket-connector/services")).thenReturn(request);
  111. String postCommitUrl = "http://this.jira.server:1234/jira/rest/postcommithandler";
  112. BitbucketCommunicator communicator = new BitbucketCommunicator(authenticationFactory, new DefaultRequestHelper(requestFactory, responseHandlerFactory));
  113. communicator.setupPostcommitHook(repository, postCommitUrl);
  114. verify(requestFactory).createRequest(Request.MethodType.POST,
  115. "https://api.bitbucket.org/1.0/repositories/atlassian/jira-bitbucket-connector/services");
  116. verify(request).addBasicAuthentication("user", "pass");
  117. verify(request).setRequestBody("type=post;URL=" + postCommitUrl);
  118. }
  119. @Test
  120. public void testPublicRepositoryValid() throws Exception
  121. {
  122. ExtendedResponse extendedResponse = new ExtendedResponse(true, HttpStatus.SC_OK, resource("TestBitbucket-repository.json"));
  123. when(responseHandlerFactory.create()).thenReturn(extendedResponseHandler);
  124. when(extendedResponseHandler.getExtendedResponse()).thenReturn(extendedResponse);
  125. when(requestFactory.createRequest(any(Request.MethodType.class), any(String.class))).thenReturn(request);
  126. DefaultRequestHelper requestHelper = new DefaultRequestHelper(requestFactory, responseHandlerFactory);
  127. Boolean repositoryIsPrivate = requestHelper.isRepositoryPrivate1(repositoryUri);
  128. assertNotNull(repositoryIsPrivate);
  129. assertFalse(repositoryIsPrivate);
  130. }
  131. @Test
  132. public void testPrivateRepositoryValid() throws Exception
  133. {
  134. final ExtendedResponse extendedResponse = new ExtendedResponse(false, HttpStatus.SC_UNAUTHORIZED, "blah");
  135. when(responseHandlerFactory.create()).thenReturn(extendedResponseHandler);
  136. when(extendedResponseHandler.getExtendedResponse()).thenReturn(extendedResponse);
  137. when(requestFactory.createRequest(any(Request.MethodType.class), any(String.class))).thenReturn(request);
  138. DefaultRequestHelper requestHelper = new DefaultRequestHelper(requestFactory, responseHandlerFactory);
  139. Boolean repositoryIsPrivate = requestHelper.isRepositoryPrivate1(repositoryUri);
  140. assertNotNull(repositoryIsPrivate);
  141. assertTrue(repositoryIsPrivate);
  142. }
  143. @Test
  144. public void testRepositoryInvalid() throws Exception
  145. {
  146. final ExtendedResponse extendedResponse = new ExtendedResponse(false, HttpStatus.SC_NOT_FOUND, "blah");
  147. when(responseHandlerFactory.create()).thenReturn(extendedResponseHandler);
  148. when(extendedResponseHandler.getExtendedResponse()).thenReturn(extendedResponse);
  149. when(requestFactory.createRequest(any(Request.MethodType.class), any(String.class))).thenReturn(request);
  150. DefaultRequestHelper requestHelper = new DefaultRequestHelper(requestFactory, responseHandlerFactory);
  151. Boolean repositoryIsPrivate = requestHelper.isRepositoryPrivate1(repositoryUri);
  152. assertNull(repositoryIsPrivate);
  153. }
  154. }