From ee1dbf4766d59de267d691a8cae926b3adc9a4b9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Guillaume=20Perr=C3=A9al?= <guillaume.perreal@irstea.fr>
Date: Tue, 12 Nov 2019 16:03:05 +0100
Subject: [PATCH] =?UTF-8?q?test:=20ajoute=20des=20tests=20pour=20les=20m?=
=?UTF-8?q?=C3=A9thodes=20personnalis=C3=A9s=20avec=20DTO.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Fixtures/Controller/CustomController.php | 51 +++++++++++++
.../Entity/EntityWithCustomMethods.php | 75 +++++++++++++++++++
tests/Fixtures/ValueObject/InputDTO.php | 31 ++++++++
tests/Fixtures/ValueObject/OutputDTO.php | 34 +++++++++
tests/Functional/CustomMethodTest.php | 66 ++++++++++++++++
5 files changed, 257 insertions(+)
create mode 100644 tests/Fixtures/Controller/CustomController.php
create mode 100644 tests/Fixtures/Entity/EntityWithCustomMethods.php
create mode 100644 tests/Fixtures/ValueObject/InputDTO.php
create mode 100644 tests/Fixtures/ValueObject/OutputDTO.php
create mode 100644 tests/Functional/CustomMethodTest.php
diff --git a/tests/Fixtures/Controller/CustomController.php b/tests/Fixtures/Controller/CustomController.php
new file mode 100644
index 0000000..40ac22f
--- /dev/null
+++ b/tests/Fixtures/Controller/CustomController.php
@@ -0,0 +1,51 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of "irstea/ng-model-generator-bundle".
+ *
+ * "irstea/ng-model-generator-bundle" generates Typescript interfaces for Angular using api-platform metadata.
+ * Copyright (C) 2018-2019 IRSTEA
+ *
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License and the GNU
+ * Lesser General Public License along with this program. If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+
+namespace Irstea\NgModelGeneratorBundle\Tests\Fixtures\Controller;
+
+use Irstea\NgModelGeneratorBundle\Tests\Fixtures\ValueObject\InputDTO;
+use Irstea\NgModelGeneratorBundle\Tests\Fixtures\ValueObject\OutputDTO;
+
+/**
+ * Class CustomController.
+ */
+final class CustomController
+{
+ /**
+ * @param InputDTO $input
+ *
+ * @return OutputDTO
+ */
+ public function customItem(InputDTO $input): OutputDTO
+ {
+ return new OutputDTO();
+ }
+
+ /**
+ * @param InputDTO[] $inputs
+ *
+ * @return OutputDTO[]
+ */
+ public function customCollection(array $inputs): array
+ {
+ return [];
+ }
+}
diff --git a/tests/Fixtures/Entity/EntityWithCustomMethods.php b/tests/Fixtures/Entity/EntityWithCustomMethods.php
new file mode 100644
index 0000000..193cb23
--- /dev/null
+++ b/tests/Fixtures/Entity/EntityWithCustomMethods.php
@@ -0,0 +1,75 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of "irstea/ng-model-generator-bundle".
+ *
+ * "irstea/ng-model-generator-bundle" generates Typescript interfaces for Angular using api-platform metadata.
+ * Copyright (C) 2018-2019 IRSTEA
+ *
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License and the GNU
+ * Lesser General Public License along with this program. If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+
+namespace Irstea\NgModelGeneratorBundle\Tests\Fixtures\Entity;
+
+use ApiPlatform\Core\Annotation as API;
+use Irstea\NgModelGeneratorBundle\Tests\Fixtures\ValueObject\InputDTO;
+use Irstea\NgModelGeneratorBundle\Tests\Fixtures\ValueObject\OutputDTO;
+use Ramsey\Uuid\Uuid;
+use Ramsey\Uuid\UuidInterface;
+
+/**
+ * Class EntityWithCustomMethods.
+ *
+ * @API\ApiResource(
+ * itemOperations={
+ * "get",
+ * "custom": {
+ * "method": "PUT",
+ * "input": InputDTO::class,
+ * "output": OutputDTO::class,
+ * "controller": "Irstea\NgModelGeneratorBundle\Tests\Fixtures\Controller\CustomController::customItem",
+ * }
+ * },
+ * collectionOperations={
+ * "custom": {
+ * "method": "POST",
+ * "input": InputDTO::class,
+ * "output": OutputDTO::class,
+ * "controller": "Irstea\NgModelGeneratorBundle\Tests\Fixtures\Controller\CustomController::customCollection",
+ * }
+ * }
+ * )
+ */
+class EntityWithCustomMethods
+{
+ /**
+ * @var UuidInterface
+ * @API\ApiProperty(identifier=true)
+ */
+ private $id;
+
+ public function __construct()
+ {
+ $this->id = Uuid::uuid4();
+ }
+
+ /**
+ * Get id.
+ *
+ * @return UuidInterface
+ */
+ public function getId(): UuidInterface
+ {
+ return $this->id;
+ }
+}
diff --git a/tests/Fixtures/ValueObject/InputDTO.php b/tests/Fixtures/ValueObject/InputDTO.php
new file mode 100644
index 0000000..40f45a0
--- /dev/null
+++ b/tests/Fixtures/ValueObject/InputDTO.php
@@ -0,0 +1,31 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of "irstea/ng-model-generator-bundle".
+ *
+ * "irstea/ng-model-generator-bundle" generates Typescript interfaces for Angular using api-platform metadata.
+ * Copyright (C) 2018-2019 IRSTEA
+ *
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License and the GNU
+ * Lesser General Public License along with this program. If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+
+namespace Irstea\NgModelGeneratorBundle\Tests\Fixtures\ValueObject;
+
+/**
+ * Class InputDTO.
+ */
+final class InputDTO
+{
+ /** @var int[] */
+ public $values;
+}
diff --git a/tests/Fixtures/ValueObject/OutputDTO.php b/tests/Fixtures/ValueObject/OutputDTO.php
new file mode 100644
index 0000000..c32f9ba
--- /dev/null
+++ b/tests/Fixtures/ValueObject/OutputDTO.php
@@ -0,0 +1,34 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of "irstea/ng-model-generator-bundle".
+ *
+ * "irstea/ng-model-generator-bundle" generates Typescript interfaces for Angular using api-platform metadata.
+ * Copyright (C) 2018-2019 IRSTEA
+ *
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License and the GNU
+ * Lesser General Public License along with this program. If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+
+namespace Irstea\NgModelGeneratorBundle\Tests\Fixtures\ValueObject;
+
+/**
+ * Class OutputDTO.
+ */
+final class OutputDTO
+{
+ /** @var bool */
+ public $success;
+
+ /** @var string[] */
+ public $results;
+}
diff --git a/tests/Functional/CustomMethodTest.php b/tests/Functional/CustomMethodTest.php
new file mode 100644
index 0000000..b9cd669
--- /dev/null
+++ b/tests/Functional/CustomMethodTest.php
@@ -0,0 +1,66 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of "irstea/ng-model-generator-bundle".
+ *
+ * "irstea/ng-model-generator-bundle" generates Typescript interfaces for Angular using api-platform metadata.
+ * Copyright (C) 2018-2019 IRSTEA
+ *
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License and the GNU
+ * Lesser General Public License along with this program. If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+
+namespace Irstea\NgModelGeneratorBundle\Tests\Functional;
+
+/**
+ * Class CustomMethodTest.
+ */
+final class CustomMethodTest extends GenerationTestCase
+{
+ /**
+ * @param string $snippet
+ * @param string $code
+ *
+ * @test
+ * @dataProvider listExpectedSnippets
+ */
+ public function checkCodeSnippet(string $snippet): void
+ {
+ self::assertCodeContains($snippet, self::generateTypescript());
+ }
+
+ /**
+ * @return array
+ */
+ public function listExpectedSnippets(): array
+ {
+ return [
+ 'CustomInputDTO' => [
+ <<<'TYPESCRIPT'
+export interface CustomInputDTO {
+ values: Array<number>;
+}
+TYPESCRIPT
+ ],
+ 'OutputDTO' => [
+ <<<'TYPESCRIPT'
+export interface OutputDTO {
+ results: Array<string>;
+ success: boolean;
+}
+TYPESCRIPT
+ ],
+ 'CustomItemMethod' => ['public custom(iri: IRI<EntityWithCustomMethods>, body: CustomInputDTO, options: RequestOptions = {}): Observable<OutputDTO> {'],
+ 'CustomCollectionMethod' => ['public customs(body: Array<CustomInputDTO>, options: RequestOptions = {}): Observable<Collection<OutputDTO>> {'],
+ ];
+ }
+}
--
GitLab