diff --git a/src/main/.DS_Store b/src/main/.DS_Store new file mode 100644 index 00000000..0e98056e Binary files /dev/null and b/src/main/.DS_Store differ diff --git a/src/main/java/net/ironoc/portfolio/controller/GitProjectsController.java b/src/main/java/net/ironoc/portfolio/controller/GitProjectsController.java index 8839b1a7..3fba78ac 100644 --- a/src/main/java/net/ironoc/portfolio/controller/GitProjectsController.java +++ b/src/main/java/net/ironoc/portfolio/controller/GitProjectsController.java @@ -94,7 +94,7 @@ private ResponseEntity> getIssuesByUsernameAndRepo(H request.getHeader("host"), request.getRequestURI(), request.getHeader("user-agent")); - List repositoryIssueDtos = gitDetailsService.getIssues(userId, repo); + List repositoryIssueDtos = gitDetailsService.getIssues(userId, repo, false); info("The repository issues for user={} and repo={} are: {}", userId, repo, repositoryIssueDtos); return ResponseEntity.status(HttpStatus.OK) .body(gitDetailsService.mapIssuesToResponse(repositoryIssueDtos)); @@ -118,7 +118,7 @@ private ResponseEntity> getReposByUsername(HttpServ request.getHeader("host"), request.getRequestURI(), request.getHeader("user-agent")); - List repositories = gitDetailsService.getRepoDetails(userId); + List repositories = gitDetailsService.getRepoDetails(userId, false); info("The repository details for user={} are: {}", userId, repositories); return ResponseEntity.status(HttpStatus.OK) .body(gitDetailsService.mapRepositoriesToResponse(repositories)); diff --git a/src/main/java/net/ironoc/portfolio/job/GitDetailsRunnable.java b/src/main/java/net/ironoc/portfolio/job/GitDetailsRunnable.java index 97807dc7..2541a2fb 100644 --- a/src/main/java/net/ironoc/portfolio/job/GitDetailsRunnable.java +++ b/src/main/java/net/ironoc/portfolio/job/GitDetailsRunnable.java @@ -56,7 +56,7 @@ public void run() { info("GitDetailsRunnable running for userIds={}", getUserIds()); for (String userId : userIds) { - List repositoryDetailDtos = gitDetails.getRepoDetails(userId); + List repositoryDetailDtos = gitDetails.getRepoDetails(userId, true); info("Running GIT details job for userIds={}, repositoryDetailDtos={}", userId, repositoryDetailDtos); if (repositoryDetailDtos != null && !repositoryDetailDtos.isEmpty()) { @@ -64,7 +64,7 @@ public void run() { gitRepoCache.put(userId, gitDetails.mapRepositoriesToResponse(repositoryDetailDtos)); for(String project : getProjects()) { - List issuesDtos = gitDetails.getIssues(userId, project); + List issuesDtos = gitDetails.getIssues(userId, project, true); info("Running GIT details job for userIds={}, project={}, issuesDtos={}", userId, project, issuesDtos); if (issuesDtos != null && !issuesDtos.isEmpty()) { diff --git a/src/main/java/net/ironoc/portfolio/service/GitDetails.java b/src/main/java/net/ironoc/portfolio/service/GitDetails.java index d1b37da6..b5a9a10f 100644 --- a/src/main/java/net/ironoc/portfolio/service/GitDetails.java +++ b/src/main/java/net/ironoc/portfolio/service/GitDetails.java @@ -9,7 +9,7 @@ public interface GitDetails { - List getRepoDetails(String username); + List getRepoDetails(String username, boolean isJob); List mapRepositoriesToResponse( List repositoryDetailDtos); @@ -17,7 +17,7 @@ List mapRepositoriesToResponse( List mapResponseToRepositories( List repositoryDetailDomains); - List getIssues(String userId, String repo); + List getIssues(String userId, String repo, boolean isJob); List mapIssuesToResponse(List repositoryIssueDtos); } diff --git a/src/main/java/net/ironoc/portfolio/service/GitDetailsService.java b/src/main/java/net/ironoc/portfolio/service/GitDetailsService.java index f00be00f..86001059 100644 --- a/src/main/java/net/ironoc/portfolio/service/GitDetailsService.java +++ b/src/main/java/net/ironoc/portfolio/service/GitDetailsService.java @@ -47,9 +47,9 @@ public GitDetailsService(PropertyConfigI propertyConfig, } @Override - public List getRepoDetails(String username) { + public List getRepoDetails(String username, boolean isJob) { // check cache for home page user ID - if (username.equalsIgnoreCase(IRONOC_GIT_USER)) { + if (!isJob & username.equalsIgnoreCase(IRONOC_GIT_USER)) { List repoDetails = gitRepoCache .get(IRONOC_GIT_USER); if (repoDetails != null && !repoDetails.isEmpty()) { @@ -110,9 +110,9 @@ public List mapResponseToRepositories( } @Override - public List getIssues(String userId, String repo) { + public List getIssues(String userId, String repo, boolean isJob) { // check cache for home page user ID - if (userId.equalsIgnoreCase(IRONOC_GIT_USER)) { + if (!isJob & userId.equalsIgnoreCase(IRONOC_GIT_USER)) { List repositoryIssues = gitProjectCache.get(userId, repo); if (repositoryIssues != null && !repositoryIssues.isEmpty()) { return this.mapResponseToIssues(repositoryIssues); diff --git a/src/test/java/net/ironoc/portfolio/controller/GitProjectsControllerIntegrationTest.java b/src/test/java/net/ironoc/portfolio/controller/GitProjectsControllerIntegrationTest.java index bd9f217e..915cb6c4 100644 --- a/src/test/java/net/ironoc/portfolio/controller/GitProjectsControllerIntegrationTest.java +++ b/src/test/java/net/ironoc/portfolio/controller/GitProjectsControllerIntegrationTest.java @@ -99,7 +99,7 @@ public void test_getReposByUsernamePathVar_success() throws Exception { .getResourceAsStream("json" + File.separator + "test_response.json"); List dtos = List.of(objectMapper.readValue(jsonInputStream, RepositoryDetailDto[].class)); - when(gitDetailsServiceMock.getRepoDetails("conorheffron")).thenReturn(dtos); + when(gitDetailsServiceMock.getRepoDetails("conorheffron", false)).thenReturn(dtos); when(gitDetailsServiceMock.mapRepositoriesToResponse(anyList())) .thenReturn(new GitDetailsService(null, null, null,null,null) @@ -111,7 +111,7 @@ public void test_getReposByUsernamePathVar_success() throws Exception { .andReturn().getResponse(); // then - verify(gitDetailsServiceMock).getRepoDetails("conorheffron"); + verify(gitDetailsServiceMock).getRepoDetails("conorheffron", false); verify(gitDetailsServiceMock).mapRepositoriesToResponse(anyList()); assertThat(response.getStatus(), is(HttpStatus.OK.value())); @@ -137,7 +137,7 @@ public void test_getReposByUsernameReqParam_success() throws Exception { .getResourceAsStream("json" + File.separator + "test_response.json"); List dtos = List.of(objectMapper.readValue(jsonInputStream, RepositoryDetailDto[].class)); - when(gitDetailsServiceMock.getRepoDetails("conorheffron")).thenReturn(dtos); + when(gitDetailsServiceMock.getRepoDetails("conorheffron", false)).thenReturn(dtos); when(gitDetailsServiceMock.mapRepositoriesToResponse(anyList())) .thenReturn(new GitDetailsService(null, null, null, null, null) @@ -149,7 +149,7 @@ public void test_getReposByUsernameReqParam_success() throws Exception { .andReturn().getResponse(); // then - verify(gitDetailsServiceMock).getRepoDetails("conorheffron"); + verify(gitDetailsServiceMock).getRepoDetails("conorheffron", false); verify(gitDetailsServiceMock).mapRepositoriesToResponse(anyList()); assertThat(response.getStatus(), is(HttpStatus.OK.value())); @@ -187,7 +187,7 @@ public void test_getIssuesByUsernameAndRepoPathVars_success() throws Exception { .getResourceAsStream("json" + File.separator + "test_issues_response.json"); List dtos = List.of(objectMapper.readValue(jsonInputStream, RepositoryIssueDto[].class)); - when(gitDetailsServiceMock.getIssues("test-user", "test-repo")).thenReturn(dtos); + when(gitDetailsServiceMock.getIssues("test-user", "test-repo", false)).thenReturn(dtos); when(gitDetailsServiceMock.mapIssuesToResponse(anyList())) .thenReturn(new GitDetailsService(null, null, null, null, null) @@ -199,7 +199,7 @@ public void test_getIssuesByUsernameAndRepoPathVars_success() throws Exception { .andReturn().getResponse(); // then - verify(gitDetailsServiceMock).getIssues("test-user", "test-repo"); + verify(gitDetailsServiceMock).getIssues("test-user", "test-repo", false); verify(gitDetailsServiceMock).mapIssuesToResponse(anyList()); assertThat(response.getStatus(), is(HttpStatus.OK.value())); diff --git a/src/test/java/net/ironoc/portfolio/controller/GitProjectsControllerTest.java b/src/test/java/net/ironoc/portfolio/controller/GitProjectsControllerTest.java index a1a45fac..866a68ce 100644 --- a/src/test/java/net/ironoc/portfolio/controller/GitProjectsControllerTest.java +++ b/src/test/java/net/ironoc/portfolio/controller/GitProjectsControllerTest.java @@ -18,6 +18,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.emptyIterable; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.times; @@ -126,7 +127,7 @@ public void test_getIssuesByUsernameAndRepoPathVars_success() { // then verify(httpServletRequestMock).getRequestURI(); verify(httpServletRequestMock, times(2)).getHeader(anyString()); - verify(gitDetailsServiceMock).getIssues(anyString(), anyString()); + verify(gitDetailsServiceMock).getIssues(anyString(), anyString(), anyBoolean()); verify(gitDetailsServiceMock).mapIssuesToResponse(anyList()); assertThat(result, is(notNullValue())); @@ -142,7 +143,7 @@ public void test_getIssuesByUsernameAndRepoPathVars_username_invalid_fail() { // then verify(httpServletRequestMock, never()).getRequestURI(); verify(httpServletRequestMock, never()).getHeader(anyString()); - verify(gitDetailsServiceMock, never()).getIssues(anyString(), anyString()); + verify(gitDetailsServiceMock, never()).getIssues(anyString(), anyString(), anyBoolean()); verify(gitDetailsServiceMock, never()).mapIssuesToResponse(anyList()); assertThat(result, is(notNullValue())); @@ -159,7 +160,7 @@ public void test_getIssuesByUsernameAndRepoPathVars_project_invalid_fail() { // then verify(httpServletRequestMock, never()).getRequestURI(); verify(httpServletRequestMock, never()).getHeader(anyString()); - verify(gitDetailsServiceMock, never()).getIssues(anyString(), anyString()); + verify(gitDetailsServiceMock, never()).getIssues(anyString(), anyString(), anyBoolean()); verify(gitDetailsServiceMock, never()).mapIssuesToResponse(anyList()); assertThat(result, is(notNullValue())); @@ -176,7 +177,7 @@ public void test_getIssuesByUsernameAndRepoPathVars_missing_path_vars_fail() { // then verify(httpServletRequestMock, never()).getRequestURI(); verify(httpServletRequestMock, never()).getHeader(anyString()); - verify(gitDetailsServiceMock, never()).getIssues(anyString(), anyString()); + verify(gitDetailsServiceMock, never()).getIssues(anyString(), anyString(), anyBoolean()); verify(gitDetailsServiceMock, never()).mapIssuesToResponse(anyList()); assertThat(result, is(notNullValue())); diff --git a/src/test/java/net/ironoc/portfolio/job/GitDetailsJobTest.java b/src/test/java/net/ironoc/portfolio/job/GitDetailsJobTest.java index e91e52a4..5db4ae63 100644 --- a/src/test/java/net/ironoc/portfolio/job/GitDetailsJobTest.java +++ b/src/test/java/net/ironoc/portfolio/job/GitDetailsJobTest.java @@ -15,6 +15,7 @@ import java.util.Collections; import java.util.List; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.when; @@ -53,9 +54,9 @@ public void test_triggerGitDetailsJob_success() { when(propertyConfigMock.getGitApiEndpointUserIdsCache()).thenReturn(List.of("conorheffron")); when(propertyConfigMock.getGitApiEndpointProjectsCache()) .thenReturn(List.of("ironoc", "booking-sys")); - when(gitDetailsMock.getRepoDetails(anyString())) + when(gitDetailsMock.getRepoDetails(anyString(), anyBoolean())) .thenReturn(Collections.singletonList(repositoryDetailDtoMock)); - when(gitDetailsMock.getIssues(anyString(), anyString())) + when(gitDetailsMock.getIssues(anyString(), anyString(), anyBoolean())) .thenReturn(Collections.singletonList(repositoryIssueDtoMock)); // when @@ -65,9 +66,9 @@ public void test_triggerGitDetailsJob_success() { verify(propertyConfigMock).isCacheJobEnabled(); verify(propertyConfigMock).getGitApiEndpointProjectsCache(); verify(propertyConfigMock).getGitApiEndpointUserIdsCache(); - verify(gitDetailsMock).getRepoDetails(anyString()); + verify(gitDetailsMock).getRepoDetails(anyString(), anyBoolean()); verify(gitRepoCache).put(anyString(), anyList()); - verify(gitDetailsMock, times(2)).getIssues(anyString(), anyString()); + verify(gitDetailsMock, times(2)).getIssues(anyString(), anyString(), anyBoolean()); verify(gitProjectCache, times(2)).put(anyString(), anyString(), anyList()); } @@ -78,9 +79,9 @@ public void test_populateCache_success() { when(propertyConfigMock.getGitApiEndpointUserIdsCache()).thenReturn(List.of("ironoc-test-id")); when(propertyConfigMock.getGitApiEndpointProjectsCache()) .thenReturn(List.of("ironoc", "booking-sys", "ironoc-db", "nba-stats")); - when(gitDetailsMock.getRepoDetails(anyString())) + when(gitDetailsMock.getRepoDetails(anyString(), anyBoolean())) .thenReturn(Collections.singletonList(repositoryDetailDtoMock)); - when(gitDetailsMock.getIssues(anyString(), anyString())) + when(gitDetailsMock.getIssues(anyString(), anyString(), anyBoolean())) .thenReturn(Collections.singletonList(repositoryIssueDtoMock)); // when @@ -90,9 +91,9 @@ public void test_populateCache_success() { verify(propertyConfigMock).isCacheJobEnabled(); verify(propertyConfigMock).getGitApiEndpointProjectsCache(); verify(propertyConfigMock).getGitApiEndpointUserIdsCache(); - verify(gitDetailsMock).getRepoDetails(anyString()); + verify(gitDetailsMock).getRepoDetails(anyString(), anyBoolean()); verify(gitRepoCache).put(anyString(), anyList()); - verify(gitDetailsMock, times(4)).getIssues(anyString(), anyString()); + verify(gitDetailsMock, times(4)).getIssues(anyString(), anyString(), anyBoolean()); verify(gitProjectCache, times(4)).put(anyString(), anyString(), anyList()); } @@ -108,9 +109,9 @@ public void test_triggerGitDetailsJob_fail() { verify(propertyConfigMock).isCacheJobEnabled(); verify(propertyConfigMock, never()).getGitApiEndpointProjectsCache(); verify(propertyConfigMock, never()).getGitApiEndpointUserIdsCache(); - verify(gitDetailsMock, never()).getRepoDetails(anyString()); + verify(gitDetailsMock, never()).getRepoDetails(anyString(), anyBoolean()); verify(gitRepoCache, never()).put(anyString(), anyList()); - verify(gitDetailsMock, never()).getIssues(anyString(), anyString()); + verify(gitDetailsMock, never()).getIssues(anyString(), anyString(), anyBoolean()); verify(gitProjectCache, never()).put(anyString(), anyString(), anyList()); } @@ -126,9 +127,9 @@ public void test_populateCache_fail() { verify(propertyConfigMock).isCacheJobEnabled(); verify(propertyConfigMock, never()).getGitApiEndpointProjectsCache(); verify(propertyConfigMock, never()).getGitApiEndpointUserIdsCache(); - verify(gitDetailsMock, never()).getRepoDetails(anyString()); + verify(gitDetailsMock, never()).getRepoDetails(anyString(), anyBoolean()); verify(gitRepoCache, never()).put(anyString(), anyList()); - verify(gitDetailsMock, never()).getIssues(anyString(), anyString()); + verify(gitDetailsMock, never()).getIssues(anyString(), anyString(), anyBoolean()); verify(gitProjectCache, never()).put(anyString(), anyString(), anyList()); } } diff --git a/src/test/java/net/ironoc/portfolio/job/GitDetailsRunnableTest.java b/src/test/java/net/ironoc/portfolio/job/GitDetailsRunnableTest.java index fdbbeb03..0c52f156 100644 --- a/src/test/java/net/ironoc/portfolio/job/GitDetailsRunnableTest.java +++ b/src/test/java/net/ironoc/portfolio/job/GitDetailsRunnableTest.java @@ -17,6 +17,7 @@ import static org.hamcrest.Matchers.emptyIterable; import static org.hamcrest.Matchers.hasSize; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.ArgumentMatchers.anyString; import static org.hamcrest.MatcherAssert.assertThat; @@ -59,9 +60,9 @@ public void setup() { @Test public void test_run_tearDown_success() { // given - when(gitDetailsMock.getRepoDetails(anyString())) + when(gitDetailsMock.getRepoDetails(anyString(), anyBoolean())) .thenReturn(Collections.singletonList(repositoryDetailDtoMock)); - when(gitDetailsMock.getIssues(anyString(), anyString())) + when(gitDetailsMock.getIssues(anyString(), anyString(), anyBoolean())) .thenReturn(Collections.singletonList(repositoryIssueDtoMock)); // when @@ -70,7 +71,7 @@ public void test_run_tearDown_success() { // then verify(propertyConfigMock).getGitApiEndpointProjectsCache(); verify(propertyConfigMock).getGitApiEndpointUserIdsCache(); - verify(gitDetailsMock).getRepoDetails(anyString()); + verify(gitDetailsMock).getRepoDetails(anyString(), anyBoolean()); verify(gitRepoCacheMock).put(anyString(), anyList()); verify(gitDetailsMock).mapRepositoriesToResponse(anyList()); verify(gitProjectCacheMock, times(3)).put(anyString(), anyString(), anyList()); diff --git a/src/test/java/net/ironoc/portfolio/service/GitDetailsServiceTest.java b/src/test/java/net/ironoc/portfolio/service/GitDetailsServiceTest.java index 67895204..8bba424d 100644 --- a/src/test/java/net/ironoc/portfolio/service/GitDetailsServiceTest.java +++ b/src/test/java/net/ironoc/portfolio/service/GitDetailsServiceTest.java @@ -92,7 +92,7 @@ public void test_get_repos_success() throws IOException { .thenReturn(objectMapper.readValue(jsonInputStream, listType)); // when - List results = gitDetailsService.getRepoDetails(testUserId); + List results = gitDetailsService.getRepoDetails(testUserId, false); // then verify(propertyConfigMock).getGitApiEndpointRepos(); @@ -147,7 +147,7 @@ public void test_get_issues_success() throws IOException { .thenReturn(objectMapper.readValue(jsonInputStream, listType)); // when - List results = gitDetailsService.getIssues(testUserId, testRepo); + List results = gitDetailsService.getIssues(testUserId, testRepo, false); // then verify(propertyConfigMock).getGitApiEndpointIssues(); @@ -188,7 +188,7 @@ public void test_get_repos_parseNull_values_success() throws IOException { .thenReturn(objectMapper.readValue(jsonInputStream, listType)); // when - List results = gitDetailsService.getRepoDetails(testUserId); + List results = gitDetailsService.getRepoDetails(testUserId, false); // then verify(propertyConfigMock).getGitApiEndpointRepos(); @@ -212,7 +212,7 @@ public void test_getRepoDetails_result_cached_success() { String testUserId = "conorheffron"; // when - List results = gitDetailsService.getRepoDetails(testUserId); + List results = gitDetailsService.getRepoDetails(testUserId, false); // then verify(gitRepoCacheMock).get(IRONOC_GIT_USER); @@ -228,7 +228,7 @@ public void test_getRepoDetails_url_invalid_fail() { when(propertyConfigMock.getGitApiEndpointRepos()).thenReturn(TEST_URI); // when - List results = gitDetailsService.getRepoDetails(testUserId); + List results = gitDetailsService.getRepoDetails(testUserId, false); // then verify(propertyConfigMock).getGitApiEndpointRepos(); @@ -360,7 +360,7 @@ public void test_getIssues_url_invalid_fail() { when(propertyConfigMock.getGitApiEndpointIssues()).thenReturn(TEST_URI); // when - List results = gitDetailsService.getIssues(testUserId, testProject); + List results = gitDetailsService.getIssues(testUserId, testProject, false); // then verify(propertyConfigMock).getGitApiEndpointIssues();