Refined packaging: moved all classes into package de.juplo.simplemapper
[simple-mapper] / src / test / java / de / juplo / simplemapper / SimpleMapperServiceAutoConfigurationTest.java
diff --git a/src/test/java/de/juplo/simplemapper/SimpleMapperServiceAutoConfigurationTest.java b/src/test/java/de/juplo/simplemapper/SimpleMapperServiceAutoConfigurationTest.java
new file mode 100644 (file)
index 0000000..ac7c43a
--- /dev/null
@@ -0,0 +1,131 @@
+package de.juplo.simplemapper;
+
+
+import com.fasterxml.jackson.core.JsonFactory;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+import org.springframework.context.annotation.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.context.annotation.Bean;
+
+
+
+public class SimpleMapperServiceAutoConfigurationTest
+{
+  private final Logger LOG =
+      LoggerFactory.getLogger(SimpleMapperServiceAutoConfigurationTest.class);
+
+
+  @Test
+  public void emptyConfiguration()
+  {
+    LOG.info("<-- Start Of New Test-Case!");
+
+    ConfigurableApplicationContext context = load(EmptyConfiguration.class);
+
+    SimpleMapperService service = context.getBean(SimpleMapperService.class);
+    assertNotNull(service);
+    assertNotNull(service.getFactory());
+    JsonFactory factory = context.getBean(JsonFactory.class);
+    assertNotNull(factory);
+    assertEquals(factory, service.getFactory());
+
+    context.close();
+  }
+
+  @Test
+  public void factoryConfigured()
+  {
+    LOG.info("<-- Start Of New Test-Case!");
+
+    ConfigurableApplicationContext context = load(FactoryConfigured.class);
+
+    SimpleMapperService service = context.getBean(SimpleMapperService.class);
+    assertNotNull(service);
+    assertNotNull(service.getFactory());
+    JsonFactory factory = context.getBean(JsonFactory.class);
+    assertNotNull(factory);
+    assertEquals(FactoryConfigured.factory, factory);
+    assertEquals(factory, service.getFactory());
+
+    context.close();
+  }
+
+  @Test
+  public void serviceConfigured()
+  {
+    LOG.info("<-- Start Of New Test-Case!");
+
+    ConfigurableApplicationContext context = load(ServiceConfigured.class);
+
+    SimpleMapperService service = context.getBean(SimpleMapperService.class);
+    assertNotNull(service);
+    assertNotNull(service.getFactory());
+    assertEquals(ServiceConfigured.factory, service.getFactory());
+    try
+    {
+      context.getBean(JsonFactory.class);
+      fail("A bean of type JsonFactory was found!");
+    }
+    catch(NoSuchBeanDefinitionException e)
+    {
+      LOG.trace("expected exception", e);
+    }
+
+    context.close();
+  }
+
+
+  @Configuration
+  static class EmptyConfiguration
+  {
+  }
+
+  @Configuration
+  static class FactoryConfigured
+  {
+    static JsonFactory factory = new JsonFactory();
+
+
+    @Bean
+    public JsonFactory factory()
+    {
+      return factory;
+    }
+  }
+
+  @Configuration
+  static class ServiceConfigured
+  {
+    static JsonFactory factory = new JsonFactory();
+    static SimpleMapperService service = new SimpleMapperService(factory);
+
+
+    @Bean
+    public SimpleMapperService service()
+    {
+      return service;
+    }
+  }
+
+
+  private ConfigurableApplicationContext load(Class<?> config, String... pairs)
+  {
+    AnnotationConfigApplicationContext ctx =
+        new AnnotationConfigApplicationContext();
+    ctx.register(config);
+    ctx.register(SimpleMapperServiceAutoConfiguration.class); // << Does not work as expected, if the autoconfiguration is registered before the configuration!
+    AutoConfigurationReportLoggingInitializer report =
+        new AutoConfigurationReportLoggingInitializer();
+    report.initialize(ctx);
+    ctx.refresh();
+    return ctx;
+  }
+}