Filter:
package grails.feature.toggle.filters
import grails.plugin.featuretoggle.FeatureToggleService;
import grails.plugin.featuretoggle.annotations.FeatureToggle;
class FeatureToggleFilters {
FeatureToggleService featureToggleService
def filters = {
allControllers(controller:'*', action:'*') {
before = {
def artefact = grailsApplication.getArtefactByLogicalPropertyName("Controller", controllerName)
def curController = applicationContext.getBean(artefact.clazz.name)
def annotation = curController.class.getAnnotation(FeatureToggle)
if(annotation != null && !featureToggleService.isFeatureEnabled(annotation.feature())) {
render(status: annotation.responseStatus())
return
}
}
}
}
}
Test:
package grails.feature.toggle
import grails.feature.toggle.filters.FeatureToggleFilters
import grails.plugin.featuretoggle.FeatureToggleService
import grails.test.mixin.Mock
import grails.test.mixin.TestFor
@TestFor(SampleController)
@Mock(FeatureToggleFilters)
class SampleControllerTests {
def featureService
void testFeatureIsDisabled() {
def featureService = mockFor(FeatureToggleService)
featureService.demand.isFeatureEnabled {String feature -> return false}
withFilters(action: 'index') {
controller.index()
}
assert response.status == 404
}
}