/**
* 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.policy.js;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import java.util.Date;
import org.candlepin.model.Rules;
import org.candlepin.model.Rules.RulesSourceEnum;
import org.candlepin.model.RulesCurator;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.runners.MockitoJUnitRunner;
import com.google.inject.Provider;
/**
* JsRunnerProviderTest
*/
@RunWith(MockitoJUnitRunner.class)
public class JsRunnerProviderTest {
@Mock private Provider<JsRunnerRequestCache> cacheProvider;
@Mock private RulesCurator rulesCurator;
@Mock
private JsRunnerRequestCache mockedCache;
@Mock private Rules rules;
private Date time1;
private JsRunnerProvider provider;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
time1 = new Date();
when(rulesCurator.getUpdated()).thenReturn(time1);
when(rulesCurator.getRules()).thenReturn(rules);
when(rules.getRules()).thenReturn("");
when(rules.getRulesSource()).thenReturn(RulesSourceEnum.DATABASE);
provider = new JsRunnerProvider(rulesCurator, cacheProvider);
}
@Test
public void valueGetsCachedMockedTest() {
when(cacheProvider.get()).thenReturn(mockedCache);
when(mockedCache.getUpdated()).thenReturn(null).thenReturn(time1);
provider.get();
verify(mockedCache).getUpdated();
verify(mockedCache).setUpdated(time1);
provider.get();
verify(mockedCache, times(2)).getUpdated();
verifyNoMoreInteractions(mockedCache);
}
/**
* The rules curator is hit once during the initialization, but
* then subsequent calls to provider.get() will not hit it anymore
*/
@Test
public void rulesCuratorIsNotHitMultipleTimes() {
when(cacheProvider.get()).thenReturn(new JsRunnerRequestCache());
provider.get();
provider.get();
provider.get();
provider.get();
provider.get();
verify(rulesCurator, times(2)).getUpdated();
}
@Test
public void cacheInvalidationOnNewRequest() {
when(cacheProvider.get()).thenReturn(new JsRunnerRequestCache());
provider.get();
provider.get();
provider.get();
JsRunnerRequestCache newCache = new JsRunnerRequestCache();
when(cacheProvider.get()).thenReturn(newCache);
Assert.assertEquals(null, newCache.getUpdated());
provider.get();
Assert.assertEquals(time1, newCache.getUpdated());
provider.get();
verify(rulesCurator, times(3)).getUpdated();
}
}