mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-07-09 18:04:33 +02:00
Added tests for DTOConverter
This commit is contained in:
parent
de82249d8d
commit
8ea92ef330
11 changed files with 429 additions and 11 deletions
181
tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php
Normal file
181
tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php
Normal file
|
@ -0,0 +1,181 @@
|
|||
<?php
|
||||
/*
|
||||
* This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
|
||||
*
|
||||
* Copyright (C) 2019 - 2023 Jan Böhmer (https://github.com/jbtronics)
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace App\Tests\Services\InfoProviderSystem;
|
||||
|
||||
use App\Entity\Attachments\AttachmentType;
|
||||
use App\Entity\Parts\ManufacturingStatus;
|
||||
use App\Services\InfoProviderSystem\DTOs\FileDTO;
|
||||
use App\Services\InfoProviderSystem\DTOs\ParameterDTO;
|
||||
use App\Services\InfoProviderSystem\DTOs\PartDetailDTO;
|
||||
use App\Services\InfoProviderSystem\DTOs\PriceDTO;
|
||||
use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO;
|
||||
use App\Services\InfoProviderSystem\DTOtoEntityConverter;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
||||
|
||||
class DTOtoEntityConverterTest extends WebTestCase
|
||||
{
|
||||
|
||||
private ?DTOtoEntityConverter $service = null;
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
self::bootKernel();
|
||||
$this->service = self::getContainer()->get(DTOtoEntityConverter::class);
|
||||
}
|
||||
|
||||
public function testConvertParameter(): void
|
||||
{
|
||||
$dto = new ParameterDTO(
|
||||
name: 'TestParameter',
|
||||
value_text: 'Text',
|
||||
value_typ: 10.0, value_min: 0.0, value_max: 100.0,
|
||||
unit: 'kg', symbol: 'TP', group: 'TestGroup'
|
||||
);
|
||||
|
||||
$entity = $this->service->convertParameter($dto);
|
||||
|
||||
$this->assertEquals($dto->name, $entity->getName());
|
||||
$this->assertEquals($dto->value_text, $entity->getValueText());
|
||||
$this->assertEquals($dto->value_typ, $entity->getValueTypical());
|
||||
$this->assertEquals($dto->value_min, $entity->getValueMin());
|
||||
$this->assertEquals($dto->value_max, $entity->getValueMax());
|
||||
$this->assertEquals($dto->unit, $entity->getUnit());
|
||||
$this->assertEquals($dto->symbol, $entity->getSymbol());
|
||||
$this->assertEquals($dto->group, $entity->getGroup());
|
||||
}
|
||||
|
||||
public function testConvertPriceOtherCurrency(): void
|
||||
{
|
||||
$dto = new PriceDTO(
|
||||
minimum_discount_amount: 5,
|
||||
price: "10.0",
|
||||
currency_iso_code: 'CNY',
|
||||
includes_tax: true,
|
||||
);
|
||||
|
||||
$entity = $this->service->convertPrice($dto);
|
||||
$this->assertEquals($dto->minimum_discount_amount, $entity->getMinDiscountQuantity());
|
||||
$this->assertEquals((float) $dto->price, (float) (string) $entity->getPrice());
|
||||
|
||||
//For non-base currencies, a new currency entity is created
|
||||
$currency = $entity->getCurrency();
|
||||
$this->assertEquals($dto->currency_iso_code, $currency->getIsoCode());
|
||||
}
|
||||
|
||||
public function testConvertPriceBaseCurrency(): void
|
||||
{
|
||||
$dto = new PriceDTO(
|
||||
minimum_discount_amount: 5,
|
||||
price: "10.0",
|
||||
currency_iso_code: 'EUR',
|
||||
includes_tax: true,
|
||||
);
|
||||
|
||||
$entity = $this->service->convertPrice($dto);
|
||||
|
||||
//For base currencies, the currency field is null
|
||||
$this->assertNull($entity->getCurrency());
|
||||
}
|
||||
|
||||
public function testConvertPurchaseInfo(): void
|
||||
{
|
||||
$prices = [
|
||||
new PriceDTO(1, "10.0", 'EUR'),
|
||||
new PriceDTO(5, "9.0", 'EUR'),
|
||||
];
|
||||
|
||||
$dto = new PurchaseInfoDTO(
|
||||
distributor_name: 'TestDistributor',
|
||||
order_number: 'TestOrderNumber',
|
||||
prices: $prices,
|
||||
product_url: 'https://example.com',
|
||||
);
|
||||
|
||||
$entity = $this->service->convertPurchaseInfo($dto);
|
||||
|
||||
$this->assertEquals($dto->distributor_name, $entity->getSupplier()->getName());
|
||||
$this->assertEquals($dto->order_number, $entity->getSupplierPartNr());
|
||||
$this->assertEquals($dto->product_url, $entity->getSupplierProductUrl());
|
||||
}
|
||||
|
||||
public function testConvertFileWithName(): void
|
||||
{
|
||||
$dto = new FileDTO(url: 'https://invalid.com/file.pdf', name: 'TestFile');
|
||||
$type = new AttachmentType();
|
||||
|
||||
|
||||
$entity = $this->service->convertFile($dto, $type);
|
||||
|
||||
$this->assertEquals($dto->name, $entity->getName());
|
||||
$this->assertEquals($dto->url, $entity->getUrl());
|
||||
$this->assertEquals($type, $entity->getAttachmentType());
|
||||
}
|
||||
|
||||
public function testConvertFileWithoutName(): void
|
||||
{
|
||||
$dto = new FileDTO(url: 'https://invalid.invalid/file.pdf');
|
||||
$type = new AttachmentType();
|
||||
|
||||
|
||||
$entity = $this->service->convertFile($dto, $type);
|
||||
|
||||
//If no name is given, the name is derived from the url
|
||||
$this->assertEquals('file.pdf', $entity->getName());
|
||||
$this->assertEquals($dto->url, $entity->getUrl());
|
||||
$this->assertEquals($type, $entity->getAttachmentType());
|
||||
}
|
||||
|
||||
public function testConvertPart()
|
||||
{
|
||||
$parameters = [new ParameterDTO('Test', 'Test')];
|
||||
$datasheets = [new FileDTO('https://invalid.invalid/file.pdf')];
|
||||
$images = [new FileDTO('https://invalid.invalid/image.png')];
|
||||
$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
|
||||
);
|
||||
|
||||
$entity = $this->service->convertPart($dto);
|
||||
|
||||
$this->assertSame($dto->name, $entity->getName());
|
||||
$this->assertSame($dto->description, $entity->getDescription());
|
||||
$this->assertSame($dto->notes, $entity->getComment());
|
||||
|
||||
$this->assertSame($dto->manufacturer, $entity->getManufacturer()->getName());
|
||||
$this->assertSame($dto->mpn, $entity->getManufacturerProductNumber());
|
||||
$this->assertSame($dto->manufacturing_status, $entity->getManufacturingStatus());
|
||||
|
||||
$this->assertEquals($dto->mass, $entity->getMass());
|
||||
$this->assertEquals($dto->footprint, $entity->getFootprint());
|
||||
|
||||
//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());
|
||||
$this->assertCount(count($shopping_infos), $entity->getOrderdetails());
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue