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