0

J'écris des cas de test pour un projet qui utilise encore le plugin Acegi (pas le plugin Spring Core Security plus récent) et à partir de maintenant, j'ai réussi à faire ce que ce site (http://www.zorched.net/2008/09/01/grails-testing-acegi-security/)test securityConfig mappage dans grails + acegi

a suggéré en ce qui concerne la détection dont l'utilisateur est actuellement connecté Cependant, dans mon contrôleur, j'ai un truc qui ressemble à ceci:.

def list = { 
    // code for an "admin account" 
} 

def list_others = { 
    // code for other accounts 
} 

maintenant, je ne pas vérifier dans le contrôleur l'utilisateur connecté. Au lieu de cela, je ces définis dans le SecurityConfig.groovy comme:

security { 
    ... 
    requestMapString = """\ 
      /someController/list=ROLE_ADMIN 
      /someController/list_others=ROLE_OTHERS 
    """ 
    ... 
} 

Par conséquent, si j'avais un test qui ressemblait à ceci:

void testTrial() { 
    // define here that otherUser has a role of ROLE_OTHERS 

    authenticate(otherUser, "other") // this calls the authenticate methode in the site I gave earlier 
    controller.list() 

    // I do an assertion here to check where this goes to 
} 

La chose est, quand je fais l'affirmation, bien sûr la liste me dira qu'elle a été transmise à list.gsp ... même si l'utilisateur "connecté" a un rôle de ROLE_OTHERS et non un admin.

Cependant, ce dont j'ai besoin est de savoir comment tester à quoi un utilisateur connecté est seulement supposé accéder? Dans ce cas, étant donné que l'appel est à * .list() et que l'utilisateur connecté a un rôle ROLE_OTHERS, j'aurais dû être redirigé vers une page "denied".

Aide? Merci!

Répondre

1

Vous aurez besoin de tests fonctionnels pour cela. Les tests unitaires sont juste des classes Groovy ou Java plus quelques moqueries. Il n'y a pas de contexte d'application Spring, pas d'Hibernate, pas de base de données, et surtout pas de plugins.

Les tests d'intégration vous donnent plus de fonctionnalités, mais même les requêtes sont souvent simulées et comme il n'y a pas de conteneur, aucun filtre ne se déclenche. Spring Security (que le plugin Acegi utilise) est basé sur une chaîne de filtres de servlets. Donc, si vous voulez tester que vos règles de sécurité sont appliquées correctement, vous aurez besoin d'un serveur en cours d'exécution, d'où des tests fonctionnels.

Il y a plusieurs options pour les tests fonctionnels, les plus populaires étant WebTest: http://grails.org/plugin/webtest, le plugin Test fonctionnel: http://grails.org/plugin/functional-test et le plugin Selenium RC: http://grails.org/plugin/selenium-rc.

Le plus récent est Geb: http://grails.org/plugin/geb. Le manuel est au http://geb.codehaus.org/ et il y avait un billet de blog récent écrit à ce sujet ici: http://blog.springsource.com/2010/08/28/the-future-of-functional-web-testing/

+0

lolz, avait un peu peur que cela impliquerait des tests fonctionnels. De toute façon, je vais vérifier ceux-là, merci! ça aide un peu :) – callie16

Questions connexes