Passed
Pull Request — master (#36)
by Cesar
04:52
created

ClientMock::generateResponseForCode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 9
rs 10
1
<?php
2
/**
3
 * Copyright © 2016 Magento. All rights reserved.
4
 * See COPYING.txt for license details.
5
 */
6
namespace Pagantis\Pagantis\Gateway\Http\Client;
7
8
use Magento\Payment\Gateway\Http\ClientInterface;
9
use Magento\Payment\Gateway\Http\TransferInterface;
10
use Magento\Payment\Model\Method\Logger;
11
12
class ClientMock implements ClientInterface
13
{
14
    const SUCCESS = 1;
15
    const FAILURE = 0;
16
17
    /**
18
     * @var array
19
     */
20
    private $results = [
21
        self::SUCCESS,
22
        self::FAILURE
23
    ];
24
25
    /**
26
     * @var Logger
27
     */
28
    private $logger;
29
30
    /**
31
     * @param Logger $logger
32
     */
33
    public function __construct(
34
        Logger $logger
35
    ) {
36
        $this->logger = $logger;
37
    }
38
39
    /**
40
     * Places request to gateway. Returns result as ENV array
41
     *
42
     * @param TransferInterface $transferObject
43
     * @return array
44
     */
45
    public function placeRequest(TransferInterface $transferObject)
46
    {
47
        $response = $this->generateResponseForCode(
48
            $this->getResultCode(
49
                $transferObject
50
            )
51
        );
52
53
        $this->logger->debug(
54
            [
55
                'request' => $transferObject->getBody(),
56
                'response' => $response
57
            ]
58
        );
59
60
        return $response;
61
    }
62
63
    /**
64
     * Generates response
65
     *
66
     * @return array
67
     */
68
    protected function generateResponseForCode($resultCode)
69
    {
70
71
        return array_merge(
72
            [
73
                'RESULT_CODE' => $resultCode,
74
                'TXN_ID' => $this->generateTxnId()
75
            ],
76
            $this->getFieldsBasedOnResponseType($resultCode)
77
        );
78
    }
79
80
    /**
81
     * @return string
82
     */
83
    protected function generateTxnId()
84
    {
85
        return md5(mt_rand(0, 1000));
86
    }
87
88
    /**
89
     * Returns result code
90
     *
91
     * @param TransferInterface $transfer
92
     * @return int
93
     */
94
    private function getResultCode(TransferInterface $transfer)
95
    {
96
        $headers = $transfer->getHeaders();
97
98
        if (isset($headers['force_result'])) {
99
            return (int)$headers['force_result'];
100
        }
101
102
        return $this->results[mt_rand(0, 1)];
103
    }
104
105
    /**
106
     * Returns response fields for result code
107
     *
108
     * @param int $resultCode
109
     * @return array
110
     */
111
    private function getFieldsBasedOnResponseType($resultCode)
112
    {
113
        switch ($resultCode) {
114
            case self::FAILURE:
115
                return [
116
                    'FRAUD_MSG_LIST' => [
117
                        'Stolen card',
118
                        'Customer location differs'
119
                    ]
120
                ];
121
        }
122
123
        return [];
124
    }
125
}
126