/*! * Copyright 2010 - 2015 Pentaho Corporation. All rights reserved. * * 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.pentaho.di.ui.repository.pur.repositoryexplorer.controller; import static junit.framework.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.EnumSet; import org.junit.Before; import org.junit.Test; import org.pentaho.platform.api.repository2.unified.RepositoryFilePermission; import org.pentaho.ui.xul.components.XulCheckbox; public class PermissionsCheckboxHandlerTest { private XulCheckbox readCheckbox; private XulCheckbox writeCheckbox; private XulCheckbox deleteCheckbox; private XulCheckbox manageCheckbox; private PermissionsCheckboxHandler permissionsCheckboxHandler; @Before public void setup() { readCheckbox = mock( XulCheckbox.class ); writeCheckbox = mock( XulCheckbox.class ); deleteCheckbox = mock( XulCheckbox.class ); manageCheckbox = mock( XulCheckbox.class ); permissionsCheckboxHandler = new PermissionsCheckboxHandler( readCheckbox, writeCheckbox, deleteCheckbox, manageCheckbox ); } @Test public void testSetAllUncheckedUnchecksAll() { boolean checked = false; permissionsCheckboxHandler.setAllChecked( checked ); verify( readCheckbox, times( 1 ) ).setChecked( checked ); verify( writeCheckbox, times( 1 ) ).setChecked( checked ); verify( deleteCheckbox, times( 1 ) ).setChecked( checked ); verify( manageCheckbox, times( 1 ) ).setChecked( checked ); } @Test public void testSetAllCheckedChecksAll() { boolean checked = true; permissionsCheckboxHandler.setAllChecked( checked ); verify( readCheckbox, times( 1 ) ).setChecked( checked ); verify( writeCheckbox, times( 1 ) ).setChecked( checked ); verify( deleteCheckbox, times( 1 ) ).setChecked( checked ); verify( manageCheckbox, times( 1 ) ).setChecked( checked ); } @Test public void testSetAllDisabledDisablesAll() { boolean disabled = true; permissionsCheckboxHandler.setAllDisabled( disabled ); verify( readCheckbox, times( 1 ) ).setDisabled( disabled ); verify( writeCheckbox, times( 1 ) ).setDisabled( disabled ); verify( deleteCheckbox, times( 1 ) ).setDisabled( disabled ); verify( manageCheckbox, times( 1 ) ).setDisabled( disabled ); } @Test public void testSetAllEnabledEnablesAll() { boolean disabled = false; permissionsCheckboxHandler.setAllDisabled( disabled ); verify( readCheckbox, times( 1 ) ).setDisabled( disabled ); verify( writeCheckbox, times( 1 ) ).setDisabled( disabled ); verify( deleteCheckbox, times( 1 ) ).setDisabled( disabled ); verify( manageCheckbox, times( 1 ) ).setDisabled( disabled ); } @Test public void testProcessCheckboxesNoneCheckedEnableAppropriateTrue() { when( readCheckbox.isChecked() ).thenReturn( false ); when( writeCheckbox.isChecked() ).thenReturn( false ); when( deleteCheckbox.isChecked() ).thenReturn( false ); when( manageCheckbox.isChecked() ).thenReturn( false ); assertEquals( EnumSet.noneOf( RepositoryFilePermission.class ), permissionsCheckboxHandler.processCheckboxes( true ) ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); verify( readCheckbox, times( 1 ) ).setDisabled( false ); } @Test public void testProcessCheckboxesNoneCheckedEnableAppropriateFalse() { when( readCheckbox.isChecked() ).thenReturn( false ); when( writeCheckbox.isChecked() ).thenReturn( false ); when( deleteCheckbox.isChecked() ).thenReturn( false ); when( manageCheckbox.isChecked() ).thenReturn( false ); assertEquals( EnumSet.noneOf( RepositoryFilePermission.class ), permissionsCheckboxHandler.processCheckboxes() ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); verify( readCheckbox, never() ).setDisabled( false ); } @Test public void testProcessCheckboxesReadCheckedEnableAppropriateTrue() { when( readCheckbox.isChecked() ).thenReturn( true ); when( writeCheckbox.isChecked() ).thenReturn( false ); when( deleteCheckbox.isChecked() ).thenReturn( false ); when( manageCheckbox.isChecked() ).thenReturn( false ); assertEquals( EnumSet.of( RepositoryFilePermission.READ ), permissionsCheckboxHandler.processCheckboxes( true ) ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( false ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); } @Test public void testProcessCheckboxesReadCheckedEnableAppropriateFalse() { when( readCheckbox.isChecked() ).thenReturn( true ); when( writeCheckbox.isChecked() ).thenReturn( false ); when( deleteCheckbox.isChecked() ).thenReturn( false ); when( manageCheckbox.isChecked() ).thenReturn( false ); assertEquals( EnumSet.of( RepositoryFilePermission.READ ), permissionsCheckboxHandler.processCheckboxes() ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); } @Test public void testProcessCheckboxesWriteCheckedEnableAppropriateTrue() { when( readCheckbox.isChecked() ).thenReturn( false ); when( writeCheckbox.isChecked() ).thenReturn( true ); when( deleteCheckbox.isChecked() ).thenReturn( false ); when( manageCheckbox.isChecked() ).thenReturn( false ); assertEquals( EnumSet.of( RepositoryFilePermission.READ, RepositoryFilePermission.WRITE ), permissionsCheckboxHandler.processCheckboxes( true ) ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( false ); verify( deleteCheckbox, times( 1 ) ).setDisabled( false ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); } @Test public void testProcessCheckboxesWriteCheckedEnableAppropriateFalse() { when( readCheckbox.isChecked() ).thenReturn( false ); when( writeCheckbox.isChecked() ).thenReturn( true ); when( deleteCheckbox.isChecked() ).thenReturn( false ); when( manageCheckbox.isChecked() ).thenReturn( false ); assertEquals( EnumSet.of( RepositoryFilePermission.READ, RepositoryFilePermission.WRITE ), permissionsCheckboxHandler.processCheckboxes() ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); } @Test public void testProcessCheckboxesDeleteCheckedEnableAppropriateTrue() { when( readCheckbox.isChecked() ).thenReturn( false ); when( writeCheckbox.isChecked() ).thenReturn( false ); when( deleteCheckbox.isChecked() ).thenReturn( true ); when( manageCheckbox.isChecked() ).thenReturn( false ); assertEquals( EnumSet.of( RepositoryFilePermission.READ, RepositoryFilePermission.WRITE, RepositoryFilePermission.DELETE ), permissionsCheckboxHandler.processCheckboxes( true ) ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( false ); verify( manageCheckbox, times( 1 ) ).setDisabled( false ); } @Test public void testProcessCheckboxesDeleteCheckedEnableAppropriateFalse() { when( readCheckbox.isChecked() ).thenReturn( false ); when( writeCheckbox.isChecked() ).thenReturn( false ); when( deleteCheckbox.isChecked() ).thenReturn( true ); when( manageCheckbox.isChecked() ).thenReturn( false ); assertEquals( EnumSet.of( RepositoryFilePermission.READ, RepositoryFilePermission.WRITE, RepositoryFilePermission.DELETE ), permissionsCheckboxHandler.processCheckboxes() ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); } @Test public void testProcessCheckboxesManageCheckedEnableAppropriateTrue() { when( readCheckbox.isChecked() ).thenReturn( false ); when( writeCheckbox.isChecked() ).thenReturn( false ); when( deleteCheckbox.isChecked() ).thenReturn( false ); when( manageCheckbox.isChecked() ).thenReturn( true ); assertEquals( EnumSet.of( RepositoryFilePermission.READ, RepositoryFilePermission.WRITE, RepositoryFilePermission.DELETE, RepositoryFilePermission.ACL_MANAGEMENT ), permissionsCheckboxHandler .processCheckboxes( true ) ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( false ); } @Test public void testProcessCheckboxesManageCheckedEnableAppropriateFalse() { when( readCheckbox.isChecked() ).thenReturn( false ); when( writeCheckbox.isChecked() ).thenReturn( false ); when( deleteCheckbox.isChecked() ).thenReturn( false ); when( manageCheckbox.isChecked() ).thenReturn( true ); assertEquals( EnumSet.of( RepositoryFilePermission.READ, RepositoryFilePermission.WRITE, RepositoryFilePermission.DELETE, RepositoryFilePermission.ACL_MANAGEMENT ), permissionsCheckboxHandler .processCheckboxes() ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); } @Test public void testUpdateCheckboxesNoPermissionsAppropriateTrue() { permissionsCheckboxHandler.updateCheckboxes( true, EnumSet.noneOf( RepositoryFilePermission.class ) ); verify( readCheckbox, times( 1 ) ).setChecked( false ); verify( writeCheckbox, times( 1 ) ).setChecked( false ); verify( deleteCheckbox, times( 1 ) ).setChecked( false ); verify( manageCheckbox, times( 1 ) ).setChecked( false ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); verify( readCheckbox, times( 1 ) ).setDisabled( false ); } @Test public void testUpdateCheckboxesNoPermissionsAppropriateFalse() { permissionsCheckboxHandler.updateCheckboxes( false, EnumSet.noneOf( RepositoryFilePermission.class ) ); verify( readCheckbox, times( 1 ) ).setChecked( false ); verify( writeCheckbox, times( 1 ) ).setChecked( false ); verify( deleteCheckbox, times( 1 ) ).setChecked( false ); verify( manageCheckbox, times( 1 ) ).setChecked( false ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); verify( readCheckbox, never() ).setDisabled( false ); } @Test public void testUpdateCheckboxesReadPermissionsAppropriateTrue() { permissionsCheckboxHandler.updateCheckboxes( true, EnumSet.of( RepositoryFilePermission.READ ) ); verify( readCheckbox, times( 1 ) ).setChecked( true ); verify( writeCheckbox, times( 1 ) ).setChecked( false ); verify( deleteCheckbox, times( 1 ) ).setChecked( false ); verify( manageCheckbox, times( 1 ) ).setChecked( false ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( false ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); } @Test public void testUpdateCheckboxesReadPermissionsAppropriateFalse() { permissionsCheckboxHandler.updateCheckboxes( false, EnumSet.of( RepositoryFilePermission.READ ) ); verify( readCheckbox, times( 1 ) ).setChecked( true ); verify( writeCheckbox, times( 1 ) ).setChecked( false ); verify( deleteCheckbox, times( 1 ) ).setChecked( false ); verify( manageCheckbox, times( 1 ) ).setChecked( false ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); } @Test public void testUpdateCheckboxesWritePermissionsAppropriateTrue() { permissionsCheckboxHandler.updateCheckboxes( true, EnumSet.of( RepositoryFilePermission.WRITE, RepositoryFilePermission.READ ) ); verify( readCheckbox, times( 1 ) ).setChecked( true ); verify( writeCheckbox, times( 1 ) ).setChecked( true ); verify( deleteCheckbox, times( 1 ) ).setChecked( false ); verify( manageCheckbox, times( 1 ) ).setChecked( false ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( false ); verify( deleteCheckbox, times( 1 ) ).setDisabled( false ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); } @Test public void testUpdateCheckboxesWritePermissionsAppropriateFalse() { permissionsCheckboxHandler.updateCheckboxes( false, EnumSet.of( RepositoryFilePermission.WRITE, RepositoryFilePermission.READ ) ); verify( readCheckbox, times( 1 ) ).setChecked( true ); verify( writeCheckbox, times( 1 ) ).setChecked( true ); verify( deleteCheckbox, times( 1 ) ).setChecked( false ); verify( manageCheckbox, times( 1 ) ).setChecked( false ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); } @Test public void testUpdateCheckboxesDeletePermissionsAppropriateTrue() { permissionsCheckboxHandler.updateCheckboxes( true, EnumSet.of( RepositoryFilePermission.DELETE, RepositoryFilePermission.WRITE, RepositoryFilePermission.READ ) ); verify( readCheckbox, times( 1 ) ).setChecked( true ); verify( writeCheckbox, times( 1 ) ).setChecked( true ); verify( deleteCheckbox, times( 1 ) ).setChecked( true ); verify( manageCheckbox, times( 1 ) ).setChecked( false ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( false ); verify( manageCheckbox, times( 1 ) ).setDisabled( false ); } @Test public void testUpdateCheckboxesDeletePermissionsAppropriateFalse() { permissionsCheckboxHandler.updateCheckboxes( false, EnumSet.of( RepositoryFilePermission.DELETE, RepositoryFilePermission.WRITE, RepositoryFilePermission.READ ) ); verify( readCheckbox, times( 1 ) ).setChecked( true ); verify( writeCheckbox, times( 1 ) ).setChecked( true ); verify( deleteCheckbox, times( 1 ) ).setChecked( true ); verify( manageCheckbox, times( 1 ) ).setChecked( false ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); } @Test public void testUpdateCheckboxesManagePermissionsAppropriateTrue() { permissionsCheckboxHandler.updateCheckboxes( true, EnumSet.of( RepositoryFilePermission.ACL_MANAGEMENT, RepositoryFilePermission.DELETE, RepositoryFilePermission.WRITE, RepositoryFilePermission.READ ) ); verify( readCheckbox, times( 1 ) ).setChecked( true ); verify( writeCheckbox, times( 1 ) ).setChecked( true ); verify( deleteCheckbox, times( 1 ) ).setChecked( true ); verify( manageCheckbox, times( 1 ) ).setChecked( true ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( false ); } @Test public void testUpdateCheckboxesManagePermissionsAppropriateFalse() { permissionsCheckboxHandler.updateCheckboxes( false, EnumSet.of( RepositoryFilePermission.ACL_MANAGEMENT, RepositoryFilePermission.DELETE, RepositoryFilePermission.WRITE, RepositoryFilePermission.READ ) ); verify( readCheckbox, times( 1 ) ).setChecked( true ); verify( writeCheckbox, times( 1 ) ).setChecked( true ); verify( deleteCheckbox, times( 1 ) ).setChecked( true ); verify( manageCheckbox, times( 1 ) ).setChecked( true ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); } @Test public void testUpdateCheckboxesAllPermissionsAppropriateTrue() { permissionsCheckboxHandler.updateCheckboxes( true, EnumSet.of( RepositoryFilePermission.ALL ) ); verify( readCheckbox, times( 1 ) ).setChecked( true ); verify( writeCheckbox, times( 1 ) ).setChecked( true ); verify( deleteCheckbox, times( 1 ) ).setChecked( true ); verify( manageCheckbox, times( 1 ) ).setChecked( true ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( false ); } @Test public void testUpdateCheckboxesAllPermissionsAppropriateFalse() { permissionsCheckboxHandler.updateCheckboxes( false, EnumSet.of( RepositoryFilePermission.ALL ) ); verify( readCheckbox, times( 1 ) ).setChecked( true ); verify( writeCheckbox, times( 1 ) ).setChecked( true ); verify( deleteCheckbox, times( 1 ) ).setChecked( true ); verify( manageCheckbox, times( 1 ) ).setChecked( true ); verify( readCheckbox, times( 1 ) ).setDisabled( true ); verify( writeCheckbox, times( 1 ) ).setDisabled( true ); verify( deleteCheckbox, times( 1 ) ).setDisabled( true ); verify( manageCheckbox, times( 1 ) ).setDisabled( true ); } }