PluginProbe
Packeta / trunk
Packeta vtrunk
2.3.2 2.3.1 trunk 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.0 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 All 56 releases
packeta / tests / Module / Order / LabelPrintTest.php

LabelPrintTest.php in Packeta trunk, at tests/Module/Order/LabelPrintTest.php

203 lines 6.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare( strict_types=1 );
4
5 namespace Tests\Module\Order;
6
7 use Packetery\Core\Api\Soap\Client;
8 use Packetery\Core\Api\Soap\Response\PacketsCourierLabelsPdf;
9 use Packetery\Core\Api\Soap\Response\PacketsLabelsPdf;
10 use Packetery\Core\Log\ILogger;
11 use Packetery\Latte\Engine;
12 use Packetery\Module\Framework\WpAdapter;
13 use Packetery\Module\Labels\CarrierLabelService;
14 use Packetery\Module\Labels\LabelPrintParametersService;
15 use Packetery\Module\MessageManager;
16 use Packetery\Module\ModuleHelper;
17 use Packetery\Module\Options\OptionsProvider;
18 use Packetery\Module\Order\LabelPrint;
19 use Packetery\Module\Order\PacketActionsCommonLogic;
20 use Packetery\Module\Order\Repository;
21 use Packetery\Nette\Http\Request;
22 use PHPUnit\Framework\MockObject\MockObject;
23 use PHPUnit\Framework\TestCase;
24 use ReflectionClass;
25
26 class LabelPrintTest extends TestCase {
27 private Client&MockObject $soapApiClientMock;
28 private MessageManager&MockObject $messageManagerMock;
29 private CarrierLabelService&MockObject $carrierLabelServiceMock;
30
31 protected function createLabelPrintMock(): LabelPrint {
32 $latteEngineMock = $this->createMock( Engine::class );
33 $optionsProviderMock = $this->createMock( OptionsProvider::class );
34 $httpRequestMock = $this->createMock( Request::class );
35 $this->soapApiClientMock = $this->createMock( Client::class );
36 $this->messageManagerMock = $this->createMock( MessageManager::class );
37 $loggerMock = $this->createMock( ILogger::class );
38 $orderRepositoryMock = $this->createMock( Repository::class );
39 $packetActionsCommonLogicMock = $this->createMock( PacketActionsCommonLogic::class );
40 $moduleHelperMock = $this->createMock( ModuleHelper::class );
41 $wpAdapterMock = $this->createMock( WpAdapter::class );
42 $this->carrierLabelServiceMock = $this->createMock( CarrierLabelService::class );
43 $labelPrintParametersServiceMock = $this->createMock( LabelPrintParametersService::class );
44
45 $wpAdapterMock
46 ->method( '__' )
47 ->willReturnCallback(
48 function ( string $msg ) {
49 return $msg;
50 }
51 );
52
53 return new LabelPrint(
54 $latteEngineMock,
55 $optionsProviderMock,
56 $httpRequestMock,
57 $this->soapApiClientMock,
58 $this->messageManagerMock,
59 $loggerMock,
60 $orderRepositoryMock,
61 $packetActionsCommonLogicMock,
62 $moduleHelperMock,
63 $wpAdapterMock,
64 $this->carrierLabelServiceMock,
65 $labelPrintParametersServiceMock,
66 );
67 }
68
69 public static function getResponseTestProvider(): array {
70 return [
71 'packeta labels' => [
72 'isCarrierLabels' => false,
73 'packetIds' => [ '100' => 'PACKET_1' ],
74 'fallbackToPacketaLabel' => false,
75 'idParam' => null,
76 'offset' => 0,
77 'expect' => [
78 'packetaLabelsCalled' => 1,
79 'carrierLabelsCalled' => 0,
80 'flashMessageCount' => 0,
81 'resultClass' => PacketsLabelsPdf::class,
82 ],
83 ],
84 'carrier empty no fallback' => [
85 'isCarrierLabels' => true,
86 'packetIds' => [ '100' => 'PACKET_1' ],
87 'fallbackToPacketaLabel' => false,
88 'idParam' => 123,
89 'offset' => 2,
90 'expect' => [
91 'packetaLabelsCalled' => 0,
92 'carrierLabelsCalled' => 0,
93 'flashMessageCount' => 1,
94 'resultClass' => null,
95 'carrier_numbers' => [],
96 ],
97 ],
98 'carrier empty with fallback' => [
99 'isCarrierLabels' => true,
100 'packetIds' => [ '100' => 'PACKET_1' ],
101 'fallbackToPacketaLabel' => true,
102 'idParam' => null,
103 'offset' => 1,
104 'expect' => [
105 'packetaLabelsCalled' => 1,
106 'carrierLabelsCalled' => 1,
107 'flashMessageCount' => 0,
108 'resultClass' => PacketsLabelsPdf::class,
109 'carrier_numbers' => [],
110 'carrierFault' => true,
111 ],
112 ],
113 'carrier success no fallback needed' => [
114 'isCarrierLabels' => true,
115 'packetIds' => [ '100' => 'PACKET_1' ],
116 'fallbackToPacketaLabel' => true,
117 'idParam' => null,
118 'offset' => 5,
119 'expect' => [
120 'packetaLabelsCalled' => 0,
121 'carrierLabelsCalled' => 1,
122 'flashMessageCount' => 0,
123 'resultClass' => PacketsCourierLabelsPdf::class,
124 'carrier_numbers' => [ '100' => 'COURIER_100' ],
125 'carrierFault' => false,
126 ],
127 ],
128 ];
129 }
130
131 /**
132 * @dataProvider getResponseTestProvider
133 */
134 public function testGetResponse(
135 bool $isCarrierLabels,
136 array $packetIds,
137 bool $fallbackToPacketaLabel,
138 ?int $idParam,
139 int $offset,
140 array $expect
141 ): void {
142 $labelPrint = $this->createLabelPrintMock();
143
144 if ( array_key_exists( 'carrier_numbers', $expect ) ) {
145 $this->carrierLabelServiceMock->method( 'getPacketIdsWithCourierNumbers' )
146 ->with( $packetIds )
147 ->willReturn( $expect['carrier_numbers'] );
148 } else {
149 $this->carrierLabelServiceMock->method( 'getPacketIdsWithCourierNumbers' )
150 ->with( $packetIds )
151 ->willReturn( [ '100' => 'COURIER_100' ] );
152 }
153
154 if ( ( $expect['flashMessageCount'] ?? 0 ) > 0 ) {
155 $this->messageManagerMock
156 ->expects( $this->once() )
157 ->method( 'flash_message' );
158 } else {
159 $this->messageManagerMock
160 ->expects( $this->never() )
161 ->method( 'flash_message' );
162 }
163
164 $carrierCalledTimes = $expect['carrierLabelsCalled'] ?? 0;
165 if ( $carrierCalledTimes > 0 ) {
166 $carrierResponse = new PacketsCourierLabelsPdf();
167 if ( ( $expect['carrierFault'] ?? false ) === true ) {
168 $carrierResponse->setFault( 'SomeFault' );
169 }
170 $this->soapApiClientMock->expects( $this->once() )
171 ->method( 'packetsCarrierLabelsPdf' )
172 ->with( $this->isInstanceOf( \Packetery\Core\Api\Soap\Request\PacketsCourierLabelsPdf::class ) )
173 ->willReturn( $carrierResponse );
174 } else {
175 $this->soapApiClientMock->expects( $this->never() )
176 ->method( 'packetsCarrierLabelsPdf' );
177 }
178
179 $packetaCalledTimes = $expect['packetaLabelsCalled'] ?? 0;
180 if ( $packetaCalledTimes > 0 ) {
181 $packetaResponse = new PacketsLabelsPdf();
182 $this->soapApiClientMock->expects( $this->once() )
183 ->method( 'packetsLabelsPdf' )
184 ->with( $this->isInstanceOf( \Packetery\Core\Api\Soap\Request\PacketsLabelsPdf::class ) )
185 ->willReturn( $packetaResponse );
186 } else {
187 $this->soapApiClientMock->expects( $this->never() )
188 ->method( 'packetsLabelsPdf' );
189 }
190
191 $reflection = new ReflectionClass( LabelPrint::class );
192 $getResponse = $reflection->getMethod( 'getResponse' );
193 $getResponse->setAccessible( true );
194 $result = $getResponse->invoke( $labelPrint, $isCarrierLabels, $packetIds, $fallbackToPacketaLabel, $idParam, $offset );
195
196 if ( $expect['resultClass'] === null ) {
197 $this->assertNull( $result );
198 } else {
199 $this->assertInstanceOf( $expect['resultClass'], $result );
200 }
201 }
202 }
203