Prepared for next development iteration (5.0-SNAPSHOT)
[facebook-errors] / src / test / java / de / juplo / facebook / errors / FacebookErrorsSpringSocialAutoConfigurationTest.java
1 package de.juplo.facebook.errors;
2
3
4 import java.util.HashMap;
5 import java.util.Map;
6 import java.util.Map.Entry;
7 import org.junit.After;
8 import org.junit.Test;
9 import org.springframework.context.annotation.Configuration;
10 import static org.junit.Assert.*;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
13 import org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer;
14 import org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration;
15 import org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration;
16 import org.springframework.context.ConfigurableApplicationContext;
17 import org.springframework.context.annotation.Bean;
18 import org.springframework.context.annotation.Scope;
19 import org.springframework.context.annotation.ScopedProxyMode;
20 import org.springframework.mock.env.MockEnvironment;
21 import org.springframework.mock.web.MockHttpServletRequest;
22 import org.springframework.social.connect.ConnectionRepository;
23 import org.springframework.social.facebook.api.Facebook;
24 import org.springframework.social.facebook.api.impl.FacebookTemplate;
25 import org.springframework.web.client.RestTemplate;
26 import org.springframework.web.context.request.RequestContextHolder;
27 import org.springframework.web.context.request.ServletRequestAttributes;
28 import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
29
30
31
32 public class FacebookErrorsSpringSocialAutoConfigurationTest
33 {
34   private final Logger LOG =
35       LoggerFactory.getLogger(FacebookErrorsSpringSocialAutoConfigurationTest.class);
36
37
38   private ConfigurableApplicationContext context;
39
40
41   @After
42   public void tearDown()
43   {
44     if (this.context != null)
45       this.context.close();
46   }
47
48
49   @Test
50   public void defaultConfiguration()
51   {
52     LOG.info("<-- Start Of New Test-Case!");
53     Map<String, String> properties = new HashMap<>();
54     properties.put("spring.social.facebook.app-id", "APP_ID");
55     properties.put("spring.social.facebook.app-secret", "APP_SECRET");
56     context = loadWebApplicationContext(EmptyConfiguration.class, properties);
57     Facebook facebook = context.getBean("facebook", Facebook.class);
58     RestTemplate template = (RestTemplate) facebook.restOperations();
59     assertEquals(GraphApiErrorHandler.class, template.getErrorHandler().getClass());
60   }
61
62
63   @Configuration
64   static class EmptyConfiguration
65   {
66     /**
67      * We have to provide this scoped bean for all our tests.
68      * Otherwise, the tests will fail, if we do not set up a complete
69      * environment with a connection-repository and a properly mocked request,
70      * that holds appropriate information to fetch a connection from that
71      * repository.
72      * @param repository
73      * @return 
74      */
75     @Bean
76     @Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES)
77     public Facebook facebook(ConnectionRepository repository)
78     {
79       return new FacebookTemplate("ACCESS_TOKEN");
80     }
81   }
82
83
84   private ConfigurableApplicationContext loadWebApplicationContext(
85       Class<?> config,
86       Map<String, String> properties
87       )
88   {
89     AnnotationConfigWebApplicationContext ctx =
90         new AnnotationConfigWebApplicationContext();
91     if (properties != null)
92     {
93       MockEnvironment env = new MockEnvironment();
94       for (Entry<String, String> entry : properties.entrySet())
95         env.withProperty(entry.getKey(), entry.getValue());
96       ctx.setEnvironment(env);
97     }
98     ctx.register(FacebookErrorsSpringSocialAutoConfiguration.class);
99     ctx.register(FacebookAutoConfiguration.class);
100     ctx.register(SocialWebAutoConfiguration.class);
101     ctx.register(config);
102     AutoConfigurationReportLoggingInitializer report =
103         new AutoConfigurationReportLoggingInitializer();
104     report.initialize(ctx);
105     MockHttpServletRequest request = new MockHttpServletRequest();
106     ServletRequestAttributes attributes = new ServletRequestAttributes(request);
107     RequestContextHolder.setRequestAttributes(attributes);
108     ctx.refresh();
109     return ctx;
110   }
111 }