From e4c069ae05ec2fd9ef5c293fe806ad0dfd053b45 Mon Sep 17 00:00:00 2001 From: Manuel Peiso Date: Mon, 19 Feb 2024 09:12:10 -0600 Subject: [PATCH 1/2] Feature: Returning the schema without associations when whiteList is set to false --- .../OperationResponseAssociation.php | 8 ++++++++ .../OperationResponseAssociationTest.php | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/Lib/Operation/OperationResponseAssociation.php b/src/Lib/Operation/OperationResponseAssociation.php index 53a99b85..f5839146 100644 --- a/src/Lib/Operation/OperationResponseAssociation.php +++ b/src/Lib/Operation/OperationResponseAssociation.php @@ -71,6 +71,14 @@ public function build(OpenApiResponse $openApiResponse): Schema ->setProperties([]); } + // if $associations['whiteList'] is set to false no associations need to be loaded + if (isset($associations['whiteList']) && $associations['whiteList'] === false) { + $entity = $this->inflector::singularize($table->getAlias()); + $schema = $this->getOrCreateAssociatedSchema($entity, $table->getAlias()); + + return $schema; + } + if (!isset($associations['whiteList']) || !count($associations['whiteList'])) { $associations['whiteList'] = []; /** @var \Cake\ORM\Association $association */ diff --git a/tests/TestCase/Lib/Operation/OperationResponseAssociationTest.php b/tests/TestCase/Lib/Operation/OperationResponseAssociationTest.php index 131b02a2..dbbbc12f 100644 --- a/tests/TestCase/Lib/Operation/OperationResponseAssociationTest.php +++ b/tests/TestCase/Lib/Operation/OperationResponseAssociationTest.php @@ -106,6 +106,25 @@ public function test_white_list(): void $this->assertArrayHasKey('employee_titles', $schema->getProperties()['employee']->getProperties()); } + public function test_false_white_list(): void + { + $assoc = new OperationResponseAssociation( + (new SwaggerFactory($this->config, new RouteScanner($this->router, $this->config)))->create(), + $this->routes['employees:view'], + null + ); + + $schema = $assoc->build(new OpenApiResponse( + schemaType: 'object', + associations: ['whiteList' => false] + )); + + $this->assertInstanceOf(Schema::class, $schema); + $this->assertArrayNotHasKey('department_employees', $schema->getProperties()); + $this->assertArrayNotHasKey('employee_salaries', $schema->getProperties()); + $this->assertArrayNotHasKey('employee_titles', $schema->getProperties()); + } + public function test_null_schema(): void { $assoc = new OperationResponseAssociation( From 2834846ae714d391b9dd18b29f3f569a0f2fab3e Mon Sep 17 00:00:00 2001 From: Manuel Peiso Date: Mon, 19 Feb 2024 09:28:10 -0600 Subject: [PATCH 2/2] Fix: Updating documentation with the new option --- docs/attributes.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/attributes.md b/docs/attributes.md index 05b0c12f..b8274acb 100644 --- a/docs/attributes.md +++ b/docs/attributes.md @@ -503,7 +503,13 @@ add the `#[OpenApiSchema]` attribute to your schema class to change the default #### Associations The association property allows you to include associations defined in your Table class within your OpenAPI response -sample schema. To include all immediately associated tables (depth of one): +sample schema. To not include associations: + +```php +#[OpenApiResponse(associations: false)] +``` + +To include all immediately associated tables (depth of one): ```php #[OpenApiResponse(associations: [])]