Closed dbourdette closed 12 years ago
t'as apporté des modifications en oubliant de changer le nom des packages sur Config.groovy, et celà a fait qu'après authentification avec "admin" ça ne passe pas ! j'espère que celà régle le problème des tests d'integration même si je ne vois toujours pas le rapport ! je vais essayer de voir cela demain !
Effectivement, depuis que le Config.groovy a été corrigé il n'y a plus les erreurs concernant les dépendances de Spring. Concernant les tests d'intégration, mon erreur n'avait rien à voir (je n'avais pas lancé la base mongoDB), autant pour moi.
Les tests marchent mais je ne comprend pas pourquoi cela tourne même si je précise un username ou un password erroné !?
Quelques petites choses a corriger avant tout :
Les tests passent pour n'import quel user ou password! je n'arrive pas à comprendre pourquoi ?
Si je lance l'appli (grails run-app) et que je vais sur http://localhost:8080/api/profile/1, je retombe sur le formulaire de login. Je n'ai pas le popup système lié au login via auth basic.
Cela vient de grails.plugins.springsecurity.filterChain.chainMap. Les règles ne peuvent pas comprendre $facebookId. J'ai corrigé et simplifié les règles
grails.plugins.springsecurity.filterChain.chainMap = [
'/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter',
'/**': 'JOINED_FILTERS,-basicAuthenticationFilter,-basicExceptionTranslationFilter'
]
Ensuite, si je change l'url dans ActionPage pour une url incorrecte, le test passe encore. J'imagine qu'il y a un problème avec le test.
Les services REST renvoient du JSON. Du coup je pense que le pattern des pages Geb n'est pas bon ici. Une utilisation brute est plus simple car on va lire le contenu et le lire avec un JsonSlurper.
...
Un peu plus tard
...
C'est la galère de vouloir faire de l'auth basic avec Geb. Pour les test de l'api REST, Geb n'apporte rien. Alors faisons plutôt du groovy simple.
J'ai fait un premier test dans ProfileRestControllerIntegrationTests
def http = new HTTPBuilder('http://localhost:8080')
http.auth.basic 'admin', 'admin'
def json = http.get(path: '/api/profile/1', contentType: ContentType.JSON)
assert json.email == 'jdoo@mail.com'
Mais il passe pas.
Et alors là, j'avoue, j'ai galéré un peu. Le soucis venait du Bootstrap.groovy qui vire la base pour les tests. Donc pendant les tests, il n'y avait rien en base : /
J'ai changé le Bootstrap.groovy, vider la base ne me semble pas une bonne idée à ce stade.
Et la ca passe.
Je vous laisse faire quelques tests supplémentaires pour les Profiles et les autres controllers.
Le test ne passe pas chez moi et j'ignore pourquoi !! Voici l'erreur qu'il me donne:
Failure: testGetProfile(com.github.dbourdette.rest.ProfileRestControllerIntegrationTests)
groovyx.net.http.HttpResponseException: Unauthorized
at groovyx.net.http.HTTPBuilder.defaultFailureHandler(HTTPBuilder.java:636)
at groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:492)
at groovyx.net.http.HTTPBuilder.get(HTTPBuilder.java:278)
at groovyx.net.http.HTTPBuilder.get(HTTPBuilder.java:248)
at com.github.dbourdette.rest.ProfileRestControllerIntegrationTests.testGetProfile(ProfileRestControllerIntegrationTests.groovy:11)
HttpResponseException: Unauthorized -> c'est une 401, le login / mdp sont refusés
En local :
grails test-app functional: ProfileRestControllerIntegrationTests
Et ca passe
| Running Grails application
Configuring Spring Security Core ...
... finished configuring Spring Security Core
| Server running. Browse to http://localhost:8080/
| Completed 1 functional test, 0 failed in 1695ms
| Server stopped
| Tests PASSED - view reports in /Users/bourdette/projects-git/fun-reco/target/test-reports
Avez vous bien mis à jour votre projet ?
J'ai bien fait un git pull pour votre dernier commit , le login /pass sont bon, je pense pas que c'est les identifiants qui posent problème, je pense que c'est plutôt la base ! Que voulez vous dire par supprimer la base fun-reco-test ?
J'utilise une interface graphique pour le faire (mongohub)
C'est aussi ce qui était dans le boostrap avant.
new Mongo().getDB("fun-reco-test").dropDatabase();
Alors si on laisse cette ligne sur le bootstrap cela doit normalement marcher !? je suis pas sure d'avoir bien compris comment ça se passe au niveau de la base !
Si on laisse cette ligne, ca supprime toute la base, pas simplement les users. Donc si on a besoin de garder la base dans un certain état ca peut être embêtant. Par exemple si il y a des actions ou des profils qu'il ne faut pas supprimer. A ce stade, je ne sais pas ce qu'il vaut mieux faire. Peut être ce sera la bonne solution.
Le principe du bootstrap, c'est qu'il s'exécute avant l'exécution de l'appli. Il ne faut donc vider la base que dans le cas des tests. Puis la remplir de nouveau avec les bonnes données.
D'accord ! Bon voilà j'ai supprimé la base manuellement et maintenant le test passe :) Merci !
Toutes les pages permettant de modifier les données doivent être protégées par login / pass
Le plugin spring security est la référence pour les applications web spring / grails.
Il faut regarder a faire fonctionner les tests Geb.