package com.statscollector.gerrit.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Future; import org.apache.http.client.CredentialsProvider; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import com.google.gerrit.extensions.common.ChangeInfo; import com.statscollector.gerrit.authentication.GerritAuthenticationHelper; import com.statscollector.gerrit.config.GerritConfig; import com.statscollector.gerrit.dao.GerritDao; import com.statscollector.gerrit.model.GerritReviewStatsResult; public class GerritStatisticsHelperTest { private final GerritStatisticsHelper gerritStatisticsHelper = new GerritStatisticsHelper(); private final GerritDao gerritDao = Mockito.mock(GerritDao.class); private final GerritAuthenticationHelper authenticationHelper = Mockito.mock(GerritAuthenticationHelper.class); private final CredentialsProvider credentialsProvider = Mockito.mock(CredentialsProvider.class); private final GerritConfig gerritConfig = Mockito.mock(GerritConfig.class); private final GerritService gerritService = new GerritService(); private final String jsonDetailsString = "{\"id\":\"testwebview~develop~Ic69e4a99cbed45f3ec3e48c8151fa1dedc4043ac\",\"project\":\"testwebview\",\"branch\":\"develop\",\"change_id\":\"Ic69e4a99cbed45f3ec3e48c8151fa1dedc4043ac\",\"subject\":\"TESTTESTTEST-5032: fix to show correct disruption alert info\",\"status\":\"NEW\",\"created\":\"2015-05-28 13:54:59.736000000\",\"updated\":\"2015-05-28 13:55:07.720000000\",\"mergeable\":true,\"insertions\":3,\"deletions\":2,\"_sortkey\":\"003568030000259d\",\"_number\":9629,\"owner\":{\"_account_id\":1000027,\"name\":\"Test Reviewer5\",\"email\":\"test@gmail.com\",\"username\":\"testreviewer5\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/testreviewer5.png\",\"height\":26}]},\"labels\":{\"Code-Review\":{\"all\":[{\"value\":0,\"_account_id\":1000003,\"name\":\"Test Reviewer3\",\"email\":\"test@gmail.com\",\"username\":\"testreviewer3\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/testreviewer3.png\",\"height\":26}]},{\"value\":2,\"_account_id\":1000000,\"name\":\"Test Reviewer1\",\"email\":\"test2@googlemail.com\",\"username\":\"testuser1\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/testuser1.png\",\"height\":26}]},{\"_account_id\":1000004,\"name\":\"Jenkins Test\",\"email\":\"test.jenkins@gmail.com\",\"username\":\"jenkins\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/jenkins.png\",\"height\":26}]}],\"values\":{\"-2\":\"Do not submit\",\"-1\":\"I would prefer that you didn\u0027t submit this\",\" 0\":\"No score\",\"+1\":\"Looks good to me, but someone else must approve\",\"+2\":\"Looks good to me, approved\"},\"default_value\":0},\"Verified\":{\"approved\":{\"_account_id\":1000004,\"name\":\"Jenkins Test\",\"email\":\"test.jenkins@gmail.com\",\"username\":\"jenkins\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/jenkins.png\",\"height\":26}]},\"all\":[{\"value\":0,\"date\":\"2015-05-28 13:55:35.595000000\",\"_account_id\":1000003,\"name\":\"Test Reviewer3\",\"email\":\"test@gmail.com\",\"username\":\"testreviewer3\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/testreviewer3.png\",\"height\":26}]},{\"value\":0,\"date\":\"2015-05-28 13:55:26.220000000\",\"_account_id\":1000000,\"name\":\"Test Reviewer1\",\"email\":\"test2@googlemail.com\",\"username\":\"testuser1\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/testuser1.png\",\"height\":26}]},{\"value\":1,\"date\":\"2015-05-28 13:55:07.720000000\",\"_account_id\":1000004,\"name\":\"Jenkins Test\",\"email\":\"test.jenkins@gmail.com\",\"username\":\"jenkins\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/jenkins.png\",\"height\":26}]}],\"values\":{\"-1\":\"Fails\",\" 0\":\"No score\",\"+1\":\"Verified\"},\"default_value\":0}},\"permitted_labels\":{\"Code-Review\":[\"-2\",\"-1\",\" 0\",\"+1\",\"+2\"],\"Verified\":[\"-1\",\" 0\",\"+1\"]},\"removable_reviewers\":[{\"_account_id\":1000003,\"name\":\"Test Reviewer3\",\"email\":\"test@gmail.com\",\"username\":\"testreviewer3\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/testreviewer3.png\",\"height\":26}]},{\"_account_id\":1000004,\"name\":\"Jenkins Test\",\"email\":\"test.jenkins@gmail.com\",\"username\":\"jenkins\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/jenkins.png\",\"height\":26}]},{\"_account_id\":1000000,\"name\":\"Test Reviewer1\",\"email\":\"test2@googlemail.com\",\"username\":\"testuser1\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/testuser1.png\",\"height\":26}]}],\"messages\":[{\"id\":\"fa80f949_9225dc5d\",\"author\":{\"_account_id\":1000027,\"name\":\"Test Reviewer5\",\"email\":\"test@gmail.com\",\"username\":\"testreviewer5\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/testreviewer5.png\",\"height\":26}]},\"date\":\"2015-05-28 13:54:59.736000000\",\"message\":\"Uploaded patch set 1.\",\"_revision_number\":1},{\"id\":\"fa80f949_b22a602b\",\"author\":{\"_account_id\":1000004,\"name\":\"Jenkins Test\",\"email\":\"test.jenkins@gmail.com\",\"username\":\"jenkins\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/jenkins.png\",\"height\":26}]},\"date\":\"2015-05-28 13:55:04.730000000\",\"message\":\"Patch Set 1:\n\nBuild Started http://testjenkins:8085/job/Gerrit-TestWebView/22/\",\"_revision_number\":1},{\"id\":\"fa80f949_5220d449\",\"author\":{\"_account_id\":1000004,\"name\":\"Jenkins Test\",\"email\":\"test.jenkins@gmail.com\",\"username\":\"jenkins\",\"avatars\":[{\"url\":\"http://test-test-wiki.co.uk/avatars/jenkins.png\",\"height\":26}]},\"date\":\"2015-05-28 13:55:07.720000000\",\"message\":\"Patch Set 1: Verified+1\n\nBuild Successful \n\nhttp://testjenkins:8085/job/Gerrit-TestWebView/22/ : SUCCESS\",\"_revision_number\":1}]}"; @Before public void setUp() throws Exception { gerritStatisticsHelper.setGerritService(gerritService); gerritStatisticsHelper.setGerritConfig(gerritConfig); gerritService.setStatisticsDao(gerritDao); gerritService.setAuthenticationHelper(authenticationHelper); Mockito.when(authenticationHelper.credentialsProvider()).thenReturn(credentialsProvider); List<String> reviewersToIgnore = new ArrayList(); reviewersToIgnore.add("Jenkins Test"); Mockito.when(gerritConfig.getReviewersToIgnoreList()).thenReturn(reviewersToIgnore); } @Test public void testPopulateReviewStatsAsync() throws Exception { List<ChangeInfo> noPeerReviewList = new ArrayList<>(); List<ChangeInfo> onePeerReviewList = new ArrayList<>(); List<ChangeInfo> twoPlusPeerReviewList = new ArrayList<>(); List<ChangeInfo> collabrativeDevelopmentList = new ArrayList<>(); List<ChangeInfo> changes = createChanges(); Mockito.when(gerritDao.getDetails(credentialsProvider, "testChangeId")).thenReturn(jsonDetailsString); Future<GerritReviewStatsResult> populateReviewStatsAsync = gerritStatisticsHelper.populateReviewStatsAsync( "testStatus", noPeerReviewList, onePeerReviewList, twoPlusPeerReviewList, collabrativeDevelopmentList, changes); while(!populateReviewStatsAsync.isDone()) { System.out.println("Waiting for Thread to finish"); } GerritReviewStatsResult gerritReviewStatsResult = populateReviewStatsAsync.get(); assertTrue(gerritReviewStatsResult.getSuccess()); assertEquals(1, gerritReviewStatsResult.getChanges().size()); assertEquals(0, noPeerReviewList.size()); assertEquals(1, onePeerReviewList.size()); assertEquals(0, twoPlusPeerReviewList.size()); assertEquals(0, collabrativeDevelopmentList.size()); } private List<ChangeInfo> createChanges() { List<ChangeInfo> result = new ArrayList<>(); ChangeInfo changeInfo = new ChangeInfo(); changeInfo.id = "testId"; changeInfo.changeId = "testChangeId"; changeInfo.project = "testProj"; changeInfo.updated = new Timestamp(0); changeInfo.branch = "develop"; result.add(changeInfo); return result; } }