Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
GatewayCommandTest.php
Go to the documentation of this file.
1 <?php
7 
17 use PHPUnit_Framework_MockObject_MockObject as MockObject;
18 use Psr\Log\LoggerInterface;
19 
23 class GatewayCommandTest extends \PHPUnit\Framework\TestCase
24 {
28  private $command;
29 
33  private $requestBuilder;
34 
38  private $transferFactory;
39 
43  private $client;
44 
48  private $responseHandler;
49 
53  private $validator;
54 
58  private $logger;
59 
63  private $errorMessageMapper;
64 
65  protected function setUp()
66  {
67  $this->requestBuilder = $this->createMock(BuilderInterface::class);
68  $this->transferFactory = $this->createMock(TransferFactoryInterface::class);
69  $this->client = $this->createMock(ClientInterface::class);
70  $this->responseHandler = $this->createMock(HandlerInterface::class);
71  $this->validator = $this->createMock(ValidatorInterface::class);
72  $this->logger = $this->createMock(LoggerInterface::class);
73  $this->errorMessageMapper = $this->createMock(ErrorMessageMapperInterface::class);
74 
75  $this->command = new GatewayCommand(
76  $this->requestBuilder,
77  $this->transferFactory,
78  $this->client,
79  $this->logger,
80  $this->responseHandler,
81  $this->validator,
82  $this->errorMessageMapper
83  );
84  }
85 
86  public function testExecute()
87  {
88  $commandSubject = ['authorize'];
89  $this->processRequest($commandSubject, true);
90 
91  $this->responseHandler->method('handle')
92  ->with($commandSubject, ['response_field1' => 'response_value1']);
93 
94  $this->command->execute($commandSubject);
95  }
96 
103  public function testExecuteValidationFail()
104  {
105  $commandSubject = ['authorize'];
106  $validationFailures = [
107  __('Failure #1'),
108  __('Failure #2'),
109  ];
110 
111  $this->processRequest($commandSubject, false, $validationFailures);
112 
113  $this->logger->expects(self::exactly(count($validationFailures)))
114  ->method('critical')
115  ->withConsecutive(
116  [self::equalTo('Payment Error: ' . $validationFailures[0])],
117  [self::equalTo('Payment Error: ' . $validationFailures[1])]
118  );
119 
120  $this->command->execute($commandSubject);
121  }
122 
130  {
131  $commandSubject = ['authorize'];
132  $validationFailures = [
133  __('Failure #1'),
134  __('Failure #2'),
135  ];
136  $errorCodes = ['401'];
137 
138  $this->processRequest($commandSubject, false, $validationFailures, $errorCodes);
139 
140  $this->errorMessageMapper->method('getMessage')
141  ->willReturnMap(
142  [
143  ['401', 'Unauthorized'],
144  ['Failure #1', 'Failure Mapped'],
145  ['Failure #2', null]
146  ]
147  );
148 
149  $this->logger->expects(self::exactly(count(array_merge($validationFailures, $errorCodes))))
150  ->method('critical')
151  ->withConsecutive(
152  [self::equalTo('Payment Error: Unauthorized')],
153  [self::equalTo('Payment Error: Failure Mapped')],
154  [self::equalTo('Payment Error: Failure #2')]
155  );
156 
157  $this->command->execute($commandSubject);
158  }
159 
168  private function processRequest(
169  array $commandSubject,
170  bool $validationResult,
171  array $validationFailures = [],
172  array $errorCodes = []
173  ) {
174  $request = [
175  'request_field1' => 'request_value1',
176  'request_field2' => 'request_value2'
177  ];
178  $response = ['response_field1' => 'response_value1'];
179  $transferO = $this->getMockBuilder(TransferInterface::class)
180  ->getMockForAbstractClass();
181 
182  $this->requestBuilder->method('build')
183  ->with($commandSubject)
184  ->willReturn($request);
185 
186  $this->transferFactory->method('create')
187  ->with($request)
188  ->willReturn($transferO);
189 
190  $this->client->method('placeRequest')
191  ->with($transferO)
192  ->willReturn($response);
193 
194  $result = $this->getMockBuilder(ResultInterface::class)
195  ->getMockForAbstractClass();
196 
197  $this->validator->method('validate')
198  ->with(array_merge($commandSubject, ['response' => $response]))
199  ->willReturn($result);
200  $result->method('isValid')
201  ->willReturn($validationResult);
202  $result->method('getFailsDescription')
203  ->willReturn($validationFailures);
204  $result->method('getErrorCodes')
205  ->willReturn($errorCodes);
206  }
207 }
$response
Definition: 404.php:11
__()
Definition: __.php:13