/* * 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.guvnor.asset.management.client.editors.repository.wizard; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.enterprise.event.Event; import com.google.gwtmockito.GwtMock; import com.google.gwtmockito.GwtMockitoTestRunner; import org.guvnor.asset.management.client.editors.repository.wizard.pages.RepositoryInfoPage; import org.guvnor.asset.management.client.editors.repository.wizard.pages.RepositoryInfoPageTest; import org.guvnor.asset.management.client.editors.repository.wizard.pages.RepositoryInfoPageView; import org.guvnor.asset.management.client.editors.repository.wizard.pages.RepositoryStructurePage; import org.guvnor.asset.management.client.editors.repository.wizard.pages.RepositoryStructurePageTest; import org.guvnor.asset.management.client.editors.repository.wizard.pages.RepositoryStructurePageView; import org.guvnor.asset.management.service.AssetManagementService; import org.guvnor.asset.management.service.RepositoryStructureService; import org.guvnor.common.services.project.client.repositories.ConflictingRepositoriesPopup; import org.guvnor.common.services.project.client.util.POMDefaultOptions; import org.guvnor.common.services.project.model.Build; import org.guvnor.common.services.project.model.GAV; import org.guvnor.common.services.project.model.MavenRepositoryMetadata; import org.guvnor.common.services.project.model.MavenRepositorySource; import org.guvnor.common.services.project.model.POM; import org.guvnor.common.services.project.model.Plugin; import org.guvnor.common.services.project.service.DeploymentMode; import org.guvnor.common.services.project.service.GAVAlreadyExistsException; import org.guvnor.common.services.project.service.ProjectRepositoryResolver; import org.guvnor.structure.organizationalunit.OrganizationalUnit; import org.guvnor.structure.organizationalunit.OrganizationalUnitService; import org.guvnor.structure.repositories.Repository; import org.guvnor.structure.repositories.RepositoryEnvironmentConfigurations; import org.guvnor.structure.repositories.RepositoryService; import org.guvnor.structure.security.RepositoryFeatures; import org.jboss.errai.common.client.api.Caller; import org.jboss.errai.security.shared.api.Role; import org.jboss.errai.security.shared.api.RoleImpl; import org.jboss.errai.security.shared.api.identity.User; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.uberfire.backend.vfs.Path; import org.uberfire.ext.widgets.core.client.wizards.WizardPageStatusChangeEvent; import org.uberfire.ext.widgets.core.client.wizards.WizardView; import org.uberfire.mocks.CallerMock; import org.uberfire.mvp.Command; import org.uberfire.rpc.SessionInfo; import org.uberfire.security.authz.AuthorizationManager; import org.uberfire.workbench.events.NotificationEvent; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @RunWith(GwtMockitoTestRunner.class) public class CreateRepositoryWizardTest { private static final String REPOSITORY_NAME = "RepositoryName"; private static final String ORGANIZATIONAL_UNIT = "OrganizationalUnit1"; private static final String PROJECT_NAME = "ProjectName"; private static final String PROJECT_DESCRIPTION = "Project description"; private static final String GROUP_ID = "GroupId"; private static final String ARTIFACT_ID = "ArtifactId"; private static final String VERSION = "Version"; RepositoryInfoPageTest.RepositoryInfoPageExtended infoPage; RepositoryStructurePageTest.RepositoryStructurePageExtended structurePage; @GwtMock RepositoryInfoPageView infoPageView; @GwtMock RepositoryStructurePageView structurePageView; @GwtMock WizardView view; @Mock AuthorizationManager authorizationManager; @Captor ArgumentCaptor<RepositoryEnvironmentConfigurations> repositoryEnvironmentConfigurationsArgumentCaptor; CreateRepositoryWizard createRepositoryWizard; CreateRepositoryWizardModel model; Repository expectedRepository = mock(Repository.class); OrganizationalUnitService organizationalUnitService = mock(OrganizationalUnitService.class); RepositoryService repositoryService = mock(RepositoryService.class); RepositoryStructureService repositoryStructureService = mock(RepositoryStructureService.class); ProjectRepositoryResolver repositoryResolverService = mock(ProjectRepositoryResolver.class); AssetManagementService assetManagementService = mock(AssetManagementService.class); List<OrganizationalUnit> organizationalUnits = RepositoryInfoPageTest.buildOrganiztionalUnits(); SessionInfo sessionInfo = mock(SessionInfo.class); ConflictingRepositoriesPopup conflictingRepositoriesPopup = mock(ConflictingRepositoriesPopup.class); POMDefaultOptions pomDefaultOptions = mock(POMDefaultOptions.class); ArrayList<Plugin> byDefaultPlugins; Build byDefaultBuild; User user = mock(User.class); WizardTestUtils.NotificationEventMock notificationEvent; @Before public void init() { //mock user roles Set<Role> userRoles = new HashSet<Role>(); userRoles.add(new RoleImpl("mock-role")); when(sessionInfo.getIdentity()).thenReturn(user); when(user.getIdentifier()).thenReturn("mock-user"); when(user.getRoles()).thenReturn(userRoles); when(authorizationManager.authorize(RepositoryFeatures.CONFIGURE_REPOSITORY, user)).thenReturn(true); WizardTestUtils.WizardPageStatusChangeEventMock event = new WizardTestUtils.WizardPageStatusChangeEventMock(); when(organizationalUnitService.getOrganizationalUnits()).thenReturn(organizationalUnits); //mock the by default POM options. initByDefaultPomOptions(); when(pomDefaultOptions.getPackaging()).thenReturn("jar"); when(pomDefaultOptions.getBuildPlugins()).thenReturn(byDefaultPlugins); //All tests starts by the initialization of the wizard pages and the wizard itself infoPage = new RepositoryInfoPageTest.RepositoryInfoPageExtended(infoPageView, new CallerMock<OrganizationalUnitService>(organizationalUnitService), new CallerMock<RepositoryService>(repositoryService), true, event); structurePage = new RepositoryStructurePageTest.RepositoryStructurePageExtended(structurePageView, new CallerMock<RepositoryStructureService>(repositoryStructureService), event); model = new CreateRepositoryWizardModel(); notificationEvent = new WizardTestUtils.NotificationEventMock(); createRepositoryWizard = new CreateRepositoryWizardExtended(infoPage, structurePage, model, new CallerMock<RepositoryService>(repositoryService), new CallerMock<RepositoryStructureService>(repositoryStructureService), new CallerMock<ProjectRepositoryResolver>(repositoryResolverService), new CallerMock<AssetManagementService>(assetManagementService), notificationEvent, sessionInfo, conflictingRepositoriesPopup, view, event, pomDefaultOptions, authorizationManager); } /** * Emulates a sequence of valid steps for the creation of an unmanaged repository. */ @Test public void testUnmanagedRepositoryCompletedTest() { setupNameAndOrgUnitMocks(true, ORGANIZATIONAL_UNIT); when(infoPageView.isManagedRepository()).thenReturn(false); createRepositoryWizard.start(); infoPage.onNameChange(); infoPage.onOUChange(); infoPage.onManagedRepositoryChange(); when(repositoryService.createRepository(eq(organizationalUnits.get(0)), eq("git"), eq(REPOSITORY_NAME), any(RepositoryEnvironmentConfigurations.class))).thenReturn(expectedRepository); createRepositoryWizard.complete(); verify(repositoryResolverService, never()).getRepositoriesResolvingArtifact(any(GAV.class)); verify(repositoryService, times(1)).createRepository(eq(organizationalUnits.get(0)), eq("git"), eq(REPOSITORY_NAME), repositoryEnvironmentConfigurationsArgumentCaptor.capture()); assertFalse(repositoryEnvironmentConfigurationsArgumentCaptor.getValue().isManaged()); //the model should have the UI loaded values. assertEquals(REPOSITORY_NAME, model.getRepositoryName()); assertEquals(organizationalUnits.get(0), model.getOrganizationalUnit()); assertEquals(false, model.isManged()); WizardTestUtils.assertWizardComplete(true, createRepositoryWizard); } @Test public void testManagedRepositoryMultiCompletedNonClashingGAVTest() { doTestManagedRepositoryCompletedNonClashingGAVTest(true); } @Test public void testManagedRepositorySingleCompletedNonClashingGAVTest() { doTestManagedRepositoryCompletedNonClashingGAVTest(false); } private void doTestManagedRepositoryCompletedNonClashingGAVTest(boolean multi) { //user completes the first page setupNameAndOrgUnitMocks(true, ORGANIZATIONAL_UNIT); when(infoPageView.isManagedRepository()).thenReturn(true); createRepositoryWizard.start(); infoPage.onNameChange(); infoPage.onOUChange(); infoPage.onManagedRepositoryChange(); //and goes to the second the second page when(structurePageView.getProjectName()).thenReturn(PROJECT_NAME); when(structurePageView.getProjectDescription()).thenReturn(PROJECT_DESCRIPTION); when(structurePageView.getGroupId()).thenReturn(GROUP_ID); when(structurePageView.getArtifactId()).thenReturn(ARTIFACT_ID); when(structurePageView.getVersion()).thenReturn(VERSION); when(structurePageView.isConfigureRepository()).thenReturn(true); when(structurePageView.isMultiModule()).thenReturn(multi); //validations are true when(repositoryStructureService.isValidProjectName(PROJECT_NAME)).thenReturn(true); when(repositoryStructureService.isValidGroupId(GROUP_ID)).thenReturn(true); when(repositoryStructureService.isValidArtifactId(ARTIFACT_ID)).thenReturn(true); when(repositoryStructureService.isValidVersion(VERSION)).thenReturn(true); createRepositoryWizard.pageSelected(1); structurePage.onProjectNameChange(); structurePage.onProjectDescriptionChange(); structurePage.onGroupIdChange(); structurePage.onArtifactIdChange(); structurePage.onVersionChange(); structurePage.onConfigureRepositoryChange(); structurePage.onMultiModuleChange(); when(repositoryService.createRepository(eq(organizationalUnits.get(0)), eq("git"), eq(REPOSITORY_NAME), any(RepositoryEnvironmentConfigurations.class))).thenReturn(expectedRepository); when(expectedRepository.getAlias()).thenReturn(REPOSITORY_NAME); createRepositoryWizard.complete(); //the repository should be created. verify(repositoryService, times(1)).createRepository(eq(organizationalUnits.get(0)), eq("git"), eq(REPOSITORY_NAME), repositoryEnvironmentConfigurationsArgumentCaptor.capture()); assertTrue(repositoryEnvironmentConfigurationsArgumentCaptor.getValue().isManaged()); //when repository was created the next wizard actions is to initialize the structure //mock the pom created internally by the wizard to emulate the cascaded initializations. Path pathToPom = mock(Path.class); POM pom = new POM(); pom.setName(PROJECT_NAME); pom.setDescription(PROJECT_DESCRIPTION); pom.getGav().setGroupId(GROUP_ID); pom.getGav().setArtifactId(ARTIFACT_ID); pom.getGav().setVersion(VERSION); if (!multi) { pom.setPackaging(pomDefaultOptions.getPackaging()); pom.setBuild(byDefaultBuild); } final String baseUrl = ""; when(repositoryStructureService.initRepositoryStructure(eq(pom), eq(baseUrl), eq(expectedRepository), eq(multi), eq(DeploymentMode.VALIDATED))).thenReturn(pathToPom); //the repository should be initialized. verify(repositoryStructureService, times(1)).initRepositoryStructure(eq(pom), eq(baseUrl), eq(expectedRepository), eq(multi), eq(DeploymentMode.VALIDATED)); //finally the assets management configuration process should be launched verify(assetManagementService, times(1)).configureRepository(eq(REPOSITORY_NAME), eq("master"), eq("dev"), eq("release"), eq(VERSION)); //the model should have the UI loaded values. assertEquals(REPOSITORY_NAME, model.getRepositoryName()); assertEquals(organizationalUnits.get(0), model.getOrganizationalUnit()); assertEquals(true, model.isManged()); assertEquals(multi, model.isMultiModule()); assertEquals(true, model.isConfigureRepository()); assertEquals(PROJECT_NAME, model.getProjectName()); assertEquals(PROJECT_DESCRIPTION, model.getProjectDescription()); assertEquals(GROUP_ID, model.getGroupId()); assertEquals(ARTIFACT_ID, model.getArtifactId()); assertEquals(VERSION, model.getVersion()); WizardTestUtils.assertWizardComplete(true, createRepositoryWizard); } @Test @SuppressWarnings("unchecked") public void testManagedRepositoryMultiCompletedClashingGAVTest() { doTestManagedRepositoryCompletedClashingGAVTest(true); } @Test @SuppressWarnings("unchecked") public void testManagedRepositorySingleCompletedClashingGAVTest() { doTestManagedRepositoryCompletedClashingGAVTest(false); } private void doTestManagedRepositoryCompletedClashingGAVTest(boolean multi) { //user completes the first page setupNameAndOrgUnitMocks(true, ORGANIZATIONAL_UNIT); when(infoPageView.isManagedRepository()).thenReturn(true); createRepositoryWizard.start(); infoPage.onNameChange(); infoPage.onOUChange(); infoPage.onManagedRepositoryChange(); //and goes to the second the second page when(structurePageView.getProjectName()).thenReturn(PROJECT_NAME); when(structurePageView.getProjectDescription()).thenReturn(PROJECT_DESCRIPTION); when(structurePageView.getGroupId()).thenReturn(GROUP_ID); when(structurePageView.getArtifactId()).thenReturn(ARTIFACT_ID); when(structurePageView.getVersion()).thenReturn(VERSION); when(structurePageView.isConfigureRepository()).thenReturn(true); when(structurePageView.isMultiModule()).thenReturn(multi); //validations are true when(repositoryStructureService.isValidProjectName(PROJECT_NAME)).thenReturn(true); when(repositoryStructureService.isValidGroupId(GROUP_ID)).thenReturn(true); when(repositoryStructureService.isValidArtifactId(ARTIFACT_ID)).thenReturn(true); when(repositoryStructureService.isValidVersion(VERSION)).thenReturn(true); createRepositoryWizard.pageSelected(1); structurePage.onProjectNameChange(); structurePage.onProjectDescriptionChange(); structurePage.onGroupIdChange(); structurePage.onArtifactIdChange(); structurePage.onVersionChange(); structurePage.onConfigureRepositoryChange(); structurePage.onMultiModuleChange(); when(repositoryService.createRepository(eq(organizationalUnits.get(0)), eq("git"), eq(REPOSITORY_NAME), any(RepositoryEnvironmentConfigurations.class))).thenReturn(expectedRepository); when(expectedRepository.getAlias()).thenReturn(REPOSITORY_NAME); //mock the pom created internally by the wizard to emulate the cascaded initializations. POM pom = new POM(); pom.setName(PROJECT_NAME); pom.setDescription(PROJECT_DESCRIPTION); pom.getGav().setGroupId(GROUP_ID); pom.getGav().setArtifactId(ARTIFACT_ID); pom.getGav().setVersion(VERSION); if (!multi) { pom.setPackaging(pomDefaultOptions.getPackaging()); pom.setBuild(byDefaultBuild); } final String baseUrl = ""; final GAVAlreadyExistsException gae = new GAVAlreadyExistsException(pom.getGav(), new HashSet<MavenRepositoryMetadata>() {{ add(new MavenRepositoryMetadata("local-id", "local-url", MavenRepositorySource.LOCAL)); }}); doThrow(gae).when(repositoryStructureService).initRepositoryStructure(eq(pom), eq(baseUrl), eq(expectedRepository), eq(multi), eq(DeploymentMode.VALIDATED)); createRepositoryWizard.complete(); //the repository should be created. verify(repositoryService, times(1)).createRepository(eq(organizationalUnits.get(0)), eq("git"), eq(REPOSITORY_NAME), repositoryEnvironmentConfigurationsArgumentCaptor.capture()); assertTrue(repositoryEnvironmentConfigurationsArgumentCaptor.getValue().isManaged()); verify(conflictingRepositoriesPopup, times(1)).setContent(eq(pom.getGav()), any(Set.class), any(Command.class)); verify(conflictingRepositoriesPopup, times(1)).show(); //when repository was created the next wizard actions is to initialize the structure //the repository should be initialized. verify(repositoryStructureService, times(1)).initRepositoryStructure(eq(pom), eq(baseUrl), eq(expectedRepository), eq(multi), eq(DeploymentMode.VALIDATED)); //the assets management configuration process should NOT be launched verify(assetManagementService, never()).configureRepository(eq(REPOSITORY_NAME), eq("master"), eq("dev"), eq("release"), eq(VERSION)); WizardTestUtils.assertWizardComplete(true, createRepositoryWizard); } @Test @SuppressWarnings("unchecked") public void testManagedRepositoryMultiCompletedClashingGAVForcedTest() { doTestManagedRepositoryCompletedClashingGAVForcedTest(true); } @Test @SuppressWarnings("unchecked") public void testManagedRepositorySingleCompletedClashingGAVForcedTest() { doTestManagedRepositoryCompletedClashingGAVForcedTest(false); } private void doTestManagedRepositoryCompletedClashingGAVForcedTest(boolean multi) { //user completes the first page setupNameAndOrgUnitMocks(true, ORGANIZATIONAL_UNIT); when(infoPageView.isManagedRepository()).thenReturn(true); createRepositoryWizard.start(); infoPage.onNameChange(); infoPage.onOUChange(); infoPage.onManagedRepositoryChange(); //and goes to the second the second page when(structurePageView.getProjectName()).thenReturn(PROJECT_NAME); when(structurePageView.getProjectDescription()).thenReturn(PROJECT_DESCRIPTION); when(structurePageView.getGroupId()).thenReturn(GROUP_ID); when(structurePageView.getArtifactId()).thenReturn(ARTIFACT_ID); when(structurePageView.getVersion()).thenReturn(VERSION); when(structurePageView.isConfigureRepository()).thenReturn(true); when(structurePageView.isMultiModule()).thenReturn(multi); //validations are true when(repositoryStructureService.isValidProjectName(PROJECT_NAME)).thenReturn(true); when(repositoryStructureService.isValidGroupId(GROUP_ID)).thenReturn(true); when(repositoryStructureService.isValidArtifactId(ARTIFACT_ID)).thenReturn(true); when(repositoryStructureService.isValidVersion(VERSION)).thenReturn(true); createRepositoryWizard.pageSelected(1); structurePage.onProjectNameChange(); structurePage.onProjectDescriptionChange(); structurePage.onGroupIdChange(); structurePage.onArtifactIdChange(); structurePage.onVersionChange(); structurePage.onConfigureRepositoryChange(); structurePage.onMultiModuleChange(); when(repositoryService.createRepository(eq(organizationalUnits.get(0)), eq("git"), eq(REPOSITORY_NAME), any(RepositoryEnvironmentConfigurations.class))).thenReturn(expectedRepository); when(expectedRepository.getAlias()).thenReturn(REPOSITORY_NAME); //mock the pom created internally by the wizard to emulate the cascaded initializations. POM pom = new POM(); pom.setName(PROJECT_NAME); pom.setDescription(PROJECT_DESCRIPTION); pom.getGav().setGroupId(GROUP_ID); pom.getGav().setArtifactId(ARTIFACT_ID); pom.getGav().setVersion(VERSION); if (!multi) { pom.setPackaging(pomDefaultOptions.getPackaging()); pom.setBuild(byDefaultBuild); } final String baseUrl = ""; final GAVAlreadyExistsException gae = new GAVAlreadyExistsException(pom.getGav(), new HashSet<MavenRepositoryMetadata>() {{ add(new MavenRepositoryMetadata("local-id", "local-url", MavenRepositorySource.LOCAL)); }}); doThrow(gae).when(repositoryStructureService).initRepositoryStructure(eq(pom), eq(baseUrl), eq(expectedRepository), eq(multi), eq(DeploymentMode.VALIDATED)); createRepositoryWizard.complete(); //the repository should be created. verify(repositoryService, times(1)).createRepository(eq(organizationalUnits.get(0)), eq("git"), eq(REPOSITORY_NAME), repositoryEnvironmentConfigurationsArgumentCaptor.capture()); assertTrue(repositoryEnvironmentConfigurationsArgumentCaptor.getValue().isManaged()); //when repository was created the next wizard actions is to initialize the structure //the repository should be initialized. verify(repositoryStructureService, times(1)).initRepositoryStructure(eq(pom), eq(baseUrl), eq(expectedRepository), eq(multi), eq(DeploymentMode.VALIDATED)); final ArgumentCaptor<Command> commandArgumentCaptor = ArgumentCaptor.forClass(Command.class); verify(conflictingRepositoriesPopup, times(1)).setContent(eq(pom.getGav()), any(Set.class), commandArgumentCaptor.capture()); verify(conflictingRepositoriesPopup, times(1)).show(); //the assets management configuration process should NOT be launched verify(assetManagementService, never()).configureRepository(eq(REPOSITORY_NAME), eq("master"), eq("dev"), eq("release"), eq(VERSION)); //Emulate User electing to force save assertNotNull(commandArgumentCaptor.getValue()); commandArgumentCaptor.getValue().execute(); verify(repositoryStructureService, times(1)).initRepositoryStructure(eq(pom), eq(baseUrl), eq(expectedRepository), eq(multi), eq(DeploymentMode.FORCED)); verify(assetManagementService, times(1)).configureRepository(eq(REPOSITORY_NAME), eq("master"), eq("dev"), eq("release"), eq(VERSION)); WizardTestUtils.assertWizardComplete(true, createRepositoryWizard); } @Test @SuppressWarnings("unchecked") public void testManagedRepositoryMultiCompletedClashingGAVBeforeRepositoryInitializationTest() { doTestManagedRepositoryCompletedClashingGAVBeforeRepositoryInitializationTest(true); } @Test @SuppressWarnings("unchecked") public void testManagedRepositorySingleCompletedClashingGAVBeforeRepositoryInitializationTest() { doTestManagedRepositoryCompletedClashingGAVBeforeRepositoryInitializationTest(false); } private void doTestManagedRepositoryCompletedClashingGAVBeforeRepositoryInitializationTest(boolean multi) { //user completes the first page setupNameAndOrgUnitMocks(true, ORGANIZATIONAL_UNIT); when(infoPageView.isManagedRepository()).thenReturn(true); createRepositoryWizard.start(); infoPage.onNameChange(); infoPage.onOUChange(); infoPage.onManagedRepositoryChange(); //and goes to the second the second page when(structurePageView.getProjectName()).thenReturn(PROJECT_NAME); when(structurePageView.getProjectDescription()).thenReturn(PROJECT_DESCRIPTION); when(structurePageView.getGroupId()).thenReturn(GROUP_ID); when(structurePageView.getArtifactId()).thenReturn(ARTIFACT_ID); when(structurePageView.getVersion()).thenReturn(VERSION); when(structurePageView.isConfigureRepository()).thenReturn(true); when(structurePageView.isMultiModule()).thenReturn(multi); //validations are true when(repositoryStructureService.isValidProjectName(PROJECT_NAME)).thenReturn(true); when(repositoryStructureService.isValidGroupId(GROUP_ID)).thenReturn(true); when(repositoryStructureService.isValidArtifactId(ARTIFACT_ID)).thenReturn(true); when(repositoryStructureService.isValidVersion(VERSION)).thenReturn(true); createRepositoryWizard.pageSelected(1); structurePage.onProjectNameChange(); structurePage.onProjectDescriptionChange(); structurePage.onGroupIdChange(); structurePage.onArtifactIdChange(); structurePage.onVersionChange(); structurePage.onConfigureRepositoryChange(); structurePage.onMultiModuleChange(); when(repositoryService.createRepository(eq(organizationalUnits.get(0)), eq("git"), eq(REPOSITORY_NAME), any(RepositoryEnvironmentConfigurations.class))).thenReturn(expectedRepository); when(expectedRepository.getAlias()).thenReturn(REPOSITORY_NAME); //mock the pom created internally by the wizard to emulate the cascaded initializations. POM pom = new POM(); pom.setName(PROJECT_NAME); pom.setDescription(PROJECT_DESCRIPTION); pom.getGav().setGroupId(GROUP_ID); pom.getGav().setArtifactId(ARTIFACT_ID); pom.getGav().setVersion(VERSION); if (!multi) { pom.setPackaging(pomDefaultOptions.getPackaging()); pom.setBuild(byDefaultBuild); } final String baseUrl = ""; when(repositoryResolverService.getRepositoriesResolvingArtifact(eq(pom.getGav()))).thenReturn(new HashSet<MavenRepositoryMetadata>() {{ add(new MavenRepositoryMetadata("local-id", "local-url", MavenRepositorySource.LOCAL)); }}); createRepositoryWizard.complete(); //the repository should NOT be created. verify(repositoryService, never()).createRepository(eq(organizationalUnits.get(0)), eq("git"), eq(REPOSITORY_NAME), any(RepositoryEnvironmentConfigurations.class)); verify(repositoryStructureService, never()).initRepositoryStructure(eq(pom), eq(baseUrl), eq(expectedRepository), eq(multi), eq(DeploymentMode.VALIDATED)); //the assets management configuration process should NOT be launched verify(assetManagementService, never()).configureRepository(eq(REPOSITORY_NAME), eq("master"), eq("dev"), eq("release"), eq(VERSION)); //the Conflicting GAV popup should be shown verify(conflictingRepositoriesPopup, times(1)).setContent(eq(pom.getGav()), any(Set.class), any(Command.class)); verify(conflictingRepositoriesPopup, times(1)).show(); WizardTestUtils.assertWizardComplete(true, createRepositoryWizard); } @Test @SuppressWarnings("unchecked") public void testManagedRepositoryMultiCompletedClashingGAVForcedBeforeRepositoryInitializationTest() { doTestManagedRepositoryCompletedClashingGAVForcedBeforeRepositoryInitializationTest(true); } @Test @SuppressWarnings("unchecked") public void testManagedRepositorySingleCompletedClashingGAVForcedBeforeRepositoryInitializationTest() { doTestManagedRepositoryCompletedClashingGAVForcedBeforeRepositoryInitializationTest(false); } private void doTestManagedRepositoryCompletedClashingGAVForcedBeforeRepositoryInitializationTest(boolean multi) { //user completes the first page setupNameAndOrgUnitMocks(true, ORGANIZATIONAL_UNIT); when(infoPageView.isManagedRepository()).thenReturn(true); createRepositoryWizard.start(); infoPage.onNameChange(); infoPage.onOUChange(); infoPage.onManagedRepositoryChange(); //and goes to the second the second page when(structurePageView.getProjectName()).thenReturn(PROJECT_NAME); when(structurePageView.getProjectDescription()).thenReturn(PROJECT_DESCRIPTION); when(structurePageView.getGroupId()).thenReturn(GROUP_ID); when(structurePageView.getArtifactId()).thenReturn(ARTIFACT_ID); when(structurePageView.getVersion()).thenReturn(VERSION); when(structurePageView.isConfigureRepository()).thenReturn(true); when(structurePageView.isMultiModule()).thenReturn(multi); //validations are true when(repositoryStructureService.isValidProjectName(PROJECT_NAME)).thenReturn(true); when(repositoryStructureService.isValidGroupId(GROUP_ID)).thenReturn(true); when(repositoryStructureService.isValidArtifactId(ARTIFACT_ID)).thenReturn(true); when(repositoryStructureService.isValidVersion(VERSION)).thenReturn(true); createRepositoryWizard.pageSelected(1); structurePage.onProjectNameChange(); structurePage.onProjectDescriptionChange(); structurePage.onGroupIdChange(); structurePage.onArtifactIdChange(); structurePage.onVersionChange(); structurePage.onConfigureRepositoryChange(); structurePage.onMultiModuleChange(); when(repositoryService.createRepository(eq(organizationalUnits.get(0)), eq("git"), eq(REPOSITORY_NAME), any(RepositoryEnvironmentConfigurations.class))).thenReturn(expectedRepository); when(expectedRepository.getAlias()).thenReturn(REPOSITORY_NAME); //mock the pom created internally by the wizard to emulate the cascaded initializations. POM pom = new POM(); pom.setName(PROJECT_NAME); pom.setDescription(PROJECT_DESCRIPTION); pom.getGav().setGroupId(GROUP_ID); pom.getGav().setArtifactId(ARTIFACT_ID); pom.getGav().setVersion(VERSION); if (!multi) { pom.setPackaging(pomDefaultOptions.getPackaging()); pom.setBuild(byDefaultBuild); } final String baseUrl = ""; when(repositoryResolverService.getRepositoriesResolvingArtifact(eq(pom.getGav()))).thenReturn(new HashSet<MavenRepositoryMetadata>() {{ add(new MavenRepositoryMetadata("local-id", "local-url", MavenRepositorySource.LOCAL)); }}); createRepositoryWizard.complete(); //the repository should NOT be created. verify(repositoryService, never()).createRepository(eq(organizationalUnits.get(0)), eq("git"), eq(REPOSITORY_NAME), any(RepositoryEnvironmentConfigurations.class)); verify(repositoryStructureService, never()).initRepositoryStructure(eq(pom), eq(baseUrl), eq(expectedRepository), eq(multi), eq(DeploymentMode.VALIDATED)); //the assets management configuration process should NOT be launched verify(assetManagementService, never()).configureRepository(eq(REPOSITORY_NAME), eq("master"), eq("dev"), eq("release"), eq(VERSION)); //the Conflicting GAV popup should be shown final ArgumentCaptor<Command> commandArgumentCaptor = ArgumentCaptor.forClass(Command.class); verify(conflictingRepositoriesPopup, times(1)).setContent(eq(pom.getGav()), any(Set.class), commandArgumentCaptor.capture()); verify(conflictingRepositoriesPopup, times(1)).show(); //Emulate User electing to force save assertNotNull(commandArgumentCaptor.getValue()); commandArgumentCaptor.getValue().execute(); //the repository should be created. verify(repositoryService, times(1)).createRepository(eq(organizationalUnits.get(0)), eq("git"), eq(REPOSITORY_NAME), repositoryEnvironmentConfigurationsArgumentCaptor.capture()); assertTrue(repositoryEnvironmentConfigurationsArgumentCaptor.getValue().isManaged()); verify(repositoryStructureService, times(1)).initRepositoryStructure(eq(pom), eq(baseUrl), eq(expectedRepository), eq(multi), eq(DeploymentMode.FORCED)); //the assets management configuration process should be launched verify(assetManagementService, times(1)).configureRepository(eq(REPOSITORY_NAME), eq("master"), eq("dev"), eq("release"), eq(VERSION)); WizardTestUtils.assertWizardComplete(true, createRepositoryWizard); } @Test public void testCompletionStatusSuccess() { setupNameAndOrgUnitMocks(true, ORGANIZATIONAL_UNIT); createRepositoryWizard.start(); infoPage.onNameChange(); infoPage.onOUChange(); verify(view, times(2)).setCompletionStatus(false); verify(view, times(2)).setPageCompletionState(0, false); verify(view, times(1)).setCompletionStatus(true); verify(view, times(1)).setPageCompletionState(0, true); } @Test public void testCompletionInvalidName() { setupNameAndOrgUnitMocks(false, ORGANIZATIONAL_UNIT); createRepositoryWizard.start(); infoPage.onNameChange(); infoPage.onOUChange(); verify(view, times(2)).setCompletionStatus(false); verify(view, times(2)).setPageCompletionState(0, false); } @Test public void testCompletionNoOrganizationalUnit() { setupNameAndOrgUnitMocks(true, null); createRepositoryWizard.start(); infoPage.onNameChange(); infoPage.onOUChange(); verify(view, times(2)).setCompletionStatus(false); verify(view, times(2)).setPageCompletionState(0, false); } @Test public void testCompletionInvalidNameAndNoOrganizationalUnit() { setupNameAndOrgUnitMocks(false, null); createRepositoryWizard.start(); infoPage.onNameChange(); infoPage.onOUChange(); verify(view, times(1)).setCompletionStatus(false); verify(view, times(1)).setPageCompletionState(0, false); } @Test public void testManagedRepositoryIsEnabledInNewRepoWizard() { reset(infoPageView); when(authorizationManager.authorize(RepositoryFeatures.CONFIGURE_REPOSITORY, sessionInfo.getIdentity())).thenReturn(true); createRepositoryWizard.setupPages(); verify(infoPageView).enabledManagedRepositoryCreation(true); verify(infoPageView, never()).enabledManagedRepositoryCreation(false); } @Test public void testManagedRepositoryIsDisabledInNewRepoWizard() { reset(infoPageView); when(authorizationManager.authorize(RepositoryFeatures.CONFIGURE_REPOSITORY, sessionInfo.getIdentity())).thenReturn(false); createRepositoryWizard.setupPages(); verify(infoPageView, never()).enabledManagedRepositoryCreation(true); verify(infoPageView).enabledManagedRepositoryCreation(false); } private void initByDefaultPomOptions() { byDefaultPlugins = new ArrayList<Plugin>(); Plugin plugin = new Plugin(); plugin.setGroupId("org.kie"); plugin.setArtifactId("kie-maven-plugin"); plugin.setVersion("1.0.0"); byDefaultPlugins.add(plugin); byDefaultBuild = new Build(); byDefaultBuild.setPlugins(byDefaultPlugins); } private void setupNameAndOrgUnitMocks(boolean isRepoNameValid, String orgUnit) { when(infoPageView.getName()).thenReturn(REPOSITORY_NAME); when(infoPageView.getOrganizationalUnitName()).thenReturn(orgUnit); when(repositoryService.validateRepositoryName(REPOSITORY_NAME)).thenReturn(isRepoNameValid); when(repositoryService.normalizeRepositoryName(REPOSITORY_NAME)).thenReturn(REPOSITORY_NAME); } public static class CreateRepositoryWizardExtended extends CreateRepositoryWizard { public CreateRepositoryWizardExtended(final RepositoryInfoPage infoPage, final RepositoryStructurePage structurePage, final CreateRepositoryWizardModel model, final Caller<RepositoryService> repositoryService, final Caller<RepositoryStructureService> repositoryStructureService, final Caller<ProjectRepositoryResolver> repositoryResolverService, final Caller<AssetManagementService> assetManagementService, final Event<NotificationEvent> notification, final SessionInfo sessionInfo, final ConflictingRepositoriesPopup conflictingRepositoriesPopup, final WizardView view, final WizardTestUtils.WizardPageStatusChangeEventMock event, final POMDefaultOptions pomDefaultOptions, final AuthorizationManager authorizationManager) { super(infoPage, structurePage, model, repositoryService, repositoryStructureService, repositoryResolverService, assetManagementService, notification, sessionInfo, conflictingRepositoriesPopup, pomDefaultOptions, authorizationManager); super.view = view; //emulates the invocation of the @PostConstruct method. setupPages(); event.addEventHandler(new WizardTestUtils.WizardPageStatusChangeHandler() { @Override public void handleEvent(WizardPageStatusChangeEvent event) { onStatusChange(event); } }); } } }