Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.99 KB | None | 0 0
  1. package com.lwasiele.repositories.service.impl;
  2.  
  3. import com.fasterxml.jackson.core.JsonProcessingException;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. import com.github.tomakehurst.wiremock.junit.WireMockRule;
  6. import com.lwasiele.repositories.RepositoriesApplication;
  7. import com.lwasiele.repositories.controller.exceptions.BadRequestException;
  8. import com.lwasiele.repositories.model.RepositoryDetailsDTO;
  9. import com.lwasiele.repositories.service.api.RepositoryService;
  10. import org.junit.Before;
  11. import org.junit.Rule;
  12. import org.junit.Test;
  13. import org.junit.runner.RunWith;
  14. import org.skyscreamer.jsonassert.JSONAssert;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.boot.test.context.SpringBootTest;
  17. import org.springframework.boot.test.web.client.TestRestTemplate;
  18. import org.springframework.http.*;
  19. import org.springframework.test.context.TestPropertySource;
  20. import org.springframework.test.context.junit4.SpringRunner;
  21.  
  22. import static com.github.tomakehurst.wiremock.client.WireMock.*;
  23. import static org.junit.jupiter.api.Assertions.assertThrows;
  24. import static org.springframework.test.util.AssertionErrors.assertTrue;
  25.  
  26. @RunWith(SpringRunner.class)
  27. @SpringBootTest(classes = RepositoriesApplication.class)
  28. @TestPropertySource(locations = "classpath:test.properties")
  29. public class RepositoryServiceImplTest {
  30. private static final String EXPECTED_RESPONSE =
  31. "{" +
  32. "\"full_name\":\"iluwatar/java-design-patterns\"," +
  33. "\"description\":\"Design patterns implemented in Java\"," +
  34. "\"clone_url\":\"https://github.com/iluwatar/java-design-patterns.git\"," +
  35. "\"stargazers_count\":44606," +
  36. "\"created_at\":\"2014-08-09T16:45:18Z\"" +
  37. "}";
  38.  
  39. private static final String BODY = "{\n" +
  40. " \"id\": 22790488,\n" +
  41. " \"node_id\": \"MDEwOlJlcG9zaXRvcnkyMjc5MDQ4OA==\",\n" +
  42. " \"name\": \"java-design-patterns\",\n" +
  43. " \"full_name\": \"iluwatar/java-design-patterns\",\n" +
  44. " \"private\": false,\n" +
  45. " \"owner\": {\n" +
  46. " \"login\": \"iluwatar\",\n" +
  47. " \"id\": 582346,\n" +
  48. " \"node_id\": \"MDQ6VXNlcjU4MjM0Ng==\",\n" +
  49. " \"avatar_url\": \"https://avatars1.githubusercontent.com/u/582346?v=4\",\n" +
  50. " \"gravatar_id\": \"\",\n" +
  51. " \"url\": \"https://api.github.com/users/iluwatar\",\n" +
  52. " \"html_url\": \"https://github.com/iluwatar\",\n" +
  53. " \"followers_url\": \"https://api.github.com/users/iluwatar/followers\",\n" +
  54. " \"following_url\": \"https://api.github.com/users/iluwatar/following{/other_user}\",\n" +
  55. " \"gists_url\": \"https://api.github.com/users/iluwatar/gists{/gist_id}\",\n" +
  56. " \"starred_url\": \"https://api.github.com/users/iluwatar/starred{/owner}{/repo}\",\n" +
  57. " \"subscriptions_url\": \"https://api.github.com/users/iluwatar/subscriptions\",\n" +
  58. " \"organizations_url\": \"https://api.github.com/users/iluwatar/orgs\",\n" +
  59. " \"repos_url\": \"https://api.github.com/users/iluwatar/repos\",\n" +
  60. " \"events_url\": \"https://api.github.com/users/iluwatar/events{/privacy}\",\n" +
  61. " \"received_events_url\": \"https://api.github.com/users/iluwatar/received_events\",\n" +
  62. " \"type\": \"User\",\n" +
  63. " \"site_admin\": false\n" +
  64. " },\n" +
  65. " \"html_url\": \"https://github.com/iluwatar/java-design-patterns\",\n" +
  66. " \"description\": \"Design patterns implemented in Java\",\n" +
  67. " \"fork\": false,\n" +
  68. " \"url\": \"https://api.github.com/repos/iluwatar/java-design-patterns\",\n" +
  69. " \"forks_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/forks\",\n" +
  70. " \"keys_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/keys{/key_id}\",\n" +
  71. " \"collaborators_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/collaborators{/collaborator}\",\n" +
  72. " \"teams_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/teams\",\n" +
  73. " \"hooks_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/hooks\",\n" +
  74. " \"issue_events_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/issues/events{/number}\",\n" +
  75. " \"events_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/events\",\n" +
  76. " \"assignees_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/assignees{/user}\",\n" +
  77. " \"branches_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/branches{/branch}\",\n" +
  78. " \"tags_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/tags\",\n" +
  79. " \"blobs_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/git/blobs{/sha}\",\n" +
  80. " \"git_tags_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/git/tags{/sha}\",\n" +
  81. " \"git_refs_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/git/refs{/sha}\",\n" +
  82. " \"trees_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/git/trees{/sha}\",\n" +
  83. " \"statuses_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/statuses/{sha}\",\n" +
  84. " \"languages_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/languages\",\n" +
  85. " \"stargazers_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/stargazers\",\n" +
  86. " \"contributors_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/contributors\",\n" +
  87. " \"subscribers_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/subscribers\",\n" +
  88. " \"subscription_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/subscription\",\n" +
  89. " \"commits_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/commits{/sha}\",\n" +
  90. " \"git_commits_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/git/commits{/sha}\",\n" +
  91. " \"comments_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/comments{/number}\",\n" +
  92. " \"issue_comment_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/issues/comments{/number}\",\n" +
  93. " \"contents_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/contents/{+path}\",\n" +
  94. " \"compare_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/compare/{base}...{head}\",\n" +
  95. " \"merges_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/merges\",\n" +
  96. " \"archive_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/{archive_format}{/ref}\",\n" +
  97. " \"downloads_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/downloads\",\n" +
  98. " \"issues_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/issues{/number}\",\n" +
  99. " \"pulls_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/pulls{/number}\",\n" +
  100. " \"milestones_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/milestones{/number}\",\n" +
  101. " \"notifications_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/notifications{?since,all,participating}\",\n" +
  102. " \"labels_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/labels{/name}\",\n" +
  103. " \"releases_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/releases{/id}\",\n" +
  104. " \"deployments_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/deployments\",\n" +
  105. " \"created_at\": \"2014-08-09T16:45:18Z\",\n" +
  106. " \"updated_at\": \"2019-02-19T06:26:27Z\",\n" +
  107. " \"pushed_at\": \"2019-02-18T17:08:41Z\",\n" +
  108. " \"git_url\": \"git://github.com/iluwatar/java-design-patterns.git\",\n" +
  109. " \"ssh_url\": \"git@github.com:iluwatar/java-design-patterns.git\",\n" +
  110. " \"clone_url\": \"https://github.com/iluwatar/java-design-patterns.git\",\n" +
  111. " \"svn_url\": \"https://github.com/iluwatar/java-design-patterns\",\n" +
  112. " \"homepage\": \"http://java-design-patterns.com\",\n" +
  113. " \"size\": 18708,\n" +
  114. " \"stargazers_count\": 44606,\n" +
  115. " \"watchers_count\": 44606,\n" +
  116. " \"language\": \"Java\",\n" +
  117. " \"has_issues\": true,\n" +
  118. " \"has_projects\": false,\n" +
  119. " \"has_downloads\": true,\n" +
  120. " \"has_wiki\": true,\n" +
  121. " \"has_pages\": true,\n" +
  122. " \"forks_count\": 14455,\n" +
  123. " \"mirror_url\": null,\n" +
  124. " \"archived\": false,\n" +
  125. " \"open_issues_count\": 189,\n" +
  126. " \"license\": {\n" +
  127. " \"key\": \"mit\",\n" +
  128. " \"name\": \"MIT License\",\n" +
  129. " \"spdx_id\": \"MIT\",\n" +
  130. " \"url\": \"https://api.github.com/licenses/mit\",\n" +
  131. " \"node_id\": \"MDc6TGljZW5zZTEz\"\n" +
  132. " },\n" +
  133. " \"forks\": 14455,\n" +
  134. " \"open_issues\": 189,\n" +
  135. " \"watchers\": 44606,\n" +
  136. " \"default_branch\": \"master\",\n" +
  137. " \"network_count\": 14455,\n" +
  138. " \"subscribers_count\": 3846\n" +
  139. "}";
  140.  
  141. private int serverPort = 8089;
  142.  
  143. TestRestTemplate testRestTemplate;
  144.  
  145. HttpHeaders httpHeaders;
  146.  
  147. HttpEntity<String> entity;
  148.  
  149. @Autowired
  150. RepositoryService repositoryService;
  151.  
  152. @Before
  153. public void setUp() {
  154. testRestTemplate = new TestRestTemplate();
  155. httpHeaders = new HttpHeaders();
  156. entity = new HttpEntity<>(null, httpHeaders);
  157. }
  158.  
  159. @Rule
  160. public WireMockRule wireMockRule = new WireMockRule(serverPort);
  161.  
  162.  
  163. @Test
  164. public void shouldGetRepositoryDetails() throws Exception {
  165. //given
  166. stubFor(get(urlMatching("/repos/test/test"))
  167. .willReturn(aResponse()
  168. .withStatus(200)
  169. .withHeader("Content-Type", "application/json")
  170. .withBody(BODY)
  171. )
  172. );
  173. //when
  174. RepositoryDetailsDTO repositoryDetails = repositoryService.getRepositoryDetails("test", "test");
  175. String repositoryDetailsString = getRepositoryDetailsString(repositoryDetails);
  176. //then
  177. JSONAssert.assertEquals(EXPECTED_RESPONSE, repositoryDetailsString, false);
  178. }
  179.  
  180. @Test
  181. public void shouldThrowBadRequestExceptionWhenAddressIsInvalid() {
  182. //given
  183. stubFor(get(urlMatching("/repos/test/test"))
  184. .willReturn(aResponse()
  185. .withStatus(200)
  186. )
  187. );
  188. assertThrows(BadRequestException.class, () -> repositoryService.getRepositoryDetails("test1", "test1"));
  189. }
  190.  
  191. @Test
  192. public void shouldThrowBadRequestExceptionWhenServiceIsUnavailable() {
  193. //given
  194. stubFor(get(urlMatching("/repos/test/test"))
  195. .willReturn(aResponse()
  196. .withStatus(503)
  197. )
  198. );
  199. assertThrows(BadRequestException.class, () -> repositoryService.getRepositoryDetails("test", "test"));
  200. }
  201.  
  202.  
  203. private String getRepositoryDetailsString(RepositoryDetailsDTO repositoryDetails) throws JsonProcessingException {
  204. ObjectMapper objectMapper = new ObjectMapper();
  205. return objectMapper.writeValueAsString(repositoryDetails);
  206. }
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement