1# --
2# Copyright (C) 2001-2020 OTRS AG, https://otrs.com/
3# --
4# This software comes with ABSOLUTELY NO WARRANTY. For details, see
5# the enclosed file COPYING for license information (GPL). If you
6# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt.
7# --
8
9use strict;
10use warnings;
11use utf8;
12
13use vars (qw($Self));
14
15# get needed objects
16my $MainObject       = $Kernel::OM->Get('Kernel::System::Main');
17my $SystemDataObject = $Kernel::OM->Get('Kernel::System::SystemData');
18
19# get helper object
20$Kernel::OM->ObjectParamAdd(
21    'Kernel::System::UnitTest::Helper' => {
22        RestoreDatabase => 1,
23    },
24);
25my $Helper = $Kernel::OM->Get('Kernel::System::UnitTest::Helper');
26
27# add system data
28my $SystemDataNameRand0 = 'systemdata' . $Helper->GetRandomID();
29
30my $Success = $SystemDataObject->SystemDataAdd(
31    Key    => $SystemDataNameRand0,
32    Value  => $SystemDataNameRand0,
33    UserID => 1,
34);
35
36$Self->True(
37    $Success,
38    "SystemDataAdd() - added '$SystemDataNameRand0'",
39);
40
41# another time, it should fail
42$Success = $SystemDataObject->SystemDataAdd(
43    Key    => $SystemDataNameRand0,
44    Value  => $SystemDataNameRand0,
45    UserID => 1,
46);
47
48$Self->False(
49    $Success,
50    "SystemDataAdd() - can not add duplicate key '$SystemDataNameRand0'",
51);
52
53my $SystemData = $SystemDataObject->SystemDataGet( Key => $SystemDataNameRand0 );
54
55$Self->True(
56    $SystemData eq $SystemDataNameRand0,
57    'SystemDataGet() - value',
58);
59
60my $SystemDataUpdate = $SystemDataObject->SystemDataUpdate(
61    Key    => $SystemDataNameRand0,
62    Value  => 'update' . $SystemDataNameRand0,
63    UserID => 1,
64);
65
66$Self->True(
67    $SystemDataUpdate,
68    'SystemDataUpdate()',
69);
70
71$SystemData = $SystemDataObject->SystemDataGet( Key => $SystemDataNameRand0 );
72
73$Self->Is(
74    $SystemData,
75    'update' . $SystemDataNameRand0,
76    'SystemDataGet() - after update',
77);
78
79$SystemDataUpdate = $SystemDataObject->SystemDataUpdate(
80    Key    => 'NonExisting' . $MainObject->GenerateRandomString(),
81    Value  => 'some value',
82    UserID => 1,
83);
84
85$Self->False(
86    $SystemDataUpdate,
87    'SystemDataUpdate() should not work on nonexisting value',
88);
89
90my $SystemDataDelete = $SystemDataObject->SystemDataDelete(
91    Key    => $SystemDataNameRand0,
92    UserID => 1,
93);
94
95$Self->True(
96    $SystemDataDelete,
97    'SystemDataDelete() - removed key',
98);
99
100$SystemData = $SystemDataObject->SystemDataGet( Key => $SystemDataNameRand0 );
101
102$Self->False(
103    $SystemData,
104    'SystemDataGet() - data is gone after delete',
105);
106
107# test setting value to empty string
108# add system data 1
109my $SystemDataNameRand1 = 'systemdata' . $Helper->GetRandomID();
110
111$Success = $SystemDataObject->SystemDataAdd(
112    Key    => $SystemDataNameRand1,
113    Value  => '',
114    UserID => 1,
115);
116
117$Self->True(
118    $Success,
119    "SystemDataAdd() - added '$SystemDataNameRand1' value empty string",
120);
121
122$SystemData = $SystemDataObject->SystemDataGet( Key => $SystemDataNameRand1 );
123
124$Self->Is(
125    $SystemData,
126    '',
127    'SystemDataGet() - value - empty string',
128);
129
130# set to 0
131$Success = $SystemDataObject->SystemDataUpdate(
132    Key    => $SystemDataNameRand1,
133    Value  => 0,
134    UserID => 1,
135);
136
137$Self->True(
138    $Success,
139    "SystemDataAdd() - added '$SystemDataNameRand1' value empty string",
140);
141
142$SystemData = $SystemDataObject->SystemDataGet( Key => $SystemDataNameRand1 );
143
144$Self->IsDeeply(
145    $SystemData,
146    0,
147    'SystemDataGet() - value - 0',
148);
149
150$SystemDataUpdate = $SystemDataObject->SystemDataUpdate(
151    Key    => $SystemDataNameRand1,
152    Value  => 'update',
153    UserID => 1,
154);
155
156$Self->True(
157    $SystemDataUpdate,
158    'SystemDataUpdate()',
159);
160
161$SystemData = $SystemDataObject->SystemDataGet( Key => $SystemDataNameRand1 );
162
163$Self->Is(
164    $SystemData,
165    'update',
166    'SystemDataGet() - after update',
167);
168
169$SystemDataUpdate = $SystemDataObject->SystemDataUpdate(
170    Key    => $SystemDataNameRand1,
171    Value  => '',
172    UserID => 1,
173);
174
175$Self->True(
176    $SystemDataUpdate,
177    'SystemDataUpdate()',
178);
179
180$SystemData = $SystemDataObject->SystemDataGet( Key => $SystemDataNameRand1 );
181
182$Self->Is(
183    $SystemData,
184    '',
185    'SystemDataGet() - after update empty string',
186);
187
188$SystemDataDelete = $SystemDataObject->SystemDataDelete(
189    Key    => $SystemDataNameRand1,
190    UserID => 1,
191);
192
193$Self->True(
194    $SystemDataDelete,
195    'SystemDataDelete() - removed key',
196);
197
198my $SystemDataGroupRand = 'systemdata' . $Helper->GetRandomID();
199
200my %Storage = (
201    Foo   => 'bar',
202    Bar   => 'baz',
203    Beef  => 'spam',
204    Empty => '',
205);
206
207for my $Key ( sort keys %Storage ) {
208    my $Result = $SystemDataObject->SystemDataAdd(
209        Key    => $SystemDataGroupRand . '::' . $Key,
210        Value  => $Storage{$Key},
211        UserID => 1,
212    );
213    $Self->True(
214        $Result,
215        "SystemDataAdd: added key " . $SystemDataGroupRand . '::' . $Key,
216    );
217}
218
219my %Group = $SystemDataObject->SystemDataGroupGet(
220    Group  => $SystemDataGroupRand,
221    UserID => 1,
222);
223
224for my $Key ( sort keys %Storage ) {
225    $Self->Is(
226        $Group{$Key},
227        $Storage{$Key},
228        "SystemDataGroupGet: test value for '$Key'.",
229    );
230}
231
232$Storage{Bar} = 'drinks';
233$SystemDataObject->SystemDataUpdate(
234    Key    => $SystemDataGroupRand . '::Bar',
235    Value  => $Storage{Bar},
236    UserID => 1,
237);
238
239%Group = $SystemDataObject->SystemDataGroupGet(
240    Group  => $SystemDataGroupRand,
241    UserID => 1,
242);
243
244for my $Key ( sort keys %Storage ) {
245    $Self->Is(
246        $Group{$Key},
247        $Storage{$Key},
248        "SystemDataGroupGet: test value for '$Key'.",
249    );
250}
251
252$SystemDataObject->SystemDataDelete(
253    Key    => $SystemDataGroupRand . '::Beef',
254    UserID => 1,
255);
256
257%Group = $SystemDataObject->SystemDataGroupGet(
258    Group  => $SystemDataGroupRand,
259    UserID => 1,
260);
261
262$Self->False(
263    $Group{Beef},
264    "Key 'Beef' deleted, GroupGet",
265);
266
267$Self->Is(
268    $Group{Foo},
269    'bar',
270    "Key 'Foo' still there, GroupGet",
271);
272
273for my $Key ( sort keys %Group ) {
274    my $Result = $SystemDataObject->SystemDataDelete(
275        Key    => $SystemDataGroupRand . '::' . $Key,
276        UserID => 1,
277    );
278    $Self->True(
279        $Result,
280        "SystemData: deleted key " . $SystemDataGroupRand . '::' . $Key,
281    );
282}
283
284# cleanup is done by RestoreDatabase
285
2861;
287