Testando um aplicativo Play2 com SecureSocial usando injeção de dependência

Muito obrigado por qualquer orientação!

O plug-in SecureSocial funciona bem quando eu o executo no navegador, mas gostaria de poder testar o restante do meu aplicativo do Google Play agora.

Introdução rápida

A sintaxe da SecureSocial é assim:

def page = SecuredAction(WithProvider("google")) { ... }

ou isto:

def page = UserAwareAction { ... }

Estive olhandoAqui, o que parece ser a única questão sobre o Stack Overflow, mesmo remotamente relacionada ao meu problema com SecureSocial, mas eu não gosto muito de reconectar o bytecode. Deveria haver uma solução mais simples para isso.

Quando estou executando testes que acessam Ações protegidas pelo SecureSocial, recebo um grande erro que, basicamente, significa que não estou passando a ele um usuário. (veja o final desta questão)

O que eu gostaria de fazer

Injete todas as funções para retornar um tipoAction ao invés deSecuredAction ouUserAwareAction somente durante o teste

Ou, na verdade, passar um usuário de teste para a chamada.Mas como?

O que eu tenho
@Singleton
class JsonOps @Inject() () extends Controller with SecureSocial {...}

A Global.scala escrito como descritoAqui e no meu teste ...

val controller = new JsonOps
val result = controller.userAwareActionRequestForSomeJson("")(FakeRequest())

Eu também tenho chamadas assim:

// This is what I would use for production
def extjs = SecuredAction(WithProvider("google")) { implicit request =>
   Ok(views.html.extjs(request.user.firstName))
}
// This is what I would use for testing
def extjs = Action { implicit request =>
  Ok(views.html.extjs("testtesttesting"))
}

É por isso que acho que esse problema pode ser adequado para injeção de dependência? Eu não tenho certeza como eu faria a instanciação de classe, já que o Global.scala que estou usando é um instanciador de classe genérico. Eu particularmente não desejo escrever 9000+ traços para cada controlador que possuo.

O grande erro

Esta é a linha UserOpsSpec.scala da linha 12 e 13:

12  val controller = new UserOps
13  val result = controller.extjs()(FakeRequest())

e esse é o erro

[error]     RuntimeException: java.lang.ExceptionInInitializerError (UserOpsSpec.scala:13)
[error] play.api.mvc.ActionBuilder$anon$1.apply(Action.scala:220)
[error] securesocial.core.SecureSocial$.authenticatorFromRequest(SecureSocial.scala:200)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:81)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:78)
[error] play.api.mvc.ActionBuilder$anon$1.apply(Action.scala:215)
[error] play.api.Play$anonfun$current$1.apply(Play.scala:51)
[error] play.api.Play$anonfun$current$1.apply(Play.scala:51)
[error] play.api.Play$.current(Play.scala:51)
[error] securesocial.core.Authenticator$.cookieName$lzycompute(Authenticator.scala:188)
[error] securesocial.core.Authenticator$.cookieName(Authenticator.scala:188)
[error] securesocial.core.Authenticator$.<init>(Authenticator.scala:201)
[error] securesocial.core.Authenticator$.<clinit>(Authenticator.scala)
[error] securesocial.core.SecureSocial$.authenticatorFromRequest(SecureSocial.scala:200)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:81)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:78)
[error] play.api.mvc.ActionBuilder$anon$1.apply(Action.scala:215)
[error] null
[error] securesocial.core.SecureSocial$.authenticatorFromRequest(SecureSocial.scala:200)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:81)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:78)
[error] play.api.mvc.ActionBuilder$anon$1.apply(Action.scala:215)
[error] There is no started application
[error] play.api.Play$anonfun$current$1.apply(Play.scala:51)
[error] play.api.Play$anonfun$current$1.apply(Play.scala:51)
[error] play.api.Play$.current(Play.scala:51)
[error] securesocial.core.Authenticator$.cookieName$lzycompute(Authenticator.scala:188)
[error] securesocial.core.Authenticator$.cookieName(Authenticator.scala:188)
[error] securesocial.core.Authenticator$.<init>(Authenticator.scala:201)
[error] securesocial.core.Authenticator$.<clinit>(Authenticator.scala)
[error] securesocial.core.SecureSocial$.authenticatorFromRequest(SecureSocial.scala:200)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:81)
[error] securesocial.core.SecureSocial$anonfun$SecuredAction$1.apply(SecureSocial.scala:78)
[error] play.api.mvc.ActionBuilder$anon$1.apply(Action.scala:215)
[info]

questionAnswers(1)

yourAnswerToTheQuestion