/* * 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.assertNull; import static org.junit.Assert.fail; import org.junit.Test; import org.finra.herd.model.AlreadyExistsException; import org.finra.herd.model.ObjectNotFoundException; import org.finra.herd.model.api.xml.DataProvider; import org.finra.herd.model.api.xml.DataProviderCreateRequest; import org.finra.herd.model.api.xml.DataProviderKey; import org.finra.herd.model.api.xml.DataProviderKeys; /** * This class tests various functionality within the data provider REST controller. */ public class DataProviderServiceTest extends AbstractServiceTest { @Test public void testCreateDataProvider() throws Exception { // Create a data provider. DataProvider resultDataProvider = dataProviderService.createDataProvider(new DataProviderCreateRequest(DATA_PROVIDER_NAME)); // Validate the returned object. assertEquals(new DataProvider(DATA_PROVIDER_NAME), resultDataProvider); } @Test public void testCreateDataProviderMissingRequiredParameters() { // Try to create a data provider instance when data provider name is not specified. try { dataProviderService.createDataProvider(new DataProviderCreateRequest(BLANK_TEXT)); fail("Should throw an IllegalArgumentException when data provider name is not specified."); } catch (IllegalArgumentException e) { assertEquals("A data provider name must be specified.", e.getMessage()); } } @Test public void testCreateDataProviderTrimParameters() { // Create a data provider using input parameters with leading and trailing empty spaces. DataProvider resultDataProvider = dataProviderService.createDataProvider(new DataProviderCreateRequest(addWhitespace(DATA_PROVIDER_NAME))); // Validate the returned object. assertEquals(new DataProvider(DATA_PROVIDER_NAME), resultDataProvider); } @Test public void testCreateDataProviderUpperCaseParameters() { // Create a data provider using upper case input parameters. DataProvider resultDataProvider = dataProviderService.createDataProvider(new DataProviderCreateRequest(DATA_PROVIDER_NAME.toUpperCase())); // Validate the returned object. assertEquals(new DataProvider(DATA_PROVIDER_NAME.toUpperCase()), resultDataProvider); } @Test public void testCreateDataProviderLowerCaseParameters() { // Create a data provider using lower case input parameters. DataProvider resultDataProvider = dataProviderService.createDataProvider(new DataProviderCreateRequest(DATA_PROVIDER_NAME.toLowerCase())); // Validate the returned object. assertEquals(new DataProvider(DATA_PROVIDER_NAME.toLowerCase()), resultDataProvider); } @Test public void testCreateDataProviderInvalidParameters() { // Try to create a data provider instance when data provider name contains a forward slash character. try { dataProviderService.createDataProvider(new DataProviderCreateRequest(addSlash(DATA_PROVIDER_NAME))); fail("Should throw an IllegalArgumentException when data provider name contains a forward slash character."); } catch (IllegalArgumentException e) { assertEquals("Data provider name can not contain a forward slash character.", e.getMessage()); } } @Test public void testCreateDataProviderAlreadyExists() throws Exception { // Create and persist a data provider. dataProviderDaoTestHelper.createDataProviderEntity(DATA_PROVIDER_NAME); // Try to create a data provider when it already exists. try { dataProviderService.createDataProvider(new DataProviderCreateRequest(DATA_PROVIDER_NAME)); fail("Should throw an AlreadyExistsException when data provider already exists."); } catch (AlreadyExistsException e) { assertEquals(String.format("Unable to create data provider \"%s\" because it already exists.", DATA_PROVIDER_NAME), e.getMessage()); } } @Test public void testGetDataProvider() throws Exception { // Create and persist a data provider entity. dataProviderDaoTestHelper.createDataProviderEntity(DATA_PROVIDER_NAME); // Retrieve the data provider. DataProvider resultDataProvider = dataProviderService.getDataProvider(new DataProviderKey(DATA_PROVIDER_NAME)); // Validate the returned object. assertEquals(new DataProvider(DATA_PROVIDER_NAME), resultDataProvider); } @Test public void testGetDataProviderMissingRequiredParameters() { // Try to get a data provider when data provider name is not specified. try { dataProviderService.getDataProvider(new DataProviderKey(BLANK_TEXT)); fail("Should throw an IllegalArgumentException when data provider name is not specified."); } catch (IllegalArgumentException e) { assertEquals("A data provider name must be specified.", e.getMessage()); } } @Test public void testGetDataProviderTrimParameters() { // Create and persist a data provider entity. dataProviderDaoTestHelper.createDataProviderEntity(DATA_PROVIDER_NAME); // Retrieve the data provider using input parameters with leading and trailing empty spaces. DataProvider resultDataProvider = dataProviderService.getDataProvider(new DataProviderKey(addWhitespace(DATA_PROVIDER_NAME))); // Validate the returned object. assertEquals(new DataProvider(DATA_PROVIDER_NAME), resultDataProvider); } @Test public void testGetDataProviderUpperCaseParameters() { // Create and persist a data provider entity. dataProviderDaoTestHelper.createDataProviderEntity(DATA_PROVIDER_NAME); // Retrieve the data provider using upper case input parameters. DataProvider resultDataProvider = dataProviderService.getDataProvider(new DataProviderKey(DATA_PROVIDER_NAME.toUpperCase())); // Validate the returned object. assertEquals(new DataProvider(DATA_PROVIDER_NAME), resultDataProvider); } @Test public void testGetDataProviderLowerCaseParameters() { // Create and persist a data provider entity. dataProviderDaoTestHelper.createDataProviderEntity(DATA_PROVIDER_NAME); // Retrieve the data provider using lower case input parameters. DataProvider resultDataProvider = dataProviderService.getDataProvider(new DataProviderKey(DATA_PROVIDER_NAME.toLowerCase())); // Validate the returned object. assertEquals(new DataProvider(DATA_PROVIDER_NAME), resultDataProvider); } @Test public void testGetDataProviderNoExists() throws Exception { // Try to get a non-existing data provider. try { dataProviderService.getDataProvider(new DataProviderKey(DATA_PROVIDER_NAME)); fail("Should throw an ObjectNotFoundException when data provider doesn't exist."); } catch (ObjectNotFoundException e) { assertEquals(String.format("Data provider with name \"%s\" doesn't exist.", DATA_PROVIDER_NAME), e.getMessage()); } } @Test public void testDeleteDataProvider() throws Exception { // Create a data provider key. DataProviderKey dataProviderKey = new DataProviderKey(DATA_PROVIDER_NAME); // Create and persist a data provider entity. dataProviderDaoTestHelper.createDataProviderEntity(DATA_PROVIDER_NAME); // Validate that this data provider exists. assertNotNull(dataProviderDao.getDataProviderByKey(dataProviderKey)); // Delete this data provider. DataProvider deletedDataProvider = dataProviderService.deleteDataProvider(new DataProviderKey(DATA_PROVIDER_NAME)); // Validate the returned object. assertEquals(new DataProvider(DATA_PROVIDER_NAME), deletedDataProvider); // Ensure that this data provider is no longer there. assertNull(dataProviderDao.getDataProviderByKey(dataProviderKey)); } @Test public void testDeleteDataProviderMissingRequiredParameters() { // Try to delete a data provider instance when data provider name is not specified. try { dataProviderService.deleteDataProvider(new DataProviderKey(BLANK_TEXT)); fail("Should throw an IllegalArgumentException when data provider name is not specified."); } catch (IllegalArgumentException e) { assertEquals("A data provider name must be specified.", e.getMessage()); } } @Test public void testDeleteDataProviderTrimParameters() { // Create a data provider key. DataProviderKey dataProviderKey = new DataProviderKey(DATA_PROVIDER_NAME); // Create and persist a data provider entity. dataProviderDaoTestHelper.createDataProviderEntity(DATA_PROVIDER_NAME); // Validate that this data provider exists. assertNotNull(dataProviderDao.getDataProviderByKey(dataProviderKey)); // Delete this data provider using input parameters with leading and trailing empty spaces. DataProvider deletedDataProvider = dataProviderService.deleteDataProvider(new DataProviderKey(addWhitespace(DATA_PROVIDER_NAME))); // Validate the returned object. assertEquals(new DataProvider(DATA_PROVIDER_NAME), deletedDataProvider); // Ensure that this data provider is no longer there. assertNull(dataProviderDao.getDataProviderByKey(dataProviderKey)); } @Test public void testDeleteDataProviderUpperCaseParameters() { // Create a data provider key. DataProviderKey dataProviderKey = new DataProviderKey(DATA_PROVIDER_NAME); // Create and persist a data provider entity. dataProviderDaoTestHelper.createDataProviderEntity(DATA_PROVIDER_NAME); // Validate that this data provider exists. assertNotNull(dataProviderDao.getDataProviderByKey(dataProviderKey)); // Delete this data provider using upper case input parameters. DataProvider deletedDataProvider = dataProviderService.deleteDataProvider(new DataProviderKey(DATA_PROVIDER_NAME.toUpperCase())); // Validate the returned object. assertEquals(new DataProvider(DATA_PROVIDER_NAME), deletedDataProvider); // Ensure that this data provider is no longer there. assertNull(dataProviderDao.getDataProviderByKey(dataProviderKey)); } @Test public void testDeleteDataProviderLowerCaseParameters() { // Create a data provider key. DataProviderKey dataProviderKey = new DataProviderKey(DATA_PROVIDER_NAME); // Create and persist a data provider entity. dataProviderDaoTestHelper.createDataProviderEntity(DATA_PROVIDER_NAME); // Validate that this data provider exists. assertNotNull(dataProviderDao.getDataProviderByKey(dataProviderKey)); // Delete the data provider using lower case input parameters. DataProvider deletedDataProvider = dataProviderService.deleteDataProvider(new DataProviderKey(DATA_PROVIDER_NAME.toLowerCase())); // Validate the returned object. assertEquals(new DataProvider(DATA_PROVIDER_NAME), deletedDataProvider); // Ensure that this data provider is no longer there. assertNull(dataProviderDao.getDataProviderByKey(dataProviderKey)); } @Test public void testDeleteDataProviderNoExists() throws Exception { // Try to delete a non-existing data provider. try { dataProviderService.deleteDataProvider(new DataProviderKey(DATA_PROVIDER_NAME)); fail("Should throw an ObjectNotFoundException when data provider doesn't exist."); } catch (ObjectNotFoundException e) { assertEquals(String.format("Data provider with name \"%s\" doesn't exist.", DATA_PROVIDER_NAME), e.getMessage()); } } @Test public void testGetDataProviders() throws Exception { // Create and persist data provider entities. for (DataProviderKey key : DATA_PROVIDER_KEYS) { dataProviderDaoTestHelper.createDataProviderEntity(key.getDataProviderName()); } // Retrieve a list of data provider keys. DataProviderKeys resultDataProviderKeys = dataProviderService.getDataProviders(); // Validate the returned object. assertEquals(DATA_PROVIDER_KEYS, resultDataProviderKeys.getDataProviderKeys()); } }