Merge branch 'gtin'

This commit is contained in:
Jan Böhmer 2026-02-14 22:12:39 +01:00
commit 7a83581597
71 changed files with 1405 additions and 92 deletions

View file

@ -108,6 +108,7 @@ class BulkSearchResponseDTOTest extends KernelTestCase
'manufacturing_status' => NULL,
'provider_url' => NULL,
'footprint' => NULL,
'gtin' => NULL,
),
'source_field' => 'mpn',
'source_keyword' => '1234',
@ -129,6 +130,7 @@ class BulkSearchResponseDTOTest extends KernelTestCase
'manufacturing_status' => NULL,
'provider_url' => NULL,
'footprint' => NULL,
'gtin' => NULL,
),
'source_field' => 'name',
'source_keyword' => '1234',

View file

@ -22,6 +22,7 @@ declare(strict_types=1);
*/
namespace App\Tests\Services\InfoProviderSystem\DTOs;
use App\Services\InfoProviderSystem\DTOs\PriceDTO;
use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO;
use PHPUnit\Framework\TestCase;
@ -33,4 +34,40 @@ class PurchaseInfoDTOTest extends TestCase
$this->expectExceptionMessage('The prices array must only contain PriceDTO instances');
new PurchaseInfoDTO('test', 'test', [new \stdClass()]);
}
public function testPricesIncludesVATHandling(): void
{
$pricesTrue = [
new PriceDTO(minimum_discount_amount: 1, price: '10.00', currency_iso_code: 'USD', includes_tax: true),
new PriceDTO(minimum_discount_amount: 5, price: '9.00', currency_iso_code: 'USD', includes_tax: true),
];
$pricesFalse = [
new PriceDTO(minimum_discount_amount: 1, price: '10.00', currency_iso_code: 'USD', includes_tax: false),
new PriceDTO(minimum_discount_amount: 5, price: '9.00', currency_iso_code: 'USD', includes_tax: false),
];
$pricesMixed = [
new PriceDTO(minimum_discount_amount: 1, price: '10.00', currency_iso_code: 'USD', includes_tax: true),
new PriceDTO(minimum_discount_amount: 5, price: '9.00', currency_iso_code: 'USD', includes_tax: false),
];
$pricesNull = [
new PriceDTO(minimum_discount_amount: 1, price: '10.00', currency_iso_code: 'USD', includes_tax: null),
new PriceDTO(minimum_discount_amount: 5, price: '9.00', currency_iso_code: 'USD', includes_tax: null),
];
//If the prices_include_vat parameter is given, use it:
$dto = new PurchaseInfoDTO('test', 'test', $pricesMixed, prices_include_vat: true);
$this->assertTrue($dto->prices_include_vat);
$dto = new PurchaseInfoDTO('test', 'test', $pricesMixed, prices_include_vat: false);
$this->assertFalse($dto->prices_include_vat);
//If the prices_include_vat parameter is not given, try to deduct it from the prices:
$dto = new PurchaseInfoDTO('test', 'test', $pricesTrue);
$this->assertTrue($dto->prices_include_vat);
$dto = new PurchaseInfoDTO('test', 'test', $pricesFalse);
$this->assertFalse($dto->prices_include_vat);
$dto = new PurchaseInfoDTO('test', 'test', $pricesMixed);
$this->assertNull($dto->prices_include_vat);
$dto = new PurchaseInfoDTO('test', 'test', $pricesNull);
$this->assertNull($dto->prices_include_vat);
}
}

View file

@ -94,7 +94,6 @@ class DTOtoEntityConverterTest extends WebTestCase
minimum_discount_amount: 5,
price: "10.0",
currency_iso_code: 'EUR',
includes_tax: true,
);
$entity = $this->service->convertPrice($dto);
@ -115,6 +114,7 @@ class DTOtoEntityConverterTest extends WebTestCase
order_number: 'TestOrderNumber',
prices: $prices,
product_url: 'https://example.com',
prices_include_vat: true,
);
$entity = $this->service->convertPurchaseInfo($dto);
@ -122,6 +122,7 @@ class DTOtoEntityConverterTest extends WebTestCase
$this->assertSame($dto->distributor_name, $entity->getSupplier()->getName());
$this->assertSame($dto->order_number, $entity->getSupplierPartNr());
$this->assertEquals($dto->product_url, $entity->getSupplierProductUrl());
$this->assertTrue($dto->prices_include_vat);
}
public function testConvertFileWithName(): void
@ -159,12 +160,13 @@ class DTOtoEntityConverterTest extends WebTestCase
$shopping_infos = [new PurchaseInfoDTO('TestDistributor', 'TestOrderNumber', [new PriceDTO(1, "10.0", 'EUR')])];
$dto = new PartDetailDTO(
provider_key: 'test_provider', provider_id: 'test_id', provider_url: 'https://invalid.invalid/test_id',
name: 'TestPart', description: 'TestDescription', category: 'TestCategory',
manufacturer: 'TestManufacturer', mpn: 'TestMPN', manufacturing_status: ManufacturingStatus::EOL,
preview_image_url: 'https://invalid.invalid/image.png',
footprint: 'DIP8', notes: 'TestNotes', mass: 10.4,
parameters: $parameters, datasheets: $datasheets, vendor_infos: $shopping_infos, images: $images
provider_key: 'test_provider', provider_id: 'test_id', name: 'TestPart',
description: 'TestDescription', category: 'TestCategory', manufacturer: 'TestManufacturer',
mpn: 'TestMPN', preview_image_url: 'https://invalid.invalid/image.png',
manufacturing_status: ManufacturingStatus::EOL,
provider_url: 'https://invalid.invalid/test_id',
footprint: 'DIP8', gtin: "1234567890123", notes: 'TestNotes', datasheets: $datasheets,
images: $images, parameters: $parameters, vendor_infos: $shopping_infos, mass: 10.4
);
$entity = $this->service->convertPart($dto);
@ -180,6 +182,8 @@ class DTOtoEntityConverterTest extends WebTestCase
$this->assertEquals($dto->mass, $entity->getMass());
$this->assertEquals($dto->footprint, $entity->getFootprint());
$this->assertEquals($dto->gtin, $entity->getGtin());
//We just check that the lenghts of parameters, datasheets, images and shopping infos are the same
//The actual content is tested in the corresponding tests
$this->assertCount(count($parameters), $entity->getParameters());