/** * Copyright (c) 2009 - 2012 Red Hat, Inc. * * This software is licensed to you under the GNU General Public License, * version 2 (GPLv2). There is NO WARRANTY for this software, express or * implied, including the implied warranties of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 * along with this software; if not, see * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * * Red Hat trademarks are not licensed under GPLv2. No permission is * granted to use or replicate Red Hat trademarks that are incorporated * in this software or its documentation. */ package org.candlepin.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.candlepin.common.config.Configuration; import org.candlepin.common.exceptions.BadRequestException; import org.candlepin.config.ConfigProperties; import org.candlepin.jackson.ProductCachedSerializationModule; import org.candlepin.model.ContentOverride; import org.candlepin.model.ProductCurator; import org.candlepin.model.Rules; import org.candlepin.model.RulesCurator; import org.candlepin.policy.js.JsRunnerProvider; import org.candlepin.policy.js.JsRunnerRequestCache; import org.candlepin.policy.js.RulesObjectMapper; import org.candlepin.policy.js.override.OverrideRules; import org.candlepin.test.DatabaseTestFixture; import com.google.inject.Provider; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.xnap.commons.i18n.I18n; import java.io.InputStream; import java.util.Date; import java.util.LinkedList; import java.util.List; import javax.inject.Inject; /** * ContentOverrideValidatorTest */ public class ContentOverrideValidatorTest extends DatabaseTestFixture { @Inject private I18n i18n; private RulesCurator rulesCuratorMock; @Mock private Provider<JsRunnerRequestCache> cacheProvider; @Mock private JsRunnerRequestCache cache; @Mock private ProductCurator mockProductCurator; private Configuration config; private ContentOverrideValidator validator; private OverrideRules overrideRules; private JsRunnerProvider provider; @Before public void setupTest() { InputStream is = this.getClass().getResourceAsStream( RulesCurator.DEFAULT_RULES_FILE); rulesCuratorMock = mock(RulesCurator.class); config = mock(Configuration.class); cacheProvider = mock(Provider.class); cache = mock(JsRunnerRequestCache.class); Rules rules = new Rules(Util.readFile(is)); when(rulesCuratorMock.getUpdated()).thenReturn(new Date()); when(rulesCuratorMock.getRules()).thenReturn(rules); when(cacheProvider.get()).thenReturn(cache); provider = new JsRunnerProvider(rulesCuratorMock, cacheProvider); overrideRules = new OverrideRules(provider.get(), config, new RulesObjectMapper(new ProductCachedSerializationModule(mockProductCurator))); validator = new ContentOverrideValidator(i18n, overrideRules); } @Test public void testValidateValidCollection() { List<ContentOverride> overrides = new LinkedList<ContentOverride>(); overrides.add(new ContentOverride("label", "testname", "value")); overrides.add(new ContentOverride("other label", "other name", "other value")); validator.validate(overrides); } @Test public void testValidateValidOverride() { ContentOverride override = new ContentOverride("label", "testname", "value"); validator.validate(override); } @Test public void testValidateSingleInvalid() { when(config.getBoolean(eq(ConfigProperties.STANDALONE))).thenReturn(false); ContentOverride override = new ContentOverride("label", "baseurl", "value"); try { validator.validate(override); fail("Expected exception was \"BadRequestException\" not thrown."); } catch (BadRequestException bre) { assertEquals("Not allowed to override values for: baseurl", bre.getMessage()); } } @Test public void testValidateCollectionBothInvalid() { when(config.getBoolean(eq(ConfigProperties.STANDALONE))).thenReturn(false); List<ContentOverride> overrides = new LinkedList<ContentOverride>(); overrides.add(new ContentOverride("label", "baseurl", "value")); overrides.add(new ContentOverride("other label", "name", "other value")); try { validator.validate(overrides); fail("Expected exception \"BadRequestException\" was not thrown."); } catch (BadRequestException bre) { assertTrue(bre.getMessage().matches( "^Not allowed to override values for: (?:baseurl, name|name, baseurl)" )); } } }