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