X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=src%2Ffoundation%2Fapi%2Frevel%2Ffilterconfig_test.go;fp=src%2Ffoundation%2Fapi%2Frevel%2Ffilterconfig_test.go;h=a3973f94d44fc82eb3fb0fd8a7412bf72ed01caa;hb=1d1ee6961c93781e1187d8c7faa868da6b2f01f4;hp=0000000000000000000000000000000000000000;hpb=56dd5e0f2164b37b40ac1daa188ccc618b4cbd19;p=iec.git diff --git a/src/foundation/api/revel/filterconfig_test.go b/src/foundation/api/revel/filterconfig_test.go new file mode 100644 index 0000000..a3973f9 --- /dev/null +++ b/src/foundation/api/revel/filterconfig_test.go @@ -0,0 +1,141 @@ +// Copyright (c) 2012-2016 The Revel Framework Authors, All rights reserved. +// Revel Framework source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +package revel + +import "testing" + +type FakeController struct{} + +func (c FakeController) Foo() {} +func (c *FakeController) Bar() {} + +func TestFilterConfiguratorKey(t *testing.T) { + conf := FilterController(FakeController{}) + if conf.key != "FakeController" { + t.Errorf("Expected key 'FakeController', was %s", conf.key) + } + + conf = FilterController(&FakeController{}) + if conf.key != "FakeController" { + t.Errorf("Expected key 'FakeController', was %s", conf.key) + } + + conf = FilterAction(FakeController.Foo) + if conf.key != "FakeController.Foo" { + t.Errorf("Expected key 'FakeController.Foo', was %s", conf.key) + } + + conf = FilterAction((*FakeController).Bar) + if conf.key != "FakeController.Bar" { + t.Errorf("Expected key 'FakeController.Bar', was %s", conf.key) + } +} + +func TestFilterConfigurator(t *testing.T) { + // Filters is global state. Restore it after this test. + oldFilters := make([]Filter, len(Filters)) + copy(oldFilters, Filters) + defer func() { + Filters = oldFilters + }() + + Filters = []Filter{ + RouterFilter, + FilterConfiguringFilter, + SessionFilter, + FlashFilter, + ActionInvoker, + } + + // Do one of each operation. + conf := FilterAction(FakeController.Foo). + Add(NilFilter). + Remove(FlashFilter). + Insert(ValidationFilter, BEFORE, NilFilter). + Insert(I18nFilter, AFTER, NilFilter) + expected := []Filter{ + SessionFilter, + ValidationFilter, + NilFilter, + I18nFilter, + ActionInvoker, + } + actual := getOverride("Foo") + if len(actual) != len(expected) || !filterSliceEqual(actual, expected) { + t.Errorf("Ops failed.\nActual: %#v\nExpect: %#v\nConf:%v", actual, expected, conf) + } + + // Action2 should be unchanged + if getOverride("Bar") != nil { + t.Errorf("Filtering Action should not affect Action2.") + } + + // Test that combining overrides on both the Controller and Action works. + FilterController(FakeController{}). + Add(PanicFilter) + expected = []Filter{ + SessionFilter, + ValidationFilter, + NilFilter, + I18nFilter, + PanicFilter, + ActionInvoker, + } + actual = getOverride("Foo") + if len(actual) != len(expected) || !filterSliceEqual(actual, expected) { + t.Errorf("Expected PanicFilter added to Foo.\nActual: %#v\nExpect: %#v", actual, expected) + } + + expected = []Filter{ + SessionFilter, + FlashFilter, + PanicFilter, + ActionInvoker, + } + actual = getOverride("Bar") + if len(actual) != len(expected) || !filterSliceEqual(actual, expected) { + t.Errorf("Expected PanicFilter added to Bar.\nActual: %#v\nExpect: %#v", actual, expected) + } + + FilterAction((*FakeController).Bar). + Add(NilFilter) + expected = []Filter{ + SessionFilter, + ValidationFilter, + NilFilter, + I18nFilter, + PanicFilter, + ActionInvoker, + } + actual = getOverride("Foo") + if len(actual) != len(expected) || !filterSliceEqual(actual, expected) { + t.Errorf("Expected no change to Foo.\nActual: %#v\nExpect: %#v", actual, expected) + } + + expected = []Filter{ + SessionFilter, + FlashFilter, + PanicFilter, + NilFilter, + ActionInvoker, + } + actual = getOverride("Bar") + if len(actual) != len(expected) || !filterSliceEqual(actual, expected) { + t.Errorf("Expected NilFilter added to Bar.\nActual: %#v\nExpect: %#v", actual, expected) + } +} + +func filterSliceEqual(a, e []Filter) bool { + for i, f := range a { + if !FilterEq(f, e[i]) { + return false + } + } + return true +} + +func getOverride(methodName string) []Filter { + return getOverrideChain("FakeController", "FakeController."+methodName) +}