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::GenericInterface::Debugger;
16use Kernel::GenericInterface::Operation;
17
18# get helper object
19# skip SSL certificate verification
20$Kernel::OM->ObjectParamAdd(
21    'Kernel::System::UnitTest::Helper' => {
22        SkipSSLVerify => 1,
23    },
24);
25my $Helper = $Kernel::OM->Get('Kernel::System::UnitTest::Helper');
26
27my $DebuggerObject = Kernel::GenericInterface::Debugger->new(
28    DebuggerConfig => {
29        DebugThreshold => 'debug',
30        TestMode       => 1,
31    },
32    WebserviceID      => 1,
33    CommunicationType => 'Provider',
34);
35
36# create a operation instance
37my $OperationObject = Kernel::GenericInterface::Operation->new(
38    DebuggerObject => $DebuggerObject,
39    WebserviceID   => 1,
40    Operation      => 'Test',
41    OperationType  => 'Test::Test',
42);
43$Self->Is(
44    ref $OperationObject,
45    'Kernel::GenericInterface::Operation',
46    'OperationObject was correctly instantiated',
47);
48
49my @OperationTests = (
50    {
51        Data => {
52            one   => 'one',
53            two   => 'two',
54            three => 'three',
55            four  => 'four',
56            five  => 'five',
57        },
58        ResultData => {
59            one   => 'one',
60            two   => 'two',
61            three => 'three',
62            four  => 'four',
63            five  => 'five',
64        },
65        ResultSuccess => 1,
66    },
67    {
68        Data          => [],
69        ResultData    => undef,
70        ResultSuccess => 0,
71    },
72    {
73        Data          => undef,
74        ResultData    => undef,
75        ResultSuccess => 1,
76    },
77    {
78        Data          => {},
79        ResultData    => {},
80        ResultSuccess => 1,
81    },
82    {
83        Data => {
84            TestError => 123,
85            ErrorData => {
86                Value1 => 1,
87                Value2 => 2,
88                Value3 => 3,
89            },
90        },
91        ResultData => {
92            ErrorData => {
93                Value1 => 1,
94                Value2 => 2,
95                Value3 => 3,
96            },
97        },
98        ResultErrorMessage => 'Error message for error code: 123',
99        ResultSuccess      => 0,
100    },
101);
102
103my $Counter;
104for my $Test (@OperationTests) {
105    $Counter++;
106    my $OperationResult = $OperationObject->Run(
107        Data => $Test->{Data},
108    );
109
110    # check if function return correct status
111    $Self->Is(
112        $OperationResult->{Success},
113        $Test->{ResultSuccess},
114        'Test data set ' . $Counter . ' Test: Success.',
115    );
116
117    # check if function return correct data
118    $Self->IsDeeply(
119        $OperationResult->{Data},
120        $Test->{ResultData},
121        'Test data set ' . $Counter . ' Test: Data Structure.',
122    );
123
124    if ( !$OperationResult->{Success} && $Test->{ResultErrorMessage} ) {
125        $Self->Is(
126            $OperationResult->{ErrorMessage},
127            $Test->{ResultErrorMessage},
128            'Test data set ' . $Counter . ' Test: Error Message.',
129        );
130    }
131}
132
1331;
134