diff --git a/config/install/jsonapi_image_styles.settings.yml b/config/install/jsonapi_image_styles.settings.yml new file mode 100644 index 0000000000000000000000000000000000000000..81e73a29c5cb8be0d8bd2dac24685af9e501fb1f --- /dev/null +++ b/config/install/jsonapi_image_styles.settings.yml @@ -0,0 +1 @@ +image_styles: [] diff --git a/config/schema/jsonapi_image_styles.schema.yml b/config/schema/jsonapi_image_styles.schema.yml new file mode 100644 index 0000000000000000000000000000000000000000..85ad8d2e451ec75487d77a11cfb4191a43e8e640 --- /dev/null +++ b/config/schema/jsonapi_image_styles.schema.yml @@ -0,0 +1,11 @@ +jsonapi_image_styles.settings: + type: config_object + label: 'JSON:API Image Styles settings' + mapping: + image_styles: + type: sequence + label: 'Image styles' + description: 'Image styles to include in JSON:API responses.' + sequence: + type: string + label: 'Image style' diff --git a/tests/src/Functional/JsonApiImageStylesFunctionalTest.php b/tests/src/Functional/JsonApiImageStylesFunctionalTest.php new file mode 100644 index 0000000000000000000000000000000000000000..f9f5b44fd50373be3ca37c1938b68e5abedf8d0e --- /dev/null +++ b/tests/src/Functional/JsonApiImageStylesFunctionalTest.php @@ -0,0 +1,34 @@ +<?php + +namespace Drupal\Tests\jsonapi_image_styles\Functional; + +use Drupal\Component\Serialization\Json; + +/** + * The test class for the main functionality. + * + * @group jsonapi_image_styles + */ +class JsonApiImageStylesFunctionalTest extends JsonApiImageStylesFunctionalTestBase { + + /** + * Tests that only the configured image styles are on the JSON:API response. + */ + public function testImageStylesOnJsonApiResponse() { + $this->createDefaultContent(1, 1, TRUE, TRUE, static::IS_NOT_MULTILINGUAL); + $response = $this->drupalGet('/jsonapi/node/article', [ + 'query' => ['include' => 'field_image'], + ]); + $output = Json::decode($response); + $this->assertArrayHasKey('image_style_uri', $output['included'][0]['attributes']); + + // Assert only the two configured image styles (large, thumbnail). + $styles = $output['included'][0]['attributes']['image_style_uri']; + $this->assertCount(2, $styles); + $this->assertNotEmpty(array_column($styles, 'large')); + $this->assertNotEmpty(array_column($styles, 'thumbnail')); + $this->assertEmpty(array_column($styles, 'wide')); + $this->assertEmpty(array_column($styles, 'medium')); + } + +} diff --git a/tests/src/Functional/JsonApiImageStylesFunctionalTestBase.php b/tests/src/Functional/JsonApiImageStylesFunctionalTestBase.php new file mode 100644 index 0000000000000000000000000000000000000000..66e8665c62a50c71a3abfa37269265a637e7d693 --- /dev/null +++ b/tests/src/Functional/JsonApiImageStylesFunctionalTestBase.php @@ -0,0 +1,35 @@ +<?php + +namespace Drupal\Tests\jsonapi_image_styles\Functional; + +use Drupal\Tests\jsonapi\Functional\JsonApiFunctionalTestBase; + +/** + * Provides helper methods for the module's functional tests. + * + * @internal + */ +abstract class JsonApiImageStylesFunctionalTestBase extends JsonApiFunctionalTestBase { + + /** + * {@inheritdoc} + */ + protected static $modules = [ + 'jsonapi_image_styles', + ]; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + $config = \Drupal::configFactory()->getEditable('jsonapi_image_styles.settings'); + $config->set('image_styles', [ + 'large' => 'large', + 'thumbnail' => 'thumbnail', + ]); + $config->save(TRUE); + $this->resetAll(); + } + +}