/* * 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.assertTrue; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.google.common.collect.ImmutableSet; import org.junit.Test; import org.finra.herd.model.api.xml.BusinessObjectDefinitionKey; import org.finra.herd.model.jpa.BusinessObjectDefinitionEntity; import org.finra.herd.model.jpa.TagEntity; public class BusinessObjectDefinitionDaoTest extends AbstractDaoTest { @Test public void testGetBusinessObjectDefinitionByKey() { // Create two business object definitions having the same business object definition name. BusinessObjectDefinitionEntity businessObjectDefinitionEntity = businessObjectDefinitionDaoTestHelper.createBusinessObjectDefinitionEntity(NAMESPACE, BDEF_NAME, DATA_PROVIDER_NAME, BDEF_DESCRIPTION); businessObjectDefinitionDaoTestHelper.createBusinessObjectDefinitionEntity(NAMESPACE_2, BDEF_NAME, DATA_PROVIDER_NAME, BDEF_DESCRIPTION); // Get the business object definition by key. BusinessObjectDefinitionEntity resultBusinessObjectDefinitionEntity = businessObjectDefinitionDao.getBusinessObjectDefinitionByKey(new BusinessObjectDefinitionKey(NAMESPACE, BDEF_NAME)); // Validate the returned object. assertEquals(businessObjectDefinitionEntity, resultBusinessObjectDefinitionEntity); } @Test public void testGetBusinessObjectDefinitionKeys() { // Create and persist business object definition entities. for (BusinessObjectDefinitionKey key : businessObjectDefinitionDaoTestHelper.getTestBusinessObjectDefinitionKeys()) { businessObjectDefinitionDaoTestHelper.createBusinessObjectDefinitionEntity(key, DATA_PROVIDER_NAME, BDEF_DESCRIPTION); } // Retrieve a list of business object definition keys. assertEquals(businessObjectDefinitionDaoTestHelper.getExpectedBusinessObjectDefinitionKeys(), businessObjectDefinitionDao.getBusinessObjectDefinitionKeys()); } @Test public void testGetBusinessObjectDefinitionKeysByNamespace() { // Create and persist business object definition entities. for (BusinessObjectDefinitionKey key : businessObjectDefinitionDaoTestHelper.getTestBusinessObjectDefinitionKeys()) { businessObjectDefinitionDaoTestHelper.createBusinessObjectDefinitionEntity(key, DATA_PROVIDER_NAME, BDEF_DESCRIPTION); } // Retrieve a list of business object definition keys for the specified namespace. assertEquals(businessObjectDefinitionDaoTestHelper.getExpectedBusinessObjectDefinitionKeysForNamespace(), businessObjectDefinitionDao.getBusinessObjectDefinitionKeysByNamespace(NAMESPACE)); // Retrieve a list of business object definition keys without specifying a namespace. assertEquals(businessObjectDefinitionDaoTestHelper.getExpectedBusinessObjectDefinitionKeys(), businessObjectDefinitionDao.getBusinessObjectDefinitionKeysByNamespace(BLANK_TEXT)); // Retrieve a list of business object definition keys for the specified namespace. assertEquals(businessObjectDefinitionDaoTestHelper.getExpectedBusinessObjectDefinitionKeysForNamespace(), businessObjectDefinitionDao.getBusinessObjectDefinitionKeysByNamespace(NAMESPACE)); // Retrieve a list of business object definition keys for the specified namespace in uppercase. assertEquals(businessObjectDefinitionDaoTestHelper.getExpectedBusinessObjectDefinitionKeysForNamespace(), businessObjectDefinitionDao.getBusinessObjectDefinitionKeysByNamespace(NAMESPACE.toUpperCase())); // Retrieve a list of business object definition keys for the specified namespace in lowercase. assertEquals(businessObjectDefinitionDaoTestHelper.getExpectedBusinessObjectDefinitionKeysForNamespace(), businessObjectDefinitionDao.getBusinessObjectDefinitionKeysByNamespace(NAMESPACE.toLowerCase())); // Try to retrieve a list of business object definition keys for a non-existing namespace. assertTrue(businessObjectDefinitionDao.getBusinessObjectDefinitionKeysByNamespace("I_DO_NOT_EXIST").isEmpty()); } @Test public void testGetBusinessObjectDefinitions() { // Create and persist two business object definition entities. List<BusinessObjectDefinitionEntity> businessObjectDefinitionEntities = businessObjectDefinitionDaoTestHelper.createExpectedBusinessObjectDefinitionEntities(); // Get the list of business object definitions when tag entities is empty. assertEquals(ImmutableSet.copyOf(businessObjectDefinitionEntities), ImmutableSet.copyOf(businessObjectDefinitionDao.getBusinessObjectDefinitions(new ArrayList<>()))); // Create and persist root tag entity. TagEntity parentTagEntity = tagDaoTestHelper.createTagEntity(TAG_TYPE, TAG_CODE, TAG_DISPLAY_NAME_2, TAG_DESCRIPTION, null); // Create two children for the root tag. List<TagEntity> tagEntities = Arrays .asList(parentTagEntity, tagDaoTestHelper.createTagEntity(TAG_TYPE, TAG_CODE_3, TAG_DISPLAY_NAME_4, TAG_DESCRIPTION, parentTagEntity), tagDaoTestHelper.createTagEntity(TAG_TYPE, TAG_CODE_4, TAG_DISPLAY_NAME_3, TAG_DESCRIPTION, parentTagEntity)); // Create and persist two business object definition tag entities for the child tag entities. for (BusinessObjectDefinitionEntity businessObjectDefinitionEntity : businessObjectDefinitionEntities) { for (TagEntity tagEntity : tagEntities) { businessObjectDefinitionTagDaoTestHelper.createBusinessObjectDefinitionTagEntity(businessObjectDefinitionEntity, tagEntity); } } // Filter duplicates and validate the result. assertEquals(ImmutableSet.copyOf(businessObjectDefinitionEntities), ImmutableSet.copyOf(businessObjectDefinitionDao.getBusinessObjectDefinitions(tagEntities))); } @Test public void testGetAllBusinessObjectDefinitions() { // Create and persist two business object definition entities. List<BusinessObjectDefinitionEntity> businessObjectDefinitionEntities = businessObjectDefinitionDaoTestHelper.createExpectedBusinessObjectDefinitionEntities(); // Get the list of all business object definitions without specifying offset and maximum number of results. assertEquals(businessObjectDefinitionEntities, businessObjectDefinitionDao.getAllBusinessObjectDefinitions()); // Get the list of all business object definitions when maximum number of results is set to 1. assertEquals(businessObjectDefinitionEntities.subList(0, 1), businessObjectDefinitionDao.getAllBusinessObjectDefinitions(0, 1)); // Get the list of all business object definitions when offset is set to 1. assertEquals(businessObjectDefinitionEntities.subList(1, 2), businessObjectDefinitionDao.getAllBusinessObjectDefinitions(1, 1)); } @Test public void testGetAllBusinessObjectDefinitionsByIds() { // Create and persist two business object definition entities. List<BusinessObjectDefinitionEntity> businessObjectDefinitionEntities = businessObjectDefinitionDaoTestHelper.createExpectedBusinessObjectDefinitionEntities(); List<Integer> businessObjectDefinitionIds = new ArrayList<>(); businessObjectDefinitionEntities.forEach(businessObjectDefinitionEntity -> businessObjectDefinitionIds.add(businessObjectDefinitionEntity.getId())); // Get the list of all business object definitions assertEquals(businessObjectDefinitionEntities, businessObjectDefinitionDao.getAllBusinessObjectDefinitionsByIds(businessObjectDefinitionIds)); } @Test public void testGetPercentageOfAllBusinessObjectDefinitionsOneHundredPercent() { // Create and persist two business object definition entities. List<BusinessObjectDefinitionEntity> businessObjectDefinitionEntities = businessObjectDefinitionDaoTestHelper.createExpectedBusinessObjectDefinitionEntities(); // Get the list of all business object definitions aka. 100% assertEquals(businessObjectDefinitionEntities, businessObjectDefinitionDao.getPercentageOfAllBusinessObjectDefinitions(1.0)); } @Test public void testGetPercentageOfAllBusinessObjectDefinitionsZeroPercent() { // Create and persist two business object definition entities. businessObjectDefinitionDaoTestHelper.createExpectedBusinessObjectDefinitionEntities(); // Create an empty list List<BusinessObjectDefinitionEntity> emptyList = new ArrayList<>(); // Get the list of all business object definitions aka. 0% assertEquals(emptyList, businessObjectDefinitionDao.getPercentageOfAllBusinessObjectDefinitions(0.0)); } @Test public void testGetMostRecentBusinessObjectDefinitions() { // Create and persist two business object definition entities. List<BusinessObjectDefinitionEntity> businessObjectDefinitionEntities = new ArrayList<>(); businessObjectDefinitionDaoTestHelper .createBusinessObjectDefinitionEntity(AbstractDaoTest.NAMESPACE, AbstractDaoTest.BDEF_NAME, AbstractDaoTest.DATA_PROVIDER_NAME, AbstractDaoTest.BDEF_DESCRIPTION); BusinessObjectDefinitionEntity businessObjectDefinitionEntityTwo = businessObjectDefinitionDaoTestHelper .createBusinessObjectDefinitionEntity(AbstractDaoTest.NAMESPACE_2, AbstractDaoTest.BDEF_NAME_2, AbstractDaoTest.DATA_PROVIDER_NAME_2, AbstractDaoTest.BDEF_DESCRIPTION_2); // Only add the most recent 1 to the list businessObjectDefinitionEntities.add(businessObjectDefinitionEntityTwo); // Get the list of most recent 1 business object definitions assertEquals(businessObjectDefinitionEntities, businessObjectDefinitionDao.getMostRecentBusinessObjectDefinitions(1)); } @Test public void testGetCountOfAllBusinessObjectDefinitions() { // Create and persist two business object definition entities. List<BusinessObjectDefinitionEntity> businessObjectDefinitionEntities = businessObjectDefinitionDaoTestHelper.createExpectedBusinessObjectDefinitionEntities(); // Get the count of all business object definitions assertEquals(businessObjectDefinitionEntities.size(), businessObjectDefinitionDao.getCountOfAllBusinessObjectDefinitions()); } }