/** * */ package org.minnal.api; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import java.lang.annotation.Annotation; import java.net.InetAddress; import java.net.UnknownHostException; import java.sql.Timestamp; import java.util.Date; import org.minnal.api.filter.ExcludeAnnotationsConvertor; import org.minnal.api.filter.MinnalApiSpecFilter; import org.minnal.core.Application; import org.minnal.core.Container; import org.minnal.core.config.ApplicationConfiguration; import org.minnal.core.config.ConnectorConfiguration; import org.minnal.core.config.ConnectorConfiguration.Scheme; import org.minnal.core.config.ContainerConfiguration; import org.minnal.core.config.ServerConfiguration; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonIgnore; import com.google.common.collect.Lists; import com.wordnik.swagger.config.ConfigFactory; import com.wordnik.swagger.config.FilterFactory; import com.wordnik.swagger.config.ScannerFactory; import com.wordnik.swagger.config.SwaggerConfig; import com.wordnik.swagger.converter.ModelConverter; import com.wordnik.swagger.converter.ModelConverters; import com.wordnik.swagger.converter.OverrideConverter; import com.wordnik.swagger.jaxrs.config.DefaultJaxrsScanner; import com.wordnik.swagger.jaxrs.reader.DefaultJaxrsApiReader; import com.wordnik.swagger.reader.ClassReaders; /** * @author ganeshs * */ public class ApiBundleTest { private ApiBundle apiBundle; private Container container; private ApiBundleConfiguration bundleConfiguration; @BeforeMethod public void setup() { apiBundle = spy(new ApiBundle()); container = mock(Container.class); ContainerConfiguration configuration = mock(ContainerConfiguration.class); when(container.getConfiguration()).thenReturn(configuration); ServerConfiguration serverConfiguration = mock(ServerConfiguration.class); when(configuration.getServerConfiguration()).thenReturn(serverConfiguration); ConnectorConfiguration connectorConfiguration = new ConnectorConfiguration(8080, Scheme.http, null, 2); when(serverConfiguration.getConnectorConfigurations()).thenReturn(Lists.newArrayList(connectorConfiguration)); bundleConfiguration = new ApiBundleConfiguration(true, Lists.<Class<? extends Annotation>>newArrayList(JsonIgnore.class)); } @Test public void shouldRegisterContainerListenerOnInit() { apiBundle.init(container, bundleConfiguration); verify(container).registerListener(apiBundle); } @Test public void shouldConfigureSwagger() { ModelConverter converter = mock(ExcludeAnnotationsConvertor.class); doReturn(converter).when(apiBundle).getExcludeAnnotationsConvertor(); OverrideConverter overrideConverter = mock(OverrideConverter.class); doReturn(overrideConverter).when(apiBundle).getOverrideConverter(); doReturn("localhost").when(apiBundle).getHostName(); apiBundle.init(container, bundleConfiguration); SwaggerConfig config = ConfigFactory.config(); assertEquals(config.apiVersion(), "1.0.1"); assertEquals(config.basePath(), "http://localhost:8080"); assertTrue(ScannerFactory.scanner().get() instanceof DefaultJaxrsScanner); assertTrue(ClassReaders.reader().get() instanceof DefaultJaxrsApiReader); assertTrue(FilterFactory.filter() instanceof MinnalApiSpecFilter); assertTrue(ModelConverters.converters().contains(converter)); assertTrue(ModelConverters.converters().contains(overrideConverter)); } @Test public void shouldGetLocalHost() throws UnknownHostException { assertEquals(apiBundle.getHostName(), InetAddress.getLocalHost().getHostAddress()); } @Test public void shouldGetExcludeAnnotationsConverter() { apiBundle.init(container, bundleConfiguration); ExcludeAnnotationsConvertor convertor = apiBundle.getExcludeAnnotationsConvertor(); assertEquals(convertor.getExcludeAnnotations(), Lists.newArrayList(JsonBackReference.class, JsonIgnore.class)); } @Test public void shouldGetOverrideConverter() { apiBundle.init(container, bundleConfiguration); OverrideConverter convertor = apiBundle.getOverrideConverter(); assertTrue(convertor.overrides().contains(Date.class.getCanonicalName())); assertTrue(convertor.overrides().contains(Timestamp.class.getCanonicalName())); assertEquals(convertor.overrides().get(Timestamp.class.getCanonicalName()).get().get().name(), "date-time"); assertEquals(convertor.overrides().get(Date.class.getCanonicalName()).get().get().name(), "date-time"); } @Test public void shouldRegisterPluginOnPreMount() { Application<ApplicationConfiguration> application = mock(Application.class); apiBundle.init(container, bundleConfiguration); apiBundle.preMount(application); verify(application).registerPlugin(any(ApiPlugin.class)); } }