/*
* 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 java.util.ArrayList;
import java.util.List;
import org.jsoup.Jsoup;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.finra.herd.core.helper.ConfigurationHelper;
import org.finra.herd.dao.DataProviderDaoTestHelper;
import org.finra.herd.dao.NamespaceDaoTestHelper;
import org.finra.herd.model.api.xml.Attribute;
import org.finra.herd.model.api.xml.BusinessObjectDefinition;
import org.finra.herd.model.api.xml.SampleDataFile;
import org.finra.herd.model.dto.ConfigurationValue;
import org.finra.herd.model.jpa.BusinessObjectDefinitionEntity;
@Component
public class BusinessObjectDefinitionServiceTestHelper
{
@Autowired
private DataProviderDaoTestHelper dataProviderDaoTestHelper;
@Autowired
private NamespaceDaoTestHelper namespaceDaoTestHelper;
@Autowired
private ConfigurationHelper configurationHelper;
/**
* Create and persist database entities required for testing.
*/
public void createDatabaseEntitiesForBusinessObjectDefinitionTesting()
{
createDatabaseEntitiesForBusinessObjectDefinitionTesting(AbstractServiceTest.NAMESPACE, AbstractServiceTest.DATA_PROVIDER_NAME);
}
/**
* Create and persist database entities required for testing.
*
* @param namespaceCode the namespace code
* @param dataProviderName the data provider name
*/
public void createDatabaseEntitiesForBusinessObjectDefinitionTesting(String namespaceCode, String dataProviderName)
{
// Create a namespace entity.
namespaceDaoTestHelper.createNamespaceEntity(namespaceCode);
// Create a data provider entity.
dataProviderDaoTestHelper.createDataProviderEntity(dataProviderName);
}
/**
* Creates a business object definition from a business object definition entity.
*
* @param businessObjectDefinitionEntity the specified business object definition entity
*
* @return the business object definition entity
*/
public BusinessObjectDefinition createBusinessObjectDefinitionFromEntityForSearchTesting(BusinessObjectDefinitionEntity businessObjectDefinitionEntity)
{
BusinessObjectDefinition businessObjectDefinition = new BusinessObjectDefinition();
businessObjectDefinition.setNamespace(businessObjectDefinitionEntity.getNamespace().getCode());
businessObjectDefinition.setBusinessObjectDefinitionName(businessObjectDefinitionEntity.getName());
businessObjectDefinition.setDataProviderName(businessObjectDefinitionEntity.getDataProvider().getName());
businessObjectDefinition.setDisplayName(businessObjectDefinitionEntity.getDisplayName());
String toParse = businessObjectDefinitionEntity.getDescription() != null ? businessObjectDefinitionEntity.getDescription() : "";
businessObjectDefinition.setShortDescription(StringUtils.left(Jsoup.parseBodyFragment(toParse).body().text(),
configurationHelper.getProperty(ConfigurationValue.BUSINESS_OBJECT_DEFINITION_SHORT_DESCRIPTION_LENGTH, Integer.class)));
return businessObjectDefinition;
}
/**
* Returns an expected string representation of the specified business object definition key.
*
* @param namespace the namespace of the business object definition
* @param businessObjectDefinitionName the name of the business object definition
*
* @return the string representation of the specified business object definition key
*/
public String getExpectedBusinessObjectDefinitionKeyAsString(String namespace, String businessObjectDefinitionName)
{
return String.format("namespace: \"%s\", businessObjectDefinitionName: \"%s\"", namespace, businessObjectDefinitionName);
}
/**
* Returns the business object definition not found error message per specified parameters.
*
* @param namespace the namespace of the business object definition
* @param businessObjectDefinitionName the name of the business object definition
*
* @return the business object definition not found error message
*/
public String getExpectedBusinessObjectDefinitionNotFoundErrorMessage(String namespace, String businessObjectDefinitionName)
{
return String.format("Business object definition with name \"%s\" doesn't exist for namespace \"%s\".", businessObjectDefinitionName, namespace);
}
/**
* Gets a new list of attributes.
*
* @return the list of attributes.
*/
public List<Attribute> getNewAttributes()
{
List<Attribute> attributes = new ArrayList<>();
attributes.add(new Attribute(AbstractServiceTest.ATTRIBUTE_NAME_1_MIXED_CASE, AbstractServiceTest.ATTRIBUTE_VALUE_1));
attributes.add(new Attribute(AbstractServiceTest.ATTRIBUTE_NAME_2_MIXED_CASE, AbstractServiceTest.ATTRIBUTE_VALUE_2));
attributes.add(new Attribute(AbstractServiceTest.ATTRIBUTE_NAME_3_MIXED_CASE, AbstractServiceTest.ATTRIBUTE_VALUE_3));
return attributes;
}
/**
* Gets a second set of test attributes.
*
* @return the list of attributes
*/
public List<Attribute> getNewAttributes2()
{
List<Attribute> attributes = new ArrayList<>();
// Attribute 1 has a new value compared to the first set of test attributes.
attributes.add(new Attribute(AbstractServiceTest.ATTRIBUTE_NAME_1_MIXED_CASE, AbstractServiceTest.ATTRIBUTE_VALUE_1_UPDATED));
// Attribute 2 is missing compared to the first set of the test attributes.
// Attribute 3 is identical to the one from the first set of the test attributes.
attributes.add(new Attribute(AbstractServiceTest.ATTRIBUTE_NAME_3_MIXED_CASE, AbstractServiceTest.ATTRIBUTE_VALUE_3));
// Attribute 4 is not present in the first set of the test attributes.
attributes.add(new Attribute(AbstractServiceTest.ATTRIBUTE_NAME_4_MIXED_CASE, AbstractServiceTest.ATTRIBUTE_VALUE_4));
return attributes;
}
/**
* Gets a list of test sample data files.
*
* @return the list of sample data files
*/
public List<SampleDataFile> getTestSampleDataFiles()
{
List<SampleDataFile> sampleDataFiles = new ArrayList<>();
sampleDataFiles.add(new SampleDataFile(AbstractServiceTest.DIRECTORY_PATH, AbstractServiceTest.FILE_NAME));
sampleDataFiles.add(new SampleDataFile(AbstractServiceTest.DIRECTORY_PATH, AbstractServiceTest.FILE_NAME_2));
return sampleDataFiles;
}
/**
* Validates a list of Attributes against the expected values.
*
* @param expectedAttributes the list of expected Attributes
* @param actualAttributes the list of actual Attributes to be validated
*/
public void validateAttributes(List<Attribute> expectedAttributes, List<Attribute> actualAttributes)
{
assertEquals(expectedAttributes.size(), actualAttributes.size());
for (int i = 0; i < expectedAttributes.size(); i++)
{
Attribute expectedAttribute = expectedAttributes.get(i);
Attribute actualAttribute = actualAttributes.get(i);
assertEquals(expectedAttribute.getName(), actualAttribute.getName());
assertEquals(expectedAttribute.getValue(), actualAttribute.getValue());
}
}
}