// Copyright 2012 Google Inc. 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 com.google.collide.shared.util; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.reset; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import com.google.collide.dto.ProjectInfo; import com.google.collide.dto.Role; import com.google.collide.dto.WorkspaceInfo; import com.google.collide.shared.util.RoleUtils.Authenticator; import com.google.collide.shared.util.RoleUtils.ProjectAuthenticator; import com.google.collide.shared.util.RoleUtils.WorkspaceAuthenticator; import org.junit.Before; import org.junit.Test; /** * Tests for {@link RoleUtils}. */ public class RoleUtilsTests { ProjectInfo mockProject; WorkspaceInfo mockWorkspace; @Before public void createMocks() { mockProject = createMock(ProjectInfo.class); mockWorkspace = createMock(WorkspaceInfo.class); } @Test public void testIsWorkspaceReadOnly() { assertTrue(RoleUtils.isWorkspaceReadOnly(Role.READER, false)); assertTrue(RoleUtils.isWorkspaceReadOnly(Role.READER, true)); assertFalse(RoleUtils.isWorkspaceReadOnly(Role.CONTRIBUTOR, false)); assertTrue(RoleUtils.isWorkspaceReadOnly(Role.CONTRIBUTOR, true)); assertFalse(RoleUtils.isWorkspaceReadOnly(Role.OWNER, false)); assertTrue(RoleUtils.isWorkspaceReadOnly(Role.OWNER, true)); } @Test public void testWorkspaceOwnerAuthenticator() { runWorkspaceAuthenticatorTests(RoleUtils.WORKSPACE_OWNER_AUTHENTICATOR, true, false, false); } @Test public void testWorkspaceContributorAuthenticator() { runWorkspaceAuthenticatorTests(RoleUtils.WORKSPACE_CONTRIBUTOR_AUTHENTICATOR, true, true, false); } @Test public void testWorkspaceReaderAuthenticator() { runWorkspaceAuthenticatorTests(RoleUtils.WORKSPACE_READER_AUTHENTICATOR, true, true, true); } @Test public void testProjectOwnerAuthenticator() { runProjectAuthenticatorTests(RoleUtils.PROJECT_OWNER_AUTHENTICATOR, true, false, false); } @Test public void testProjectContributorAuthenticator() { runProjectAuthenticatorTests(RoleUtils.PROJECT_CONTRIBUTOR_AUTHENTICATOR, true, true, false); } @Test public void testProjectReaderAuthenticator() { runProjectAuthenticatorTests(RoleUtils.PROJECT_READER_AUTHENTICATOR, true, true, true); } private void runProjectAuthenticatorTests(ProjectAuthenticator authenticator, boolean owner, boolean contributor, boolean reader) { // Test isAuthorized(Role) runAuthenticatorTests(authenticator, owner, contributor, reader); // Test isAuthorized(ProjectInfo) expect(mockProject.getCurrentUserRole()).andReturn(Role.OWNER); replay(mockProject, mockWorkspace); assertEquals(owner, authenticator.isAuthorized(mockProject)); verifyAndReset(mockProject, mockWorkspace); expect(mockProject.getCurrentUserRole()).andReturn(Role.CONTRIBUTOR); replay(mockProject, mockWorkspace); assertEquals(contributor, authenticator.isAuthorized(mockProject)); verifyAndReset(mockProject, mockWorkspace); expect(mockProject.getCurrentUserRole()).andReturn(Role.READER); replay(mockProject, mockWorkspace); assertEquals(reader, authenticator.isAuthorized(mockProject)); verifyAndReset(mockProject, mockWorkspace); expect(mockProject.getCurrentUserRole()).andReturn(null); replay(mockProject, mockWorkspace); assertFalse(authenticator.isAuthorized(mockProject)); verifyAndReset(mockProject, mockWorkspace); } private void runWorkspaceAuthenticatorTests(WorkspaceAuthenticator authenticator, boolean owner, boolean contributor, boolean reader) { // Test isAuthorized(Role) runAuthenticatorTests(authenticator, owner, contributor, reader); // Test isAuthorized(WorkspaceInfo) expect(mockWorkspace.getCurrentUserRole()).andReturn(Role.OWNER); replay(mockProject, mockWorkspace); assertEquals(owner, authenticator.isAuthorized(mockWorkspace)); verifyAndReset(mockProject, mockWorkspace); expect(mockWorkspace.getCurrentUserRole()).andReturn(Role.CONTRIBUTOR); replay(mockProject, mockWorkspace); assertEquals(contributor, authenticator.isAuthorized(mockWorkspace)); verifyAndReset(mockProject, mockWorkspace); expect(mockWorkspace.getCurrentUserRole()).andReturn(Role.READER); replay(mockProject, mockWorkspace); assertEquals(reader, authenticator.isAuthorized(mockWorkspace)); verifyAndReset(mockProject, mockWorkspace); expect(mockWorkspace.getCurrentUserRole()).andReturn(null); replay(mockProject, mockWorkspace); assertFalse(authenticator.isAuthorized(mockWorkspace)); verifyAndReset(mockProject, mockWorkspace); } private void runAuthenticatorTests(Authenticator authenticator, boolean owner, boolean contributor, boolean reader) { assertEquals(owner, authenticator.isAuthorized(Role.OWNER)); assertEquals(contributor, authenticator.isAuthorized(Role.CONTRIBUTOR)); assertEquals(reader, authenticator.isAuthorized(Role.READER)); assertFalse(authenticator.isAuthorized((Role) null)); } private void verifyAndReset(Object... objects) { verify(objects); reset(objects); } }