/* * Copyright 2015 herd contributors * * 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.finra.herd.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; import static org.mockito.Matchers.argThat; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import com.google.common.base.Objects; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentMatcher; import org.mockito.InjectMocks; import org.mockito.Mock; import org.finra.herd.dao.NamespaceIamRoleAuthorizationDao; import org.finra.herd.model.AlreadyExistsException; import org.finra.herd.model.ObjectNotFoundException; import org.finra.herd.model.api.xml.IamRole; import org.finra.herd.model.api.xml.NamespaceIamRoleAuthorization; import org.finra.herd.model.api.xml.NamespaceIamRoleAuthorizationCreateRequest; import org.finra.herd.model.api.xml.NamespaceIamRoleAuthorizationUpdateRequest; import org.finra.herd.model.api.xml.NamespaceIamRoleAuthorizations; import org.finra.herd.model.jpa.NamespaceEntity; import org.finra.herd.model.jpa.NamespaceIamRoleAuthorizationEntity; import org.finra.herd.service.helper.NamespaceDaoHelper; import org.finra.herd.service.impl.NamespaceIamRoleAuthorizationServiceImpl; public class NamespaceIamRoleAuthorizationServiceTest { @InjectMocks private NamespaceIamRoleAuthorizationServiceImpl namespaceIamRoleAuthorizationServiceImpl; @Mock private NamespaceDaoHelper namespaceDaoHelper; @Mock private NamespaceIamRoleAuthorizationDao namespaceIamRoleAuthorizationDao; @Before public void before() { initMocks(this); } @Test public void createNamespaceIamRoleAuthorizationAssertDependenciesCalledAndResultExpected() { IamRole expectedIamRole1 = new IamRole("iamRoleName1", "iamRoleDescription1"); IamRole expectedIamRole2 = new IamRole("iamRoleName2", " "); List<IamRole> expectedIamRoles = Arrays.asList(expectedIamRole1, expectedIamRole2); NamespaceIamRoleAuthorizationCreateRequest expectedRequest = new NamespaceIamRoleAuthorizationCreateRequest("namespace", expectedIamRoles); NamespaceEntity expectedNamespaceEntity = new NamespaceEntity(); expectedNamespaceEntity.setCode("NAMESPACE"); when(namespaceDaoHelper.getNamespaceEntity(any())).thenReturn(expectedNamespaceEntity); when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(Collections.emptyList()); NamespaceIamRoleAuthorization response = namespaceIamRoleAuthorizationServiceImpl.createNamespaceIamRoleAuthorization(expectedRequest); assertNotNull(response); assertEquals(expectedNamespaceEntity.getCode(), response.getNamespace()); assertNotNull(response.getIamRoles()); assertEquals(expectedIamRoles.size(), response.getIamRoles().size()); { IamRole iamRole = response.getIamRoles().get(0); assertNotNull(iamRole); assertEquals(expectedIamRole1.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(expectedIamRole1.getIamRoleDescription(), iamRole.getIamRoleDescription()); } { IamRole iamRole = response.getIamRoles().get(1); assertNotNull(iamRole); assertEquals(expectedIamRole2.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(null, iamRole.getIamRoleDescription()); } verify(namespaceDaoHelper).getNamespaceEntity(expectedRequest.getNamespace()); verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(expectedNamespaceEntity); verify(namespaceIamRoleAuthorizationDao).saveAndRefresh( namespaceIamRoleAuthorizationEntityEq(expectedNamespaceEntity.getCode(), expectedIamRole1.getIamRoleName(), expectedIamRole1.getIamRoleDescription())); verify(namespaceIamRoleAuthorizationDao) .saveAndRefresh(namespaceIamRoleAuthorizationEntityEq(expectedNamespaceEntity.getCode(), expectedIamRole2.getIamRoleName(), null)); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void createNamespaceIamRoleAuthorizationAssertErrorWhenAuthorizationAlreadyExist() { IamRole expectedIamRole1 = new IamRole("iamRoleName1", "iamRoleDescription1"); IamRole expectedIamRole2 = new IamRole("iamRoleName2", "iamRoleDescription2"); List<IamRole> expectedIamRoles = Arrays.asList(expectedIamRole1, expectedIamRole2); NamespaceIamRoleAuthorizationCreateRequest expectedRequest = new NamespaceIamRoleAuthorizationCreateRequest("namespace", expectedIamRoles); NamespaceEntity expectedNamespaceEntity = new NamespaceEntity(); expectedNamespaceEntity.setCode("NAMESPACE"); when(namespaceDaoHelper.getNamespaceEntity(any())).thenReturn(expectedNamespaceEntity); when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(Arrays.asList(new NamespaceIamRoleAuthorizationEntity())); try { namespaceIamRoleAuthorizationServiceImpl.createNamespaceIamRoleAuthorization(expectedRequest); fail(); } catch (Exception e) { assertEquals(AlreadyExistsException.class, e.getClass()); assertEquals(String.format("Namespace IAM role authorizations with namespace \"%s\" already exist", expectedNamespaceEntity.getCode()), e.getMessage()); } verify(namespaceDaoHelper).getNamespaceEntity(expectedRequest.getNamespace()); verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(expectedNamespaceEntity); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void createNamespaceIamRoleAuthorizationAssertErrorWhenRoleNameIsBlank() { IamRole expectedIamRole1 = new IamRole("iamRoleName1", "iamRoleDescription1"); IamRole expectedIamRole2 = new IamRole(" ", "iamRoleDescription2"); List<IamRole> expectedIamRoles = Arrays.asList(expectedIamRole1, expectedIamRole2); NamespaceIamRoleAuthorizationCreateRequest expectedRequest = new NamespaceIamRoleAuthorizationCreateRequest("namespace", expectedIamRoles); try { namespaceIamRoleAuthorizationServiceImpl.createNamespaceIamRoleAuthorization(expectedRequest); fail(); } catch (Exception e) { assertEquals(IllegalArgumentException.class, e.getClass()); assertEquals("IAM role name must be specified", e.getMessage()); } verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void createNamespaceIamRoleAuthorizationAssertErrorWhenIamRolesEmpty() { List<IamRole> expectedIamRoles = Arrays.asList(); NamespaceIamRoleAuthorizationCreateRequest expectedRequest = new NamespaceIamRoleAuthorizationCreateRequest("namespace", expectedIamRoles); try { namespaceIamRoleAuthorizationServiceImpl.createNamespaceIamRoleAuthorization(expectedRequest); fail(); } catch (Exception e) { assertEquals(IllegalArgumentException.class, e.getClass()); assertEquals("At least 1 IAM roles must be specified", e.getMessage()); } verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void createNamespaceIamRoleAuthorizationAssertErrorWhenNamespaceIsBlank() { IamRole expectedIamRole1 = new IamRole("iamRoleName1", "iamRoleDescription1"); IamRole expectedIamRole2 = new IamRole("iamRoleName2", " "); List<IamRole> expectedIamRoles = Arrays.asList(expectedIamRole1, expectedIamRole2); NamespaceIamRoleAuthorizationCreateRequest expectedRequest = new NamespaceIamRoleAuthorizationCreateRequest(" ", expectedIamRoles); try { namespaceIamRoleAuthorizationServiceImpl.createNamespaceIamRoleAuthorization(expectedRequest); fail(); } catch (Exception e) { assertEquals(IllegalArgumentException.class, e.getClass()); assertEquals("Namespace must be specified", e.getMessage()); } verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void createNamespaceIamRoleAuthorizationAssertInputsTrimmed() { IamRole expectedIamRole1 = new IamRole(" iamRoleName1 ", " iamRoleDescription1 "); IamRole expectedIamRole2 = new IamRole(" iamRoleName2 ", " "); List<IamRole> expectedIamRoles = Arrays.asList(expectedIamRole1, expectedIamRole2); NamespaceIamRoleAuthorizationCreateRequest expectedRequest = new NamespaceIamRoleAuthorizationCreateRequest(" namespace ", expectedIamRoles); NamespaceEntity expectedNamespaceEntity = new NamespaceEntity(); expectedNamespaceEntity.setCode("NAMESPACE"); when(namespaceDaoHelper.getNamespaceEntity(any())).thenReturn(expectedNamespaceEntity); when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(Collections.emptyList()); NamespaceIamRoleAuthorization response = namespaceIamRoleAuthorizationServiceImpl.createNamespaceIamRoleAuthorization(expectedRequest); assertNotNull(response); assertEquals(expectedNamespaceEntity.getCode(), response.getNamespace()); assertNotNull(response.getIamRoles()); assertEquals(expectedIamRoles.size(), response.getIamRoles().size()); { IamRole iamRole = response.getIamRoles().get(0); assertNotNull(iamRole); assertEquals(expectedIamRole1.getIamRoleName().trim(), iamRole.getIamRoleName()); assertEquals(expectedIamRole1.getIamRoleDescription().trim(), iamRole.getIamRoleDescription()); } { IamRole iamRole = response.getIamRoles().get(1); assertNotNull(iamRole); assertEquals(expectedIamRole2.getIamRoleName().trim(), iamRole.getIamRoleName()); assertEquals(null, iamRole.getIamRoleDescription()); } verify(namespaceDaoHelper).getNamespaceEntity(expectedRequest.getNamespace().trim()); verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(expectedNamespaceEntity); verify(namespaceIamRoleAuthorizationDao).saveAndRefresh( namespaceIamRoleAuthorizationEntityEq(expectedNamespaceEntity.getCode(), expectedIamRole1.getIamRoleName().trim(), expectedIamRole1.getIamRoleDescription().trim())); verify(namespaceIamRoleAuthorizationDao) .saveAndRefresh(namespaceIamRoleAuthorizationEntityEq(expectedNamespaceEntity.getCode(), expectedIamRole2.getIamRoleName().trim(), null)); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void getNamespaceIamRoleAuthorizationAssertDependenciesCalledAndResultExpected() { String expectedNamespace = "namespace"; NamespaceEntity expectedNamespaceEntity = new NamespaceEntity(); expectedNamespaceEntity.setCode("NAMESPACE"); List<NamespaceIamRoleAuthorizationEntity> namespaceIamRoleAuthorizationEntities = new ArrayList<>(); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity1 = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntity1.setNamespace(expectedNamespaceEntity); namespaceIamRoleAuthorizationEntity1.setIamRoleName("iamRoleName1"); namespaceIamRoleAuthorizationEntity1.setDescription("description1"); namespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity1); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity2 = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntity2.setNamespace(expectedNamespaceEntity); namespaceIamRoleAuthorizationEntity2.setIamRoleName("iamRoleName2"); namespaceIamRoleAuthorizationEntity2.setDescription("description2"); namespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity2); when(namespaceDaoHelper.getNamespaceEntity(any())).thenReturn(expectedNamespaceEntity); when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(namespaceIamRoleAuthorizationEntities); NamespaceIamRoleAuthorization namespaceIamRoleAuthorization = namespaceIamRoleAuthorizationServiceImpl.getNamespaceIamRoleAuthorization(expectedNamespace); assertNotNull(namespaceIamRoleAuthorization); assertEquals(expectedNamespaceEntity.getCode(), namespaceIamRoleAuthorization.getNamespace()); assertNotNull(namespaceIamRoleAuthorization.getIamRoles()); assertEquals(2, namespaceIamRoleAuthorization.getIamRoles().size()); { IamRole iamRole = namespaceIamRoleAuthorization.getIamRoles().get(0); assertNotNull(iamRole); assertEquals(namespaceIamRoleAuthorizationEntity1.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(namespaceIamRoleAuthorizationEntity1.getDescription(), iamRole.getIamRoleDescription()); } { IamRole iamRole = namespaceIamRoleAuthorization.getIamRoles().get(1); assertNotNull(iamRole); assertEquals(namespaceIamRoleAuthorizationEntity2.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(namespaceIamRoleAuthorizationEntity2.getDescription(), iamRole.getIamRoleDescription()); } verify(namespaceDaoHelper).getNamespaceEntity(expectedNamespace); verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(expectedNamespaceEntity); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void getNamespaceIamRoleAuthorizationAssertInputsTrimmed() { String expectedNamespace = " namespace "; NamespaceEntity expectedNamespaceEntity = new NamespaceEntity(); expectedNamespaceEntity.setCode("NAMESPACE"); List<NamespaceIamRoleAuthorizationEntity> namespaceIamRoleAuthorizationEntities = new ArrayList<>(); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity1 = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntity1.setNamespace(expectedNamespaceEntity); namespaceIamRoleAuthorizationEntity1.setIamRoleName("iamRoleName1"); namespaceIamRoleAuthorizationEntity1.setDescription("description1"); namespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity1); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity2 = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntity2.setNamespace(expectedNamespaceEntity); namespaceIamRoleAuthorizationEntity2.setIamRoleName("iamRoleName2"); namespaceIamRoleAuthorizationEntity2.setDescription("description2"); namespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity2); when(namespaceDaoHelper.getNamespaceEntity(any())).thenReturn(expectedNamespaceEntity); when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(namespaceIamRoleAuthorizationEntities); NamespaceIamRoleAuthorization namespaceIamRoleAuthorization = namespaceIamRoleAuthorizationServiceImpl.getNamespaceIamRoleAuthorization(expectedNamespace); assertNotNull(namespaceIamRoleAuthorization); assertEquals(expectedNamespaceEntity.getCode(), namespaceIamRoleAuthorization.getNamespace()); assertNotNull(namespaceIamRoleAuthorization.getIamRoles()); assertEquals(2, namespaceIamRoleAuthorization.getIamRoles().size()); { IamRole iamRole = namespaceIamRoleAuthorization.getIamRoles().get(0); assertNotNull(iamRole); assertEquals(namespaceIamRoleAuthorizationEntity1.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(namespaceIamRoleAuthorizationEntity1.getDescription(), iamRole.getIamRoleDescription()); } { IamRole iamRole = namespaceIamRoleAuthorization.getIamRoles().get(1); assertNotNull(iamRole); assertEquals(namespaceIamRoleAuthorizationEntity2.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(namespaceIamRoleAuthorizationEntity2.getDescription(), iamRole.getIamRoleDescription()); } verify(namespaceDaoHelper).getNamespaceEntity(expectedNamespace.trim()); verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(expectedNamespaceEntity); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void getNamespaceIamRoleAuthorizationAssertErrorWhenNoEntitiesFound() { String expectedNamespace = "namespace"; NamespaceEntity expectedNamespaceEntity = new NamespaceEntity(); expectedNamespaceEntity.setCode("NAMESPACE"); List<NamespaceIamRoleAuthorizationEntity> namespaceIamRoleAuthorizationEntities = Collections.emptyList(); when(namespaceDaoHelper.getNamespaceEntity(any())).thenReturn(expectedNamespaceEntity); when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(namespaceIamRoleAuthorizationEntities); try { namespaceIamRoleAuthorizationServiceImpl.getNamespaceIamRoleAuthorization(expectedNamespace); fail(); } catch (Exception e) { assertEquals(ObjectNotFoundException.class, e.getClass()); assertEquals(String.format("Namespace IAM role authorizations for namespace \"%s\" do not exist", expectedNamespaceEntity.getCode()), e.getMessage()); } verify(namespaceDaoHelper).getNamespaceEntity(expectedNamespace); verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(expectedNamespaceEntity); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void getNamespaceIamRoleAuthorizationAssertErrorWhenNamespaceIsBlank() { String expectedNamespace = " "; try { namespaceIamRoleAuthorizationServiceImpl.getNamespaceIamRoleAuthorization(expectedNamespace); fail(); } catch (Exception e) { assertEquals(IllegalArgumentException.class, e.getClass()); assertEquals("Namespace must be specified", e.getMessage()); } verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void getNamespaceIamRoleAuthorizationsAssertCallsDependenciesAndResultExpected() { NamespaceEntity namespaceEntity1 = new NamespaceEntity(); namespaceEntity1.setCode("namespace1"); NamespaceEntity namespaceEntity2 = new NamespaceEntity(); namespaceEntity2.setCode("namespace2"); List<NamespaceIamRoleAuthorizationEntity> expectedNamespaceIamRoleAuthorizationEntities = new ArrayList<>(); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity1 = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntity1.setNamespace(namespaceEntity1); namespaceIamRoleAuthorizationEntity1.setIamRoleName("iamRoleName1"); namespaceIamRoleAuthorizationEntity1.setDescription("description1"); expectedNamespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity1); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity2 = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntity2.setNamespace(namespaceEntity1); namespaceIamRoleAuthorizationEntity2.setIamRoleName("iamRoleName2"); namespaceIamRoleAuthorizationEntity2.setDescription("description2"); expectedNamespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity2); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity3 = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntity3.setNamespace(namespaceEntity2); namespaceIamRoleAuthorizationEntity3.setIamRoleName("iamRoleName3"); namespaceIamRoleAuthorizationEntity3.setDescription("description3"); expectedNamespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity3); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity4 = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntity4.setNamespace(namespaceEntity2); namespaceIamRoleAuthorizationEntity4.setIamRoleName("iamRoleName4"); namespaceIamRoleAuthorizationEntity4.setDescription("description4"); expectedNamespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity4); when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(expectedNamespaceIamRoleAuthorizationEntities); NamespaceIamRoleAuthorizations result = namespaceIamRoleAuthorizationServiceImpl.getNamespaceIamRoleAuthorizations(); assertNotNull(result); assertNotNull(result.getNamespaceIamRoleAuthorizations()); assertEquals(2, result.getNamespaceIamRoleAuthorizations().size()); { NamespaceIamRoleAuthorization namespaceIamRoleAuthorization = result.getNamespaceIamRoleAuthorizations().get(0); assertNotNull(namespaceIamRoleAuthorization); assertEquals(namespaceEntity1.getCode(), namespaceIamRoleAuthorization.getNamespace()); assertNotNull(namespaceIamRoleAuthorization.getIamRoles()); assertEquals(2, namespaceIamRoleAuthorization.getIamRoles().size()); { IamRole iamRole = namespaceIamRoleAuthorization.getIamRoles().get(0); assertNotNull(iamRole); assertEquals(namespaceIamRoleAuthorizationEntity1.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(namespaceIamRoleAuthorizationEntity1.getDescription(), iamRole.getIamRoleDescription()); } { IamRole iamRole = namespaceIamRoleAuthorization.getIamRoles().get(1); assertNotNull(iamRole); assertEquals(namespaceIamRoleAuthorizationEntity2.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(namespaceIamRoleAuthorizationEntity2.getDescription(), iamRole.getIamRoleDescription()); } } { NamespaceIamRoleAuthorization namespaceIamRoleAuthorization = result.getNamespaceIamRoleAuthorizations().get(1); assertNotNull(namespaceIamRoleAuthorization); assertEquals(namespaceEntity2.getCode(), namespaceIamRoleAuthorization.getNamespace()); assertNotNull(namespaceIamRoleAuthorization.getIamRoles()); assertEquals(2, namespaceIamRoleAuthorization.getIamRoles().size()); { IamRole iamRole = namespaceIamRoleAuthorization.getIamRoles().get(0); assertNotNull(iamRole); assertEquals(namespaceIamRoleAuthorizationEntity3.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(namespaceIamRoleAuthorizationEntity3.getDescription(), iamRole.getIamRoleDescription()); } { IamRole iamRole = namespaceIamRoleAuthorization.getIamRoles().get(1); assertNotNull(iamRole); assertEquals(namespaceIamRoleAuthorizationEntity4.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(namespaceIamRoleAuthorizationEntity4.getDescription(), iamRole.getIamRoleDescription()); } } verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(null); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void getNamespaceIamRoleAuthorizationsAssertResultEmptyWhenDaoReturnsEmpty() { when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(Collections.emptyList()); NamespaceIamRoleAuthorizations result = namespaceIamRoleAuthorizationServiceImpl.getNamespaceIamRoleAuthorizations(); assertNotNull(result); assertNotNull(result.getNamespaceIamRoleAuthorizations()); assertEquals(0, result.getNamespaceIamRoleAuthorizations().size()); verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(null); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void updateNamespaceIamRoleAuthorizationAssertCallsDependenciesAndResultExpected() { String expectedNamespace = "namespace"; List<IamRole> iamRoles = new ArrayList<>(); IamRole iamRole1 = new IamRole("iamRoleName1", "iamRoleDescription1"); iamRoles.add(iamRole1); IamRole iamRole2 = new IamRole("iamRoleName2", " "); iamRoles.add(iamRole2); NamespaceIamRoleAuthorizationUpdateRequest expectedNamespaceIamRoleAuthorizationUpdateRequest = new NamespaceIamRoleAuthorizationUpdateRequest(iamRoles); NamespaceEntity expectedNamespaceEntity = new NamespaceEntity(); expectedNamespaceEntity.setCode("NAMESPACE"); when(namespaceDaoHelper.getNamespaceEntity(any())).thenReturn(expectedNamespaceEntity); List<NamespaceIamRoleAuthorizationEntity> namespaceIamRoleAuthorizationEntities = new ArrayList<>(); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity); when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(namespaceIamRoleAuthorizationEntities); NamespaceIamRoleAuthorization result = namespaceIamRoleAuthorizationServiceImpl.updateNamespaceIamRoleAuthorization(expectedNamespace, expectedNamespaceIamRoleAuthorizationUpdateRequest); assertNotNull(result); assertEquals(expectedNamespaceEntity.getCode(), result.getNamespace()); assertNotNull(result.getIamRoles()); assertEquals(2, result.getIamRoles().size()); { IamRole iamRole = result.getIamRoles().get(0); assertNotNull(iamRole); assertEquals(iamRole1.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(iamRole1.getIamRoleDescription(), iamRole.getIamRoleDescription()); } { IamRole iamRole = result.getIamRoles().get(1); assertNotNull(iamRole); assertEquals(iamRole2.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(null, iamRole.getIamRoleDescription()); } verify(namespaceDaoHelper).getNamespaceEntity(expectedNamespace); verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(expectedNamespaceEntity); verify(namespaceIamRoleAuthorizationDao).delete(namespaceIamRoleAuthorizationEntity); verify(namespaceIamRoleAuthorizationDao).saveAndRefresh( namespaceIamRoleAuthorizationEntityEq(expectedNamespaceEntity.getCode(), iamRole1.getIamRoleName(), iamRole1.getIamRoleDescription())); verify(namespaceIamRoleAuthorizationDao) .saveAndRefresh(namespaceIamRoleAuthorizationEntityEq(expectedNamespaceEntity.getCode(), iamRole2.getIamRoleName(), null)); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void updateNamespaceIamRoleAuthorizationAssertInputsTrimmed() { String expectedNamespace = " namespace "; List<IamRole> iamRoles = new ArrayList<>(); IamRole iamRole1 = new IamRole(" iamRoleName1 ", " iamRoleDescription1 "); iamRoles.add(iamRole1); IamRole iamRole2 = new IamRole(" iamRoleName2 ", " "); iamRoles.add(iamRole2); NamespaceIamRoleAuthorizationUpdateRequest expectedNamespaceIamRoleAuthorizationUpdateRequest = new NamespaceIamRoleAuthorizationUpdateRequest(iamRoles); NamespaceEntity expectedNamespaceEntity = new NamespaceEntity(); expectedNamespaceEntity.setCode("NAMESPACE"); when(namespaceDaoHelper.getNamespaceEntity(any())).thenReturn(expectedNamespaceEntity); List<NamespaceIamRoleAuthorizationEntity> namespaceIamRoleAuthorizationEntities = new ArrayList<>(); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity); when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(namespaceIamRoleAuthorizationEntities); NamespaceIamRoleAuthorization result = namespaceIamRoleAuthorizationServiceImpl.updateNamespaceIamRoleAuthorization(expectedNamespace, expectedNamespaceIamRoleAuthorizationUpdateRequest); assertNotNull(result); assertEquals(expectedNamespaceEntity.getCode(), result.getNamespace()); assertNotNull(result.getIamRoles()); assertEquals(2, result.getIamRoles().size()); { IamRole iamRole = result.getIamRoles().get(0); assertNotNull(iamRole); assertEquals(iamRole1.getIamRoleName().trim(), iamRole.getIamRoleName()); assertEquals(iamRole1.getIamRoleDescription().trim(), iamRole.getIamRoleDescription()); } { IamRole iamRole = result.getIamRoles().get(1); assertNotNull(iamRole); assertEquals(iamRole2.getIamRoleName().trim(), iamRole.getIamRoleName()); assertEquals(null, iamRole.getIamRoleDescription()); } verify(namespaceDaoHelper).getNamespaceEntity(expectedNamespace.trim()); verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(expectedNamespaceEntity); verify(namespaceIamRoleAuthorizationDao).delete(namespaceIamRoleAuthorizationEntity); verify(namespaceIamRoleAuthorizationDao).saveAndRefresh( namespaceIamRoleAuthorizationEntityEq(expectedNamespaceEntity.getCode(), iamRole1.getIamRoleName().trim(), iamRole1.getIamRoleDescription().trim())); verify(namespaceIamRoleAuthorizationDao) .saveAndRefresh(namespaceIamRoleAuthorizationEntityEq(expectedNamespaceEntity.getCode(), iamRole2.getIamRoleName().trim(), null)); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void updateNamespaceIamRoleAuthorizationAssertErrorWhenDaoReturnsEmpty() { String expectedNamespace = "namespace"; List<IamRole> iamRoles = new ArrayList<>(); IamRole iamRole1 = new IamRole("iamRoleName1", "iamRoleDescription1"); iamRoles.add(iamRole1); IamRole iamRole2 = new IamRole("iamRoleName2", " "); iamRoles.add(iamRole2); NamespaceIamRoleAuthorizationUpdateRequest expectedNamespaceIamRoleAuthorizationUpdateRequest = new NamespaceIamRoleAuthorizationUpdateRequest(iamRoles); NamespaceEntity expectedNamespaceEntity = new NamespaceEntity(); expectedNamespaceEntity.setCode("NAMESPACE"); when(namespaceDaoHelper.getNamespaceEntity(any())).thenReturn(expectedNamespaceEntity); when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(Collections.emptyList()); try { namespaceIamRoleAuthorizationServiceImpl.updateNamespaceIamRoleAuthorization(expectedNamespace, expectedNamespaceIamRoleAuthorizationUpdateRequest); fail(); } catch (Exception e) { assertEquals(ObjectNotFoundException.class, e.getClass()); assertEquals(String.format("Namespace IAM role authorizations for namespace \"%s\" do not exist", expectedNamespaceEntity.getCode()), e.getMessage()); } verify(namespaceDaoHelper).getNamespaceEntity(expectedNamespace); verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(expectedNamespaceEntity); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void updateNamespaceIamRoleAuthorizationAssertErrorWhenRoleNameIsBlank() { String expectedNamespace = "namespace"; List<IamRole> iamRoles = new ArrayList<>(); IamRole iamRole1 = new IamRole(" ", "iamRoleDescription1"); iamRoles.add(iamRole1); IamRole iamRole2 = new IamRole(" ", " "); iamRoles.add(iamRole2); NamespaceIamRoleAuthorizationUpdateRequest expectedNamespaceIamRoleAuthorizationUpdateRequest = new NamespaceIamRoleAuthorizationUpdateRequest(iamRoles); try { namespaceIamRoleAuthorizationServiceImpl.updateNamespaceIamRoleAuthorization(expectedNamespace, expectedNamespaceIamRoleAuthorizationUpdateRequest); fail(); } catch (Exception e) { assertEquals(IllegalArgumentException.class, e.getClass()); assertEquals("IAM role name must be specified", e.getMessage()); } verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void updateNamespaceIamRoleAuthorizationAssertErrorWhenIamRolesEmpty() { String expectedNamespace = "namespace"; NamespaceIamRoleAuthorizationUpdateRequest expectedNamespaceIamRoleAuthorizationUpdateRequest = new NamespaceIamRoleAuthorizationUpdateRequest(Collections.emptyList()); try { namespaceIamRoleAuthorizationServiceImpl.updateNamespaceIamRoleAuthorization(expectedNamespace, expectedNamespaceIamRoleAuthorizationUpdateRequest); fail(); } catch (Exception e) { assertEquals(IllegalArgumentException.class, e.getClass()); assertEquals("At least 1 IAM roles must be specified", e.getMessage()); } verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void updateNamespaceIamRoleAuthorizationAssertErrorWhenNamespaceIsBlank() { String expectedNamespace = " "; List<IamRole> iamRoles = new ArrayList<>(); IamRole iamRole1 = new IamRole("iamRoleName1", "iamRoleDescription1"); iamRoles.add(iamRole1); IamRole iamRole2 = new IamRole("iamRoleName2", " "); iamRoles.add(iamRole2); NamespaceIamRoleAuthorizationUpdateRequest expectedNamespaceIamRoleAuthorizationUpdateRequest = new NamespaceIamRoleAuthorizationUpdateRequest(iamRoles); try { namespaceIamRoleAuthorizationServiceImpl.updateNamespaceIamRoleAuthorization(expectedNamespace, expectedNamespaceIamRoleAuthorizationUpdateRequest); fail(); } catch (Exception e) { assertEquals(IllegalArgumentException.class, e.getClass()); assertEquals("Namespace must be specified", e.getMessage()); } verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void deleteNamespaceIamRoleAuthorizationAssertCallsDependenciesAndResultExpected() { String expectedNamespace = "namespace"; NamespaceEntity expectedNamespaceEntity = new NamespaceEntity(); expectedNamespaceEntity.setCode("NAMESPACE"); when(namespaceDaoHelper.getNamespaceEntity(any())).thenReturn(expectedNamespaceEntity); List<NamespaceIamRoleAuthorizationEntity> expectedNamespaceIamRoleAuthorizationEntities = new ArrayList<>(); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity1 = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntity1.setNamespace(expectedNamespaceEntity); namespaceIamRoleAuthorizationEntity1.setIamRoleName("iamRoleName1"); namespaceIamRoleAuthorizationEntity1.setDescription("description1"); expectedNamespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity1); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity2 = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntity2.setNamespace(expectedNamespaceEntity); namespaceIamRoleAuthorizationEntity2.setIamRoleName("iamRoleName2"); namespaceIamRoleAuthorizationEntity2.setDescription("description2"); expectedNamespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity2); when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(expectedNamespaceIamRoleAuthorizationEntities); NamespaceIamRoleAuthorization result = namespaceIamRoleAuthorizationServiceImpl.deleteNamespaceIamRoleAuthorization(expectedNamespace); assertNotNull(result); assertEquals(expectedNamespaceEntity.getCode(), result.getNamespace()); assertNotNull(result.getIamRoles()); assertEquals(2, result.getIamRoles().size()); { IamRole iamRole = result.getIamRoles().get(0); assertNotNull(iamRole); assertEquals(namespaceIamRoleAuthorizationEntity1.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(namespaceIamRoleAuthorizationEntity1.getDescription(), iamRole.getIamRoleDescription()); } { IamRole iamRole = result.getIamRoles().get(1); assertNotNull(iamRole); assertEquals(namespaceIamRoleAuthorizationEntity2.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(namespaceIamRoleAuthorizationEntity2.getDescription(), iamRole.getIamRoleDescription()); } verify(namespaceDaoHelper).getNamespaceEntity(expectedNamespace); verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(expectedNamespaceEntity); verify(namespaceIamRoleAuthorizationDao).delete(namespaceIamRoleAuthorizationEntity1); verify(namespaceIamRoleAuthorizationDao).delete(namespaceIamRoleAuthorizationEntity2); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void deleteNamespaceIamRoleAuthorizationAssertInputsAreTrimmed() { String expectedNamespace = " namespace "; NamespaceEntity expectedNamespaceEntity = new NamespaceEntity(); expectedNamespaceEntity.setCode("NAMESPACE"); when(namespaceDaoHelper.getNamespaceEntity(any())).thenReturn(expectedNamespaceEntity); List<NamespaceIamRoleAuthorizationEntity> expectedNamespaceIamRoleAuthorizationEntities = new ArrayList<>(); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity1 = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntity1.setNamespace(expectedNamespaceEntity); namespaceIamRoleAuthorizationEntity1.setIamRoleName("iamRoleName1"); namespaceIamRoleAuthorizationEntity1.setDescription("description1"); expectedNamespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity1); NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity2 = new NamespaceIamRoleAuthorizationEntity(); namespaceIamRoleAuthorizationEntity2.setNamespace(expectedNamespaceEntity); namespaceIamRoleAuthorizationEntity2.setIamRoleName("iamRoleName2"); namespaceIamRoleAuthorizationEntity2.setDescription("description2"); expectedNamespaceIamRoleAuthorizationEntities.add(namespaceIamRoleAuthorizationEntity2); when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(expectedNamespaceIamRoleAuthorizationEntities); NamespaceIamRoleAuthorization result = namespaceIamRoleAuthorizationServiceImpl.deleteNamespaceIamRoleAuthorization(expectedNamespace); assertNotNull(result); assertEquals(expectedNamespaceEntity.getCode(), result.getNamespace()); assertNotNull(result.getIamRoles()); assertEquals(2, result.getIamRoles().size()); { IamRole iamRole = result.getIamRoles().get(0); assertNotNull(iamRole); assertEquals(namespaceIamRoleAuthorizationEntity1.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(namespaceIamRoleAuthorizationEntity1.getDescription(), iamRole.getIamRoleDescription()); } { IamRole iamRole = result.getIamRoles().get(1); assertNotNull(iamRole); assertEquals(namespaceIamRoleAuthorizationEntity2.getIamRoleName(), iamRole.getIamRoleName()); assertEquals(namespaceIamRoleAuthorizationEntity2.getDescription(), iamRole.getIamRoleDescription()); } verify(namespaceDaoHelper).getNamespaceEntity(expectedNamespace.trim()); verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(expectedNamespaceEntity); verify(namespaceIamRoleAuthorizationDao).delete(namespaceIamRoleAuthorizationEntity1); verify(namespaceIamRoleAuthorizationDao).delete(namespaceIamRoleAuthorizationEntity2); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void deleteNamespaceIamRoleAuthorizationAssertErrorWhenDaoReturnsEmpty() { String expectedNamespace = "namespace"; NamespaceEntity expectedNamespaceEntity = new NamespaceEntity(); expectedNamespaceEntity.setCode("NAMESPACE"); when(namespaceDaoHelper.getNamespaceEntity(any())).thenReturn(expectedNamespaceEntity); when(namespaceIamRoleAuthorizationDao.getNamespaceIamRoleAuthorizations(any())).thenReturn(Collections.emptyList()); try { namespaceIamRoleAuthorizationServiceImpl.deleteNamespaceIamRoleAuthorization(expectedNamespace); fail(); } catch (Exception e) { assertEquals(ObjectNotFoundException.class, e.getClass()); assertEquals(String.format("Namespace IAM role authorizations for namespace \"%s\" do not exist", expectedNamespaceEntity.getCode()), e.getMessage()); } verify(namespaceDaoHelper).getNamespaceEntity(expectedNamespace); verify(namespaceIamRoleAuthorizationDao).getNamespaceIamRoleAuthorizations(expectedNamespaceEntity); verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } @Test public void deleteNamespaceIamRoleAuthorizationAssertErrorWhenNamespaceIsBlank() { String expectedNamespace = " "; try { namespaceIamRoleAuthorizationServiceImpl.deleteNamespaceIamRoleAuthorization(expectedNamespace); fail(); } catch (Exception e) { assertEquals(IllegalArgumentException.class, e.getClass()); assertEquals("Namespace must be specified", e.getMessage()); } verifyNoMoreInteractions(namespaceDaoHelper, namespaceIamRoleAuthorizationDao); } /** * Creates and returns an ArgumentMatcher that matches when the given parameters equal NamespaceIamRoleAuthorizationEntity. * * @param expectedNamespace The namespace to match * @param expectedIamRoleName The role name to match * @param expectedDescription The description to match * * @return The argument matcher */ private NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntityEq(String expectedNamespace, String expectedIamRoleName, String expectedDescription) { return argThat(new ArgumentMatcher<NamespaceIamRoleAuthorizationEntity>() { @Override public boolean matches(Object argument) { NamespaceIamRoleAuthorizationEntity namespaceIamRoleAuthorizationEntity = (NamespaceIamRoleAuthorizationEntity) argument; String namespace = namespaceIamRoleAuthorizationEntity.getNamespace().getCode(); String iamRoleName = namespaceIamRoleAuthorizationEntity.getIamRoleName(); String description = namespaceIamRoleAuthorizationEntity.getDescription(); return Objects.equal(namespace, expectedNamespace) && Objects.equal(iamRoleName, expectedIamRoleName) && Objects.equal(description, expectedDescription); } }); } }