{"action":"created","comment":{"url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls/comments/184391092","pull_request_review_id":115567150,"id":184391092,"diff_hunk":"@@ -0,0 +1,522 @@\n+package io.jenkins.plugins.analysis.core.history;\n+\n+import java.util.Collections;\n+import java.util.List;\n+import java.util.Optional;\n+\n+import org.junit.jupiter.api.Test;\n+\n+import io.jenkins.plugins.analysis.core.model.AnalysisResult;\n+import static io.jenkins.plugins.analysis.core.testutil.Assertions.assertThat;\n+import io.jenkins.plugins.analysis.core.views.ResultAction;\n+import static org.mockito.Mockito.*;\n+\n+import hudson.model.Result;\n+import hudson.model.Run;\n+\n+/**\n+ * PreviousRunReferenceTest to test PreviousRunReference.\n+ */\n+class PreviousRunReferenceTest extends ReferenceFinderTest {\n+\n+    @Override\n+    ReferenceFinder getReferenceFinder(final Run baseline, final ResultSelector resultSelector) {\n+        return new PreviousRunReference(baseline, resultSelector, true);\n+    }\n+\n+    /**\n+     * Test that there are no previous actions and stableRun is not build yet, with overallResultMusBeSuccess = false.\n+     */\n+    @Test\n+    void notBuild_withAnyResult_shouldReturnNothing() {\n+\n+        Run<?, ?> baseline = mock(Run.class);\n+        ResultSelector selector = mock(ResultSelector.class);\n+        PreviousRunReference previousRun = new PreviousRunReference(baseline, selector,\n+                false);\n+\n+        Optional<ResultAction> resultAction = previousRun.getReferenceAction();\n+\n+        assertThat(resultAction).isEmpty();\n+    }\n+\n+    /**\n+     * Test that there are no previous action and stableRun is not build yet, with overallResultMusBeSuccess = true.\n+     */\n+    @Test\n+    void notBuild_withSuccessful_shouldReturnNothing() {\n+\n+        Run<?, ?> baseline = mock(Run.class);\n+        ResultSelector selector = mock(ResultSelector.class);\n+        PreviousRunReference previousRun = new PreviousRunReference(baseline, selector,\n+                true);\n+\n+        Optional<ResultAction> resultAction = previousRun.getReferenceAction();\n+\n+        assertThat(resultAction).isEmpty();\n+    }\n+\n+    /**\n+     * Test that there are no previous action, with overallResultMusBeSuccess = true.\n+     */\n+    @Test\n+    void noActions_withSuccessful_shouldReturnNothing() {\n+\n+        Run baseline = mock(Run.class);\n+        Run previousRunMock = mock(Run.class);\n+        when(baseline.getPreviousBuild()).thenReturn(previousRunMock);\n+\n+        ResultSelector selector = mock(ResultSelector.class);\n+        when(selector.get(previousRunMock)).thenReturn(Optional.empty());\n+\n+        PreviousRunReference previousRun = new PreviousRunReference(baseline, selector,\n+                true);\n+\n+        Optional<ResultAction> resultAction = previousRun.getReferenceAction();\n+\n+        assertThat(resultAction).isEmpty();\n+    }\n+\n+    /**\n+     * Test that there are no previous action, with overallResultMusBeSuccess = false.\n+     */\n+    @Test\n+    void noActions_withAnyResult_shouldReturnNothing() {\n+\n+        Run baseline = mock(Run.class);\n+        Run previousRunMock = mock(Run.class);\n+        when(baseline.getPreviousBuild()).thenReturn(previousRunMock);\n+\n+        ResultSelector selector = mock(ResultSelector.class);\n+        when(selector.get(previousRunMock)).thenReturn(Optional.empty());\n+\n+        PreviousRunReference previousRun = new PreviousRunReference(baseline, selector,\n+                false);\n+\n+        Optional<ResultAction> resultAction = previousRun.getReferenceAction();\n+\n+        assertThat(resultAction).isEmpty();\n+    }\n+\n+    /**\n+     * Test that there is one unsuccesful previous action, with overallResultMusBeSuccess = true.\n+     */\n+    @Test\n+    void oneFalseAction_withSuccessful_shouldReturnNothing() {\n+\n+        Run baseline = mock(Run.class);\n+        Run prevRun = mock(Run.class);\n+        when(baseline.getPreviousBuild()).thenReturn(prevRun);\n+        when(prevRun.getResult()).thenReturn(Result.FAILURE);\n+\n+        ResultSelector resultSelector = mock(ResultSelector.class);\n+\n+        ResultAction action = mock(ResultAction.class);\n+        when(resultSelector.get(prevRun)).thenReturn(Optional.of(action));\n+        when(prevRun.getActions(ResultAction.class)).thenReturn(Collections.singletonList(action));\n+        when(action.isSuccessful()).thenReturn(true);\n+\n+        AnalysisResult analysisResult = mock(AnalysisResult.class);\n+        when(action.getResult()).thenReturn(analysisResult);\n+\n+        PreviousRunReference stablePluginReference = new PreviousRunReference(baseline, resultSelector,\n+                true);\n+\n+        Optional<ResultAction> resultAction = stablePluginReference.getReferenceAction();\n+\n+        verify(resultSelector, times(1)).get(prevRun);\n+        assertThat(resultAction).isEmpty();\n+    }\n+\n+    /**\n+     * Test that there is one unsuccesful previous action, with overallResultMusBeSuccess = false.\n+     */\n+    @Test\n+    void oneFalseAction_withAnyResult_shouldReturnOne() {\n+        Run baseline = mock(Run.class);\n+        Run previousRunMock = mock(Run.class);\n+        when(baseline.getPreviousBuild()).thenReturn(previousRunMock);\n+        when(previousRunMock.getResult()).thenReturn(Result.FAILURE);\n+\n+        ResultAction action = mock(ResultAction.class);\n+        when(action.isSuccessful()).thenReturn(true);\n+\n+        AnalysisResult analysis = mock(AnalysisResult.class);\n+        when(action.getResult()).thenReturn(analysis);\n+        when(analysis.getOverallResult()).thenReturn(Result.FAILURE);\n+\n+        ResultSelector selector = mock(ResultSelector.class);\n+        when(selector.get(previousRunMock)).thenReturn(Optional.of(action));\n+\n+        List<ResultAction> actions = Collections.singletonList(action);\n+        when(previousRunMock.getActions(ResultAction.class)).thenReturn(actions);\n+\n+        PreviousRunReference previousRun = new PreviousRunReference(baseline, selector,\n+                false);\n+\n+        Optional<ResultAction> resultAction = previousRun.getReferenceAction();\n+\n+        verify(selector, times(2)).get(previousRunMock);\n+        assertThat(resultAction).isEqualTo(Optional.of(action));\n+    }\n+\n+    /**\n+     * Test that there is one succesful previous action, with overallResultMusBeSuccess = true.\n+     */\n+    @Test\n+    void oneTrueAction_withSuccessful_shouldReturnOne() {\n+        Run baseline = mock(Run.class);\n+        Run previousRunMock = mock(Run.class);\n+        when(baseline.getPreviousBuild()).thenReturn(previousRunMock);\n+        when(previousRunMock.getResult()).thenReturn(Result.SUCCESS);\n+\n+        ResultAction action = mock(ResultAction.class);\n+        when(action.isSuccessful()).thenReturn(true);\n+\n+        AnalysisResult analysis = mock(AnalysisResult.class);\n+        when(action.getResult()).thenReturn(analysis);\n+        when(analysis.getOverallResult()).thenReturn(Result.SUCCESS);\n+\n+        ResultSelector selector = mock(ResultSelector.class);\n+        when(selector.get(previousRunMock)).thenReturn(Optional.of(action));\n+\n+        List<ResultAction> actions = Collections.singletonList(action);\n+        when(previousRunMock.getActions(ResultAction.class)).thenReturn(actions);\n+\n+        PreviousRunReference previousRun = new PreviousRunReference(baseline, selector,\n+                true);\n+\n+        Optional<ResultAction> resultAction = previousRun.getReferenceAction();\n+\n+        verify(selector, times(2)).get(previousRunMock);\n+        assertThat(resultAction).isEqualTo(Optional.of(action));\n+    }\n+\n+    /**\n+     * Test that there is one unstable previous action, with overallResultMusBeSuccess = false.\n+     */\n+    @Test\n+    void oneUnstableAction_withAnyResult_shouldReturnOne() {\n+        Run baseline = mock(Run.class);\n+        Run previousRunMock = mock(Run.class);\n+        when(baseline.getPreviousBuild()).thenReturn(previousRunMock);\n+        when(previousRunMock.getResult()).thenReturn(Result.UNSTABLE);\n+\n+        ResultAction action = mock(ResultAction.class);\n+        when(action.isSuccessful()).thenReturn(true);\n+\n+        AnalysisResult analysis = mock(AnalysisResult.class);\n+        when(action.getResult()).thenReturn(analysis);\n+        when(analysis.getOverallResult()).thenReturn(Result.UNSTABLE);\n+\n+        ResultSelector selector = mock(ResultSelector.class);\n+        when(selector.get(previousRunMock)).thenReturn(Optional.of(action));\n+\n+        List<ResultAction> actions = Collections.singletonList(action);\n+        when(previousRunMock.getActions(ResultAction.class)).thenReturn(actions);\n+\n+        PreviousRunReference previousRun = new PreviousRunReference(baseline, selector,\n+                false);\n+\n+        Optional<ResultAction> resultAction = previousRun.getReferenceAction();\n+\n+        verify(selector, times(2)).get(previousRunMock);\n+        assertThat(resultAction).isEqualTo(Optional.of(action));\n+    }\n+\n+    /**\n+     * Test that there is one unstable previous action, with overallResultMusBeSuccess = true.\n+     */\n+    @Test\n+    void oneUnstableAction_withSuccessful_shouldReturnNothing() {\n+        Run baseline = mock(Run.class);\n+        Run previousRunMock = mock(Run.class);\n+        when(baseline.getPreviousBuild()).thenReturn(previousRunMock);\n+        when(previousRunMock.getResult()).thenReturn(Result.UNSTABLE);\n+\n+        ResultAction action = mock(ResultAction.class);\n+        when(action.isSuccessful()).thenReturn(true);\n+\n+        AnalysisResult analysis = mock(AnalysisResult.class);\n+        when(action.getResult()).thenReturn(analysis);\n+        when(analysis.getOverallResult()).thenReturn(Result.UNSTABLE);\n+\n+        ResultSelector selector = mock(ResultSelector.class);\n+        when(selector.get(previousRunMock)).thenReturn(Optional.of(action));\n+\n+        List<ResultAction> actions = Collections.singletonList(action);\n+        when(previousRunMock.getActions(ResultAction.class)).thenReturn(actions);\n+\n+        PreviousRunReference previousRun = new PreviousRunReference(baseline, selector,\n+                true);\n+\n+        Optional<ResultAction> resultAction = previousRun.getReferenceAction();\n+\n+        verify(selector, times(1)).get(previousRunMock);\n+        assertThat(resultAction).isEmpty();\n+    }\n+\n+    /**\n+     * Test that there are two succesful previous action, with overallResultMusBeSuccess = false.\n+     */\n+    @Test\n+    void twoTrueAction_withAnyResult_shouldReturnTwo() {\n+        Run baseline = mock(Run.class);\n+        Run previousRunMock = mock(Run.class);\n+        when(baseline.getPreviousBuild()).thenReturn(previousRunMock);\n+        when(previousRunMock.getResult()).thenReturn(Result.SUCCESS, Result.SUCCESS);\n+\n+        ResultAction action = mock(ResultAction.class);\n+        when(action.isSuccessful()).thenReturn(true);\n+\n+        AnalysisResult analysis = mock(AnalysisResult.class);\n+        when(action.getResult()).thenReturn(analysis);\n+        when(analysis.getOverallResult()).thenReturn(Result.SUCCESS, Result.SUCCESS);\n+\n+        ResultSelector selector = mock(ResultSelector.class);\n+        when(selector.get(previousRunMock)).thenReturn(Optional.of(action));\n+\n+        List<ResultAction> actions = Collections.singletonList(action);\n+        when(previousRunMock.getActions(ResultAction.class)).thenReturn(actions);\n+\n+        PreviousRunReference previousRun = new PreviousRunReference(baseline, selector,\n+                false);\n+\n+        Optional<ResultAction> resultAction1 = previousRun.getReferenceAction();\n+        Optional<ResultAction> resultAction2 = previousRun.getReferenceAction();\n+\n+        verify(selector, times(4)).get(previousRunMock);\n+        assertThat(resultAction1).isEqualTo(Optional.of(action));\n+        assertThat(resultAction2).isEqualTo(Optional.of(action));\n+    }\n+\n+    /**\n+     * Test that there are two previous action, with overallResultMusBeSuccess = false.\n+     */\n+    @Test\n+    void twoAction_withAnyResult_shouldReturnTwo() {\n+        Run baseline = mock(Run.class);\n+        Run previousRunMock = mock(Run.class);\n+        when(baseline.getPreviousBuild()).thenReturn(previousRunMock);\n+        when(previousRunMock.getResult()).thenReturn(Result.FAILURE, Result.SUCCESS);\n+\n+        ResultAction action = mock(ResultAction.class);\n+        when(action.isSuccessful()).thenReturn(true);\n+\n+        AnalysisResult analysis = mock(AnalysisResult.class);\n+        when(action.getResult()).thenReturn(analysis);\n+        when(analysis.getOverallResult()).thenReturn(Result.FAILURE, Result.SUCCESS);\n+\n+        ResultSelector selector = mock(ResultSelector.class);\n+        when(selector.get(previousRunMock)).thenReturn(Optional.of(action));\n+\n+        List<ResultAction> actions = Collections.singletonList(action);\n+        when(previousRunMock.getActions(ResultAction.class)).thenReturn(actions);\n+\n+        PreviousRunReference previousRun = new PreviousRunReference(baseline, selector,\n+                false);\n+\n+        Optional<ResultAction> resultAction1 = previousRun.getReferenceAction();\n+        Optional<ResultAction> resultAction2 = previousRun.getReferenceAction();\n+\n+        verify(selector, times(4)).get(previousRunMock);\n+        assertThat(resultAction1).isEqualTo(Optional.of(action));\n+        assertThat(resultAction2).isEqualTo(Optional.of(action));\n+    }\n+\n+    /**\n+     * Test that there are two previous action (FAILURE and SUCCESS), with overallResultMusBeSuccess = true.\n+     */\n+    @Test\n+    void twoAction_withSuccessful_shouldReturnOne() {\n+        Run baseline = mock(Run.class);\n+        Run previousRunMock = mock(Run.class);\n+        when(baseline.getPreviousBuild()).thenReturn(previousRunMock);\n+        when(previousRunMock.getResult()).thenReturn(Result.FAILURE, Result.SUCCESS);\n+\n+        ResultAction action = mock(ResultAction.class);\n+        when(action.isSuccessful()).thenReturn(true);\n+\n+        AnalysisResult analysis = mock(AnalysisResult.class);\n+        when(action.getResult()).thenReturn(analysis);\n+        when(analysis.getOverallResult()).thenReturn(Result.FAILURE, Result.SUCCESS);\n+\n+        ResultSelector selector = mock(ResultSelector.class);\n+        when(selector.get(previousRunMock)).thenReturn(Optional.of(action));\n+\n+        List<ResultAction> actions = Collections.singletonList(action);\n+        when(previousRunMock.getActions(ResultAction.class)).thenReturn(actions);\n+\n+        PreviousRunReference previousRun = new PreviousRunReference(baseline, selector,\n+                true);\n+\n+        Optional<ResultAction> resultAction1 = previousRun.getReferenceAction();\n+        Optional<ResultAction> resultAction2 = previousRun.getReferenceAction();\n+\n+        verify(selector, times(3)).get(previousRunMock);\n+        assertThat(resultAction1).isEmpty();\n+        assertThat(resultAction2).isEqualTo(Optional.of(action));\n+    }","path":"src/test/java/io/jenkins/plugins/analysis/core/history/PreviousRunReferenceTest.java","position":359,"original_position":359,"commit_id":"b1ec702237f9fdc73290244289c146f5914979a8","original_commit_id":"b1ec702237f9fdc73290244289c146f5914979a8","user":{"login":"LokiNightray","id":8606833,"avatar_url":"https://avatars3.githubusercontent.com/u/8606833?v=4","gravatar_id":"","url":"https://api.github.com/users/LokiNightray","html_url":"https://github.com/LokiNightray","followers_url":"https://api.github.com/users/LokiNightray/followers","following_url":"https://api.github.com/users/LokiNightray/following{/other_user}","gists_url":"https://api.github.com/users/LokiNightray/gists{/gist_id}","starred_url":"https://api.github.com/users/LokiNightray/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LokiNightray/subscriptions","organizations_url":"https://api.github.com/users/LokiNightray/orgs","repos_url":"https://api.github.com/users/LokiNightray/repos","events_url":"https://api.github.com/users/LokiNightray/events{/privacy}","received_events_url":"https://api.github.com/users/LokiNightray/received_events","type":"User","site_admin":false},"body":"when(previousRunMock.getResult()).thenReturn(Result.FAILURE); when(analysis.getOverallResult()).thenReturn(Result.FAILURE);\r\nassertThat(previousRun.getReferenceAction()).isEmpty();\r\n\r\nwhen(previousRunMock.getResult()).thenReturn(Result.SUCCESS);\r\n when(analysis.getOverallResult()).thenReturn(Result.SUCCESS);\r\nassertThat(previousRun.getReferenceAction()).contains(action);","created_at":"2018-04-26T13:35:48Z","updated_at":"2018-04-26T13:42:04Z","html_url":"https://github.com/Martin4Prog/analysis-core-plugin/pull/3#discussion_r184391092","pull_request_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls/3","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls/comments/184391092"},"html":{"href":"https://github.com/Martin4Prog/analysis-core-plugin/pull/3#discussion_r184391092"},"pull_request":{"href":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls/3"}}},"pull_request":{"url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls/3","id":184319901,"html_url":"https://github.com/Martin4Prog/analysis-core-plugin/pull/3","diff_url":"https://github.com/Martin4Prog/analysis-core-plugin/pull/3.diff","patch_url":"https://github.com/Martin4Prog/analysis-core-plugin/pull/3.patch","issue_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/issues/3","number":3,"state":"open","locked":false,"title":"Jenkins 50072","user":{"login":"Martin4Prog","id":37656988,"avatar_url":"https://avatars3.githubusercontent.com/u/37656988?v=4","gravatar_id":"","url":"https://api.github.com/users/Martin4Prog","html_url":"https://github.com/Martin4Prog","followers_url":"https://api.github.com/users/Martin4Prog/followers","following_url":"https://api.github.com/users/Martin4Prog/following{/other_user}","gists_url":"https://api.github.com/users/Martin4Prog/gists{/gist_id}","starred_url":"https://api.github.com/users/Martin4Prog/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Martin4Prog/subscriptions","organizations_url":"https://api.github.com/users/Martin4Prog/orgs","repos_url":"https://api.github.com/users/Martin4Prog/repos","events_url":"https://api.github.com/users/Martin4Prog/events{/privacy}","received_events_url":"https://api.github.com/users/Martin4Prog/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-04-26T12:14:50Z","updated_at":"2018-04-26T13:42:04Z","closed_at":null,"merged_at":null,"merge_commit_sha":"379d166a45bc90c758f0a456737e5c808b08eeaa","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls/3/commits","review_comments_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls/3/comments","review_comment_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/issues/3/comments","statuses_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/statuses/b1ec702237f9fdc73290244289c146f5914979a8","head":{"label":"Martin4Prog:JENKINS-50072","ref":"JENKINS-50072","sha":"b1ec702237f9fdc73290244289c146f5914979a8","user":{"login":"Martin4Prog","id":37656988,"avatar_url":"https://avatars3.githubusercontent.com/u/37656988?v=4","gravatar_id":"","url":"https://api.github.com/users/Martin4Prog","html_url":"https://github.com/Martin4Prog","followers_url":"https://api.github.com/users/Martin4Prog/followers","following_url":"https://api.github.com/users/Martin4Prog/following{/other_user}","gists_url":"https://api.github.com/users/Martin4Prog/gists{/gist_id}","starred_url":"https://api.github.com/users/Martin4Prog/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Martin4Prog/subscriptions","organizations_url":"https://api.github.com/users/Martin4Prog/orgs","repos_url":"https://api.github.com/users/Martin4Prog/repos","events_url":"https://api.github.com/users/Martin4Prog/events{/privacy}","received_events_url":"https://api.github.com/users/Martin4Prog/received_events","type":"User","site_admin":false},"repo":{"id":126339988,"name":"analysis-core-plugin","full_name":"Martin4Prog/analysis-core-plugin","owner":{"login":"Martin4Prog","id":37656988,"avatar_url":"https://avatars3.githubusercontent.com/u/37656988?v=4","gravatar_id":"","url":"https://api.github.com/users/Martin4Prog","html_url":"https://github.com/Martin4Prog","followers_url":"https://api.github.com/users/Martin4Prog/followers","following_url":"https://api.github.com/users/Martin4Prog/following{/other_user}","gists_url":"https://api.github.com/users/Martin4Prog/gists{/gist_id}","starred_url":"https://api.github.com/users/Martin4Prog/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Martin4Prog/subscriptions","organizations_url":"https://api.github.com/users/Martin4Prog/orgs","repos_url":"https://api.github.com/users/Martin4Prog/repos","events_url":"https://api.github.com/users/Martin4Prog/events{/privacy}","received_events_url":"https://api.github.com/users/Martin4Prog/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Martin4Prog/analysis-core-plugin","description":"Jenkins analysis-core plugin","fork":true,"url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin","forks_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/forks","keys_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/teams","hooks_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/hooks","issue_events_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/issues/events{/number}","events_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/events","assignees_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/assignees{/user}","branches_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/branches{/branch}","tags_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/tags","blobs_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/git/refs{/sha}","trees_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/statuses/{sha}","languages_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/languages","stargazers_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/stargazers","contributors_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/contributors","subscribers_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/subscribers","subscription_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/subscription","commits_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/commits{/sha}","git_commits_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/git/commits{/sha}","comments_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/comments{/number}","issue_comment_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/issues/comments{/number}","contents_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/contents/{+path}","compare_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/merges","archive_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/downloads","issues_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/issues{/number}","pulls_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls{/number}","milestones_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/milestones{/number}","notifications_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/labels{/name}","releases_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/releases{/id}","deployments_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/deployments","created_at":"2018-03-22T13:32:43Z","updated_at":"2018-03-22T13:32:45Z","pushed_at":"2018-04-26T12:14:51Z","git_url":"git://github.com/Martin4Prog/analysis-core-plugin.git","ssh_url":"git@github.com:Martin4Prog/analysis-core-plugin.git","clone_url":"https://github.com/Martin4Prog/analysis-core-plugin.git","svn_url":"https://github.com/Martin4Prog/analysis-core-plugin","homepage":"http://jenkins-ci.org/","size":3883,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"Martin4Prog:hm-edu-testing","ref":"hm-edu-testing","sha":"20a6e3a82e03b8933aaaf541217ce1044c2c4c02","user":{"login":"Martin4Prog","id":37656988,"avatar_url":"https://avatars3.githubusercontent.com/u/37656988?v=4","gravatar_id":"","url":"https://api.github.com/users/Martin4Prog","html_url":"https://github.com/Martin4Prog","followers_url":"https://api.github.com/users/Martin4Prog/followers","following_url":"https://api.github.com/users/Martin4Prog/following{/other_user}","gists_url":"https://api.github.com/users/Martin4Prog/gists{/gist_id}","starred_url":"https://api.github.com/users/Martin4Prog/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Martin4Prog/subscriptions","organizations_url":"https://api.github.com/users/Martin4Prog/orgs","repos_url":"https://api.github.com/users/Martin4Prog/repos","events_url":"https://api.github.com/users/Martin4Prog/events{/privacy}","received_events_url":"https://api.github.com/users/Martin4Prog/received_events","type":"User","site_admin":false},"repo":{"id":126339988,"name":"analysis-core-plugin","full_name":"Martin4Prog/analysis-core-plugin","owner":{"login":"Martin4Prog","id":37656988,"avatar_url":"https://avatars3.githubusercontent.com/u/37656988?v=4","gravatar_id":"","url":"https://api.github.com/users/Martin4Prog","html_url":"https://github.com/Martin4Prog","followers_url":"https://api.github.com/users/Martin4Prog/followers","following_url":"https://api.github.com/users/Martin4Prog/following{/other_user}","gists_url":"https://api.github.com/users/Martin4Prog/gists{/gist_id}","starred_url":"https://api.github.com/users/Martin4Prog/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Martin4Prog/subscriptions","organizations_url":"https://api.github.com/users/Martin4Prog/orgs","repos_url":"https://api.github.com/users/Martin4Prog/repos","events_url":"https://api.github.com/users/Martin4Prog/events{/privacy}","received_events_url":"https://api.github.com/users/Martin4Prog/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Martin4Prog/analysis-core-plugin","description":"Jenkins analysis-core plugin","fork":true,"url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin","forks_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/forks","keys_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/teams","hooks_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/hooks","issue_events_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/issues/events{/number}","events_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/events","assignees_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/assignees{/user}","branches_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/branches{/branch}","tags_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/tags","blobs_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/git/refs{/sha}","trees_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/statuses/{sha}","languages_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/languages","stargazers_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/stargazers","contributors_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/contributors","subscribers_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/subscribers","subscription_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/subscription","commits_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/commits{/sha}","git_commits_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/git/commits{/sha}","comments_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/comments{/number}","issue_comment_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/issues/comments{/number}","contents_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/contents/{+path}","compare_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/merges","archive_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/downloads","issues_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/issues{/number}","pulls_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls{/number}","milestones_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/milestones{/number}","notifications_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/labels{/name}","releases_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/releases{/id}","deployments_url":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/deployments","created_at":"2018-03-22T13:32:43Z","updated_at":"2018-03-22T13:32:45Z","pushed_at":"2018-04-26T12:14:51Z","git_url":"git://github.com/Martin4Prog/analysis-core-plugin.git","ssh_url":"git@github.com:Martin4Prog/analysis-core-plugin.git","clone_url":"https://github.com/Martin4Prog/analysis-core-plugin.git","svn_url":"https://github.com/Martin4Prog/analysis-core-plugin","homepage":"http://jenkins-ci.org/","size":3883,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls/3"},"html":{"href":"https://github.com/Martin4Prog/analysis-core-plugin/pull/3"},"issue":{"href":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/issues/3"},"comments":{"href":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/issues/3/comments"},"review_comments":{"href":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls/3/comments"},"review_comment":{"href":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/pulls/3/commits"},"statuses":{"href":"https://api.github.com/repos/Martin4Prog/analysis-core-plugin/statuses/b1ec702237f9fdc73290244289c146f5914979a8"}},"author_association":"OWNER"}}
{"actor":{"display_login":"LokiNightray"}}