* Test that the authorized state overrides the enabled state
*/
public void testAuthorizedOverridesEnabled() {
ApplicationSecurityManager securityManager = (ApplicationSecurityManager)ApplicationServicesLocator.services().getService(ApplicationSecurityManager.class);
CommandManager cmgr = Application.instance().getActiveWindow().getCommandManager();
ActionCommand cmdWrite = cmgr.getActionCommand( "cmdWrite" );
// We start with no authentication, so nothing should be authorized
assertFalse( "Object should not be authorized", cmdWrite.isAuthorized() );
assertFalse( "Object should not be enabled", cmdWrite.isEnabled() );
// Try to enable them, should not happen
cmdWrite.setEnabled( true );
assertFalse( "Object should not be enabled", cmdWrite.isEnabled() );
// Now authorize it
Authentication auth = TestAuthenticationManager.makeAuthentication( "test", "test", "ROLE_WRITE" );
securityManager.doLogin( auth );
assertTrue( "Object should be authorized", cmdWrite.isAuthorized() );
assertTrue( "Object should be enabled", cmdWrite.isEnabled() );
// Now we should be able to disable and re-enabled it
cmdWrite.setEnabled( false );
assertFalse( "Object should not be enabled", cmdWrite.isEnabled() );
cmdWrite.setEnabled( true );
assertTrue( "Object should be enabled", cmdWrite.isEnabled() );
// Now leave it disabled, remove the authorization, re-authorize and it
// should still be disabled
cmdWrite.setEnabled( false );
assertFalse( "Object should not be enabled", cmdWrite.isEnabled() );
securityManager.doLogout();
assertFalse( "Object should not be authorized", cmdWrite.isAuthorized() );
assertFalse( "Object should not be enabled", cmdWrite.isEnabled() );
securityManager.doLogin( auth );
assertTrue( "Object should be authorized", cmdWrite.isAuthorized() );
assertFalse( "Object should not be enabled", cmdWrite.isEnabled() );
}