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 15use Kernel::System::VariableCheck qw(:all); 16 17# get needed objects 18my $ConfigObject = $Kernel::OM->Get('Kernel::Config'); 19my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache'); 20my $CustomerUserObject = $Kernel::OM->Get('Kernel::System::CustomerUser'); 21my $DBObject = $Kernel::OM->Get('Kernel::System::DB'); 22 23# get helper object 24$Kernel::OM->ObjectParamAdd( 25 'Kernel::System::UnitTest::Helper' => { 26 RestoreDatabase => 1, 27 }, 28); 29my $Helper = $Kernel::OM->Get('Kernel::System::UnitTest::Helper'); 30 31$ConfigObject->Set( 32 Key => 'CheckEmailAddresses', 33 Value => 0, 34); 35 36my $DatabaseCaseSensitive = $DBObject->{Backend}->{'DB::CaseSensitive'}; 37my $SearchCaseSensitiveDefault = $ConfigObject->{CustomerUser}->{Params}->{SearchCaseSensitive}; 38 39my $UserID = ''; 40for my $Key ( 1 .. 3, 'ä', 'カス', '_', '&' ) { 41 42 # create non existing customer user login 43 my $UserRand; 44 TRY: 45 for my $Try ( 1 .. 20 ) { 46 47 $UserRand = 'unittest-' . $Key . $Helper->GetRandomID(); 48 49 my %UserData = $CustomerUserObject->CustomerUserDataGet( 50 User => $UserRand, 51 ); 52 53 last TRY if !%UserData; 54 55 next TRY if $Try ne 20; 56 57 $Self->True( 58 0, 59 'Find non existing customer user login.', 60 ); 61 } 62 63 $UserID = $UserRand; 64 my $UserID = $CustomerUserObject->CustomerUserAdd( 65 Source => 'CustomerUser', 66 UserFirstname => 'Firstname Test' . $Key, 67 UserLastname => 'Lastname Test' . $Key, 68 UserCustomerID => $UserRand . '-Customer-Id', 69 UserLogin => $UserRand, 70 UserEmail => $UserRand . '-Email@example.com', 71 UserPassword => 'some_pass', 72 ValidID => 1, 73 UserID => 1, 74 ); 75 76 $Self->True( 77 $UserID, 78 "CustomerUserAdd() - $UserID", 79 ); 80 81 my %User = $CustomerUserObject->CustomerUserDataGet( 82 User => $UserID, 83 ); 84 85 $Self->Is( 86 $User{UserFirstname}, 87 "Firstname Test$Key", 88 "CustomerUserGet() - UserFirstname - $Key", 89 ); 90 $Self->Is( 91 $User{UserLastname}, 92 "Lastname Test$Key", 93 "CustomerUserGet() - UserLastname - $Key", 94 ); 95 $Self->Is( 96 $User{UserLogin}, 97 $UserRand, 98 "CustomerUserGet() - UserLogin - $Key", 99 ); 100 $Self->Is( 101 $User{UserEmail}, 102 $UserRand . '-Email@example.com', 103 "CustomerUserGet() - UserEmail - $Key", 104 ); 105 $Self->Is( 106 $User{UserCustomerID}, 107 $UserRand . '-Customer-Id', 108 "CustomerUserGet() - UserCustomerID - $Key", 109 ); 110 $Self->Is( 111 $User{ValidID}, 112 1, 113 "CustomerUserGet() - ValidID - $Key", 114 ); 115 116 my $Update = $CustomerUserObject->CustomerUserUpdate( 117 Source => 'CustomerUser', 118 ID => $UserRand, 119 UserFirstname => 'Firstname Test Update' . $Key, 120 UserLastname => 'Lastname Test Update' . $Key, 121 UserCustomerID => $UserRand . '-Customer-Update-Id', 122 UserLogin => $UserRand, 123 UserEmail => $UserRand . '-Update@example.com', 124 ValidID => 1, 125 UserID => 1, 126 ); 127 $Self->True( 128 $Update, 129 "CustomerUserUpdate$Key() - $UserID", 130 ); 131 132 %User = $CustomerUserObject->CustomerUserDataGet( 133 User => $UserID, 134 ); 135 136 $Self->Is( 137 $User{UserFirstname}, 138 "Firstname Test Update$Key", 139 "CustomerUserGet$Key() - UserFirstname", 140 ); 141 $Self->Is( 142 $User{UserLastname}, 143 "Lastname Test Update$Key", 144 "CustomerUserGet$Key() - UserLastname", 145 ); 146 $Self->Is( 147 $User{UserLogin}, 148 $UserRand, 149 "CustomerUserGet$Key() - UserLogin", 150 ); 151 $Self->Is( 152 $User{UserEmail}, 153 $UserRand . '-Update@example.com', 154 "CustomerUserGet$Key() - UserEmail", 155 ); 156 $Self->Is( 157 $User{UserCustomerID}, 158 $UserRand . '-Customer-Update-Id', 159 "CustomerUserGet$Key() - UserCustomerID", 160 ); 161 $Self->Is( 162 $User{ValidID}, 163 1, 164 "CustomerUserGet$Key() - ValidID", 165 ); 166 167 # lc 168 %User = $CustomerUserObject->CustomerUserDataGet( 169 User => lc($UserID), 170 ); 171 $Self->True( 172 $User{UserLogin}, 173 "CustomerUserGet() - lc() - $UserID", 174 ); 175 176 # uc 177 %User = $CustomerUserObject->CustomerUserDataGet( 178 User => uc($UserID), 179 ); 180 $Self->True( 181 $User{UserLogin}, 182 "CustomerUserGet() - uc() - $UserID", 183 ); 184 185 # check customer ids 186 my @CustomerIDs = $CustomerUserObject->CustomerIDs( 187 User => $UserID, 188 ); 189 $Self->IsDeeply( 190 \@CustomerIDs, 191 [ $UserRand . '-Customer-Update-Id' ], 192 'CustomerIDs() - User', 193 ); 194 195 # search by CustomerID 196 my %List = $CustomerUserObject->CustomerSearch( 197 CustomerID => $UserRand . '-Customer-Update-Id', 198 ValidID => 1, 199 ); 200 $Self->True( 201 $List{$UserID}, 202 "CustomerSearch() - CustomerID=\'$UserRand-Customer-Update-Id\' - $UserID is found", 203 ); 204 205 # search by CustomerIDRaw 206 %List = $CustomerUserObject->CustomerSearch( 207 CustomerIDRaw => $UserRand . '-Customer-Update-Id', 208 ValidID => 1, 209 ); 210 $Self->True( 211 $List{$UserID}, 212 "CustomerSearch() - CustomerIDRaw=\'$UserRand-Customer-Update-Id\' - $UserID is found", 213 ); 214 215 # search by CustomerID with asterisk 216 %List = $CustomerUserObject->CustomerSearch( 217 CustomerID => '*', 218 Limit => 100000, 219 ValidID => 1, 220 ); 221 $Self->True( 222 $List{$UserID}, 223 "CustomerSearch() - CustomerID=\'*\' - $UserID is found", 224 ); 225 226 # search by CustomerIDRaw with asterisk 227 %List = $CustomerUserObject->CustomerSearch( 228 CustomerIDRaw => '*', 229 ValidID => 1, 230 ); 231 $Self->False( 232 $List{$UserID}, 233 "CustomerSearch() - CustomerIDRaw=\'*\' - $UserID is not found", 234 ); 235 236 # search by CustomerID with asterisk 237 %List = $CustomerUserObject->CustomerSearch( 238 CustomerID => $UserRand . '-Customer*', 239 ValidID => 1, 240 ); 241 $Self->True( 242 $List{$UserID}, 243 "CustomerSearch() - CustomerID=\'$UserRand-Customer*\' - $UserID is found", 244 ); 245 246 # search by CustomerIDRaw with asterisk 247 %List = $CustomerUserObject->CustomerSearch( 248 CustomerIDRaw => $UserRand . '-Customer*', 249 ValidID => 1, 250 ); 251 $Self->False( 252 $List{$UserID}, 253 "CustomerSearch() - CustomerIDRaw=\'$UserRand-Customer*\' - $UserID is not found", 254 ); 255 256 # search by CustomerID with % 257 %List = $CustomerUserObject->CustomerSearch( 258 CustomerID => '%', 259 Limit => 100000, 260 ValidID => 1, 261 ); 262 $Self->True( 263 $List{$UserID}, 264 "CustomerSearch() - CustomerID=\'%\' - $UserID is found", 265 ); 266 267 # search by CustomerIDRaw with % 268 %List = $CustomerUserObject->CustomerSearch( 269 CustomerIDRaw => '%', 270 ValidID => 1, 271 ); 272 $Self->False( 273 $List{$UserID}, 274 "CustomerSearch() - CustomerIDRaw=\'%\' - $UserID is not found", 275 ); 276 277 # search by CustomerID with % 278 %List = $CustomerUserObject->CustomerSearch( 279 CustomerID => $UserRand . '-Customer%', 280 ValidID => 1, 281 ); 282 $Self->True( 283 $List{$UserID}, 284 "CustomerSearch() - CustomerID=\'$UserRand-Customer%\' - $UserID is found", 285 ); 286 287 # search by CustomerIDRaw with % 288 %List = $CustomerUserObject->CustomerSearch( 289 CustomerIDRaw => $UserRand . '-Customer%', 290 ValidID => 1, 291 ); 292 $Self->False( 293 $List{$UserID}, 294 "CustomerSearch() - CustomerIDRaw=\'$UserRand-Customer%\' - $UserID is not found", 295 ); 296 297 # START CaseSensitive 298 $ConfigObject->{CustomerUser}->{Params}->{SearchCaseSensitive} = 1; 299 300 $Kernel::OM->ObjectsDiscard( Objects => ['Kernel::System::CustomerUser'] ); 301 $CustomerUserObject = $Kernel::OM->Get('Kernel::System::CustomerUser'); 302 303 $CacheObject->CleanUp(); 304 305 # Customer Search 306 %List = $CustomerUserObject->CustomerSearch( 307 Search => lc( $UserRand . '-Customer-Update-Id' ), 308 ValidID => 1, 309 ); 310 311 if ($DatabaseCaseSensitive) { 312 313 $Self->False( 314 $List{$UserID}, 315 "CustomerSearch() - CustomerID - $UserID (SearchCaseSensitive = 1)", 316 ); 317 } 318 else { 319 $Self->True( 320 $List{$UserID}, 321 "CustomerSearch() - CustomerID - $UserID (SearchCaseSensitive = 1)", 322 ); 323 } 324 325 # CustomerIDList 326 my @List = $CustomerUserObject->CustomerIDList( 327 SearchTerm => lc( $UserRand . '-Customer-Update-Id' ), 328 ValidID => 1, 329 ); 330 331 if ($DatabaseCaseSensitive) { 332 333 $Self->IsNotDeeply( 334 \@List, 335 [ $UserRand . '-Customer-Update-Id' ], 336 "CustomerIDList() - no SearchTerm - $UserID (SearchCaseSensitive = 1)", 337 ); 338 } 339 else { 340 $Self->IsDeeply( 341 \@List, 342 [ $UserRand . '-Customer-Update-Id' ], 343 "CustomerIDList() - no SearchTerm - $UserID (SearchCaseSensitive = 1)", 344 ); 345 } 346 347 $ConfigObject->{CustomerUser}->{Params}->{SearchCaseSensitive} = 0; 348 349 $Kernel::OM->ObjectsDiscard( Objects => ['Kernel::System::CustomerUser'] ); 350 $CustomerUserObject = $Kernel::OM->Get('Kernel::System::CustomerUser'); 351 352 $CacheObject->CleanUp(); 353 354 # Customer Search 355 %List = $CustomerUserObject->CustomerSearch( 356 Search => lc( $UserRand . '-Customer-Update-Id' ), 357 ValidID => 1, 358 ); 359 $Self->True( 360 $List{$UserID}, 361 "CustomerSearch() - CustomerID - $UserID (SearchCaseSensitive = 0)", 362 ); 363 364 # CustomerIDList 365 @List = $CustomerUserObject->CustomerIDList( 366 SearchTerm => lc( $UserRand . '-Customer-Update-Id' ), 367 ValidID => 1, 368 ); 369 370 $Self->IsDeeply( 371 \@List, 372 [ $UserRand . '-Customer-Update-Id' ], 373 "CustomerIDList() - no SearchTerm - $UserID (SearchCaseSensitive = 0)", 374 ); 375 376 $ConfigObject->{CustomerUser}->{Params}->{SearchCaseSensitive} = $SearchCaseSensitiveDefault; 377 378 # END CaseSensitive 379 380 @List = $CustomerUserObject->CustomerIDList( 381 ValidID => 1, 382 ); 383 384 @List = grep { $_ eq $UserRand . '-Customer-Update-Id' } @List; 385 386 $Self->IsDeeply( 387 \@List, 388 [ $UserRand . '-Customer-Update-Id' ], 389 "CustomerIDList() - no SearchTerm - $UserID", 390 ); 391 392 @List = $CustomerUserObject->CustomerIDList( 393 SearchTerm => $UserRand . '-Customer-Update-Id', 394 ValidID => 1, 395 ); 396 397 @List = grep { $_ eq $UserRand . '-Customer-Update-Id' } @List; 398 399 $Self->IsDeeply( 400 \@List, 401 [ $UserRand . '-Customer-Update-Id' ], 402 "CustomerIDList() - with SearchTerm - $UserID", 403 ); 404 405 @List = $CustomerUserObject->CustomerIDList( 406 SearchTerm => 'non_existing', 407 ValidID => 1, 408 ); 409 410 @List = grep { $_ eq $UserRand . '-Customer-Update-Id' } @List; 411 412 $Self->IsDeeply( 413 \@List, 414 [], 415 "CustomerIDList() - wrong SearchTerm - $UserID", 416 ); 417 418 %List = $CustomerUserObject->CustomerSearch( 419 PostMasterSearch => $UserID . '-Update@example.com', 420 ValidID => 1, 421 ); 422 $Self->True( 423 $List{$UserID}, 424 "CustomerSearch() - PostMasterSearch - $UserID", 425 ); 426 %List = $CustomerUserObject->CustomerSearch( 427 PostMasterSearch => lc( $UserID . '-Update@example.com' ), 428 ValidID => 1, 429 ); 430 $Self->True( 431 $List{$UserID}, 432 "CustomerSearch() - PostMasterSearch lc() - $UserID", 433 ); 434 %List = $CustomerUserObject->CustomerSearch( 435 PostMasterSearch => uc( $UserID . '-Update@example.com' ), 436 ValidID => 1, 437 ); 438 $Self->True( 439 $List{$UserID}, 440 "CustomerSearch() - PostMasterSearch uc() - $UserID", 441 ); 442 443 %List = $CustomerUserObject->CustomerSearch( 444 UserLogin => $UserID, 445 ValidID => 1, 446 ); 447 $Self->True( 448 $List{$UserID}, 449 "CustomerSearch() - UserLogin - $UserID", 450 ); 451 %List = $CustomerUserObject->CustomerSearch( 452 UserLogin => lc($UserID), 453 ValidID => 1, 454 ); 455 $Self->True( 456 $List{$UserID}, 457 "CustomerSearch() - UserLogin - lc - $UserID", 458 ); 459 %List = $CustomerUserObject->CustomerSearch( 460 UserLogin => uc($UserID), 461 ValidID => 1, 462 ); 463 $Self->True( 464 $List{$UserID}, 465 "CustomerSearch() - UserLogin - uc - $UserID", 466 ); 467 468 %List = $CustomerUserObject->CustomerSearch( 469 Search => "$UserID", 470 ValidID => 1, 471 ); 472 $Self->True( 473 $List{$UserID}, 474 "CustomerSearch() - Search '\$UserID' - $UserID", 475 ); 476 477 %List = $CustomerUserObject->CustomerSearch( 478 Search => "$UserID+firstname", 479 ValidID => 1, 480 ); 481 $Self->True( 482 $List{$UserID}, 483 "CustomerSearch() - Search '\$UserID+firstname' - $UserID", 484 ); 485 486 %List = $CustomerUserObject->CustomerSearch( 487 Search => "$UserID+!firstname", 488 ValidID => 1, 489 ); 490 $Self->True( 491 !$List{$UserID}, 492 "CustomerSearch() - Search '\$UserID+!firstname' - $UserID", 493 ); 494 495 %List = $CustomerUserObject->CustomerSearch( 496 Search => "$UserID+firstname_with_not_match", 497 ValidID => 1, 498 ); 499 $Self->True( 500 !$List{$UserID}, 501 "CustomerSearch() - Search '\$UserID+firstname_with_not_match' - $UserID", 502 ); 503 504 %List = $CustomerUserObject->CustomerSearch( 505 Search => "$UserID+!firstname_with_not_match", 506 ValidID => 1, 507 ); 508 $Self->True( 509 $List{$UserID}, 510 "CustomerSearch() - Search '\$UserID+!firstname_with_not_match' - $UserID", 511 ); 512 513 %List = $CustomerUserObject->CustomerSearch( 514 Search => "$UserID*", 515 ValidID => 1, 516 ); 517 $Self->True( 518 $List{$UserID}, 519 "CustomerSearch() - Search '\$User*' - $UserID", 520 ); 521 522 %List = $CustomerUserObject->CustomerSearch( 523 Search => "*$UserID", 524 ValidID => 1, 525 ); 526 $Self->True( 527 $List{$UserID}, 528 "CustomerSearch() - Search '*\$User' - $UserID", 529 ); 530 531 %List = $CustomerUserObject->CustomerSearch( 532 Search => "*$UserID*", 533 ValidID => 1, 534 ); 535 $Self->True( 536 $List{$UserID}, 537 "CustomerSearch() - Search '*\$User*' - $UserID", 538 ); 539 540 # lc() 541 %List = $CustomerUserObject->CustomerSearch( 542 Search => lc("$UserID"), 543 ValidID => 1, 544 ); 545 $Self->True( 546 $List{$UserID}, 547 "CustomerSearch() - Search lc('') - $UserID", 548 ); 549 550 %List = $CustomerUserObject->CustomerSearch( 551 Search => lc("$UserID*"), 552 ValidID => 1, 553 ); 554 $Self->True( 555 $List{$UserID}, 556 "CustomerSearch() - Search lc('\$User*') - $UserID", 557 ); 558 559 %List = $CustomerUserObject->CustomerSearch( 560 Search => lc("*$UserID"), 561 ValidID => 1, 562 ); 563 $Self->True( 564 $List{$UserID}, 565 "CustomerSearch() - Search lc('*\$User') - $UserID", 566 ); 567 568 %List = $CustomerUserObject->CustomerSearch( 569 Search => lc("*$UserID*"), 570 ValidID => 1, 571 ); 572 $Self->True( 573 $List{$UserID}, 574 "CustomerSearch() - Search lc('*\$User*') - $UserID", 575 ); 576 577 # uc() 578 %List = $CustomerUserObject->CustomerSearch( 579 Search => uc("$UserID"), 580 ValidID => 1, 581 ); 582 $Self->True( 583 $List{$UserID}, 584 "CustomerSearch() - Search uc('') - $UserID", 585 ); 586 587 %List = $CustomerUserObject->CustomerSearch( 588 Search => uc("$UserID*"), 589 ValidID => 1, 590 ); 591 $Self->True( 592 $List{$UserID}, 593 "CustomerSearch() - Search uc('\$User*') - $UserID", 594 ); 595 596 %List = $CustomerUserObject->CustomerSearch( 597 Search => uc("*$UserID"), 598 ValidID => 1, 599 ); 600 $Self->True( 601 $List{$UserID}, 602 "CustomerSearch() - Search uc('*\$User') - $UserID", 603 ); 604 605 %List = $CustomerUserObject->CustomerSearch( 606 Search => uc("*$UserID*"), 607 ValidID => 1, 608 ); 609 $Self->True( 610 $List{$UserID}, 611 "CustomerSearch() - Search uc('*\$User*') - $UserID", 612 ); 613 614 %List = $CustomerUserObject->CustomerSearch( 615 Search => uc("*$UserID*"), 616 ValidID => 1, 617 ); 618 $Self->True( 619 $List{$UserID}, 620 "CustomerSearch() - Search uc('*\$User*') - $UserID", 621 ); 622 623 # check password support 624 for my $Config (qw( plain crypt apr1 md5 sha1 sha2 bcrypt )) { 625 626 $ConfigObject->Set( 627 Key => 'Customer::AuthModule::DB::CryptType', 628 Value => $Config, 629 ); 630 631 $Kernel::OM->ObjectsDiscard( Objects => ['Kernel::System::CustomerAuth'] ); 632 my $CustomerAuth = $Kernel::OM->Get('Kernel::System::CustomerAuth'); 633 634 for my $Password (qw(some_pass someカス someäöü)) { 635 636 my $Set = $CustomerUserObject->SetPassword( 637 UserLogin => $UserID, 638 PW => $Password, 639 ); 640 641 $Self->True( 642 $Set, 643 "SetPassword() - $Config - $UserID - $Password", 644 ); 645 646 my $Ok = $CustomerAuth->Auth( 647 User => $UserID, 648 Pw => $Password 649 ); 650 $Self->True( 651 $Ok, 652 "Auth() - $Config - $UserID - $Password", 653 ); 654 } 655 } 656} 657 658# check token support 659my $Token = $CustomerUserObject->TokenGenerate( 660 UserID => $UserID, 661); 662$Self->True( 663 $Token, 664 "TokenGenerate() - $Token", 665); 666 667my $TokenValid = $CustomerUserObject->TokenCheck( 668 Token => $Token, 669 UserID => $UserID, 670); 671 672$Self->True( 673 $TokenValid, 674 "TokenCheck() - $Token", 675); 676 677$TokenValid = $CustomerUserObject->TokenCheck( 678 Token => $Token, 679 UserID => $UserID, 680); 681 682$Self->True( 683 !$TokenValid, 684 "TokenCheck() - $Token", 685); 686 687$TokenValid = $CustomerUserObject->TokenCheck( 688 Token => $Token . '123', 689 UserID => $UserID, 690); 691 692$Self->True( 693 !$TokenValid, 694 "TokenCheck() - $Token" . "123", 695); 696 697# testing preferences 698 699my $SetPreferences = $CustomerUserObject->SetPreferences( 700 Key => 'UserLanguage', 701 Value => 'fr', 702 UserID => $UserID, 703); 704 705$Self->True( 706 $SetPreferences, 707 "SetPreferences - $UserID", 708); 709 710my %UserPreferences = $CustomerUserObject->GetPreferences( 711 UserID => $UserID, 712); 713 714$Self->True( 715 %UserPreferences || '', 716 "GetPreferences - $UserID", 717); 718 719$Self->Is( 720 $UserPreferences{UserLanguage}, 721 "fr", 722 "GetPreferences $UserID - fr", 723); 724 725my %UserList = $CustomerUserObject->SearchPreferences( 726 Key => 'UserLanguage', 727 Value => 'fr', 728); 729 730$Self->True( 731 %UserList || '', 732 "SearchPreferences - $UserID", 733); 734 735$Self->Is( 736 $UserList{$UserID}, 737 'fr', 738 "SearchPreferences() - $UserID", 739); 740 741%UserList = $CustomerUserObject->SearchPreferences( 742 Key => 'UserLanguage', 743 Value => 'de', 744); 745 746$Self->False( 747 $UserList{$UserID}, 748 "SearchPreferences() - $UserID", 749); 750 751# search for any value 752%UserList = $CustomerUserObject->SearchPreferences( 753 Key => 'UserLanguage', 754); 755 756$Self->True( 757 %UserList || '', 758 "SearchPreferences - $UserID", 759); 760 761$Self->Is( 762 $UserList{$UserID}, 763 'fr', 764 "SearchPreferences() - $UserID", 765); 766 767#update existing prefs 768my $UpdatePreferences = $CustomerUserObject->SetPreferences( 769 Key => 'UserLanguage', 770 Value => 'da', 771 UserID => $UserID, 772); 773 774$Self->True( 775 $UpdatePreferences, 776 "UpdatePreferences - $UserID", 777); 778 779%UserPreferences = $CustomerUserObject->GetPreferences( 780 UserID => $UserID, 781); 782 783$Self->True( 784 %UserPreferences || '', 785 "GetPreferences - $UserID", 786); 787 788$Self->Is( 789 $UserPreferences{UserLanguage}, 790 "da", 791 "UpdatePreferences $UserID - da", 792); 793 794#update customer user 795my $Update = $CustomerUserObject->CustomerUserUpdate( 796 Source => 'CustomerUser', 797 UserLogin => 'NewLogin' . $UserID, 798 ValidID => 1, 799 UserFirstname => 'Firstname Update' . $UserID, 800 UserLastname => 'Lastname Update' . $UserID, 801 UserEmail => $UserID . 'new@example.com', 802 UserCustomerID => $UserID . 'new@example.com', 803 ID => $UserID, 804 UserID => 1, 805); 806$Self->True( 807 $Update, 808 "CustomerUserUpdate - $UserID", 809); 810 811%UserPreferences = $CustomerUserObject->GetPreferences( 812 UserID => 'NewLogin' . $UserID, 813); 814 815$Self->True( 816 %UserPreferences || '', 817 "GetPreferences for updated user - Updated NewLogin$UserID", 818); 819 820my $Name = $CustomerUserObject->CustomerName( 821 UserLogin => 'NewLogin' . $UserID, 822); 823 824$Self->True( 825 'Firstname Update' . $UserID . ' ' . 'Lastname Update' . $UserID, 826 "CustomerName", 827); 828 829$Self->Is( 830 $UserPreferences{UserLanguage}, 831 "da", 832 "GetPreferences for updated user $UserID - da", 833); 834 835my %List = $CustomerUserObject->CustomerSourceList(); 836 837$Self->Is( 838 scalar( keys %List ), 839 1, 840 "CustomerSourceList - found 1 source", 841); 842 843%List = $CustomerUserObject->CustomerSourceList( 844 ReadOnly => 1, 845); 846 847$Self->Is( 848 scalar( keys %List ), 849 0, 850 "CustomerSourceList - found 0 readonly sources", 851); 852 853%List = $CustomerUserObject->CustomerSourceList( 854 ReadOnly => 0, 855); 856 857$Self->Is( 858 scalar( keys %List ), 859 1, 860 "CustomerSourceList - found 1 writable sources", 861); 862 863# Use default CustomerUserListFields config and search for customer. 864my $UserLogin = "NewLogin$UserID"; 865my $FirstName = "Firstname Update$UserID"; 866my $LastName = "Lastname Update$UserID"; 867my $CustomerID = "${UserID}new\@example.com"; 868my $CustomerEmail = "<${UserID}new\@example.com>"; 869my %CustomerUser = $CustomerUserObject->CustomerSearch( 870 UserLogin => $UserLogin, 871 Valid => 1, 872); 873 874# Verified search result. 875$Self->Is( 876 $CustomerUser{$UserLogin}, 877 "\"$FirstName $LastName\" $CustomerEmail", 878 "Default 'CustomerUserListFields' config is" 879); 880 881# Change CustomerUserListFields config and search for customer again. 882# See bug#13394 (https://bugs.otrs.org/show_bug.cgi?id=13394). 883my $CustomerUser = $ConfigObject->Get('CustomerUser'); 884$CustomerUser->{CustomerUserListFields} = [ 'login', 'first_name', 'last_name', 'customer_id', 'email' ]; 885$ConfigObject->Set( 886 Key => 'CustomerUser', 887 Value => $CustomerUser, 888); 889 890$CacheObject->CleanUp(); 891 892%CustomerUser = $CustomerUserObject->CustomerSearch( 893 UserLogin => $UserLogin, 894 Valid => 1, 895); 896 897# Verify search result. 898$Self->Is( 899 $CustomerUser{$UserLogin}, 900 "\"$UserLogin $FirstName $LastName $CustomerID\" $CustomerEmail", 901 "Changed 'CustomerUserListFields' config is" 902); 903 904# cleanup is done by RestoreDatabase 905 9061; 907