/**
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package test.org.jboss.forge.furnace.services;
import javax.inject.Inject;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.arquillian.AddonDeployment;
import org.jboss.forge.arquillian.AddonDeployments;
import org.jboss.forge.arquillian.archive.AddonArchive;
import org.jboss.forge.furnace.addons.AddonRegistry;
import org.jboss.forge.furnace.repositories.AddonDependencyEntry;
import org.jboss.forge.furnace.services.Imported;
import org.jboss.forge.furnace.spi.ServiceRegistry;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import test.org.jboss.forge.furnace.mocks.PlainBean;
import test.org.jboss.forge.furnace.mocks.PlainInterface;
import test.org.jboss.forge.furnace.mocks.services.ProducesPlainInterfaceService;
/**
* In this test, the interface is in the API addon and the implementation is provided in a JAR (not managed by CDI) in
* this addon, which declares a single @Produces for the API interface returning an instance of the implementation in
* the JAR
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
@RunWith(Arquillian.class)
public class ProducerTest
{
@Deployment(order = 1)
@AddonDeployments({
@AddonDeployment(name = "org.jboss.forge.furnace.container:cdi")
})
public static AddonArchive getDeployment()
{
JavaArchive implJar = ShrinkWrap.create(JavaArchive.class).addClass(PlainBean.class);
AddonArchive archive = ShrinkWrap
.create(AddonArchive.class)
.addBeansXML()
.addClasses(ProducesPlainInterfaceService.class)
.addAsLibraries(implJar)
.addAsAddonDependencies(
AddonDependencyEntry.create("API", "1"),
AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi")
);
return archive;
}
@Deployment(name = "API,1", testable = false, order = 2)
public static AddonArchive getDeploymentDep1()
{
AddonArchive archive = ShrinkWrap
.create(AddonArchive.class)
.addBeansXML()
.addClass(PlainInterface.class)
.addAsAddonDependencies(
AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi")
);
return archive;
}
@Inject
AddonRegistry addonRegistry;
@Inject
ServiceRegistry serviceRegistry;
@Test
public void testProducer()
{
Assert.assertTrue(serviceRegistry.hasService(PlainInterface.class));
Imported<PlainInterface> services = addonRegistry.getServices(PlainInterface.class);
Assert.assertFalse(services.isUnsatisfied());
Assert.assertFalse(services.isAmbiguous());
PlainInterface pi = services.get();
Assert.assertEquals("Produced", pi.getValue());
}
}