grail アプリケーションで shiro セキュリティを使用しています。Grails バージョン: 2.2.1 shiro: 1.2.0
フィルターが有効になっているコントローラーの grails 単体テスト ケースを作成する際に問題があります。テスト ケースをフィルターなしで実行すると正常に動作します。フィルターを使用して実行すると、コントローラーに accessControl() メソッドが見つからないために失敗します。テスト ケースの実行中に Shiro の API を表示する方法がわかりません。クラスとテストケースがどのように見えるかをサンプルコードに示しました
MyController.groovy
def create() {
// getting request parameters and validation
String emailId = params.emailId
def ret = myService.createUser(emailId)
return ret
}
MyControllerFilters.groovy
def filters = {
loginCheck(controller: 'user') {
before = {
//do some business checks
// Access control by convention.
accessControl() // This is a dynamic method injected by ShiroGrailsPlugin to FilterConfig, but this is not visible during the test case.
}
}
MyControllerTests.groovy
@TestFor(MyController)
@Mock(MyControllerFilters)
class MyControllerTests {
@Before
void setup() {
// initializing some variables
}
void testCreateUserWithFilter() {
request.accessAllowed = true
withFilters(action:"create") {
controller.create()
}
assert response.message == "success"
}
}