Webservice#

NAME#

Kernel::System::UnitTest::Webservice - web service lib

SYNOPSIS#

All web service functions

PUBLIC INTERFACE#

new()#

create an object

use Kernel::System::ObjectManager;
local $Kernel::OM = Kernel::System::ObjectManager->new();
my $UnitTestWebserviceObject = $Kernel::OM->Get('Kernel::System::UnitTest::Webservice');

Process()#

Simulates an incoming web service call to test operations and the mapping.

my $Response = $UnitTestWebserviceObject->Process(
    UnitTestObject => $Self,
    Webservice     => 'Name123', # or
    WebserviceID   => 123,
    Operation      => 'DesiredOperation',
    Payload        => {
        # ...
    },
    Response => {               # optional, you can validate the response manually in the unit test via $Self->IsDeeply()
        Success      => 1,
        ErrorMessage => '',
        Data         => {
           # ...
        },
    }
);

my $Response = {
    Success      => 1,
    ErrorMessage => '',
    Data         => {
        # ...
    },
};

Mock()#

Mocks all outgoing requests to a given mapping.

my $Result = $UnitTestWebserviceObject->Mock(
    InvokerName123 => [
        {
            Data => {
                OutgoingData => 'Value'
            },
            Result => {
                Success      => 1,
                ErrorMessage => '',
                Data         => {
                    YAY => 'so true',
                },
            }
        },
        # ...
    ],
    # ...
);


Now you can use the regular framework requester object to perform this request like:

my $RequesterObject = $Kernel::OM->Get('Kernel::GenericInterface::Requester');

my $Result = $RequesterObject->Run(
    WebserviceID => 1,                      # ID of the configured remote web service to use
    Invoker      => 'InvokerName123',       # Name of the Invoker to be used for sending the request
    Data         => {                       # Data payload for the Invoker request (remote web service)
        OutgoingData => 'Value'
    },
);

$Result = {
    Success => 1,
    Data    => {
        YAY => 'so true',
    },
};

MockFromFile()#

Loads a mapping from JSON file placed in ‘var/mocks/’ in the Webservice sub directory named as the Invoker like e.g.: ‘var/mocks/ExampleWebservice/SomeInvoker.json’

$UnitTestWebserviceObject->MockFromFile(
    Webservice => 'ExampleWebservice',
    Invoker    => 'SomeInvoker',
    Data       => {

    }
);

$UnitTestWebserviceObject->MockFromFile(
    Location => $ConfigObject->Get('Home') . "/misc/mocks/WebserviceName/SomeInvoker.json";
    Invoker    => 'SomeInvoker',
    Data       => {

    }
);

Result()#

Returns the result of all requests since beginning or the last $UnitTestWebserviceObject->Result() call. Result cache will be cleared.

my $Result = $UnitTestWebserviceObject->Result();

$Result = [
    {
        Success      => 0,
        ErrorMessage => "Can't find Mock data matching the given request Data structure.",
        Invoker      => 'UserDataGet',
        Data         => {
            Foo => 'Bar',
        },
    },
    {
        Success => 1,
        Invoker => 'Name',
        Data    => {
            UserID => 'han',
        },
        Result => {
            Success => 1,
            Data    => {
                UserName => 'Han Solo',
            }
        },
        ResultCounter => 3,
    },
    # ...
];

ValidateResult()#

Processes the results of expected mocked web service calls. If no web service call was mocked, an error will be output.

my $Result = $UnitTestWebserviceObject->ValidateResult(
    UnitTestObject => $Self,
    RequestCount   => 1, # default, defines the number of requests that should have been processed
);

$Result = [
    {
        Success      => 0,
        ErrorMessage => "Can't find Mock data matching the given request Data structure.",
        Invoker      => 'UserDataGet',
        Data         => {
            Foo => 'Bar',
        },
    },
    {
        Success => 1,
        Invoker => 'Name',
        Data    => {
            UserID => 'han',
        },
        Result => {
            Success => 1,
            Data    => {
                UserName => 'Han Solo',
            }
        },
        ResultCounter => 3,
    },
    # ...
];

SchedulerRunAll()#

Executes all asynchronous task handler tasks.

my $Success = $UnitTestWebserviceObject->SchedulerRunAll(
    UnitTestObject => $Self,
);

my $Success = $UnitTestWebserviceObject->SchedulerRunAll(
    UnitTestObject => $Self,
    Type           => 'AsynchronousExecutor', # optional, default is 'GenericInterface'
);

Returns:

my $Success = 1;

SchedulerCleanUp()#

Cleans up all tasks for the scheduler.

my $Success = $UnitTestWebserviceObject->SchedulerCleanUp(
    UnitTestObject => $Self,
);

my $Success = $UnitTestWebserviceObject->SchedulerCleanUp(
    UnitTestObject => $Self,
    Type           => 'AsynchronousExecutor', # optional, default is 'GenericInterface'
);

Returns:

my $Success = 1;

OperationFunctionCall()#

Initializes an operation to test specific functions of an operation.

my $Success = $UnitTestWebserviceObject->OperationFunctionCall(
    Webservice    => 'webservice-name',
    Operation     => 'operation-name',
    Function      => 'function',
    Data          => {},
);

my $Success = $UnitTestWebserviceObject->OperationFunctionCall(
    Webservice           => 'webservice-name',
    Operation            => 'operation-name',
    Function             => 'function',
    Data                 => {},
    ObjectModifyFunction => sub {
        my (%Params) = @_;

        $Params{Object}->{BackendObject}->{MessageName} = 'SEND_UPDATE';

        return 1;
    },
);

Returns:

my $Success = 1;

InvokerFunctionCall()#

Initialize an invoker to test specific functions of an invoker.

my $Success = $UnitTestWebserviceObject->InvokerFunctionCall(
    Webservice => 'webservice-name',
    Invoker    => 'invoker-name',
    Function   => 'function',
    Data       => {},
);

my $Success = $UnitTestWebserviceObject->InvokerFunctionCall(
    Webservice => 'webservice-name',
    Invoker    => 'invoker-name',
    Function   => 'function',
    Data       => {},
    ObjectModifyFunction => sub {
        my (%Params) = @_;

        $Params{Object}->{BackendObject}->{MessageName} = 'SEND_UPDATE';

        return 1;
    },
);

Returns:

my $Success = 1;

_WebserviceObjectModify()#

Internal function which will be used for OperationFunctionCall and InvokerFunctionCall to modify the object values of the initialized web service invoker or operation object.

my $Success = $UnitTestWebserviceObject->_WebserviceObjectModify(
    Object               => \$OperationObject,
    ObjectModifyFunction => sub {
        my (%Params) = @_;

        $Params{Object}->{BackendObject}->{MessageName} = 'SEND_UPDATE';

        return 1;
    },
);

Returns:

my $Success = 1;

CreateGenericInterfaceMappingObject()#

Creates a mapping object to be used within unit tests.

my $MappingObject = $UnitTestWebserviceObject->CreateGenericInterfaceMappingObject(
    UnitTestObject    => $Self,
    WebserviceName    => 'MyWebservice',
    CommunicationType => 'Provider',
    MappingConfig     => {
        Type => 'MyMapping', # name of mapping module
        Config => {
            # ...
        },
    },
);

_RedefineTransport()#

Redefines the functions of the transport object to handle tests and provide the results.

$Object->_RedefineTransport();