]> git.stg.codes - stg.git/blob - tests/test_filter_params_log.cpp
3223df83d988b4e466589034fbccd865887c9392
[stg.git] / tests / test_filter_params_log.cpp
1 #include "tut/tut.hpp"
2
3 #include "stg/admin.h"
4 #include "stg/user_property.h"
5 #include "user_impl.h"
6
7 #include "testsettings.h"
8 #include "testtariffs.h"
9 #include "teststore.h"
10 #include "testauth.h"
11 #include "testusers.h"
12 #include "testservices.h"
13
14 namespace
15 {
16
17 class TEST_STORE_LOCAL : public TEST_STORE {
18 public:
19     TEST_STORE_LOCAL()
20         : entries(0)
21     {}
22
23     int WriteUserChgLog(const std::string & /*login*/,
24                         const std::string & /*admLogin*/,
25                         uint32_t /*admIP*/,
26                         const std::string & /*paramName*/,
27                         const std::string & /*oldValue*/,
28                         const std::string & /*newValue*/,
29                         const std::string & /*message*/) const override { ++entries; return 0; }
30
31     size_t GetEntries() const { return entries; }
32
33 private:
34     mutable size_t entries;
35 };
36
37 class TEST_SETTINGS_LOCAL : public TEST_SETTINGS {
38     public:
39         void addFilter(const std::string& field) { filter.push_back(field); }
40
41         const std::vector<std::string>& GetFilterParamsLog() const { return filter; }
42
43     private:
44         std::vector<std::string> filter;
45 };
46
47 }
48
49 namespace tut
50 {
51     struct filter_params_log_data {
52     };
53
54     typedef test_group<filter_params_log_data> tg;
55     tg filter_params_log_test_group("Filter params log tests group");
56
57     typedef tg::object testobject;
58
59     template<>
60     template<>
61     void testobject::test<1>()
62     {
63         set_test_name("Check normal behaviour");
64
65         TEST_SETTINGS_LOCAL settings;
66         settings.addFilter("*"); // Allow everything by default.
67         TEST_TARIFFS tariffs;
68         STG::Admin admin(STG::Priv(0xFFFF), {}, {});
69         TEST_STORE_LOCAL store;
70         TEST_AUTH auth;
71         TEST_USERS users;
72         TEST_SERVICES services;
73         STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
74
75         auto & address = user.GetProperties().address;
76         auto & note = user.GetProperties().note;
77         auto & group = user.GetProperties().group;
78
79         address.Set("address", admin, "", store, "");
80         note.Set("note", admin, "", store, "");
81         group.Set("group", admin, "", store, "");
82
83         ensure_equals("entries = 3", store.GetEntries(), 3);
84
85         note.Set("another note", admin, "", store, "");
86
87         ensure_equals("entries = 4", store.GetEntries(), 4);
88
89         address.Set("new address", admin, "", store, "");
90
91         ensure_equals("entries = 5", store.GetEntries(), 5);
92
93         group.Set("administrative group", admin, "", store, "");
94
95         ensure_equals("entries = 6", store.GetEntries(), 6);
96     }
97
98
99     template<>
100     template<>
101     void testobject::test<2>()
102     {
103         set_test_name("Check single filter entry.");
104
105         TEST_SETTINGS_LOCAL settings;
106         settings.addFilter("address"); // Allow everything by default.
107         TEST_TARIFFS tariffs;
108         STG::Admin admin(STG::Priv(0xFFFF), {}, {});
109         TEST_STORE_LOCAL store;
110         TEST_AUTH auth;
111         TEST_USERS users;
112         TEST_SERVICES services;
113         STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
114
115         auto & address = user.GetProperties().address;
116         auto & note = user.GetProperties().note;
117         auto & group = user.GetProperties().group;
118
119         address.Set("address", admin, "", store, "");
120         note.Set("note", admin, "", store, "");
121         group.Set("group", admin, "", store, "");
122
123         ensure_equals("entries = 1", store.GetEntries(), 1);
124
125         note.Set("another note", admin, "", store, "");
126
127         ensure_equals("entries = 1", store.GetEntries(), 1);
128
129         address.Set("new address", admin, "", store, "");
130
131         ensure_equals("entries = 2", store.GetEntries(), 2);
132
133         group.Set("administrative group", admin, "", store, "");
134
135         ensure_equals("entries = 2", store.GetEntries(), 2);
136     }
137
138     template<>
139     template<>
140     void testobject::test<3>()
141     {
142         set_test_name("Check multiple filter entries.");
143
144         TEST_SETTINGS_LOCAL settings;
145         settings.addFilter("address"); // Allow everything by default.
146         settings.addFilter("group"); // Allow everything by default.
147         TEST_TARIFFS tariffs;
148         STG::Admin admin(STG::Priv(0xFFFF), {}, {});
149         TEST_STORE_LOCAL store;
150         TEST_AUTH auth;
151         TEST_USERS users;
152         TEST_SERVICES services;
153         STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
154
155         auto & address = user.GetProperties().address;
156         auto & note = user.GetProperties().note;
157         auto & group = user.GetProperties().group;
158
159         address.Set("address", admin, "", store, "");
160         note.Set("note", admin, "", store, "");
161         group.Set("group", admin, "", store, "");
162
163         ensure_equals("entries = 2", store.GetEntries(), 2);
164
165         note.Set("another note", admin, "", store, "");
166
167         ensure_equals("entries = 2", store.GetEntries(), 2);
168
169         address.Set("new address", admin, "", store, "");
170
171         ensure_equals("entries = 3", store.GetEntries(), 3);
172
173         group.Set("administrative group", admin, "", store, "");
174
175         ensure_equals("entries = 4", store.GetEntries(), 4);
176     }
177
178     template<>
179     template<>
180     void testobject::test<4>()
181     {
182         set_test_name("Check empty filter.");
183
184         TEST_SETTINGS_LOCAL settings;
185         TEST_TARIFFS tariffs;
186         STG::Admin admin(STG::Priv(0xFFFF), {}, {});
187         TEST_STORE_LOCAL store;
188         TEST_AUTH auth;
189         TEST_USERS users;
190         TEST_SERVICES services;
191         STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
192
193         auto & address = user.GetProperties().address;
194         auto & note = user.GetProperties().note;
195         auto & group = user.GetProperties().group;
196
197         address.Set("address", admin, "", store, "");
198         note.Set("note", admin, "", store, "");
199         group.Set("group", admin, "", store, "");
200
201         ensure_equals("entries = 0", store.GetEntries(), 0);
202
203         note.Set("another note", admin, "", store, "");
204
205         ensure_equals("entries = 0", store.GetEntries(), 0);
206
207         address.Set("new address", admin, "", store, "");
208
209         ensure_equals("entries = 0", store.GetEntries(), 0);
210
211         group.Set("administrative group", admin, "", store, "");
212
213         ensure_equals("entries = 0", store.GetEntries(), 0);
214     }
215 }