From 8f9e5be6a71babbd0cea24acfd99696a57701a41 Mon Sep 17 00:00:00 2001
From: wells <wells@2452278.no-reply.drupal.org>
Date: Fri, 20 Aug 2021 16:23:44 -0700
Subject: [PATCH] Issue #3227434 by wells: Implement basic tests

---
 .../install/jsonapi_image_styles.settings.yml |  1 +
 config/schema/jsonapi_image_styles.schema.yml | 11 ++++++
 .../JsonApiImageStylesFunctionalTest.php      | 34 ++++++++++++++++++
 .../JsonApiImageStylesFunctionalTestBase.php  | 35 +++++++++++++++++++
 4 files changed, 81 insertions(+)
 create mode 100644 config/install/jsonapi_image_styles.settings.yml
 create mode 100644 config/schema/jsonapi_image_styles.schema.yml
 create mode 100644 tests/src/Functional/JsonApiImageStylesFunctionalTest.php
 create mode 100644 tests/src/Functional/JsonApiImageStylesFunctionalTestBase.php

diff --git a/config/install/jsonapi_image_styles.settings.yml b/config/install/jsonapi_image_styles.settings.yml
new file mode 100644
index 0000000..81e73a2
--- /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 0000000..85ad8d2
--- /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 0000000..f9f5b44
--- /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 0000000..66e8665
--- /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();
+  }
+
+}
-- 
GitLab