Bunzl árlistájához szükséges egy eddig hiányzó mértékegység. A "Legkisebb eladási egység" / "Mennyiségi egység" mezőt két párhuzamos árlista-import validálja külön-külön (a régi PriceListService.php ProductUnitEnum-mal, az új PricelistFileProcessService.php saját PricelistSellerUnitEnum-mal), mindkettő végül ugyanabba a products.sellerUnit / products.amountUnit DB enum oszlopba ír. A puszta enum-bővítés önmagában nem lett volna elég: a DB oszlop korlátozta volna a végrehajtást, csak ott, a legkésőbbi ponton bukva el. - ProductUnitEnum: új 'm' case (régi pipeline validációja + a DB oszlopokat generáló forrás). - PricelistSellerUnitEnum: új 'm' case (új pipeline validációja). - Migráció: products.sellerUnit/amountUnit és order_archives_items ugyanezen oszlopainak DB enum bővítése 'm'-mel, ProductUnitEnum::getKeys()-ből generálva, hogy a PHP enum és a DB oszlop ne csúszhasson el egymástól. A down() az 'm' értékű sorokat NULL-ra állítja visszagörgetéskor, különben a szűkített enum miatt az ALTER hibára futna. A "Mértékegység" (productUnit) oszlopot szándékosan nem bővítettem, a jegy csak a másik két mezőt említi. - schema:dump frissítve. 5 új teszt mindkét pipeline validációjára és a DB enum oszlopra. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
64 lines
2.1 KiB
PHP
64 lines
2.1 KiB
PHP
<?php
|
|
|
|
use App\Enums\PricelistSellerUnitEnum;
|
|
use App\Enums\ProductUnitEnum;
|
|
use App\Models\ProfitCenter;
|
|
use App\Models\Supplier;
|
|
use App\Services\PriceListService;
|
|
use App\Services\PricelistFileProcessService;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Tests\TestCase;
|
|
|
|
uses(TestCase::class, RefreshDatabase::class);
|
|
|
|
/**
|
|
* A validateSellerUnit()/validateAmountUnit() protected metódusok meghívása reflectionnel
|
|
* (lásd PricelistColumnMappingTest.php hasonló mintáját a buildColumnMap()-hoz).
|
|
*/
|
|
function invokeUnitValidator(string $method, string $unitValue): ?string
|
|
{
|
|
$service = app(PricelistFileProcessService::class);
|
|
$reflection = new ReflectionMethod($service, $method);
|
|
$reflection->setAccessible(true);
|
|
|
|
$header = match ($method) {
|
|
'validateSellerUnit' => PriceListService::EXPECTED_HEADERS[9],
|
|
'validateAmountUnit' => PriceListService::EXPECTED_HEADERS[11],
|
|
};
|
|
|
|
return $reflection->invoke($service, [$header => $unitValue]);
|
|
}
|
|
|
|
it('accepts "m" as a valid seller unit in the new pricelist pipeline (EV3-465)', function () {
|
|
expect(invokeUnitValidator('validateSellerUnit', 'm'))->toBeNull();
|
|
});
|
|
|
|
it('accepts "m" as a valid amount unit in the new pricelist pipeline (EV3-465)', function () {
|
|
expect(invokeUnitValidator('validateAmountUnit', 'm'))->toBeNull();
|
|
});
|
|
|
|
it('still rejects an unknown seller unit', function () {
|
|
expect(invokeUnitValidator('validateSellerUnit', 'nincs-ilyen'))->not->toBeNull();
|
|
});
|
|
|
|
it('accepts "m" as a valid ProductUnitEnum value, used by the legacy pricelist pipeline', function () {
|
|
expect(ProductUnitEnum::hasValue('m'))->toBeTrue();
|
|
});
|
|
|
|
it('persists a product with "m" seller and amount unit (DB enum column check)', function () {
|
|
$supplier = Supplier::factory()->create();
|
|
|
|
$product = App\Models\Product::create([
|
|
'name' => 'Bunzl teszttermék',
|
|
'supplier_id' => $supplier->id,
|
|
'sellerUnit' => 'm',
|
|
'amountUnit' => 'm',
|
|
'status' => App\Enums\DbStatusFieldEnum::active,
|
|
]);
|
|
|
|
$product->refresh();
|
|
|
|
expect($product->sellerUnit)->toBe('m');
|
|
expect($product->amountUnit)->toBe('m');
|
|
});
|