org.finra.herd.service.BusinessObjectDefinitionServiceTestHelper.java Source code

Java tutorial

Introduction

Here is the source code for org.finra.herd.service.BusinessObjectDefinitionServiceTestHelper.java

Source

/*
* 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());
        }
    }
}