package de.jollyday.configuration; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.verify; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import de.jollyday.ManagerParameter; import de.jollyday.ManagerParameters; @RunWith(MockitoJUnitRunner.class) public class ConfigurationProviderManagerTest { @Mock ConfigurationProvider defaultConfigurationProvider; @Mock ConfigurationProvider urlConfigurationProvider; @InjectMocks ConfigurationProviderManager configurationProviderManager = new ConfigurationProviderManager(); ManagerParameter managerParameter = ManagerParameters.create((String)null); @After public void teardown() { System.clearProperty(ConfigurationProvider.CONFIG_PROVIDERS_PROPERTY); } @Test public void testGetPropertiesWithEmptyProvidersList() { System.setProperty(ConfigurationProvider.CONFIG_PROVIDERS_PROPERTY, ""); configurationProviderManager.mergeConfigurationProperties(managerParameter); assertResult(managerParameter); } @Test public void testGetPropertiesWithWrongClass() { System.setProperty(ConfigurationProvider.CONFIG_PROVIDERS_PROPERTY, "java.lang.String"); configurationProviderManager.mergeConfigurationProperties(managerParameter); assertResult(managerParameter); } @Test public void testGetPropertiesWithCorrectClass() { System.setProperty(ConfigurationProvider.CONFIG_PROVIDERS_PROPERTY, getClass().getPackage().getName() + ".TestProvider"); configurationProviderManager.mergeConfigurationProperties(managerParameter); assertResult(managerParameter); assertEquals("Wrong value for property: key", "value", managerParameter.getProperty("key")); } @Test public void testGetPropertiesWithWrongAndCorrectClass() { System.setProperty(ConfigurationProvider.CONFIG_PROVIDERS_PROPERTY, getClass().getPackage().getName() + ".TestProvider,java.lang.String"); configurationProviderManager.mergeConfigurationProperties(managerParameter); assertResult(managerParameter); assertEquals("Wrong value for property: key", "value", managerParameter.getProperty("key")); } @Test public void testGetPropertiesWithManualOverride() { managerParameter.setProperty("MANUAL_KEY", "MANUAL_VALUE"); managerParameter.setProperty("manager.impl", "NewImpl"); configurationProviderManager.mergeConfigurationProperties(managerParameter); assertResult(managerParameter); assertEquals("Wrong value for property: MANUAL_KEY", "MANUAL_VALUE", managerParameter.getProperty("MANUAL_KEY")); assertEquals("Wrong value for property: manager.impl", "NewImpl", managerParameter.getProperty("manager.impl")); } private void assertResult(ManagerParameter parameter) { assertNotNull(parameter); verify(defaultConfigurationProvider).getProperties(); verify(urlConfigurationProvider).getProperties(); } }