From 4c9d1b1c899832bc8738bf69acba7ce9b40b9cf7 Mon Sep 17 00:00:00 2001
From: Andrew Zhdanovskikh <andrew72ru@gmail.com>
Date: Sun, 5 Nov 2023 10:47:45 +0100
Subject: [PATCH] Tests for 'aws_rekognition_detect_moderation_labels'
 functionality

---
 .../AppData/AwsRecognitionModerationData.php  | 16 +++++-----
 src/Serializer/WordsConverter.php             |  1 +
 tests/AppData/AwsDeserializationTest.php      | 31 +++++++++++++++++--
 tests/_data/file-info.json                    | 15 +++++++++
 4 files changed, 53 insertions(+), 10 deletions(-)

diff --git a/src/File/AppData/AwsRecognitionModerationData.php b/src/File/AppData/AwsRecognitionModerationData.php
index d35ab1d..6ad7df6 100644
--- a/src/File/AppData/AwsRecognitionModerationData.php
+++ b/src/File/AppData/AwsRecognitionModerationData.php
@@ -12,13 +12,13 @@ class AwsRecognitionModerationData implements AwsRecognitionDataInterface, Seria
     /**
      * @var AwsModerationLabel[]
      */
-    private array $labels = [];
+    private array $moderationLabels = [];
 
     public static function rules(): array
     {
         return [
-            'labelModelVersion' => 'string',
-            'labels' => [AwsModerationLabel::class],
+            'moderationModelVersion' => 'string',
+            'moderationLabels' => [AwsModerationLabel::class],
         ];
     }
 
@@ -27,7 +27,7 @@ public function getLabelModelVersion(): ?string
         return $this->labelModelVersion;
     }
 
-    public function setLabelModelVersion(?string $labelModelVersion): self
+    public function setModerationModelVersion(?string $labelModelVersion): self
     {
         $this->labelModelVersion = $labelModelVersion;
 
@@ -39,13 +39,13 @@ public function setLabelModelVersion(?string $labelModelVersion): self
      */
     public function getLabels(): iterable
     {
-        return $this->labels;
+        return $this->moderationLabels;
     }
 
-    public function addLabel(AwsModerationLabel $label): self
+    public function addModerationLabel(AwsModerationLabel $label): self
     {
-        if (!\in_array($label, $this->labels, true)) {
-            $this->labels[] = $label;
+        if (!\in_array($label, $this->moderationLabels, true)) {
+            $this->moderationLabels[] = $label;
         }
 
         return $this;
diff --git a/src/Serializer/WordsConverter.php b/src/Serializer/WordsConverter.php
index eaaad24..92de6a2 100644
--- a/src/Serializer/WordsConverter.php
+++ b/src/Serializer/WordsConverter.php
@@ -16,6 +16,7 @@ public static function conversions(): array
             'files' => 'file',
             'problems' => 'problem',
             'labels' => 'label',
+            'moderationLabels' => 'moderationLabel',
             'parents' => 'parent',
             'instances' => 'instance',
         ];
diff --git a/tests/AppData/AwsDeserializationTest.php b/tests/AppData/AwsDeserializationTest.php
index 7979bb1..3801a45 100644
--- a/tests/AppData/AwsDeserializationTest.php
+++ b/tests/AppData/AwsDeserializationTest.php
@@ -5,8 +5,11 @@
 use PHPUnit\Framework\TestCase;
 use Uploadcare\File\AppData\AwsInstance;
 use Uploadcare\File\AppData\AwsLabel;
+use Uploadcare\File\AppData\AwsModerationLabel;
 use Uploadcare\File\AppData\AwsRecognitionData;
 use Uploadcare\File\AppData\AwsRecognitionLabels;
+use Uploadcare\File\AppData\AwsRecognitionModerationData;
+use Uploadcare\File\AppData\AwsRecognitionModerationLabels;
 use Uploadcare\File\AppData\BoundingBox;
 use Uploadcare\File\AppData\LabelParent;
 use Uploadcare\Interfaces\Serializer\SerializerInterface;
@@ -16,6 +19,7 @@
 class AwsDeserializationTest extends TestCase
 {
     private string $awsLabels;
+    private string $awsModerationLabels;
 
     protected function setUp(): void
     {
@@ -24,8 +28,11 @@ protected function setUp(): void
         $fileInfoArray = \json_decode($fileInfo, true, 512, JSON_THROW_ON_ERROR);
         $labels = $fileInfoArray['appdata']['aws_rekognition_detect_labels'] ?? null;
         self::assertIsArray($labels);
-
         $this->awsLabels = \json_encode($labels, JSON_THROW_ON_ERROR);
+
+        $moderationLabels = $fileInfoArray['appdata']['aws_rekognition_detect_moderation_labels'] ?? null;
+        self::assertIsArray($moderationLabels);
+        $this->awsModerationLabels = \json_encode($moderationLabels, JSON_THROW_ON_ERROR);
     }
 
     protected function getSerializer(): SerializerInterface
@@ -33,7 +40,7 @@ protected function getSerializer(): SerializerInterface
         return new Serializer(new SnackCaseConverter());
     }
 
-    public function testDeserialization(): void
+    public function testLabelsDeserialization(): void
     {
         $result = $this->getSerializer()->deserialize($this->awsLabels, AwsRecognitionLabels::class);
         self::assertInstanceOf(AwsRecognitionLabels::class, $result);
@@ -69,4 +76,24 @@ public function testDeserialization(): void
         self::assertNotEmpty($instance->getConfidence());
         self::assertInstanceOf(BoundingBox::class, $instance->getBoundingBox());
     }
+
+    public function testModerationLabelsDeserialization(): void
+    {
+        $result = $this->getSerializer()->deserialize($this->awsModerationLabels, AwsRecognitionModerationLabels::class);
+        self::assertInstanceOf(AwsRecognitionModerationLabels::class, $result);
+        self::assertInstanceOf(\DateTimeInterface::class, $result->getDatetimeCreated());
+        self::assertInstanceOf(\DateTimeInterface::class, $result->getDatetimeUpdated());
+
+        $data = $result->getData();
+        self::assertInstanceOf(AwsRecognitionModerationData::class, $data);
+        self::assertSame('6.0', $data->getLabelModelVersion());
+        $labels = $data->getLabels();
+        self::assertNotEmpty($labels);
+
+        $label = \reset($labels);
+        self::assertInstanceOf(AwsModerationLabel::class, $label);
+        self::assertIsFloat($label->getConfidence());
+        self::assertEquals('Weapons', $label->getName());
+        self::assertEquals('Violence', $label->getParentName());
+    }
 }
diff --git a/tests/_data/file-info.json b/tests/_data/file-info.json
index 030ff07..3bb706e 100644
--- a/tests/_data/file-info.json
+++ b/tests/_data/file-info.json
@@ -39,6 +39,21 @@
     "foo": "2022-09-18T08:13:31+00:00"
   },
   "appdata": {
+    "aws_rekognition_detect_moderation_labels": {
+      "data": {
+        "ModerationModelVersion": "6.0",
+        "ModerationLabels": [
+          {
+            "Confidence": 93.41645812988281,
+            "Name": "Weapons",
+            "ParentName": "Violence"
+          }
+        ]
+      },
+      "version": "2016-06-27",
+      "datetime_created": "2023-02-21T11:25:31.259763Z",
+      "datetime_updated": "2023-02-21T11:27:33.359763Z"
+    },
     "aws_rekognition_detect_labels": {
       "data": {
         "Labels": [