From e444388517c43d14a331ff1a8660c97746b68c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Thu, 16 Mar 2023 23:32:12 +0100 Subject: [PATCH] Added tests for PCBnew BOM type --- src/Controller/ProjectController.php | 4 + .../ImportExportSystem/BOMImporter.php | 2 +- .../ImportExportSystem/BOMImporterTest.php | 123 ++++++++++++++++++ .../ImportExportSystem/EntityImporterTest.php | 2 +- 4 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 tests/Services/ImportExportSystem/BOMImporterTest.php diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index c1c77f9b..9097c8dd 100644 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -32,6 +32,8 @@ use App\Services\ImportExportSystem\BOMImporter; use App\Services\ProjectSystem\ProjectBuildHelper; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\EntityManagerInterface; +use League\Csv\Exception; +use League\Csv\SyntaxError; use Omines\DataTablesBundle\DataTableFactory; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -190,6 +192,8 @@ class ProjectController extends AbstractController } } catch (\UnexpectedValueException $e) { $this->addFlash('error', t('project.bom_import.flash.invalid_file', ['%message%' => $e->getMessage()])); + } catch (SyntaxError $e) { + $this->addFlash('error', t('project.bom_import.flash.invalid_file', ['%message%' => $e->getMessage()])); } } diff --git a/src/Services/ImportExportSystem/BOMImporter.php b/src/Services/ImportExportSystem/BOMImporter.php index b846e4f8..4d9c26b0 100644 --- a/src/Services/ImportExportSystem/BOMImporter.php +++ b/src/Services/ImportExportSystem/BOMImporter.php @@ -45,7 +45,7 @@ class BOMImporter { } - public function configureOptions(OptionsResolver $resolver): OptionsResolver + protected function configureOptions(OptionsResolver $resolver): OptionsResolver { $resolver->setRequired('type'); $resolver->setAllowedValues('type', ['kicad_pcbnew']); diff --git a/tests/Services/ImportExportSystem/BOMImporterTest.php b/tests/Services/ImportExportSystem/BOMImporterTest.php new file mode 100644 index 00000000..674f1616 --- /dev/null +++ b/tests/Services/ImportExportSystem/BOMImporterTest.php @@ -0,0 +1,123 @@ +. + */ + +namespace App\Tests\Services\ImportExportSystem; + +use App\Entity\ProjectSystem\Project; +use App\Entity\ProjectSystem\ProjectBOMEntry; +use App\Services\ImportExportSystem\BOMImporter; +use PHPUnit\Framework\TestCase; +use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; +use Symfony\Component\HttpFoundation\File\File; + +class BOMImporterTest extends WebTestCase +{ + + /** + * @var BOMImporter + */ + protected $service; + + protected function setUp(): void + { + parent::setUp(); + + //Get an service instance. + self::bootKernel(); + $this->service = self::getContainer()->get(BOMImporter::class); + } + + public function testImportFileIntoProject(): void + { + $inpute = $input = <<createMock(File::class); + $file->method('getContent')->willReturn($input); + + $project = new Project(); + $this->assertCount(0, $project->getBOMEntries()); + + $bom_entries = $this->service->importFileIntoProject($file, $project, ['type' => 'kicad_pcbnew']); + $this->assertContainsOnlyInstancesOf(ProjectBOMEntry::class, $bom_entries); + $this->assertCount(4, $bom_entries); + + //Check that the BOM entries are added to the project + $this->assertCount(4, $project->getBOMEntries()); + } + + public function testStringToBOMEntriesKiCADPCB(): void + { + //Test for german input + $input = <<service->stringToBOMEntries($input, ['type' => 'kicad_pcbnew']); + + $this->assertContainsOnlyInstancesOf(ProjectBOMEntry::class, $bom); + $this->assertCount(4, $bom); + + $this->assertEquals('R19,R17', $bom[0]->getMountnames()); + $this->assertEquals(2.0, $bom[0]->getQuantity()); + $this->assertSame('4.7k (R_0805_2012Metric_Pad1.20x1.40mm_HandSolder)', $bom[0]->getName()); + $this->assertSame('Test', $bom[0]->getComment()); + + //Test for english input + $input = <<service->stringToBOMEntries($input, ['type' => 'kicad_pcbnew']); + + $this->assertContainsOnlyInstancesOf(ProjectBOMEntry::class, $bom); + $this->assertCount(4, $bom); + + $this->assertEquals('R19,R17', $bom[0]->getMountnames()); + $this->assertEquals(2.0, $bom[0]->getQuantity()); + $this->assertSame('4.7k (R_0805_2012Metric_Pad1.20x1.40mm_HandSolder)', $bom[0]->getName()); + $this->assertSame('Test', $bom[0]->getComment()); + } + + public function testStringToBOMEntriesKiCADPCBError(): void + { + $input = <<expectException(\UnexpectedValueException::class); + + $this->service->stringToBOMEntries($input, ['type' => 'kicad_pcbnew']); + } +} diff --git a/tests/Services/ImportExportSystem/EntityImporterTest.php b/tests/Services/ImportExportSystem/EntityImporterTest.php index 7f386e6b..4c13b77e 100644 --- a/tests/Services/ImportExportSystem/EntityImporterTest.php +++ b/tests/Services/ImportExportSystem/EntityImporterTest.php @@ -37,7 +37,7 @@ use Symfony\Component\Validator\ConstraintViolation; class EntityImporterTest extends WebTestCase { /** - * @var AmountFormatter + * @var EntityImporter */ protected $service;