magento2-docker/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoGetTest.php

142 lines
4.7 KiB
PHP
Executable File

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Sales\Service\V1;
use Magento\Catalog\Test\Fixture\Product as ProductFixture;
use Magento\Checkout\Test\Fixture\PlaceOrder as PlaceOrderFixture;
use Magento\Checkout\Test\Fixture\SetBillingAddress as SetBillingAddressFixture;
use Magento\Checkout\Test\Fixture\SetDeliveryMethod as SetDeliveryMethodFixture;
use Magento\Checkout\Test\Fixture\SetGuestEmail as SetGuestEmailFixture;
use Magento\Checkout\Test\Fixture\SetPaymentMethod as SetPaymentMethodFixture;
use Magento\Checkout\Test\Fixture\SetShippingAddress as SetShippingAddressFixture;
use Magento\Quote\Test\Fixture\AddProductToCart as AddProductToCartFixture;
use Magento\Quote\Test\Fixture\GuestCart as GuestCartFixture;
use Magento\Sales\Test\Fixture\Creditmemo as CreditmemoFixture;
use Magento\Sales\Test\Fixture\Invoice as InvoiceFixture;
use Magento\Sales\Test\Fixture\Shipment as ShipmentFixture;
use Magento\TestFramework\Fixture\DataFixture;
use Magento\TestFramework\Fixture\DataFixtureStorage;
use Magento\TestFramework\Fixture\DataFixtureStorageManager;
use Magento\TestFramework\TestCase\WebapiAbstract;
class CreditmemoGetTest extends WebapiAbstract
{
/**
* Resource path
*/
private const RESOURCE_PATH = '/V1/creditmemo';
/**
* Service read name
*/
private const SERVICE_READ_NAME = 'salesCreditmemoRepositoryV1';
/**
* Service version
*/
private const SERVICE_VERSION = 'V1';
/**
* Creditmemo id
*/
private const CREDITMEMO_INCREMENT_ID = '100000001';
/**
* @var \Magento\Framework\ObjectManagerInterface
*/
protected $objectManager;
/**
* Required fields are in the answer
*
* @var array
*/
protected $requiredFields = [
'entity_id',
'store_id',
'base_shipping_tax_amount',
'base_discount_amount',
'grand_total',
'base_subtotal_incl_tax',
'shipping_amount',
'subtotal_incl_tax',
'base_shipping_amount',
'base_adjustment',
'base_subtotal',
'discount_amount',
'subtotal',
'adjustment',
'base_grand_total',
'base_tax_amount',
'shipping_tax_amount',
'tax_amount',
'order_id',
'state',
'increment_id',
];
/**
* @var DataFixtureStorage
*/
private $fixtures;
/**
* Set up
*/
protected function setUp(): void
{
$this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
$this->fixtures = $this->objectManager->get(DataFixtureStorageManager::class)->getStorage();
}
/**
* Test creditmemo get service
*/
#[
DataFixture(ProductFixture::class, as: 'product'),
DataFixture(GuestCartFixture::class, as: 'cart'),
DataFixture(AddProductToCartFixture::class, ['cart_id' => '$cart.id$', 'product_id' => '$product.id$']),
DataFixture(SetBillingAddressFixture::class, ['cart_id' => '$cart.id$']),
DataFixture(SetShippingAddressFixture::class, ['cart_id' => '$cart.id$']),
DataFixture(SetGuestEmailFixture::class, ['cart_id' => '$cart.id$']),
DataFixture(SetDeliveryMethodFixture::class, ['cart_id' => '$cart.id$']),
DataFixture(SetPaymentMethodFixture::class, ['cart_id' => '$cart.id$']),
DataFixture(PlaceOrderFixture::class, ['cart_id' => '$cart.id$'], 'order'),
DataFixture(InvoiceFixture::class, ['order_id' => '$order.id$']),
DataFixture(ShipmentFixture::class, ['order_id' => '$order.id$']),
DataFixture(CreditmemoFixture::class, ['order_id' => '$order.id$'], 'creditmemo'),
]
public function testCreditmemoGet()
{
$creditmemo = $this->fixtures->get('creditmemo');
$serviceInfo = [
'rest' => [
'resourcePath' => self::RESOURCE_PATH . '/' . $creditmemo->getId(),
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
],
'soap' => [
'service' => self::SERVICE_READ_NAME,
'serviceVersion' => self::SERVICE_VERSION,
'operation' => self::SERVICE_READ_NAME . 'get',
],
];
$actual = $this->_webApiCall($serviceInfo, ['id' => $creditmemo->getId()]);
$expected = $creditmemo->getData();
foreach ($this->requiredFields as $field) {
$this->assertArrayHasKey($field, $actual);
$this->assertEquals($expected[$field], $actual[$field]);
}
//check that nullable fields were marked as optional and were not sent
foreach ($actual as $value) {
$this->assertNotNull($value);
}
}
}