package com.englishtown.vertx.jersey.impl; import com.englishtown.vertx.jersey.JerseyOptions; import com.englishtown.vertx.jersey.ApplicationConfigurator; import io.vertx.core.Vertx; import org.glassfish.hk2.api.ServiceLocator; import org.glassfish.hk2.api.ServiceLocatorFactory; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.*; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** * Unit tests for {@link DefaultVertxContainer} */ @RunWith(MockitoJUnitRunner.class) public class DefaultVertxContainerTest { private DefaultVertxContainer container; private ServiceLocator locator; private List<String> packages = new ArrayList<>(); @Mock Vertx vertx; @Mock JerseyOptions options; @Before public void setUp() throws Exception { when(options.getPackages()).thenReturn(packages); locator = ServiceLocatorFactory.getInstance().create(null); } @Test public void testStart() throws Exception { packages.add("com.englishtown.vertx.jersey.resources"); container = new DefaultVertxContainer(vertx, options, locator, null); container.start(); assertEquals(options, container.getOptions()); assertNotNull(container.getConfiguration()); assertNotNull(container.getApplicationHandler()); assertNotNull(container.getApplicationHandlerDelegate()); // Can't mock applicationHandler so can't verify onStartup() was called } @Test public void testStop() throws Exception { packages.add("com.englishtown.vertx.jersey.resources"); container = new DefaultVertxContainer(vertx, options, locator, null); container.start(); container.stop(); // Can't mock applicationHandler so can't verify onShutdown() was called } @Test public void testResourceConfigModifier() throws Exception { boolean[] b = {false}; ApplicationConfigurator configurator = rc -> { b[0] = true; return rc; }; packages.add("com.englishtown.vertx.jersey.resources"); container = new DefaultVertxContainer(vertx, options, locator, configurator); container.start(); assertTrue(b[0]); } @Test public void testInit_Missing_Resources() throws Exception { try { container = new DefaultVertxContainer(vertx, options, locator, null); container.start(); fail(); } catch (IllegalStateException e) { assertEquals("At least one resource package name or component must be specified", e.getMessage()); } } }