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 $GroupObject = $Kernel::OM->Get('Kernel::System::Group');
17
18# get helper object
19$Kernel::OM->ObjectParamAdd(
20    'Kernel::System::UnitTest::Helper' => {
21        RestoreDatabase => 1,
22    },
23);
24my $HelperObject = $Kernel::OM->Get('Kernel::System::UnitTest::Helper');
25
26#
27# Group tests
28#
29my $GroupNameRandomPartBase = $Kernel::OM->Create('Kernel::System::DateTime')->ToEpoch();
30my %GroupIDByGroupName      = (
31    'test-group-' . $GroupNameRandomPartBase . '-1' => undef,
32    'test-group-' . $GroupNameRandomPartBase . '-2' => undef,
33    'test-group-' . $GroupNameRandomPartBase . '-3' => undef,
34);
35
36# try to add groups
37for my $GroupName ( sort keys %GroupIDByGroupName ) {
38    my $GroupID = $GroupObject->GroupAdd(
39        Name    => $GroupName,
40        ValidID => 1,
41        UserID  => 1,
42    );
43
44    $Self->True(
45        $GroupID,
46        'GroupAdd() for new group ' . $GroupName,
47    );
48
49    if ($GroupID) {
50        $GroupIDByGroupName{$GroupName} = $GroupID;
51    }
52}
53
54# try to add already added groups
55for my $GroupName ( sort keys %GroupIDByGroupName ) {
56    my $GroupID = $GroupObject->GroupAdd(
57        Name    => $GroupName,
58        ValidID => 1,
59        UserID  => 1,
60    );
61
62    $Self->False(
63        $GroupID,
64        'GroupAdd() for already existing group ' . $GroupName,
65    );
66}
67
68# try to fetch data of existing groups
69for my $GroupName ( sort keys %GroupIDByGroupName ) {
70    my $GroupID = $GroupIDByGroupName{$GroupName};
71    my %Group   = $GroupObject->GroupGet( ID => $GroupID );
72
73    $Self->Is(
74        $Group{Name},
75        $GroupName,
76        'GroupGet() for group ' . $GroupName,
77    );
78}
79
80# look up existing groups
81for my $GroupName ( sort keys %GroupIDByGroupName ) {
82    my $GroupID = $GroupIDByGroupName{$GroupName};
83
84    my $FetchedGroupID = $GroupObject->GroupLookup( Group => $GroupName );
85    $Self->Is(
86        $FetchedGroupID,
87        $GroupID,
88        'GroupLookup() for group name ' . $GroupName,
89    );
90
91    my $FetchedGroupName = $GroupObject->GroupLookup( GroupID => $GroupID );
92    $Self->Is(
93        $FetchedGroupName,
94        $GroupName,
95        'GroupLookup() for group ID ' . $GroupID,
96    );
97}
98
99# list groups
100my %Groups = $GroupObject->GroupList();
101for my $GroupName ( sort keys %GroupIDByGroupName ) {
102    my $GroupID = $GroupIDByGroupName{$GroupName};
103
104    $Self->True(
105        exists $Groups{$GroupID} && $Groups{$GroupID} eq $GroupName,
106        'GroupList() contains the group ' . $GroupName . ' with ID ' . $GroupID,
107    );
108}
109
110# group data list
111my %GroupDataList = $GroupObject->GroupDataList();
112for my $GroupName ( sort keys %GroupIDByGroupName ) {
113    my $GroupID = $GroupIDByGroupName{$GroupName};
114
115    $Self->True(
116        exists $GroupDataList{$GroupID} && $GroupDataList{$GroupID}->{Name} eq $GroupName,
117        'GroupDataList() contains the group ' . $GroupName . ' with ID ' . $GroupID,
118    );
119}
120
121# change name of a single group
122my $GroupNameToChange = 'test-group-' . $GroupNameRandomPartBase . '-1';
123my $ChangedGroupName  = $GroupNameToChange . '-changed';
124my $GroupIDToChange   = $GroupIDByGroupName{$GroupNameToChange};
125
126my $GroupUpdateResult = $GroupObject->GroupUpdate(
127    ID      => $GroupIDToChange,
128    Name    => $ChangedGroupName,
129    ValidID => 1,
130    UserID  => 1,
131);
132
133$Self->True(
134    $GroupUpdateResult,
135    'GroupUpdate() for changing name of group ' . $GroupNameToChange . ' to ' . $ChangedGroupName,
136);
137
138$GroupIDByGroupName{$ChangedGroupName} = $GroupIDToChange;
139delete $GroupIDByGroupName{$GroupNameToChange};
140
141# try to add group with previous name
142my $GroupID = $GroupObject->GroupAdd(
143    Name    => $GroupNameToChange,
144    ValidID => 1,
145    UserID  => 1,
146);
147
148$Self->True(
149    $GroupID,
150    'GroupAdd() for new group ' . $GroupNameToChange,
151);
152
153if ($GroupID) {
154    $GroupIDByGroupName{$GroupNameToChange} = $GroupID;
155}
156
157# try to add group with changed name
158$GroupID = $GroupObject->GroupAdd(
159    Name    => $ChangedGroupName,
160    ValidID => 1,
161    UserID  => 1,
162);
163
164$Self->False(
165    $GroupID,
166    'GroupAdd() for new group ' . $ChangedGroupName,
167);
168
169# set created groups to invalid
170GROUPNAME:
171for my $GroupName ( sort keys %GroupIDByGroupName ) {
172    next GROUPNAME if !$GroupIDByGroupName{$GroupName};
173
174    my $GroupUpdate = $GroupObject->GroupUpdate(
175        ID      => $GroupIDByGroupName{$GroupName},
176        Name    => $GroupName,
177        ValidID => 2,
178        UserID  => 1,
179    );
180
181    $Self->True(
182        $GroupUpdate,
183        'GroupUpdate() to set group ' . $GroupName . ' to invalid',
184    );
185}
186
187# list valid groups
188%Groups = $GroupObject->GroupList( Valid => 1 );
189for my $GroupName ( sort keys %GroupIDByGroupName ) {
190    my $GroupID = $GroupIDByGroupName{$GroupName};
191
192    $Self->False(
193        exists $Groups{$GroupID},
194        'GroupList() does not contain the group ' . $GroupName . ' with ID ' . $GroupID,
195    );
196}
197
198# list all groups
199%Groups = $GroupObject->GroupList( Valid => 0 );
200for my $GroupName ( sort keys %GroupIDByGroupName ) {
201    my $GroupID = $GroupIDByGroupName{$GroupName};
202
203    $Self->True(
204        exists $Groups{$GroupID} && $Groups{$GroupID} eq $GroupName,
205        'GroupList() contains the group ' . $GroupName . ' with ID ' . $GroupID,
206    );
207}
208
209# Cleanup is done by RestoreDatabase.
210
2111;
212