Merge "Change seba installation for cord 7.0.0"
[iec.git] / src / foundation / api / revel / filterconfig_test.go
1 // Copyright (c) 2012-2016 The Revel Framework Authors, All rights reserved.
2 // Revel Framework source code and usage is governed by a MIT style
3 // license that can be found in the LICENSE file.
4
5 package revel
6
7 import "testing"
8
9 type FakeController struct{}
10
11 func (c FakeController) Foo()  {}
12 func (c *FakeController) Bar() {}
13
14 func TestFilterConfiguratorKey(t *testing.T) {
15         conf := FilterController(FakeController{})
16         if conf.key != "FakeController" {
17                 t.Errorf("Expected key 'FakeController', was %s", conf.key)
18         }
19
20         conf = FilterController(&FakeController{})
21         if conf.key != "FakeController" {
22                 t.Errorf("Expected key 'FakeController', was %s", conf.key)
23         }
24
25         conf = FilterAction(FakeController.Foo)
26         if conf.key != "FakeController.Foo" {
27                 t.Errorf("Expected key 'FakeController.Foo', was %s", conf.key)
28         }
29
30         conf = FilterAction((*FakeController).Bar)
31         if conf.key != "FakeController.Bar" {
32                 t.Errorf("Expected key 'FakeController.Bar', was %s", conf.key)
33         }
34 }
35
36 func TestFilterConfigurator(t *testing.T) {
37         // Filters is global state.  Restore it after this test.
38         oldFilters := make([]Filter, len(Filters))
39         copy(oldFilters, Filters)
40         defer func() {
41                 Filters = oldFilters
42         }()
43
44         Filters = []Filter{
45                 RouterFilter,
46                 FilterConfiguringFilter,
47                 SessionFilter,
48                 FlashFilter,
49                 ActionInvoker,
50         }
51
52         // Do one of each operation.
53         conf := FilterAction(FakeController.Foo).
54                 Add(NilFilter).
55                 Remove(FlashFilter).
56                 Insert(ValidationFilter, BEFORE, NilFilter).
57                 Insert(I18nFilter, AFTER, NilFilter)
58         expected := []Filter{
59                 SessionFilter,
60                 ValidationFilter,
61                 NilFilter,
62                 I18nFilter,
63                 ActionInvoker,
64         }
65         actual := getOverride("Foo")
66         if len(actual) != len(expected) || !filterSliceEqual(actual, expected) {
67                 t.Errorf("Ops failed.\nActual: %#v\nExpect: %#v\nConf:%v", actual, expected, conf)
68         }
69
70         // Action2 should be unchanged
71         if getOverride("Bar") != nil {
72                 t.Errorf("Filtering Action should not affect Action2.")
73         }
74
75         // Test that combining overrides on both the Controller and Action works.
76         FilterController(FakeController{}).
77                 Add(PanicFilter)
78         expected = []Filter{
79                 SessionFilter,
80                 ValidationFilter,
81                 NilFilter,
82                 I18nFilter,
83                 PanicFilter,
84                 ActionInvoker,
85         }
86         actual = getOverride("Foo")
87         if len(actual) != len(expected) || !filterSliceEqual(actual, expected) {
88                 t.Errorf("Expected PanicFilter added to Foo.\nActual: %#v\nExpect: %#v", actual, expected)
89         }
90
91         expected = []Filter{
92                 SessionFilter,
93                 FlashFilter,
94                 PanicFilter,
95                 ActionInvoker,
96         }
97         actual = getOverride("Bar")
98         if len(actual) != len(expected) || !filterSliceEqual(actual, expected) {
99                 t.Errorf("Expected PanicFilter added to Bar.\nActual: %#v\nExpect: %#v", actual, expected)
100         }
101
102         FilterAction((*FakeController).Bar).
103                 Add(NilFilter)
104         expected = []Filter{
105                 SessionFilter,
106                 ValidationFilter,
107                 NilFilter,
108                 I18nFilter,
109                 PanicFilter,
110                 ActionInvoker,
111         }
112         actual = getOverride("Foo")
113         if len(actual) != len(expected) || !filterSliceEqual(actual, expected) {
114                 t.Errorf("Expected no change to Foo.\nActual: %#v\nExpect: %#v", actual, expected)
115         }
116
117         expected = []Filter{
118                 SessionFilter,
119                 FlashFilter,
120                 PanicFilter,
121                 NilFilter,
122                 ActionInvoker,
123         }
124         actual = getOverride("Bar")
125         if len(actual) != len(expected) || !filterSliceEqual(actual, expected) {
126                 t.Errorf("Expected NilFilter added to Bar.\nActual: %#v\nExpect: %#v", actual, expected)
127         }
128 }
129
130 func filterSliceEqual(a, e []Filter) bool {
131         for i, f := range a {
132                 if !FilterEq(f, e[i]) {
133                         return false
134                 }
135         }
136         return true
137 }
138
139 func getOverride(methodName string) []Filter {
140         return getOverrideChain("FakeController", "FakeController."+methodName)
141 }