LateralThoughts / systemi

Business As Usual
3 stars 2 forks source link

Exception à la création d'un budget #24

Closed vincentdoba closed 10 years ago

vincentdoba commented 10 years ago

Dans certains cas, à la création d'un budget, une exception est levée.

Comment reproduire

$ mongo
use invoice@LT
db.dropDatabase

Résultat attendu

Redirection vers la page de listing des membres (http://localhost:9000/members#/dashboard) avec le budget créé qui apparait sous l'entrée du compte connecté, colonne "Accounts"

Résultat obtenu

Une erreur est levée par l'application

[error] play - Cannot invoke the action, eventually got an error: scala.MatchError: Human(BasicProfile(google,107118519041904062585,Some(Vincent),Some(Doba),Some(Vincent Doba),Some(vincent.doba@gmail.com),Some(https://lh3.googleusercontent.com/-4zmtKZIF5Gc/AAAAAAAAAAI/AAAAAAAAAIY/Y1e7O64ELhc/photo.jpg?sz=50),AuthenticationMethod(oauth2),None,Some(OAuth2Info(ya29.lQAs0i1xBchMs5SP7Fv531vwm4vu48fKTnxUEbMMFb-GyOj3V3UiRjfS,Some(Bearer),Some(3600),None)),None)) (of class domain.Human)
[error] application - 

! @6jmel64ij - Internal server error, for (POST) [/api/accounts] ->

play.api.Application$$anon$1: Execution exception[[MatchError: Human(BasicProfile(google,107118519041904062585,Some(Vincent),Some(Doba),Some(Vincent Doba),Some(vincent.doba@gmail.com),Some(https://lh3.googleusercontent.com/-4zmtKZIF5Gc/AAAAAAAAAAI/AAAAAAAAAIY/Y1e7O64ELhc/photo.jpg?sz=50),AuthenticationMethod(oauth2),None,Some(OAuth2Info(ya29.lQAs0i1xBchMs5SP7Fv531vwm4vu48fKTnxUEbMMFb-GyOj3V3UiRjfS,Some(Bearer),Some(3600),None)),None)) (of class domain.Human)]]
    at play.api.Application$class.handleError(Application.scala:296) ~[play_2.11-2.3.4.jar:2.3.4]
    at play.api.DefaultApplication.handleError(Application.scala:402) [play_2.11-2.3.4.jar:2.3.4]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$4.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.4.jar:2.3.4]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$4.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.4.jar:2.3.4]
    at scala.Option.map(Option.scala:145) [scala-library-2.11.2.jar:na]
Caused by: scala.MatchError: Human(BasicProfile(google,107118519041904062585,Some(Vincent),Some(Doba),Some(Vincent Doba),Some(vincent.doba@gmail.com),Some(https://lh3.googleusercontent.com/-4zmtKZIF5Gc/AAAAAAAAAAI/AAAAAAAAAIY/Y1e7O64ELhc/photo.jpg?sz=50),AuthenticationMethod(oauth2),None,Some(OAuth2Info(ya29.lQAs0i1xBchMs5SP7Fv531vwm4vu48fKTnxUEbMMFb-GyOj3V3UiRjfS,Some(Bearer),Some(3600),None)),None)) (of class domain.Human)
    at domain.MemberSerializer$$anonfun$12.apply(accounts.scala:23) ~[classes/:na]
    at domain.MemberSerializer$$anonfun$12.apply(accounts.scala:23) ~[classes/:na]
    at play.api.libs.json.Writes$$anon$5.writes(Writes.scala:84) ~[play-json_2.11-2.3.4.jar:2.3.4]
    at play.api.libs.json.Format$$anon$3.writes(Format.scala:64) ~[play-json_2.11-2.3.4.jar:2.3.4]
    at play.api.libs.json.PathWrites$$anonfun$at$2.apply(JsConstraints.scala:174) ~[play-json_2.11-2.3.4.jar:2.3.4]

Analyse Succincte

Cette erreur ne semble pas se produire tout le temps : des fois je l'ai et des fois je ne l'ai pas. Je ne vois pas d'où cela peut venir.

vincentdoba commented 10 years ago

A priori le problème venait du memberFormatter qui n'était pas déclaré comme type "Format[Member]". Je ne sais pas ce que ça implique mais j'imagine que comme après les formatters sont générés à l'aide de macros le moteur de génération s'emmelait un peu les pinceaux dans les types du coup ça pêtait des fois.

J'ai ajouté un test qui vérifie ce bug, ne pas hésiter à rouvrir le bug en cas de problème.