package test; import com.feth.play.module.pa.PlayAuthenticate; import com.feth.play.module.pa.providers.oauth2.OAuth2AuthProvider; import com.feth.play.module.pa.user.AuthUser; import com.google.inject.Inject; import org.junit.Before; import play.Application; import play.Configuration; import play.inject.guice.GuiceApplicationBuilder; import play.test.Helpers; import play.test.TestBrowser; import play.test.WithBrowser; import service.MyUserService; import java.util.HashMap; import java.util.Map; import static play.inject.Bindings.bind; public abstract class OAuth2Test extends WithBrowser { @Override protected TestBrowser provideBrowser(int port) { return Helpers.testBrowser(Helpers.FIREFOX, port); } @Override protected int providePort() { return 9000; // This needs to be 9000, because the registered Applications are expecting the return URL to be on :9000 } @Override protected Application provideApplication() { final Map<String, Object> additionalConfiguration = new HashMap<>(); additionalConfiguration.putAll(Helpers.inMemoryDatabase()); additionalConfiguration.put("smtp.mock", "true"); amendConfiguration(additionalConfiguration); return new GuiceApplicationBuilder() .bindings( bind(getProviderClass()).toSelf().eagerly() ) .configure(additionalConfiguration) .overrides(bind(MyUserService.class).to(MyTestUserServiceService.class).eagerly()) .build(); } protected abstract Class<? extends OAuth2AuthProvider> getProviderClass(); protected abstract String getProviderKey(); protected abstract void amendConfiguration(final Map<String, Object> additionalConfiguration); protected void goToLogin() { browser.goTo("/authenticate/" + getProviderKey()); browser.await().untilPage().isLoaded(); } protected String constructSettingKey(final String setting) { return PlayAuthenticate.SETTING_KEY_PLAY_AUTHENTICATE + "." + getProviderKey() + "." + setting; } protected Configuration getConfig() { return app.injector().instanceOf(PlayAuthenticate.class).getConfiguration().getConfig(getProviderKey()); } public static class MyTestUserServiceService extends MyUserService { private static AuthUser lastAuthUser; @Inject public MyTestUserServiceService(final PlayAuthenticate auth) { super(auth); } @Override public void onStart() { this.auth.setUserService(this); } @Override public Object save(final AuthUser authUser) { lastAuthUser = authUser; return super.save(authUser); } public static AuthUser getLastAuthUser() { return lastAuthUser; } public static void resetLasAuthUser() { lastAuthUser = null; } } @Before public void resetLastAuthUser() { MyTestUserServiceService.resetLasAuthUser(); } }