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 FormDraft object. 16my $FormDraftObject = $Kernel::OM->Get('Kernel::System::FormDraft'); 17 18# Get Helper object. 19$Kernel::OM->ObjectParamAdd( 20 'Kernel::System::UnitTest::Helper' => { 21 RestoreDatabase => 1, 22 }, 23); 24my $Helper = $Kernel::OM->Get('Kernel::System::UnitTest::Helper'); 25 26# Create test Ticket. 27my $TicketID = $Kernel::OM->Get('Kernel::System::Ticket')->TicketCreate( 28 Title => 'Some Ticket Title', 29 Queue => 'Raw', 30 Lock => 'unlock', 31 Priority => '3 normal', 32 State => 'closed successful', 33 CustomerNo => '123465', 34 CustomerUser => 'unittest@otrs.com', 35 OwnerID => 1, 36 UserID => 1, 37); 38$Self->True( 39 $TicketID, 40 "TicketCreate() $TicketID", 41); 42 43# Create test scenarions for FormDraftAdd(). 44my @Tests = ( 45 { 46 Name => 'No FormData - Add Fail', 47 FormData => undef, 48 ObjectType => 'Ticket', 49 ObjectID => $TicketID, 50 Action => 'AgentTicketNote', 51 Title => 'UnitTest FormDraft', 52 UserID => 1, 53 Success => 0, 54 }, 55 { 56 Name => 'No ObjectType - Add Fail', 57 FormData => { 58 Subject => 'UnitTest Subject', 59 Body => 'UnitTest Body', 60 }, 61 ObjectType => undef, 62 ObjectID => $TicketID, 63 Action => 'AgentTicketNote', 64 Title => 'UnitTest FormDraft', 65 UserID => 1, 66 Success => 0, 67 }, 68 { 69 Name => 'No ObjectID - Add Fail', 70 FormData => { 71 Subject => 'UnitTest Subject', 72 Body => 'UnitTest Body', 73 }, 74 ObjectType => 'Ticket', 75 ObjectID => undef, 76 Action => 'AgentTicketNote', 77 Title => 'UnitTest FormDraft', 78 UserID => 1, 79 Success => 0, 80 }, 81 { 82 Name => 'No Action - Add Fail', 83 FormData => { 84 Subject => 'UnitTest Subject', 85 Body => 'UnitTest Body', 86 }, 87 ObjectType => 'Ticket', 88 ObjectID => $TicketID, 89 Action => undef, 90 Title => 'UnitTest FormDraft', 91 UserID => 1, 92 Success => 0, 93 }, 94 { 95 Name => 'No UserID - Add Fail', 96 FormData => { 97 Subject => 'UnitTest Subject', 98 Body => 'UnitTest Body', 99 }, 100 ObjectType => 'Ticket', 101 ObjectID => $TicketID, 102 Action => 'AgentTicketNote', 103 Title => 'UnitTest FormDraft', 104 UserID => undef, 105 Success => 0, 106 }, 107 { 108 Name => 'All Parameters OK with Attachment - Add Success', 109 FormData => { 110 Subject => 'UnitTest Subject', 111 Body => 'UnitTest Body', 112 }, 113 FileData => [ 114 { 115 'Content' => 'Dear customer\n\nthank you!', 116 'ContentType' => 'text/plain', 117 'ContentID' => undef, 118 'Filename' => 'thankyou.txt', 119 'Filesize' => 25, 120 'FileID' => 1, 121 'Disposition' => 'attachment', 122 }, 123 ], 124 ObjectType => 'Ticket', 125 ObjectID => $TicketID, 126 Action => 'AgentTicketNote', 127 Title => 'UnitTest FormDraft', 128 UserID => 1, 129 Success => 1, 130 }, 131); 132 133# Test FormDraftAdd and FormDraftListGet functions. 134my $FormDraftID; 135for my $Test (@Tests) { 136 137 # Create FormDraft. 138 my $FormDraftAdd = $FormDraftObject->FormDraftAdd( 139 FormData => $Test->{FormData}, 140 FileData => $Test->{FileData}, 141 ObjectType => $Test->{ObjectType}, 142 ObjectID => $Test->{ObjectID}, 143 Action => $Test->{Action}, 144 Title => $Test->{Title}, 145 UserID => $Test->{UserID}, 146 ); 147 148 if ( !$Test->{Success} ) { 149 $Self->False( 150 $FormDraftAdd, 151 "FormDraftAdd() $Test->{Name}", 152 ); 153 } 154 else { 155 $Self->True( 156 $FormDraftAdd, 157 "FormDraftAdd() $Test->{Name}", 158 ); 159 160 # Get all FormDrafts for test Ticket, expecting one result. 161 my $FormDraftList = $FormDraftObject->FormDraftListGet( 162 ObjectType => 'Ticket', 163 ObjectID => $Test->{ObjectID}, 164 Action => 'AgentTicketNote', 165 UserID => $Test->{UserID}, 166 ); 167 $Self->Is( 168 scalar @{$FormDraftList}, 169 1, 170 "FormDraftListGet() success" 171 ); 172 173 # Get created FormDraft ID. 174 $FormDraftID = $FormDraftList->[0]->{FormDraftID}; 175 176 # Test FormDraftGet() data with content. 177 my $FormDraft = $FormDraftObject->FormDraftGet( 178 FormDraftID => $FormDraftID, 179 GetContent => 1, 180 UserID => $Test->{UserID}, 181 ); 182 183 # Verify value from FormDraftGet(). 184 for my $FormDraftGetParam (qw(FormData FileData ObjectID ObjectType Title Action)) { 185 $Self->IsDeeply( 186 $FormDraft->{$FormDraftGetParam}, 187 $Test->{$FormDraftGetParam}, 188 "FormDraftGet() param $FormDraftGetParam" 189 ); 190 } 191 192 # Test FormDraftGet() without content. 193 $FormDraft = $FormDraftObject->FormDraftGet( 194 FormDraftID => $FormDraftID, 195 GetContent => 0, 196 UserID => $Test->{UserID}, 197 ); 198 $Self->Is( 199 $FormDraft->{FileData}, 200 undef, 201 'FormDraftGet() wthout content FileData' 202 ); 203 } 204} 205 206# Create test scenarios for FormDraftUpdate(). 207@Tests = ( 208 { 209 Name => 'No FormData - Update Fail', 210 FormData => undef, 211 ObjectType => 'Ticket', 212 ObjectID => $TicketID, 213 Action => 'AgentTicketNote', 214 Title => 'UnitTest FormDraft - Update', 215 FormDraftID => $FormDraftID, 216 UserID => 1, 217 Success => 0, 218 }, 219 { 220 Name => 'No ObjectType - Update Fail', 221 FormData => { 222 Subject => 'UnitTest Subject - Update', 223 Body => 'UnitTest Body - Update', 224 }, 225 ObjectType => undef, 226 ObjectID => $TicketID, 227 Action => 'AgentTicketNote', 228 Title => 'UnitTest FormDraft - Update', 229 FormDraftID => $FormDraftID, 230 UserID => 1, 231 Success => 0, 232 }, 233 { 234 Name => 'No ObjectID - Update Fail', 235 FormData => { 236 Subject => 'UnitTest Subject - Update', 237 Body => 'UnitTest Body - Update', 238 }, 239 ObjectType => 'Ticket', 240 ObjectID => undef, 241 Action => 'AgentTicketNote', 242 Title => 'UnitTest FormDraft - Update', 243 FormDraftID => $FormDraftID, 244 UserID => 1, 245 Success => 0, 246 }, 247 { 248 Name => 'No Action - Update Fail', 249 FormData => { 250 Subject => 'UnitTest Subject - Update', 251 Body => 'UnitTest Body - Update', 252 }, 253 ObjectType => 'Ticket', 254 ObjectID => $TicketID, 255 Action => undef, 256 Title => 'UnitTest FormDraft - Update', 257 FormDraftID => $FormDraftID, 258 UserID => 1, 259 Success => 0, 260 }, 261 { 262 Name => 'No UserID - Update Fail', 263 FormData => { 264 Subject => 'UnitTest Subject - Update', 265 Body => 'UnitTest Body - Update', 266 }, 267 ObjectType => 'Ticket', 268 ObjectID => $TicketID, 269 Action => 'AgentTicketNote', 270 Title => 'UnitTest FormDraft - Update', 271 FormDraftID => $FormDraftID, 272 UserID => undef, 273 Success => 0, 274 }, 275 { 276 Name => 'No FormDraftID - Update Fail', 277 FormData => { 278 Subject => 'UnitTest Subject - Update', 279 Body => 'UnitTest Body - Update', 280 }, 281 ObjectType => 'Ticket', 282 ObjectID => $TicketID, 283 Action => 'AgentTicketNote', 284 Title => 'UnitTest FormDraft - Update', 285 FormDraftID => undef, 286 UserID => 1, 287 Success => 0, 288 }, 289 { 290 Name => 'Different ObjectType - Update Fail', 291 FormData => { 292 Subject => 'UnitTest Subject - Update', 293 Body => 'UnitTest Body - Update', 294 }, 295 ObjectType => 'Article', 296 ObjectID => $TicketID, 297 Action => 'AgentTicketNote', 298 Title => 'UnitTest FormDraft - Update', 299 FormDraftID => $FormDraftID, 300 UserID => 1, 301 Success => 0, 302 }, 303 { 304 Name => 'Different ObjectID - Update Fail', 305 FormData => { 306 Subject => 'UnitTest Subject - Update', 307 Body => 'UnitTest Body - Update', 308 }, 309 ObjectType => 'Ticket', 310 ObjectID => $TicketID + 1, 311 Action => 'AgentTicketNote', 312 Title => 'UnitTest FormDraft - Update', 313 FormDraftID => $FormDraftID, 314 UserID => 1, 315 Success => 0, 316 }, 317 { 318 Name => 'Different Action - Update Fail', 319 FormData => { 320 Subject => 'UnitTest Subject - Update', 321 Body => 'UnitTest Body - Update', 322 }, 323 ObjectType => 'Ticket', 324 ObjectID => $TicketID, 325 Action => 'AgentTicketPriority', 326 Title => 'UnitTest FormDraft - Update', 327 FormDraftID => $FormDraftID, 328 UserID => 1, 329 Success => 0, 330 }, 331 { 332 Name => 'All Parameters OK - Update Success', 333 FormData => { 334 Subject => 'UnitTest Subject - Update', 335 Body => 'UnitTest Body - Update', 336 }, 337 ObjectType => 'Ticket', 338 ObjectID => $TicketID, 339 Action => 'AgentTicketNote', 340 Title => 'UnitTest FormDraft - Update', 341 FormDraftID => $FormDraftID, 342 UserID => 1, 343 Success => 1, 344 }, 345 { 346 Name => 'All Parameters OK - Update Success - utf8 characters in title', 347 FormData => { 348 Subject => 'UnitTest Subject - Update - шђчћж', 349 Body => 'UnitTest Body - Update - шђчћж', 350 }, 351 ObjectType => 'Ticket', 352 ObjectID => $TicketID, 353 Action => 'AgentTicketNote', 354 Title => 'UnitTest FormDraft - Update - utf8 characters - шђчћж', 355 FormDraftID => $FormDraftID, 356 UserID => 1, 357 Success => 1, 358 }, 359); 360 361# Test FormDraftUpdate(). 362for my $Test (@Tests) { 363 364 # Update FormDraft. 365 my $FormDraftUpdate = $FormDraftObject->FormDraftUpdate( 366 FormData => $Test->{FormData}, 367 ObjectType => $Test->{ObjectType}, 368 ObjectID => $Test->{ObjectID}, 369 Action => $Test->{Action}, 370 Title => $Test->{Title}, 371 FormDraftID => $Test->{FormDraftID}, 372 UserID => $Test->{UserID}, 373 ); 374 375 if ( !$Test->{Success} ) { 376 $Self->False( 377 $FormDraftUpdate, 378 "FormDraftUpdate() $Test->{Name}", 379 ); 380 } 381 else { 382 $Self->True( 383 $FormDraftUpdate, 384 "FormDraftUpdate() $Test->{Name}", 385 ); 386 387 # Get updated FormDraft data and check values. 388 my $UpdatedFormDraft = $FormDraftObject->FormDraftGet( 389 FormDraftID => $FormDraftID, 390 GetContent => 1, 391 UserID => $Test->{UserID}, 392 ); 393 $Self->Is( 394 $UpdatedFormDraft->{FormData}->{Subject}, 395 $Test->{FormData}->{Subject}, 396 "FormDraftUpdate() updated param FormData - Subject" 397 ); 398 $Self->Is( 399 $UpdatedFormDraft->{FormData}->{Body}, 400 $Test->{FormData}->{Body}, 401 "FormDraftUpdate() updated param FormData - Body" 402 ); 403 $Self->Is( 404 $UpdatedFormDraft->{Title}, 405 $Test->{Title}, 406 "FormDraftUpdate() updated param Title" 407 ); 408 } 409} 410 411# Test FormDraftDelete(). 412my $FormDraftDelete = $FormDraftObject->FormDraftDelete( 413 FormDraftID => $FormDraftID, 414 UserID => 1, 415); 416$Self->True( 417 $FormDraftDelete, 418 'FormDraftDelete() success' 419); 420 421# Sanity check. 422my $FormDraft = $FormDraftObject->FormDraftGet( 423 FormDraftID => $FormDraftID, 424 GetContent => 1, 425 UserID => 1, 426); 427$Self->Is( 428 $FormDraft->{Title}, 429 undef, 430 'FormDraftDelete() check Title' 431); 432 433# Cleanup is done by RestoreDatabase. 434 4351; 436