1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\InventoryCatalogApi\Test\Api;
use Magento\Framework\Webapi\Exception;
use Magento\Framework\Webapi\Rest\Request;
use Magento\InventoryApi\Api\Data\SourceInterface;
use Magento\TestFramework\TestCase\WebapiAbstract;
use Magento\TestFramework\Helper\Bootstrap;
use Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface;
class PreventDefaultSourceDisablingTest extends WebapiAbstract
{
/**#@+
* Service constants
*/
const RESOURCE_PATH = '/V1/inventory/sources';
const SERVICE_NAME = 'inventoryApiSourceRepositoryV1';
/**#@-*/
/**
* @var DefaultSourceProviderInterface
*/
private $defaultSourceProvider;
protected function setUp(): void
{
parent::setUp();
$this->defaultSourceProvider = Bootstrap::getObjectManager()->get(DefaultSourceProviderInterface::class);
}
/**
* @throws \Exception
*/
public function testPreventDefaultSourceDisabling(): void
{
$defaultSourceCode = $this->defaultSourceProvider->getCode();
$data = [
SourceInterface::SOURCE_CODE => $defaultSourceCode, // needed for SOAP mode
SourceInterface::NAME => 'source-name-1',
SourceInterface::POSTCODE => 'source-postcode',
SourceInterface::COUNTRY_ID => 'US',
SourceInterface::ENABLED => false,
];
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/' . $defaultSourceCode,
'httpMethod' => Request::HTTP_METHOD_PUT,
],
'soap' => [
'service' => self::SERVICE_NAME,
'operation' => self::SERVICE_NAME . 'Save',
],
];
$expectedErrorData = [
'message' => 'Validation Failed',
'errors' => [
[
'message' => 'Default source can not be disabled.',
'parameters' => [],
],
],
];
$this->webApiCall($serviceInfo, $data, $expectedErrorData);
}
/**
* @param array $serviceInfo
* @param array $data
* @param array $expectedErrorData
* @return void
* @throws \Exception
*/
private function webApiCall(array $serviceInfo, array $data, array $expectedErrorData)
{
try {
$this->_webApiCall($serviceInfo, ['source' => $data]);
$this->fail('Expected throwing exception');
} catch (\Exception $e) {
if (TESTS_WEB_API_ADAPTER === self::ADAPTER_REST) {
self::assertEquals($expectedErrorData, $this->processRestExceptionResult($e));
self::assertEquals(Exception::HTTP_BAD_REQUEST, $e->getCode());
} elseif (TESTS_WEB_API_ADAPTER === self::ADAPTER_SOAP) {
$this->assertInstanceOf('SoapFault', $e);
$expectedWrappedErrors = [];
foreach ($expectedErrorData['errors'] as $error) {
// @see \Magento\TestFramework\TestCase\WebapiAbstract::getActualWrappedErrors()
$expectedWrappedErrors[] = [
'message' => $error['message'],
'params' => $error['parameters'],
];
}
$this->checkSoapFault($e, $expectedErrorData['message'], 'env:Sender', [], $expectedWrappedErrors);
} else {
throw $e;
}
}
}
}