/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.workbench.common.screens.contributors.client; import javax.enterprise.event.Event; import org.dashbuilder.dataset.DataSet; import org.dashbuilder.displayer.DisplayerSettings; import org.dashbuilder.displayer.client.AbstractDisplayer; import org.dashbuilder.displayer.client.AbstractDisplayerTest; import org.dashbuilder.displayer.client.Displayer; import org.dashbuilder.displayer.client.DisplayerCoordinator; import org.dashbuilder.displayer.client.DisplayerListener; import org.dashbuilder.renderer.client.selector.SelectorDisplayer; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.kie.workbench.common.screens.contributors.client.resources.i18n.ContributorsI18n; import org.kie.workbench.common.screens.contributors.client.screens.ContributorsKPIs; import org.kie.workbench.common.screens.contributors.client.screens.ContributorsScreen; import org.kie.workbench.common.screens.contributors.client.screens.ContributorsView; import org.kie.workbench.common.screens.contributors.model.ContributorsDataSets; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.uberfire.workbench.events.NotificationEvent; import static org.mockito.Mockito.*; import static org.junit.Assert.*; import static org.dashbuilder.dataset.Assertions.*; import static org.kie.workbench.common.screens.contributors.model.ContributorsDataSetColumns.*; @RunWith(MockitoJUnitRunner.class) public class ContributorsDashboardTest extends AbstractDisplayerTest { @Mock ContributorsView view; @Mock ContributorsI18n i18n; @Mock Event<NotificationEvent> workbenchNotification; @Mock DisplayerListener displayerListener; ContributorsScreen presenter; DataSet contributorsDataSet; DisplayerCoordinator displayerCoordinator; AbstractDisplayer commitsPerOrganization; AbstractDisplayer commitsEvolutionDisplayer; SelectorDisplayer organizationSelectorDisplayer; SelectorDisplayer repositorySelectorDisplayer; SelectorDisplayer authorSelectorDisplayer; SelectorDisplayer topAuthorSelectorDisplayer; AbstractDisplayer yearsSelectorDisplayer; AbstractDisplayer quarterSelectorDisplayer; AbstractDisplayer dayOfWeekSelectorDisplayer; AbstractDisplayer allCommitsDisplayer; public SelectorDisplayer createSelectorDisplayer(DisplayerSettings settings) { return initDisplayer(new SelectorDisplayer(mock(SelectorDisplayer.View.class)), settings); } @Before public void init() throws Exception { super.init(); contributorsDataSet = ContributorsData.INSTANCE.toDataSet(); contributorsDataSet.setUUID(ContributorsDataSets.GIT_CONTRIB); clientDataSetManager.registerDataSet(contributorsDataSet); commitsPerOrganization = createNewDisplayer(ContributorsKPIs.getCommitsPerOrganization(i18n)); commitsEvolutionDisplayer = createNewDisplayer(ContributorsKPIs.getCommitsEvolution(i18n)); organizationSelectorDisplayer = createSelectorDisplayer(ContributorsKPIs.getOrgUnitSelector(i18n)); repositorySelectorDisplayer = createSelectorDisplayer(ContributorsKPIs.getRepoSelector(i18n)); authorSelectorDisplayer = createSelectorDisplayer(ContributorsKPIs.getAuthorSelector(i18n)); topAuthorSelectorDisplayer = createSelectorDisplayer(ContributorsKPIs.getTopAuthorSelector(i18n)); yearsSelectorDisplayer = createNewDisplayer(ContributorsKPIs.getYears(i18n)); quarterSelectorDisplayer = createNewDisplayer(ContributorsKPIs.getQuarters(i18n)); dayOfWeekSelectorDisplayer = createNewDisplayer(ContributorsKPIs.getDaysOfWeek(i18n)); allCommitsDisplayer = createNewDisplayer(ContributorsKPIs.getAllCommits(i18n)); displayerCoordinator = new DisplayerCoordinator(rendererManager); displayerCoordinator.addListener(displayerListener); when(view.getI18nService()).thenReturn(i18n); presenter = new ContributorsScreen(view, commitsPerOrganization, commitsEvolutionDisplayer, organizationSelectorDisplayer, repositorySelectorDisplayer, authorSelectorDisplayer, topAuthorSelectorDisplayer, yearsSelectorDisplayer, quarterSelectorDisplayer, dayOfWeekSelectorDisplayer, allCommitsDisplayer, displayerCoordinator, workbenchNotification); } @Test public void testDrawAll() { verify(view).init(presenter, commitsPerOrganization, commitsEvolutionDisplayer, organizationSelectorDisplayer, repositorySelectorDisplayer, authorSelectorDisplayer, topAuthorSelectorDisplayer, yearsSelectorDisplayer, quarterSelectorDisplayer, dayOfWeekSelectorDisplayer, allCommitsDisplayer); verify(displayerListener).onDraw(commitsPerOrganization); verify(displayerListener).onDraw(commitsEvolutionDisplayer); verify(displayerListener).onDraw(organizationSelectorDisplayer); verify(displayerListener).onDraw(repositorySelectorDisplayer); verify(displayerListener).onDraw(authorSelectorDisplayer); verify(displayerListener).onDraw(topAuthorSelectorDisplayer); verify(displayerListener).onDraw(yearsSelectorDisplayer); verify(displayerListener).onDraw(quarterSelectorDisplayer); verify(displayerListener).onDraw(dayOfWeekSelectorDisplayer); verify(displayerListener).onDraw(allCommitsDisplayer); } @Test public void testCommitsPerOrganization() { Displayer displayer = presenter.getCommitsPerOrganization(); DataSet dataSet = displayer.getDataSetHandler().getLastDataSet(); assertDataSetValues(dataSet, new String[][]{ {"org1", "2.00", "4.00", "org1", "4.00"}, {"org2", "2.00", "4.00", "org2", "4.00"}, {"emptyOrg", "1.00", "1.00", "emptyOrg", "1.00"} }, 0); } @Test public void testCommitsEvolution() { Displayer displayer = presenter.getCommitsEvolutionDisplayer(); DataSet dataSet = displayer.getDataSetHandler().getLastDataSet(); assertDataSetValues(dataSet, new String[][]{ {"2019-01", "1.00"}, {"2019-02", "0.00"}, {"2019-03", "1.00"}, {"2019-04", "1.00"}, {"2019-05", "0.00"}, {"2019-06", "1.00"}, {"2019-07", "1.00"}, {"2019-08", "0.00"}, {"2019-09", "1.00"}, {"2019-10", "0.00"}, {"2019-11", "1.00"}, {"2019-12", "0.00"}, {"2020-01", "0.00"}, {"2020-02", "1.00"} }, 0); } @Test public void testOrganizationSelector() { SelectorDisplayer.View view = organizationSelectorDisplayer.getView(); verify(view).addItem("0", "emptyOrg", false); verify(view).addItem("1", "org1", false); verify(view).addItem("2", "org2", false); verify(view, never()).addItem(anyString(), eq((String) null), anyBoolean()); } @Test public void testRepositorySelector() { SelectorDisplayer.View view = repositorySelectorDisplayer.getView(); verify(view).addItem("1", "repo1", false); verify(view).addItem("2", "repo2", false); verify(view).addItem("3", "repo3", false); verify(view).addItem("4", "repo4", false); verify(view, never()).addItem(anyString(), eq((String) null), anyBoolean()); } @Test public void testAuthorSelector() { SelectorDisplayer.View view = authorSelectorDisplayer.getView(); verify(view).addItem("1", "user1", false); verify(view).addItem("2", "user2", false); verify(view).addItem("3", "user3", false); verify(view).addItem("4", "user4", false); verify(view).addItem("5", "user5", false); verify(view).addItem("6", "user6", false); verify(view).addItem("7", "user7", false); verify(view).addItem("8", "user8", false); verify(view, never()).addItem(anyString(), eq((String) null), anyBoolean()); } @Test public void testTopAuthorSelector() { SelectorDisplayer.View view = topAuthorSelectorDisplayer.getView(); verify(view).addItem("0", "user1", false); verify(view).addItem("1", "user2", false); verify(view).addItem("2", "user3", false); verify(view).addItem("3", "user4", false); verify(view).addItem("4", "user5", false); verify(view).addItem("5", "user6", false); verify(view).addItem("6", "user7", false); verify(view).addItem("7", "user8", false); verify(view, never()).addItem(anyString(), eq((String) null), anyBoolean()); } @Test public void testYearsSelector() { Displayer displayer = presenter.getYearsSelectorDisplayer(); DataSet dataSet = displayer.getDataSetHandler().getLastDataSet(); assertDataSetValues(dataSet, new String[][]{ {"2019", "7.00"}, {"2020", "1.00"} }, 0); } @Test public void testQuarterSelector() { Displayer displayer = presenter.getQuarterSelectorDisplayer(); DataSet dataSet = displayer.getDataSetHandler().getLastDataSet(); assertDataSetValues(dataSet, new String[][]{ {"1", "3.00"}, {"2", "2.00"}, {"3", "2.00"}, {"4", "1.00"} }, 0); } @Test public void testDayOfWeekSelector() { Displayer displayer = presenter.getDayOfWeekSelectorDisplayer(); DataSet dataSet = displayer.getDataSetHandler().getLastDataSet(); assertDataSetValues(dataSet, new String[][]{ {"1", "0.00"}, {"2", "0.00"}, {"3", "2.00"}, {"4", "1.00"}, {"5", "1.00"}, {"6", "2.00"}, {"7", "2.00"} }, 0); } @Test public void testAllCommits() { Displayer displayer = presenter.getAllCommitsDisplayer(); DataSet dataSet = displayer.getDataSetHandler().getLastDataSet(); assertDataSetValues(dataSet, new String[][]{ {"user1", "repo1", "01/01/19 12:00", "Commit 1"}, {"user2", "repo1", "03/02/19 12:00", "Commit 2"}, {"user3", "repo2", "04/03/19 12:00", "Commit 3"}, {"user4", "repo2", "06/04/19 12:00", "Commit 4"}, {"user5", "repo3", "07/05/19 12:00", "Commit 5"}, {"user6", "repo3", "09/06/19 12:00", "Commit 6"}, {"user7", "repo4", "11/07/19 12:00", "Commit 7"}, {"user8", "repo4", "02/08/20 12:00", "Commit 8"}, {"", "", "", ""} }, 0); } @Test public void test_BZ1255279_fix() { when(authorSelectorDisplayer.getView().getSelectedId()).thenReturn("1"); authorSelectorDisplayer.onItemSelected(); DataSet dataSet = allCommitsDisplayer.getDataSetHandler().getLastDataSet(); assertDataSetValues(dataSet, new String[][]{ {"user1", "repo1", "01/01/19 12:00", "Commit 1"}, }, 0); } @Test public void testClickOnOrgUnit() throws Exception { commitsPerOrganization.filterUpdate(COLUMN_ORG, 0); // "org1" selected DataSet dataSet = allCommitsDisplayer.getDataSetHandler().getLastDataSet(); assertEquals(dataSet.getRowCount(), 4); } @Test public void testSelectOrgUnit() throws Exception { organizationSelectorDisplayer.filterUpdate(COLUMN_ORG, 0); // "emptyOrg" selected DataSet dataSet = allCommitsDisplayer.getDataSetHandler().getLastDataSet(); assertEquals(dataSet.getRowCount(), 1); } @Test public void testSelectRepo() throws Exception { repositorySelectorDisplayer.filterUpdate(COLUMN_REPO, 1); // "repo1" selected DataSet dataSet = allCommitsDisplayer.getDataSetHandler().getLastDataSet(); assertEquals(dataSet.getRowCount(), 2); } @Test public void testSelectYear() throws Exception { yearsSelectorDisplayer.filterUpdate(COLUMN_DATE, 0); // "2019" selected DataSet dataSet = allCommitsDisplayer.getDataSetHandler().getLastDataSet(); assertEquals(dataSet.getRowCount(), 7); } @Test public void testSelectWeekOfDay() throws Exception { dayOfWeekSelectorDisplayer.filterUpdate(COLUMN_DATE, 2); // "Tuesday" selected DataSet dataSet = allCommitsDisplayer.getDataSetHandler().getLastDataSet(); assertEquals(dataSet.getRowCount(), 2); } @Test public void testAlwaysShow7Days() throws Exception { authorSelectorDisplayer.filterUpdate(COLUMN_AUTHOR, 1); // "user" selected DataSet dataSet = allCommitsDisplayer.getDataSetHandler().getLastDataSet(); assertEquals(dataSet.getRowCount(), 1); // Bar chart must always show 7 bars, one per day of week dataSet = dayOfWeekSelectorDisplayer.getDataSetHandler().getLastDataSet(); assertEquals(dataSet.getRowCount(), 7); } @Test public void testSelectAuthorAndWeekOfDay() throws Exception { authorSelectorDisplayer.filterUpdate(COLUMN_AUTHOR, 1); // "user" selected DataSet dataSet = allCommitsDisplayer.getDataSetHandler().getLastDataSet(); assertEquals(dataSet.getRowCount(), 1); dayOfWeekSelectorDisplayer.filterUpdate(COLUMN_DATE, 2); // "Tuesday" selected dataSet = allCommitsDisplayer.getDataSetHandler().getLastDataSet(); assertEquals(dataSet.getRowCount(), 1); } }