]> git.stg.codes - stg.git/blob - tests/test_filter_params_log.cpp
Use std::jthread and C++17.
[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         tariffs.ReadTariffs();
69         STG::Admin admin(STG::Priv(0xFFFF), {}, {});
70         TEST_STORE_LOCAL store;
71         TEST_AUTH auth;
72         TEST_USERS users;
73         TEST_SERVICES services;
74         STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
75
76         auto & address = user.GetProperties().address;
77         auto & note = user.GetProperties().note;
78         auto & group = user.GetProperties().group;
79
80         address.Set("address", admin, "", store, "");
81         note.Set("note", admin, "", store, "");
82         group.Set("group", admin, "", store, "");
83
84         ensure_equals("entries = 3", store.GetEntries(), 3);
85
86         note.Set("another note", admin, "", store, "");
87
88         ensure_equals("entries = 4", store.GetEntries(), 4);
89
90         address.Set("new address", admin, "", store, "");
91
92         ensure_equals("entries = 5", store.GetEntries(), 5);
93
94         group.Set("administrative group", admin, "", store, "");
95
96         ensure_equals("entries = 6", store.GetEntries(), 6);
97     }
98
99
100     template<>
101     template<>
102     void testobject::test<2>()
103     {
104         set_test_name("Check single filter entry.");
105
106         TEST_SETTINGS_LOCAL settings;
107         settings.addFilter("address"); // Allow everything by default.
108         TEST_TARIFFS tariffs;
109         STG::Admin admin(STG::Priv(0xFFFF), {}, {});
110         TEST_STORE_LOCAL store;
111         TEST_AUTH auth;
112         TEST_USERS users;
113         TEST_SERVICES services;
114         STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
115
116         auto & address = user.GetProperties().address;
117         auto & note = user.GetProperties().note;
118         auto & group = user.GetProperties().group;
119
120         address.Set("address", admin, "", store, "");
121         note.Set("note", admin, "", store, "");
122         group.Set("group", admin, "", store, "");
123
124         ensure_equals("entries = 1", store.GetEntries(), 1);
125
126         note.Set("another note", admin, "", store, "");
127
128         ensure_equals("entries = 1", store.GetEntries(), 1);
129
130         address.Set("new address", admin, "", store, "");
131
132         ensure_equals("entries = 2", store.GetEntries(), 2);
133
134         group.Set("administrative group", admin, "", store, "");
135
136         ensure_equals("entries = 2", store.GetEntries(), 2);
137     }
138
139     template<>
140     template<>
141     void testobject::test<3>()
142     {
143         set_test_name("Check multiple filter entries.");
144
145         TEST_SETTINGS_LOCAL settings;
146         settings.addFilter("address"); // Allow everything by default.
147         settings.addFilter("group"); // Allow everything by default.
148         TEST_TARIFFS tariffs;
149         STG::Admin admin(STG::Priv(0xFFFF), {}, {});
150         TEST_STORE_LOCAL store;
151         TEST_AUTH auth;
152         TEST_USERS users;
153         TEST_SERVICES services;
154         STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
155
156         auto & address = user.GetProperties().address;
157         auto & note = user.GetProperties().note;
158         auto & group = user.GetProperties().group;
159
160         address.Set("address", admin, "", store, "");
161         note.Set("note", admin, "", store, "");
162         group.Set("group", admin, "", store, "");
163
164         ensure_equals("entries = 2", store.GetEntries(), 2);
165
166         note.Set("another note", admin, "", store, "");
167
168         ensure_equals("entries = 2", store.GetEntries(), 2);
169
170         address.Set("new address", admin, "", store, "");
171
172         ensure_equals("entries = 3", store.GetEntries(), 3);
173
174         group.Set("administrative group", admin, "", store, "");
175
176         ensure_equals("entries = 4", store.GetEntries(), 4);
177     }
178
179     template<>
180     template<>
181     void testobject::test<4>()
182     {
183         set_test_name("Check empty filter.");
184
185         TEST_SETTINGS_LOCAL settings;
186         TEST_TARIFFS tariffs;
187         STG::Admin admin(STG::Priv(0xFFFF), {}, {});
188         TEST_STORE_LOCAL store;
189         TEST_AUTH auth;
190         TEST_USERS users;
191         TEST_SERVICES services;
192         STG::UserImpl user(&settings, &store, &tariffs, &admin, &users, services);
193
194         auto & address = user.GetProperties().address;
195         auto & note = user.GetProperties().note;
196         auto & group = user.GetProperties().group;
197
198         address.Set("address", admin, "", store, "");
199         note.Set("note", admin, "", store, "");
200         group.Set("group", admin, "", store, "");
201
202         ensure_equals("entries = 0", store.GetEntries(), 0);
203
204         note.Set("another note", admin, "", store, "");
205
206         ensure_equals("entries = 0", store.GetEntries(), 0);
207
208         address.Set("new address", admin, "", store, "");
209
210         ensure_equals("entries = 0", store.GetEntries(), 0);
211
212         group.Set("administrative group", admin, "", store, "");
213
214         ensure_equals("entries = 0", store.GetEntries(), 0);
215     }
216 }