/** * 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.resource; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.when; import static org.mockito.Mockito.isA; import static org.mockito.Mockito.anyString; import org.candlepin.common.exceptions.BadRequestException; import org.candlepin.common.exceptions.NotFoundException; import org.candlepin.common.paging.Page; import org.candlepin.common.paging.PageRequest; import org.candlepin.controller.CandlepinPoolManager; import org.candlepin.controller.Entitler; import org.candlepin.model.Consumer; import org.candlepin.model.ConsumerCurator; import org.candlepin.model.ConsumerType; import org.candlepin.model.Entitlement; import org.candlepin.model.EntitlementCurator; import org.candlepin.model.EntitlementFilterBuilder; import org.candlepin.model.Owner; import org.candlepin.model.Pool; import org.candlepin.model.ProductCurator; import org.candlepin.model.SourceStack; import org.candlepin.model.SubscriptionsCertificate; import org.candlepin.policy.js.entitlement.EntitlementRules; import org.candlepin.policy.js.entitlement.EntitlementRulesTranslator; import org.candlepin.service.ProductServiceAdapter; import org.candlepin.test.TestUtil; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.xnap.commons.i18n.I18n; import org.xnap.commons.i18n.I18nFactory; import java.util.ArrayList; import java.util.List; import java.util.Locale; /** * EntitlementResourceTest */ @RunWith(MockitoJUnitRunner.class) public class EntitlementResourceTest { private I18n i18n; private Consumer consumer; private Owner owner; @Mock private ProductServiceAdapter prodAdapter; @Mock private ProductCurator prodCurator; @Mock private EntitlementCurator entitlementCurator; @Mock private ConsumerCurator consumerCurator; @Mock private CandlepinPoolManager poolManager; @Mock private Entitler entitler; @Mock private SubscriptionResource subResource; @Mock private EntitlementRules entRules; @Mock private EntitlementRulesTranslator messageTranslator; private EntitlementResource entResource; @Before public void before() { i18n = I18nFactory.getI18n(getClass(), Locale.US, I18nFactory.FALLBACK); entResource = new EntitlementResource(entitlementCurator, consumerCurator, poolManager, i18n, entitler, entRules, messageTranslator); owner = new Owner("admin"); consumer = new Consumer("myconsumer", "bill", owner, TestUtil.createConsumerType()); } @Test public void getUpstreamCertSimple() { Entitlement e = TestUtil.createEntitlement(); e.setId("entitlementID"); SubscriptionsCertificate subcert = new SubscriptionsCertificate(); subcert.setCert("HELLO"); subcert.setKey("CERT"); e.getPool().setCertificate(subcert); when(entitlementCurator.find(eq(e.getId()))).thenReturn(e); String expected = "HELLOCERT"; String result = entResource.getUpstreamCert(e.getId()); assertEquals(expected, result); } @Test(expected = NotFoundException.class) public void getUpstreamCertSimpleNothingFound() { // Entitlement from stack sub-pool: Entitlement e = TestUtil.createEntitlement(); e.setId("entitlementID"); e.getPool().setSourceSubscription(null); when(entitlementCurator.find(eq(e.getId()))).thenReturn(e); entResource.getUpstreamCert(e.getId()); } @Test public void getUpstreamCertStackSubPool() { Entitlement parentEnt = TestUtil.createEntitlement(); parentEnt.setId("parentEnt"); SubscriptionsCertificate subcert = new SubscriptionsCertificate(); subcert.setCert("HELLO"); subcert.setKey("CERT"); parentEnt.getPool().setCertificate(subcert); when(entitlementCurator.findUpstreamEntitlementForStack(consumer, "mystack")) .thenReturn(parentEnt); String expected = "HELLOCERT"; // Entitlement from stack sub-pool: Entitlement e = TestUtil.createEntitlement(); e.setId("entitlementID"); e.getPool().setSourceStack(new SourceStack(consumer, "mystack")); when(entitlementCurator.find(eq(e.getId()))).thenReturn(e); String result = entResource.getUpstreamCert(e.getId()); assertEquals(expected, result); } @Test(expected = NotFoundException.class) public void getUpstreamCertStackSubPoolNothingFound() { when(entitlementCurator.findUpstreamEntitlementForStack(consumer, "mystack")) .thenReturn(null); // Entitlement from stack sub-pool: Entitlement e = TestUtil.createEntitlement(); e.setId("entitlementID"); e.getPool().setSourceStack(new SourceStack(consumer, "mystack")); when(entitlementCurator.find(eq(e.getId()))).thenReturn(e); entResource.getUpstreamCert(e.getId()); } @Test(expected = BadRequestException.class) public void migrateEntitlementQuantityFail() { ConsumerType ct = TestUtil.createConsumerType(); ct.setManifest(true); Entitlement e = TestUtil.createEntitlement(); Consumer sourceConsumer = new Consumer("source-consumer", "bill", owner, ct); Consumer destConsumer = new Consumer("destination-consumer", "bill", owner, ct); e.setConsumer(sourceConsumer); e.setQuantity(25); when(entitlementCurator.find(eq(e.getId()))).thenReturn(e); when(consumerCurator.verifyAndLookupConsumer(eq(destConsumer.getUuid()))) .thenReturn(destConsumer); entResource.migrateEntitlement(e.getId(), destConsumer.getUuid(), 30); } @Test(expected = BadRequestException.class) public void migrateEntitlementSourceConsumerFail() { ConsumerType ct = TestUtil.createConsumerType(); ct.setManifest(true); Entitlement e = TestUtil.createEntitlement(); Consumer destConsumer = new Consumer("destination-consumer", "bill", owner, ct); e.setConsumer(consumer); e.setQuantity(25); when(entitlementCurator.find(eq(e.getId()))).thenReturn(e); when(consumerCurator.verifyAndLookupConsumer(eq(destConsumer.getUuid()))).thenReturn(destConsumer); entResource.migrateEntitlement(e.getId(), destConsumer.getUuid(), 15); } @Test(expected = BadRequestException.class) public void migrateEntitlementDestinationConsumerFail() { ConsumerType ct = TestUtil.createConsumerType(); ct.setManifest(true); Entitlement e = TestUtil.createEntitlement(); Consumer sourceConsumer = new Consumer("source-consumer", "bill", owner, ct); e.setConsumer(sourceConsumer); e.setQuantity(25); when(entitlementCurator.find(eq(e.getId()))).thenReturn(e); when(consumerCurator.verifyAndLookupConsumer(eq(consumer.getUuid()))).thenReturn(consumer); entResource.migrateEntitlement(e.getId(), consumer.getUuid(), 15); } @Test(expected = BadRequestException.class) public void migrateEntitlementSameOwnerFail() { ConsumerType ct = TestUtil.createConsumerType(); ct.setManifest(true); Entitlement e = TestUtil.createEntitlement(); Owner owner2 = new Owner("admin2"); Consumer sourceConsumer = new Consumer("source-consumer", "bill", owner, ct); Consumer destConsumer = new Consumer("destination-consumer", "bill", owner2, ct); e.setConsumer(sourceConsumer); e.setQuantity(25); when(entitlementCurator.find(eq(e.getId()))).thenReturn(e); when(consumerCurator.verifyAndLookupConsumer(eq(destConsumer.getUuid()))) .thenReturn(destConsumer); entResource.migrateEntitlement(e.getId(), destConsumer.getUuid(), 15); } @Test public void getAllEntitlements() { PageRequest req = new PageRequest(); req.setPage(1); req.setPerPage(10); Entitlement e = TestUtil.createEntitlement(); e.setId("getEntitlementList"); List<Entitlement> entitlements = new ArrayList<Entitlement>(); entitlements.add(e); Page<List<Entitlement>> page = new Page<List<Entitlement>>(); page.setPageData(entitlements); when(entitlementCurator.listAll(isA(EntitlementFilterBuilder.class), isA(PageRequest.class))) .thenReturn(page); List<Entitlement> result = entResource.listAllForConsumer(null, null, null, req); assertEquals(1, result.size()); assertEquals("getEntitlementList", result.get(0).getId()); } @Test public void getAllEntitlementsForConsumer() { PageRequest req = new PageRequest(); req.setPage(1); req.setPerPage(10); Owner owner = TestUtil.createOwner(); Consumer consumer = TestUtil.createConsumer(owner); Pool pool = TestUtil.createPool(owner, TestUtil.createProduct()); Entitlement e = TestUtil.createEntitlement(owner, consumer, pool, null); e.setId("getAllEntitlementsForConsumer"); List<Entitlement> entitlements = new ArrayList<Entitlement>(); entitlements.add(e); Page<List<Entitlement>> page = new Page<List<Entitlement>>(); page.setPageData(entitlements); when(consumerCurator.findByUuid(eq(consumer.getUuid()))).thenReturn(consumer); when( entitlementCurator.listByConsumer(isA(Consumer.class), anyString(), isA(EntitlementFilterBuilder.class), isA(PageRequest.class))).thenReturn(page); List<Entitlement> result = entResource.listAllForConsumer(consumer.getUuid(), null, null, req); assertEquals(1, result.size()); assertEquals("getAllEntitlementsForConsumer", result.get(0).getId()); } }