/* * 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.pages; import com.google.gwtmockito.GwtMock; import com.google.gwtmockito.GwtMockitoTestRunner; import org.guvnor.asset.management.client.editors.repository.wizard.CreateRepositoryWizardModel; import org.guvnor.asset.management.client.editors.repository.wizard.WizardTestUtils; import org.guvnor.asset.management.service.RepositoryStructureService; import org.jboss.errai.common.client.api.Caller; import org.junit.Test; import org.junit.runner.RunWith; import org.uberfire.mocks.CallerMock; import static org.guvnor.asset.management.client.editors.repository.wizard.WizardTestUtils.*; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @RunWith(GwtMockitoTestRunner.class) public class RepositoryStructurePageTest { private static final String VALID_VALUE = "Valid"; private static final String INVALID_VALUE = "Invalid"; @GwtMock RepositoryStructurePageView view; RepositoryStructureService repositoryStructureService = mock( RepositoryStructureService.class ); @Test public void testPageLoad() { RepositoryStructurePage structurePage = new RepositoryStructurePage( view, new CallerMock<RepositoryStructureService>( repositoryStructureService ) ); } /** * Tests that the page reacts properly when a valid project name is typed. */ @Test public void testValidProjectNameChange() { testProjectNameChange( true ); } /** * Tests that the page reacts properly when an invalid project name is typed. */ @Test public void testInvalidProjectNameChange() { testProjectNameChange( false ); } private void testProjectNameChange( boolean testValidChange ) { RepositoryStructurePageExtended structurePage = new RepositoryStructurePageExtended( view, new CallerMock<RepositoryStructureService>( repositoryStructureService ), new WizardTestUtils.WizardPageStatusChangeEventMock() ); CreateRepositoryWizardModel model = new CreateRepositoryWizardModel(); structurePage.setModel( model ); if ( testValidChange ) { when( view.getProjectName() ).thenReturn( VALID_VALUE ); } else { when( view.getProjectName() ).thenReturn( INVALID_VALUE ); } when( repositoryStructureService.isValidProjectName( VALID_VALUE ) ).thenReturn( true ); when( repositoryStructureService.isValidProjectName( INVALID_VALUE ) ).thenReturn( false ); structurePage.onProjectNameChange(); verify( view, times( 2 ) ).getProjectName(); if ( testValidChange ) { verify( view, times( 1 ) ).clearProjectNameErrorMessage(); assertEquals( VALID_VALUE, model.getProjectName() ); } else { verify( view, times( 1 ) ).setProjectNameErrorMessage( anyString() ); assertEquals( INVALID_VALUE, model.getProjectName() ); } assertPageComplete( false, structurePage ); } /** * Tests that the page reacts properly when a valid groupId is typed. */ @Test public void testValidGroupIdChange() { testGroupIdChange( true ); } /** * Tests that the page reacts properly when an invalid groupId is typed. */ @Test public void testInvalidGroupIdChange() { testGroupIdChange( false ); } private void testGroupIdChange( boolean testValidChange ) { RepositoryStructurePageExtended structurePage = new RepositoryStructurePageExtended( view, new CallerMock<RepositoryStructureService>( repositoryStructureService ), new WizardTestUtils.WizardPageStatusChangeEventMock() ); CreateRepositoryWizardModel model = new CreateRepositoryWizardModel(); structurePage.setModel( model ); if ( testValidChange ) { when( view.getGroupId() ).thenReturn( VALID_VALUE ); } else { when( view.getGroupId() ).thenReturn( INVALID_VALUE ); } when( repositoryStructureService.isValidGroupId( INVALID_VALUE ) ).thenReturn( false ); when( repositoryStructureService.isValidGroupId( VALID_VALUE ) ).thenReturn( true ); structurePage.onGroupIdChange(); verify( view, times( 2 ) ).getGroupId(); if ( testValidChange ) { verify( view, times( 1 ) ).clearGroupIdErrorMessage(); assertEquals( VALID_VALUE, model.getGroupId() ); } else { verify( view, times( 1 ) ).setGroupIdErrorMessage( anyString() ); assertEquals( INVALID_VALUE, model.getGroupId() ); } assertPageComplete( false, structurePage ); } /** * Tests that the page reacts properly when a valid artifactId is typed. */ @Test public void testValidArtifactIdChange() { testArtifactIdChange( true ); } /** * Tests that the page reacts properly when an invalid artifactId is typed. */ @Test public void testInvalidArtifactIdChange() { testArtifactIdChange( false ); } private void testArtifactIdChange( boolean testValidChange ) { RepositoryStructurePageExtended structurePage = new RepositoryStructurePageExtended( view, new CallerMock<RepositoryStructureService>( repositoryStructureService ), new WizardTestUtils.WizardPageStatusChangeEventMock() ); CreateRepositoryWizardModel model = new CreateRepositoryWizardModel(); structurePage.setModel( model ); if ( testValidChange ) { when( view.getArtifactId() ).thenReturn( VALID_VALUE ); } else { when( view.getArtifactId() ).thenReturn( INVALID_VALUE ); } when( repositoryStructureService.isValidArtifactId( VALID_VALUE ) ).thenReturn( true ); when( repositoryStructureService.isValidArtifactId( INVALID_VALUE ) ).thenReturn( false ); structurePage.onArtifactIdChange(); verify( view, times( 2 ) ).getArtifactId(); if ( testValidChange ) { verify( view, times( 1 ) ).clearArtifactIdErrorMessage(); assertEquals( VALID_VALUE, model.getArtifactId() ); } else { verify( view, times( 1 ) ).setArtifactIdErrorMessage( anyString() ); assertEquals( INVALID_VALUE, model.getArtifactId() ); } assertPageComplete( false, structurePage ); } /** * Tests that the page reacts properly when a valid version typed. */ @Test public void testValidVersionChange() { testVersionChange( true ); } /** * Tests that the page reacts properly when an invalid version is typed. */ @Test public void testInvalidVersionChange() { testVersionChange( false ); } private void testVersionChange( boolean testValidChange ) { RepositoryStructurePageExtended structurePage = new RepositoryStructurePageExtended( view, new CallerMock<RepositoryStructureService>( repositoryStructureService ), new WizardTestUtils.WizardPageStatusChangeEventMock() ); CreateRepositoryWizardModel model = new CreateRepositoryWizardModel(); structurePage.setModel( model ); if ( testValidChange ) { when( view.getVersion() ).thenReturn( VALID_VALUE ); } else { when( view.getVersion() ).thenReturn( INVALID_VALUE ); } when( repositoryStructureService.isValidVersion( VALID_VALUE ) ).thenReturn( true ); when( repositoryStructureService.isValidVersion( INVALID_VALUE ) ).thenReturn( false ); structurePage.onVersionChange(); verify( view, times( 2 ) ).getVersion(); if ( testValidChange ) { verify( view, times( 1 ) ).clearVersionErrorMessage(); assertEquals( VALID_VALUE, model.getVersion() ); } else { verify( view, times( 1 ) ).setVersionErrorMessage( anyString() ); assertEquals( INVALID_VALUE, model.getVersion() ); } assertPageComplete( false, structurePage ); } /** * Test a sequence of steps that will successfully complete the page. */ @Test public void testPageCompleted() { String projectName = "ProjectName"; String groupId = "GroupId"; String artifactId = "ArtifactId"; String version = "Version"; RepositoryStructurePageExtended structurePage = new RepositoryStructurePageExtended( view, new CallerMock<RepositoryStructureService>( repositoryStructureService ), new WizardTestUtils.WizardPageStatusChangeEventMock() ); CreateRepositoryWizardModel model = new CreateRepositoryWizardModel(); structurePage.setModel( model ); when( view.getProjectName() ).thenReturn( projectName ); when( view.getGroupId() ).thenReturn( groupId ); when( view.getArtifactId() ).thenReturn( artifactId ); when( view.getVersion() ).thenReturn( version ); when( repositoryStructureService.isValidProjectName( projectName ) ).thenReturn( true ); when( repositoryStructureService.isValidGroupId( groupId ) ).thenReturn( true ); when( repositoryStructureService.isValidArtifactId( artifactId ) ).thenReturn( true ); when( repositoryStructureService.isValidVersion( version ) ).thenReturn( true ); structurePage.prepareView(); //emulate that the page was visited at least one time as required. structurePage.setStructurePageWasVisited( true ); //this sequence is not relevant structurePage.onProjectNameChange(); structurePage.onGroupIdChange(); structurePage.onArtifactIdChange(); structurePage.onVersionChange(); assertPageComplete( true, structurePage ); assertEquals( projectName, model.getProjectName() ); assertEquals( groupId, model.getGroupId() ); assertEquals( artifactId, model.getArtifactId() ); assertEquals( version, model.getVersion() ); } public static class RepositoryStructurePageExtended extends RepositoryStructurePage { public RepositoryStructurePageExtended( RepositoryStructurePageView view, Caller<RepositoryStructureService> repositoryStructureService, WizardPageStatusChangeEventMock event ) { super( view, repositoryStructureService ); super.wizardPageStatusChangeEvent = event; } } }