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: [])] 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(