package org.arquillian.cube.impl.client;
import java.util.HashMap;
import java.util.List;
import org.arquillian.cube.CubeController;
import org.arquillian.cube.CubeID;
import org.arquillian.cube.impl.model.LocalCubeRegistry;
import org.arquillian.cube.spi.Cube;
import org.arquillian.cube.spi.CubeConfiguration;
import org.arquillian.cube.spi.CubeRegistry;
import org.arquillian.cube.spi.event.CreateCube;
import org.arquillian.cube.spi.event.DestroyCube;
import org.arquillian.cube.spi.event.StartCube;
import org.arquillian.cube.spi.event.StopCube;
import org.jboss.arquillian.core.api.Instance;
import org.jboss.arquillian.core.api.annotation.ApplicationScoped;
import org.jboss.arquillian.core.api.annotation.Inject;
import org.jboss.arquillian.core.test.AbstractManagerTestBase;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class ClientCubeControllerTest extends AbstractManagerTestBase {
private static final String CUBE_ID = "x";
private static final String MISSING_CUBE_ID = "y";
@Inject
private Instance<CubeController> controllerInst;
@Mock
private Cube<?> cube;
@Override
protected void addExtensions(List<Class<?>> extensions) {
extensions.add(ClientCubeControllerCreator.class);
super.addExtensions(extensions);
}
@Before
public void setup() {
when(cube.getId()).thenReturn(CUBE_ID);
CubeRegistry registry = new LocalCubeRegistry();
registry.addCube(cube);
bind(ApplicationScoped.class, CubeRegistry.class, registry);
CubeConfiguration configuration = CubeConfiguration.fromMap(new HashMap<String, String>());
fire(configuration);
}
@Test
public void shouldCreateWithCubeID() {
controllerInst.get().create(new CubeID(CUBE_ID));
assertEventFired(CreateCube.class, 1);
}
@Test
public void shouldCreateWithCubeIdString() {
controllerInst.get().create(CUBE_ID);
assertEventFired(CreateCube.class, 1);
}
@Test
public void shouldStartWithCubeID() {
controllerInst.get().start(new CubeID(CUBE_ID));
assertEventFired(StartCube.class, 1);
}
@Test
public void shouldStartWithCubeIdString() {
controllerInst.get().start(CUBE_ID);
assertEventFired(StartCube.class, 1);
}
@Test
public void shouldStopWithCubeID() {
controllerInst.get().stop(new CubeID(CUBE_ID));
assertEventFired(StopCube.class, 1);
}
@Test
public void shouldStopWithCubeIdString() {
controllerInst.get().stop(CUBE_ID);
assertEventFired(StopCube.class, 1);
}
@Test
public void shouldDestroyWithCubeID() {
controllerInst.get().destroy(new CubeID(CUBE_ID));
assertEventFired(DestroyCube.class, 1);
}
@Test
public void shouldDestroyWithCubeIdString() {
controllerInst.get().destroy(CUBE_ID);
assertEventFired(DestroyCube.class, 1);
}
@Test(expected = IllegalArgumentException.class)
public void shouldFailOnCreateWithMissingCubeId() {
controllerInst.get().create(MISSING_CUBE_ID);
}
@Test(expected = IllegalArgumentException.class)
public void shouldFailOnStartWithMissingCubeId() {
controllerInst.get().start(MISSING_CUBE_ID);
}
@Test(expected = IllegalArgumentException.class)
public void shouldFailOnStopWithMissingCubeId() {
controllerInst.get().stop(MISSING_CUBE_ID);
}
@Test(expected = IllegalArgumentException.class)
public void shouldFailOnDestroyWithMissingCubeId() {
controllerInst.get().destroy(MISSING_CUBE_ID);
}
}