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