/*
* 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.dao;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.finra.herd.model.api.xml.NamespacePermissionEnum;
import org.finra.herd.model.api.xml.UserNamespaceAuthorizationKey;
import org.finra.herd.model.jpa.NamespaceEntity;
import org.finra.herd.model.jpa.UserNamespaceAuthorizationEntity;
public class UserNamespaceAuthorizationDaoTest extends AbstractDaoTest
{
@Test
public void testGetUserNamespaceAuthorizationByKey()
{
// Create and persist the relative database entities.
NamespaceEntity namespaceEntity = namespaceDaoTestHelper.createNamespaceEntity(NAMESPACE);
UserNamespaceAuthorizationEntity userNamespaceAuthorizationEntity = userNamespaceAuthorizationDaoTestHelper
.createUserNamespaceAuthorizationEntity(USER_ID, namespaceEntity, Arrays.asList(NamespacePermissionEnum.READ, NamespacePermissionEnum.WRITE));
// Get a user namespace authorization.
assertEquals(userNamespaceAuthorizationEntity,
userNamespaceAuthorizationDao.getUserNamespaceAuthorizationByKey(new UserNamespaceAuthorizationKey(USER_ID, NAMESPACE)));
// Test case insensitivity of user namespace authorization key.
assertEquals(userNamespaceAuthorizationEntity, userNamespaceAuthorizationDao
.getUserNamespaceAuthorizationByKey(new UserNamespaceAuthorizationKey(USER_ID.toUpperCase(), NAMESPACE.toUpperCase())));
assertEquals(userNamespaceAuthorizationEntity, userNamespaceAuthorizationDao
.getUserNamespaceAuthorizationByKey(new UserNamespaceAuthorizationKey(USER_ID.toLowerCase(), NAMESPACE.toLowerCase())));
// Try to retrieve user namespace authorization using invalid input parameters.
assertNull(userNamespaceAuthorizationDao.getUserNamespaceAuthorizationByKey(new UserNamespaceAuthorizationKey("I_DO_NOT_EXIST", NAMESPACE)));
assertNull(userNamespaceAuthorizationDao.getUserNamespaceAuthorizationByKey(new UserNamespaceAuthorizationKey(USER_ID, "I_DO_NOT_EXIST")));
}
@Test
public void testGetUserNamespaceAuthorizationsByUserId()
{
// Create user namespace authorization keys. The keys are listed out of order to validate the order by logic.
List<UserNamespaceAuthorizationKey> keys = Arrays
.asList(new UserNamespaceAuthorizationKey(USER_ID_2, NAMESPACE_2), new UserNamespaceAuthorizationKey(USER_ID_2, NAMESPACE),
new UserNamespaceAuthorizationKey(USER_ID, NAMESPACE_2), new UserNamespaceAuthorizationKey(USER_ID, NAMESPACE));
// Create and persist the relative database entities.
List<UserNamespaceAuthorizationEntity> userNamespaceAuthorizationEntities = new ArrayList<>();
for (UserNamespaceAuthorizationKey key : keys)
{
userNamespaceAuthorizationEntities
.add(userNamespaceAuthorizationDaoTestHelper.createUserNamespaceAuthorizationEntity(key, SUPPORTED_NAMESPACE_PERMISSIONS));
}
// Get user namespace authorizations by user id.
assertEquals(Arrays.asList(userNamespaceAuthorizationEntities.get(3), userNamespaceAuthorizationEntities.get(2)),
userNamespaceAuthorizationDao.getUserNamespaceAuthorizationsByUserId(USER_ID));
// Test case insensitivity of the user id input parameter.
assertEquals(Arrays.asList(userNamespaceAuthorizationEntities.get(3), userNamespaceAuthorizationEntities.get(2)),
userNamespaceAuthorizationDao.getUserNamespaceAuthorizationsByUserId(USER_ID.toUpperCase()));
assertEquals(Arrays.asList(userNamespaceAuthorizationEntities.get(3), userNamespaceAuthorizationEntities.get(2)),
userNamespaceAuthorizationDao.getUserNamespaceAuthorizationsByUserId(USER_ID.toLowerCase()));
// Try to retrieve user namespace authorization using a non-existing user id.
assertEquals(new ArrayList<>(), userNamespaceAuthorizationDao.getUserNamespaceAuthorizationsByUserId(USER_ID_3));
}
@Test
public void testGetUserNamespaceAuthorizationsByNamespace()
{
// Create user namespace authorization keys. The keys are listed out of order to validate the order by logic.
List<UserNamespaceAuthorizationKey> keys = Arrays
.asList(new UserNamespaceAuthorizationKey(USER_ID_2, NAMESPACE_2), new UserNamespaceAuthorizationKey(USER_ID_2, NAMESPACE),
new UserNamespaceAuthorizationKey(USER_ID, NAMESPACE_2), new UserNamespaceAuthorizationKey(USER_ID, NAMESPACE));
// Create and persist the relative database entities.
List<UserNamespaceAuthorizationEntity> userNamespaceAuthorizationEntities = new ArrayList<>();
for (UserNamespaceAuthorizationKey key : keys)
{
userNamespaceAuthorizationEntities
.add(userNamespaceAuthorizationDaoTestHelper.createUserNamespaceAuthorizationEntity(key, SUPPORTED_NAMESPACE_PERMISSIONS));
}
// Get user namespace authorizations by namespace.
assertEquals(Arrays.asList(userNamespaceAuthorizationEntities.get(3), userNamespaceAuthorizationEntities.get(1)),
userNamespaceAuthorizationDao.getUserNamespaceAuthorizationsByNamespace(NAMESPACE));
// Test case insensitivity of the namespace input parameter.
assertEquals(Arrays.asList(userNamespaceAuthorizationEntities.get(3), userNamespaceAuthorizationEntities.get(1)),
userNamespaceAuthorizationDao.getUserNamespaceAuthorizationsByNamespace(NAMESPACE.toUpperCase()));
assertEquals(Arrays.asList(userNamespaceAuthorizationEntities.get(3), userNamespaceAuthorizationEntities.get(1)),
userNamespaceAuthorizationDao.getUserNamespaceAuthorizationsByNamespace(NAMESPACE.toLowerCase()));
// Try to retrieve user namespace authorization using a non-existing namespace.
assertEquals(new ArrayList<>(), userNamespaceAuthorizationDao.getUserNamespaceAuthorizationsByNamespace(NAMESPACE_3));
}
@Test
public void testGetUserNamespaceAuthorizationsByUserIdStartsWith()
{
NamespaceEntity namespaceEntity = new NamespaceEntity();
namespaceEntity.setCode(NAMESPACE);
namespaceDao.saveAndRefresh(namespaceEntity);
UserNamespaceAuthorizationEntity userNamespaceAuthorizationEntity1 = new UserNamespaceAuthorizationEntity();
userNamespaceAuthorizationEntity1.setUserId("ab");
userNamespaceAuthorizationEntity1.setNamespace(namespaceEntity);
userNamespaceAuthorizationDao.saveAndRefresh(userNamespaceAuthorizationEntity1);
UserNamespaceAuthorizationEntity userNamespaceAuthorizationEntity2 = new UserNamespaceAuthorizationEntity();
userNamespaceAuthorizationEntity2.setUserId("ac");
userNamespaceAuthorizationEntity2.setNamespace(namespaceEntity);
userNamespaceAuthorizationDao.saveAndRefresh(userNamespaceAuthorizationEntity2);
UserNamespaceAuthorizationEntity userNamespaceAuthorizationEntity3 = new UserNamespaceAuthorizationEntity();
userNamespaceAuthorizationEntity3.setUserId("bc");
userNamespaceAuthorizationEntity3.setNamespace(namespaceEntity);
userNamespaceAuthorizationDao.saveAndRefresh(userNamespaceAuthorizationEntity3);
{
List<UserNamespaceAuthorizationEntity> result = userNamespaceAuthorizationDao.getUserNamespaceAuthorizationsByUserIdStartsWith("a");
assertEquals(2, result.size());
assertEquals("ab", result.get(0).getUserId());
assertEquals("ac", result.get(1).getUserId());
}
{
List<UserNamespaceAuthorizationEntity> result = userNamespaceAuthorizationDao.getUserNamespaceAuthorizationsByUserIdStartsWith("b");
assertEquals(1, result.size());
assertEquals("bc", result.get(0).getUserId());
}
{
List<UserNamespaceAuthorizationEntity> result = userNamespaceAuthorizationDao.getUserNamespaceAuthorizationsByUserIdStartsWith("c");
assertEquals(0, result.size());
}
}
}