diff --git a/tests/Fixtures/Controller/CustomController.php b/tests/Fixtures/Controller/CustomController.php index 40ac22fe2cdb37ef4c09b23e6e1f7b4d29b2ed5c..63748f70f5a89ae50b1e874964efb28c8a4f4b26 100644 --- a/tests/Fixtures/Controller/CustomController.php +++ b/tests/Fixtures/Controller/CustomController.php @@ -21,8 +21,7 @@ namespace Irstea\NgModelGeneratorBundle\Tests\Fixtures\Controller; -use Irstea\NgModelGeneratorBundle\Tests\Fixtures\ValueObject\InputDTO; -use Irstea\NgModelGeneratorBundle\Tests\Fixtures\ValueObject\OutputDTO; +use Irstea\NgModelGeneratorBundle\Tests\Fixtures\Entity\EntityWithCustomMethods; /** * Class CustomController. @@ -30,19 +29,19 @@ use Irstea\NgModelGeneratorBundle\Tests\Fixtures\ValueObject\OutputDTO; final class CustomController { /** - * @param InputDTO $input + * @param EntityWithCustomMethods $input * - * @return OutputDTO + * @return EntityWithCustomMethods */ - public function customItem(InputDTO $input): OutputDTO + public function customItem(EntityWithCustomMethods $input): EntityWithCustomMethods { - return new OutputDTO(); + return new EntityWithCustomMethods(); } /** - * @param InputDTO[] $inputs + * @param EntityWithCustomMethods[] $inputs * - * @return OutputDTO[] + * @return EntityWithCustomMethods[] */ public function customCollection(array $inputs): array { diff --git a/tests/Fixtures/Entity/EntityWithCustomMethods.php b/tests/Fixtures/Entity/EntityWithCustomMethods.php index 193cb23c2643028320cfc7d416c917e1e9d5f62f..a118e02b81812a11feba476eabdfbbdeee9c7f29 100644 --- a/tests/Fixtures/Entity/EntityWithCustomMethods.php +++ b/tests/Fixtures/Entity/EntityWithCustomMethods.php @@ -22,8 +22,6 @@ 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; @@ -33,18 +31,18 @@ use Ramsey\Uuid\UuidInterface; * @API\ApiResource( * itemOperations={ * "get", + * "put", + * "delete", * "custom": { * "method": "PUT", - * "input": InputDTO::class, - * "output": OutputDTO::class, * "controller": "Irstea\NgModelGeneratorBundle\Tests\Fixtures\Controller\CustomController::customItem", * } * }, * collectionOperations={ + * "get", + * "post", * "custom": { * "method": "POST", - * "input": InputDTO::class, - * "output": OutputDTO::class, * "controller": "Irstea\NgModelGeneratorBundle\Tests\Fixtures\Controller\CustomController::customCollection", * } * } diff --git a/tests/Fixtures/Entity/EntityWithDTO.php b/tests/Fixtures/Entity/EntityWithDTO.php new file mode 100644 index 0000000000000000000000000000000000000000..32015034234da0e1c772287dd1dd920674073d35 --- /dev/null +++ b/tests/Fixtures/Entity/EntityWithDTO.php @@ -0,0 +1,72 @@ +<?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={ + * "put": { + * "method": "PUT", + * "input": InputDTO::class, + * "output": OutputDTO::class, + * } + * }, + * collectionOperations={ + * "post": { + * "method": "POST", + * "input": InputDTO::class, + * "output": OutputDTO::class, + * } + * } + * ) + */ +class EntityWithDTO +{ + /** + * @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/Functional/CustomMethodTest.php b/tests/Functional/CustomMethodTest.php index b9cd66927a947ea6199fe429c274e642b69445bc..73524b725e2e8db6da40ce7df7f5315c711ce0fa 100644 --- a/tests/Functional/CustomMethodTest.php +++ b/tests/Functional/CustomMethodTest.php @@ -44,23 +44,8 @@ final class CustomMethodTest extends GenerationTestCase 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>> {'], + 'CustomItemMethod' => ['public custom(iri: IRI<EntityWithCustomMethods>, body: CustomEntityWithCustomMethods, options: RequestOptions = {}): Observable<EntityWithCustomMethods> {'], + 'CustomCollectionMethod' => ['public customs(body: Array<CustomEntityWithCustomMethods>, options: RequestOptions = {}): Observable<Collection<EntityWithCustomMethods>> {'], ]; } } diff --git a/tests/Functional/DTOTest.php b/tests/Functional/DTOTest.php new file mode 100644 index 0000000000000000000000000000000000000000..94926b61a7b45568e3436c57b5ce4b7ac6f8f151 --- /dev/null +++ b/tests/Functional/DTOTest.php @@ -0,0 +1,73 @@ +<?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 DTOTest 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 [ + 'PutInputDTO' => [ + <<<'TYPESCRIPT' +export interface PutInputDTO { + values?: Array<number>; +} +TYPESCRIPT + ], + 'PostInputDTO' => [ + <<<'TYPESCRIPT' +export interface PostInputDTO { + values: Array<number>; +} +TYPESCRIPT + ], + 'OutputDTO' => [ + <<<'TYPESCRIPT' +export interface OutputDTO { + results: Array<string>; + success: boolean; +} +TYPESCRIPT + ], + 'PutItemMethod' => ['public put(id: UUID, body: PutInputDTO, options: RequestOptions = {}): Observable<OutputDTO> {'], + 'PostCollectionMethod' => ['public post(body: PostInputDTO, options: RequestOptions = {}): Observable<OutputDTO> {'], + ]; + } +}