Skip to content

Commit c1ea6e5

Browse files
Merge branch 'ACQE-8858' into ACQE-functional-deployment-version18
2 parents b455722 + 2e2d832 commit c1ea6e5

File tree

1 file changed

+245
-0
lines changed

1 file changed

+245
-0
lines changed
Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
<?php
2+
/**
3+
* Copyright 2025 Adobe
4+
* All Rights Reserved.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Sales\Model;
9+
10+
use Magento\TestFramework\Fixture\Config;
11+
use PHPUnit\Framework\TestCase;
12+
use Magento\Framework\ObjectManagerInterface;
13+
use Magento\Sales\Api\CreditmemoRepositoryInterface;
14+
use Magento\Sales\Api\Data\CreditmemoInterface;
15+
use Magento\Sales\Api\Data\OrderInterface;
16+
use Magento\TestFramework\Helper\Bootstrap;
17+
use Magento\Store\Api\Data\StoreInterface;
18+
use Magento\TestFramework\Fixture\DataFixture;
19+
use Magento\TestFramework\Fixture\DataFixtureStorageManager;
20+
use Magento\Checkout\Test\Fixture\SetBillingAddress;
21+
use Magento\Checkout\Test\Fixture\SetShippingAddress;
22+
use Magento\Checkout\Test\Fixture\SetDeliveryMethod;
23+
use Magento\Checkout\Test\Fixture\SetPaymentMethod;
24+
use Magento\Checkout\Test\Fixture\PlaceOrder;
25+
use Magento\Sales\Test\Fixture\Invoice;
26+
use Magento\Sales\Test\Fixture\Creditmemo;
27+
use Magento\Framework\Api\SearchCriteriaBuilder;
28+
use Magento\Store\Test\Fixture\Website;
29+
use Magento\Store\Test\Fixture\Group;
30+
use Magento\Store\Test\Fixture\Store;
31+
use Magento\Catalog\Test\Fixture\Product;
32+
use Magento\Customer\Test\Fixture\Customer;
33+
use Magento\Quote\Test\Fixture\CustomerCart;
34+
use Magento\Quote\Test\Fixture\AddProductToCart;
35+
36+
/**
37+
* Integration test for complete workflow using proper fixtures:
38+
* Create website, store, and store view with numeric names -> Place orders -> Create credit memo -> Verify grid display
39+
*
40+
* @magentoDbIsolation disabled
41+
* @magentoAppIsolation enabled
42+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
43+
*/
44+
class StoreWithNumericNameCreditmemoWorkflowTest extends TestCase
45+
{
46+
/**
47+
* @var ObjectManagerInterface
48+
*/
49+
private $objectManager;
50+
51+
/**
52+
* @var CreditmemoRepositoryInterface
53+
*/
54+
private $creditmemoRepository;
55+
56+
/**
57+
* @inheritdoc
58+
*/
59+
protected function setUp(): void
60+
{
61+
parent::setUp();
62+
$this->objectManager = Bootstrap::getObjectManager();
63+
$this->creditmemoRepository = $this->objectManager->get(CreditmemoRepositoryInterface::class);
64+
}
65+
66+
/**
67+
* Test complete workflow using proper fixtures with scope parameter
68+
*
69+
* @return void
70+
*/
71+
#[
72+
Config('general/country/allow', 'US', 'default'),
73+
Config('general/country/default', 'US', 'default'),
74+
Config('carriers/flatrate/active', '1', 'store', 'default'),
75+
Config('carriers/flatrate/price', '5.00', 'store', 'default'),
76+
Config('payment/checkmo/active', '1', 'store', 'default'),
77+
DataFixture(Website::class, ['code' => 'test_website', 'name' => '123test Website'], 'test_website'),
78+
DataFixture(
79+
Group::class,
80+
['code' => 'test_group', 'name' => '123test Store Group', 'website_id' => '$test_website.id$'],
81+
'test_group'
82+
),
83+
DataFixture(
84+
Store::class,
85+
[
86+
'code' => 'test_store',
87+
'name' => '123test Store View',
88+
'website_id' => '$test_website.id$',
89+
'group_id' => '$test_group.id$'
90+
],
91+
'test_store'
92+
),
93+
DataFixture(
94+
Product::class,
95+
['sku' => 'simple-product-numeric-store', 'price' => 10, 'website_ids' => [1, '$test_website.id$']],
96+
'product'
97+
),
98+
DataFixture(
99+
Customer::class,
100+
[
101+
'email' => 'customer@123test.com',
102+
'website_id' => '$test_website.id$',
103+
'store_id' => '$test_store.id$',
104+
'addresses' => [[]]
105+
],
106+
'customer'
107+
),
108+
DataFixture(
109+
CustomerCart::class,
110+
['customer_id' => '$customer.id$'],
111+
as: 'quote',
112+
scope: 'test_store'
113+
),
114+
DataFixture(
115+
AddProductToCart::class,
116+
['cart_id' => '$quote.id$', 'product_id' => '$product.id$', 'qty' => 2]
117+
),
118+
DataFixture(SetBillingAddress::class, ['cart_id' => '$quote.id$']),
119+
DataFixture(SetShippingAddress::class, ['cart_id' => '$quote.id$']),
120+
DataFixture(
121+
SetDeliveryMethod::class,
122+
['cart_id' => '$quote.id$', 'carrier_code' => 'flatrate', 'method_code' => 'flatrate']
123+
),
124+
DataFixture(SetPaymentMethod::class, ['cart_id' => '$quote.id$']),
125+
DataFixture(PlaceOrder::class, ['cart_id' => '$quote.id$'], 'order'),
126+
DataFixture(Invoice::class, ['order_id' => '$order.id$']),
127+
DataFixture(
128+
Creditmemo::class,
129+
['order_id' => '$order.id$', 'items' => [['qty' => 1, 'product_id' => '$product.id$']]],
130+
'creditmemo'
131+
)
132+
]
133+
public function testCompleteWorkflowWithNumericStoreNamesUsingFixtures(): void
134+
{
135+
// Get fixtures
136+
$fixtures = DataFixtureStorageManager::getStorage();
137+
/** @var StoreInterface $store */
138+
$store = $fixtures->get('test_store');
139+
/** @var OrderInterface $order */
140+
$order = $fixtures->get('order');
141+
/** @var CreditmemoInterface $creditmemo */
142+
$creditmemo = $fixtures->get('creditmemo');
143+
144+
// Verify order is in the correct store
145+
$this->assertEquals(
146+
$store->getId(),
147+
$order->getStoreId(),
148+
'Order should be placed in the test store'
149+
);
150+
151+
// Verify credit memo is in the correct store
152+
$this->assertEquals(
153+
$store->getId(),
154+
$creditmemo->getStoreId(),
155+
'Credit memo should be in test store'
156+
);
157+
158+
// Verify credit memo displays correctly in grid
159+
$this->verifyCreditMemoGridDisplaysRecords($creditmemo, $order, $store);
160+
}
161+
162+
/**
163+
* Verify credit memo grid displays records correctly
164+
*
165+
* @param CreditmemoInterface $creditmemo
166+
* @param OrderInterface $order
167+
* @param StoreInterface $store
168+
* @return void
169+
*/
170+
private function verifyCreditMemoGridDisplaysRecords(
171+
CreditmemoInterface $creditmemo,
172+
OrderInterface $order,
173+
StoreInterface $store
174+
): void {
175+
// Test credit memo retrieval by order ID
176+
$creditmemoByOrder = $this->getCreditmemosByFilter('order_id', $order->getId());
177+
$this->assertCount(1, $creditmemoByOrder, 'Should find exactly one credit memo for the order');
178+
$foundCreditmemo = reset($creditmemoByOrder);
179+
180+
// Assert that found credit memo matches expected values
181+
$this->assertEquals($creditmemo->getId(), $foundCreditmemo->getId());
182+
$this->assertEquals($creditmemo->getIncrementId(), $foundCreditmemo->getIncrementId());
183+
$this->assertEquals($order->getId(), $foundCreditmemo->getOrderId());
184+
$this->assertEquals($order->getStoreId(), $foundCreditmemo->getStoreId());
185+
186+
// Test credit memo retrieval by creditmemo ID
187+
$creditmemoById = $this->getCreditmemosByFilter('entity_id', $creditmemo->getId());
188+
$this->assertCount(1, $creditmemoById, 'Credit memo should be found when filtering by ID');
189+
190+
$foundCreditmemoById = reset($creditmemoById);
191+
$this->assertEquals($creditmemo->getId(), $foundCreditmemoById->getId());
192+
$this->assertEquals($order->getStoreId(), $foundCreditmemoById->getStoreId());
193+
194+
// Explicitly verify the credit memo is created in the correct store
195+
$this->assertEquals(
196+
$store->getId(),
197+
$creditmemo->getStoreId(),
198+
'Credit memo should be created in the test store'
199+
);
200+
201+
// Verify store name starts with numeric characters
202+
$this->assertEquals(
203+
'123test Store View',
204+
$store->getName(),
205+
'Test store should have numeric name'
206+
);
207+
208+
// Verify credit memo is visible when filtering by test store
209+
$creditmemosByTestStore = $this->getCreditmemosByFilter('store_id', $store->getId());
210+
$this->assertGreaterThan(
211+
0,
212+
count($creditmemosByTestStore),
213+
'Credit memo should be visible when filtering by test store'
214+
);
215+
216+
// Verify our specific credit memo is in the store-filtered results
217+
$foundInStoreFilter = false;
218+
foreach ($creditmemosByTestStore as $cm) {
219+
if ($cm->getId() === $creditmemo->getId()) {
220+
$foundInStoreFilter = true;
221+
break;
222+
}
223+
}
224+
$this->assertTrue(
225+
$foundInStoreFilter,
226+
sprintf('Credit memo should be found when filtering grid by "%s"', $store->getName())
227+
);
228+
}
229+
230+
/**
231+
* Get credit memos by filter field and value
232+
*
233+
* @param string $field
234+
* @param mixed $value
235+
* @return array
236+
*/
237+
private function getCreditmemosByFilter(string $field, mixed $value): array
238+
{
239+
$searchCriteria = $this->objectManager->get(SearchCriteriaBuilder::class)
240+
->addFilter($field, $value)
241+
->create();
242+
243+
return $this->creditmemoRepository->getList($searchCriteria)->getItems();
244+
}
245+
}

0 commit comments

Comments
 (0)