Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.lwasiele.repositories.service.impl;
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.github.tomakehurst.wiremock.junit.WireMockRule;
- import com.lwasiele.repositories.RepositoriesApplication;
- import com.lwasiele.repositories.controller.exceptions.BadRequestException;
- import com.lwasiele.repositories.model.RepositoryDetailsDTO;
- import com.lwasiele.repositories.service.api.RepositoryService;
- import org.junit.Before;
- import org.junit.Rule;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.skyscreamer.jsonassert.JSONAssert;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.boot.test.web.client.TestRestTemplate;
- import org.springframework.http.*;
- import org.springframework.test.context.TestPropertySource;
- import org.springframework.test.context.junit4.SpringRunner;
- import static com.github.tomakehurst.wiremock.client.WireMock.*;
- import static org.junit.jupiter.api.Assertions.assertThrows;
- import static org.springframework.test.util.AssertionErrors.assertTrue;
- @RunWith(SpringRunner.class)
- @SpringBootTest(classes = RepositoriesApplication.class)
- @TestPropertySource(locations = "classpath:test.properties")
- public class RepositoryServiceImplTest {
- private static final String EXPECTED_RESPONSE =
- "{" +
- "\"full_name\":\"iluwatar/java-design-patterns\"," +
- "\"description\":\"Design patterns implemented in Java\"," +
- "\"clone_url\":\"https://github.com/iluwatar/java-design-patterns.git\"," +
- "\"stargazers_count\":44606," +
- "\"created_at\":\"2014-08-09T16:45:18Z\"" +
- "}";
- private static final String BODY = "{\n" +
- " \"id\": 22790488,\n" +
- " \"node_id\": \"MDEwOlJlcG9zaXRvcnkyMjc5MDQ4OA==\",\n" +
- " \"name\": \"java-design-patterns\",\n" +
- " \"full_name\": \"iluwatar/java-design-patterns\",\n" +
- " \"private\": false,\n" +
- " \"owner\": {\n" +
- " \"login\": \"iluwatar\",\n" +
- " \"id\": 582346,\n" +
- " \"node_id\": \"MDQ6VXNlcjU4MjM0Ng==\",\n" +
- " \"avatar_url\": \"https://avatars1.githubusercontent.com/u/582346?v=4\",\n" +
- " \"gravatar_id\": \"\",\n" +
- " \"url\": \"https://api.github.com/users/iluwatar\",\n" +
- " \"html_url\": \"https://github.com/iluwatar\",\n" +
- " \"followers_url\": \"https://api.github.com/users/iluwatar/followers\",\n" +
- " \"following_url\": \"https://api.github.com/users/iluwatar/following{/other_user}\",\n" +
- " \"gists_url\": \"https://api.github.com/users/iluwatar/gists{/gist_id}\",\n" +
- " \"starred_url\": \"https://api.github.com/users/iluwatar/starred{/owner}{/repo}\",\n" +
- " \"subscriptions_url\": \"https://api.github.com/users/iluwatar/subscriptions\",\n" +
- " \"organizations_url\": \"https://api.github.com/users/iluwatar/orgs\",\n" +
- " \"repos_url\": \"https://api.github.com/users/iluwatar/repos\",\n" +
- " \"events_url\": \"https://api.github.com/users/iluwatar/events{/privacy}\",\n" +
- " \"received_events_url\": \"https://api.github.com/users/iluwatar/received_events\",\n" +
- " \"type\": \"User\",\n" +
- " \"site_admin\": false\n" +
- " },\n" +
- " \"html_url\": \"https://github.com/iluwatar/java-design-patterns\",\n" +
- " \"description\": \"Design patterns implemented in Java\",\n" +
- " \"fork\": false,\n" +
- " \"url\": \"https://api.github.com/repos/iluwatar/java-design-patterns\",\n" +
- " \"forks_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/forks\",\n" +
- " \"keys_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/keys{/key_id}\",\n" +
- " \"collaborators_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/collaborators{/collaborator}\",\n" +
- " \"teams_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/teams\",\n" +
- " \"hooks_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/hooks\",\n" +
- " \"issue_events_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/issues/events{/number}\",\n" +
- " \"events_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/events\",\n" +
- " \"assignees_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/assignees{/user}\",\n" +
- " \"branches_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/branches{/branch}\",\n" +
- " \"tags_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/tags\",\n" +
- " \"blobs_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/git/blobs{/sha}\",\n" +
- " \"git_tags_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/git/tags{/sha}\",\n" +
- " \"git_refs_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/git/refs{/sha}\",\n" +
- " \"trees_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/git/trees{/sha}\",\n" +
- " \"statuses_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/statuses/{sha}\",\n" +
- " \"languages_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/languages\",\n" +
- " \"stargazers_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/stargazers\",\n" +
- " \"contributors_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/contributors\",\n" +
- " \"subscribers_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/subscribers\",\n" +
- " \"subscription_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/subscription\",\n" +
- " \"commits_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/commits{/sha}\",\n" +
- " \"git_commits_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/git/commits{/sha}\",\n" +
- " \"comments_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/comments{/number}\",\n" +
- " \"issue_comment_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/issues/comments{/number}\",\n" +
- " \"contents_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/contents/{+path}\",\n" +
- " \"compare_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/compare/{base}...{head}\",\n" +
- " \"merges_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/merges\",\n" +
- " \"archive_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/{archive_format}{/ref}\",\n" +
- " \"downloads_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/downloads\",\n" +
- " \"issues_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/issues{/number}\",\n" +
- " \"pulls_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/pulls{/number}\",\n" +
- " \"milestones_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/milestones{/number}\",\n" +
- " \"notifications_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/notifications{?since,all,participating}\",\n" +
- " \"labels_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/labels{/name}\",\n" +
- " \"releases_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/releases{/id}\",\n" +
- " \"deployments_url\": \"https://api.github.com/repos/iluwatar/java-design-patterns/deployments\",\n" +
- " \"created_at\": \"2014-08-09T16:45:18Z\",\n" +
- " \"updated_at\": \"2019-02-19T06:26:27Z\",\n" +
- " \"pushed_at\": \"2019-02-18T17:08:41Z\",\n" +
- " \"git_url\": \"git://github.com/iluwatar/java-design-patterns.git\",\n" +
- " \"ssh_url\": \"git@github.com:iluwatar/java-design-patterns.git\",\n" +
- " \"clone_url\": \"https://github.com/iluwatar/java-design-patterns.git\",\n" +
- " \"svn_url\": \"https://github.com/iluwatar/java-design-patterns\",\n" +
- " \"homepage\": \"http://java-design-patterns.com\",\n" +
- " \"size\": 18708,\n" +
- " \"stargazers_count\": 44606,\n" +
- " \"watchers_count\": 44606,\n" +
- " \"language\": \"Java\",\n" +
- " \"has_issues\": true,\n" +
- " \"has_projects\": false,\n" +
- " \"has_downloads\": true,\n" +
- " \"has_wiki\": true,\n" +
- " \"has_pages\": true,\n" +
- " \"forks_count\": 14455,\n" +
- " \"mirror_url\": null,\n" +
- " \"archived\": false,\n" +
- " \"open_issues_count\": 189,\n" +
- " \"license\": {\n" +
- " \"key\": \"mit\",\n" +
- " \"name\": \"MIT License\",\n" +
- " \"spdx_id\": \"MIT\",\n" +
- " \"url\": \"https://api.github.com/licenses/mit\",\n" +
- " \"node_id\": \"MDc6TGljZW5zZTEz\"\n" +
- " },\n" +
- " \"forks\": 14455,\n" +
- " \"open_issues\": 189,\n" +
- " \"watchers\": 44606,\n" +
- " \"default_branch\": \"master\",\n" +
- " \"network_count\": 14455,\n" +
- " \"subscribers_count\": 3846\n" +
- "}";
- private int serverPort = 8089;
- TestRestTemplate testRestTemplate;
- HttpHeaders httpHeaders;
- HttpEntity<String> entity;
- @Autowired
- RepositoryService repositoryService;
- @Before
- public void setUp() {
- testRestTemplate = new TestRestTemplate();
- httpHeaders = new HttpHeaders();
- entity = new HttpEntity<>(null, httpHeaders);
- }
- @Rule
- public WireMockRule wireMockRule = new WireMockRule(serverPort);
- @Test
- public void shouldGetRepositoryDetails() throws Exception {
- //given
- stubFor(get(urlMatching("/repos/test/test"))
- .willReturn(aResponse()
- .withStatus(200)
- .withHeader("Content-Type", "application/json")
- .withBody(BODY)
- )
- );
- //when
- RepositoryDetailsDTO repositoryDetails = repositoryService.getRepositoryDetails("test", "test");
- String repositoryDetailsString = getRepositoryDetailsString(repositoryDetails);
- //then
- JSONAssert.assertEquals(EXPECTED_RESPONSE, repositoryDetailsString, false);
- }
- @Test
- public void shouldThrowBadRequestExceptionWhenAddressIsInvalid() {
- //given
- stubFor(get(urlMatching("/repos/test/test"))
- .willReturn(aResponse()
- .withStatus(200)
- )
- );
- assertThrows(BadRequestException.class, () -> repositoryService.getRepositoryDetails("test1", "test1"));
- }
- @Test
- public void shouldThrowBadRequestExceptionWhenServiceIsUnavailable() {
- //given
- stubFor(get(urlMatching("/repos/test/test"))
- .willReturn(aResponse()
- .withStatus(503)
- )
- );
- assertThrows(BadRequestException.class, () -> repositoryService.getRepositoryDetails("test", "test"));
- }
- private String getRepositoryDetailsString(RepositoryDetailsDTO repositoryDetails) throws JsonProcessingException {
- ObjectMapper objectMapper = new ObjectMapper();
- return objectMapper.writeValueAsString(repositoryDetails);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement