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": [