From 99c7d7b61416f63c0f81da06768724b3d29eb19d Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 18:53:18 +0100 Subject: [PATCH 01/65] Create ValidatesPublications.php --- .../Features/Publications/ValidatesPublications.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 packages/framework/src/Framework/Features/Publications/ValidatesPublications.php diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublications.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublications.php new file mode 100644 index 00000000000..fddbf7eb027 --- /dev/null +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublications.php @@ -0,0 +1,13 @@ + Date: Mon, 2 Jan 2023 18:53:20 +0100 Subject: [PATCH 02/65] Create ValidatesPublicationsTest.php --- .../tests/Feature/ValidatesPublicationsTest.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 packages/framework/tests/Feature/ValidatesPublicationsTest.php diff --git a/packages/framework/tests/Feature/ValidatesPublicationsTest.php b/packages/framework/tests/Feature/ValidatesPublicationsTest.php new file mode 100644 index 00000000000..5b61bbb4de1 --- /dev/null +++ b/packages/framework/tests/Feature/ValidatesPublicationsTest.php @@ -0,0 +1,16 @@ + Date: Mon, 2 Jan 2023 18:54:11 +0100 Subject: [PATCH 03/65] Rename class ValidatesPublications to ValidatesPublicationField --- ...alidatesPublications.php => ValidatesPublicationField.php} | 2 +- .../framework/tests/Feature/ValidatesPublicationsTest.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename packages/framework/src/Framework/Features/Publications/{ValidatesPublications.php => ValidatesPublicationField.php} (83%) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublications.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php similarity index 83% rename from packages/framework/src/Framework/Features/Publications/ValidatesPublications.php rename to packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index fddbf7eb027..b8d097c8229 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublications.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -7,7 +7,7 @@ /** * @see \Hyde\Framework\Testing\Feature\ValidatesPublicationsTest */ -class ValidatesPublications +class ValidatesPublicationField { // } diff --git a/packages/framework/tests/Feature/ValidatesPublicationsTest.php b/packages/framework/tests/Feature/ValidatesPublicationsTest.php index 5b61bbb4de1..dc3156b16d5 100644 --- a/packages/framework/tests/Feature/ValidatesPublicationsTest.php +++ b/packages/framework/tests/Feature/ValidatesPublicationsTest.php @@ -4,11 +4,11 @@ namespace Hyde\Framework\Testing\Feature; -use Hyde\Framework\Features\Publications\ValidatesPublications; +use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Hyde\Testing\TestCase; /** - * @covers \Hyde\Framework\Features\Publications\ValidatesPublications + * @covers \Hyde\Framework\Features\Publications\ValidatesPublicationField */ class ValidatesPublicationsTest extends TestCase { From 4f529254a3b90146a37dbac193d87d350de994da Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Mon, 2 Jan 2023 17:54:26 +0000 Subject: [PATCH 04/65] Apply fixes from StyleCI --- packages/framework/tests/Feature/ValidatesPublicationsTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/framework/tests/Feature/ValidatesPublicationsTest.php b/packages/framework/tests/Feature/ValidatesPublicationsTest.php index dc3156b16d5..e3955d7803f 100644 --- a/packages/framework/tests/Feature/ValidatesPublicationsTest.php +++ b/packages/framework/tests/Feature/ValidatesPublicationsTest.php @@ -4,7 +4,6 @@ namespace Hyde\Framework\Testing\Feature; -use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Hyde\Testing\TestCase; /** From faab5752337b60b298f869f5ad0c8a932f6d9d72 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 18:56:33 +0100 Subject: [PATCH 05/65] Set up class properties and constructor --- .../Publications/ValidatesPublicationField.php | 12 +++++++++++- .../tests/Feature/ValidatesPublicationsTest.php | 11 ++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index b8d097c8229..e70e7c9715c 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -4,10 +4,20 @@ namespace Hyde\Framework\Features\Publications; +use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; +use Hyde\Framework\Features\Publications\Models\PublicationType; + /** * @see \Hyde\Framework\Testing\Feature\ValidatesPublicationsTest */ class ValidatesPublicationField { - // + protected PublicationType $publicationType; + protected PublicationFieldDefinition $fieldDefinition; + + public function __construct(PublicationType $publicationType, PublicationFieldDefinition $fieldDefinition) + { + $this->publicationType = $publicationType; + $this->fieldDefinition = $fieldDefinition; + } } diff --git a/packages/framework/tests/Feature/ValidatesPublicationsTest.php b/packages/framework/tests/Feature/ValidatesPublicationsTest.php index e3955d7803f..dcf6a7ed02e 100644 --- a/packages/framework/tests/Feature/ValidatesPublicationsTest.php +++ b/packages/framework/tests/Feature/ValidatesPublicationsTest.php @@ -4,6 +4,9 @@ namespace Hyde\Framework\Testing\Feature; +use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; +use Hyde\Framework\Features\Publications\Models\PublicationType; +use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Hyde\Testing\TestCase; /** @@ -11,5 +14,11 @@ */ class ValidatesPublicationsTest extends TestCase { - // + public function testConstruct() + { + $this->assertInstanceOf(ValidatesPublicationField::class, new ValidatesPublicationField( + $this->createMock(PublicationType::class), + $this->createMock(PublicationFieldDefinition::class) + )); + } } From 554b72ec05af1130333ac90ab8070e281acc3bfd Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 18:59:31 +0100 Subject: [PATCH 06/65] Copy over validation methods from PublicationFieldDefinition --- .../ValidatesPublicationField.php | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index e70e7c9715c..a8aed59a1ff 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -6,6 +6,13 @@ use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; use Hyde\Framework\Features\Publications\Models\PublicationType; +use Illuminate\Contracts\Support\Arrayable; + +use Illuminate\Support\Collection; + +use function collect; +use function Hyde\evaluate_arrayable; +use function validator; /** * @see \Hyde\Framework\Testing\Feature\ValidatesPublicationsTest @@ -20,4 +27,19 @@ public function __construct(PublicationType $publicationType, PublicationFieldDe $this->publicationType = $publicationType; $this->fieldDefinition = $fieldDefinition; } + + /** + * @param \Hyde\Framework\Features\Publications\Models\PublicationType|null $publicationType Required only when using the 'image' type. + */ + public function getValidationRules(?PublicationType $publicationType = null): Collection + { + return collect(PublicationFieldService::getValidationRulesForPublicationFieldDefinition($publicationType, $this)); + } + + public function validate(mixed $input = null, Arrayable|array|null $fieldRules = null, ?PublicationType $publicationType = null): array + { + $rules = evaluate_arrayable($fieldRules ?? $this->getValidationRules($publicationType)); + + return validator([$this->name => $input], [$this->name => $rules])->validate(); + } } From 1b6dea8c605192d221a175909251706714275bb0 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:00:20 +0100 Subject: [PATCH 07/65] Deprecate validation methods in PublicationFieldDefinition --- .../Publications/Models/PublicationFieldDefinition.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 9cd8b16c211..7427fef868b 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -53,6 +53,8 @@ public function toArray(): array } /** + * @deprecated Use the ValidatesPublicationField class instead. + * * @param \Hyde\Framework\Features\Publications\Models\PublicationType|null $publicationType Required only when using the 'image' type. */ public function getValidationRules(?PublicationType $publicationType = null): Collection @@ -60,7 +62,11 @@ public function getValidationRules(?PublicationType $publicationType = null): Co return collect(PublicationFieldService::getValidationRulesForPublicationFieldDefinition($publicationType, $this)); } - /** @param \Hyde\Framework\Features\Publications\Models\PublicationType|null $publicationType Required only when using the 'image' type. */ + /** + * @deprecated Use the ValidatesPublicationField class instead. + * + * @param \Hyde\Framework\Features\Publications\Models\PublicationType|null $publicationType Required only when using the 'image' type. + */ public function validate(mixed $input = null, Arrayable|array|null $fieldRules = null, ?PublicationType $publicationType = null): array { $rules = evaluate_arrayable($fieldRules ?? $this->getValidationRules($publicationType)); From db6e0ffdbbe8d15c928cb580b72189cf0ea5b4fb Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:01:53 +0100 Subject: [PATCH 08/65] Move validation helpers from PublicationFieldService to ValidatesPublicationField --- .../Models/PublicationFieldDefinition.php | 6 +-- .../Publications/PublicationFieldService.php | 52 +------------------ .../ValidatesPublicationField.php | 52 +++++++++++++++++-- 3 files changed, 51 insertions(+), 59 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 7427fef868b..93fd301abc9 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -7,8 +7,8 @@ use function array_filter; use function collect; use function Hyde\evaluate_arrayable; -use Hyde\Framework\Features\Publications\PublicationFieldService; use Hyde\Framework\Features\Publications\PublicationFieldTypes; +use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Hyde\Support\Concerns\Serializable; use Hyde\Support\Contracts\SerializableContract; use Illuminate\Contracts\Support\Arrayable; @@ -59,13 +59,13 @@ public function toArray(): array */ public function getValidationRules(?PublicationType $publicationType = null): Collection { - return collect(PublicationFieldService::getValidationRulesForPublicationFieldDefinition($publicationType, $this)); + return collect(ValidatesPublicationField::getValidationRulesForPublicationFieldDefinition($publicationType, $this)); } /** * @deprecated Use the ValidatesPublicationField class instead. * - * @param \Hyde\Framework\Features\Publications\Models\PublicationType|null $publicationType Required only when using the 'image' type. + * @param \Hyde\Framework\Features\Publications\Models\PublicationType|null $publicationType Required only when using the 'image' type. */ public function validate(mixed $input = null, Arrayable|array|null $fieldRules = null, ?PublicationType $publicationType = null): array { diff --git a/packages/framework/src/Framework/Features/Publications/PublicationFieldService.php b/packages/framework/src/Framework/Features/Publications/PublicationFieldService.php index 45011c63d69..5254afb1512 100644 --- a/packages/framework/src/Framework/Features/Publications/PublicationFieldService.php +++ b/packages/framework/src/Framework/Features/Publications/PublicationFieldService.php @@ -4,60 +4,10 @@ namespace Hyde\Framework\Features\Publications; -use function array_merge; -use function collect; -use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; -use Hyde\Framework\Features\Publications\Models\PublicationType; - /** * @see \Hyde\Framework\Testing\Feature\PublicationFieldServiceTest */ class PublicationFieldService { - public static function getValidationRulesForPublicationFieldDefinition(?PublicationType $publicationType, PublicationFieldDefinition $fieldDefinition): array - { - return array_merge( - self::getDefaultRulesForFieldType($fieldDefinition->type), - self::makeDynamicValidationRulesForPublicationFieldEntry($fieldDefinition, $publicationType), - self::getCustomRulesFromPublicationTypeSchema($fieldDefinition) - ); - } - - protected static function makeDynamicValidationRulesForPublicationFieldEntry( - Models\PublicationFieldDefinition $fieldDefinition, ?PublicationType $publicationType - ): array { - if ($fieldDefinition->type == PublicationFieldTypes::Image) { - if ($publicationType !== null) { - $mediaFiles = PublicationService::getMediaForPubType($publicationType); - $valueList = $mediaFiles->implode(','); - } else { - $valueList = ''; - } - - return ["in:$valueList"]; - } - - if ($fieldDefinition->type == PublicationFieldTypes::Tag) { - if ($publicationType !== null) { - $tagValues = PublicationService::getValuesForTagName($publicationType->getIdentifier()) ?? collect([]); - $valueList = $tagValues->implode(','); - } else { - $valueList = ''; - } - - return ["in:$valueList"]; - } - - return []; - } - - protected static function getDefaultRulesForFieldType(PublicationFieldTypes $type): array - { - return $type->rules(); - } - - protected static function getCustomRulesFromPublicationTypeSchema(PublicationFieldDefinition $fieldDefinition): array - { - return $fieldDefinition->rules; - } + // } diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index a8aed59a1ff..2c81bf08aff 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -4,14 +4,12 @@ namespace Hyde\Framework\Features\Publications; +use function collect; +use function Hyde\evaluate_arrayable; use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; use Hyde\Framework\Features\Publications\Models\PublicationType; use Illuminate\Contracts\Support\Arrayable; - use Illuminate\Support\Collection; - -use function collect; -use function Hyde\evaluate_arrayable; use function validator; /** @@ -28,12 +26,56 @@ public function __construct(PublicationType $publicationType, PublicationFieldDe $this->fieldDefinition = $fieldDefinition; } + public static function makeDynamicValidationRulesForPublicationFieldEntry(Models\PublicationFieldDefinition $fieldDefinition, ?PublicationType $publicationType): array { + if ($fieldDefinition->type == PublicationFieldTypes::Image) { + if ($publicationType !== null) { + $mediaFiles = PublicationService::getMediaForPubType($publicationType); + $valueList = $mediaFiles->implode(','); + } else { + $valueList = ''; + } + + return ["in:$valueList"]; + } + + if ($fieldDefinition->type == PublicationFieldTypes::Tag) { + if ($publicationType !== null) { + $tagValues = PublicationService::getValuesForTagName($publicationType->getIdentifier()) ?? collect([]); + $valueList = $tagValues->implode(','); + } else { + $valueList = ''; + } + + return ["in:$valueList"]; + } + + return []; + } + + public static function getCustomRulesFromPublicationTypeSchema(PublicationFieldDefinition $fieldDefinition): array + { + return $fieldDefinition->rules; + } + + public static function getDefaultRulesForFieldType(PublicationFieldTypes $type): array + { + return $type->rules(); + } + + public static function getValidationRulesForPublicationFieldDefinition(?PublicationType $publicationType, PublicationFieldDefinition $fieldDefinition): array { + return array_merge( + self::getDefaultRulesForFieldType($fieldDefinition->type), + self::makeDynamicValidationRulesForPublicationFieldEntry($fieldDefinition, $publicationType), + self::getCustomRulesFromPublicationTypeSchema($fieldDefinition) + ); + } + /** * @param \Hyde\Framework\Features\Publications\Models\PublicationType|null $publicationType Required only when using the 'image' type. */ public function getValidationRules(?PublicationType $publicationType = null): Collection { - return collect(PublicationFieldService::getValidationRulesForPublicationFieldDefinition($publicationType, $this)); + return collect(self::getValidationRulesForPublicationFieldDefinition($publicationType, $this)); } public function validate(mixed $input = null, Arrayable|array|null $fieldRules = null, ?PublicationType $publicationType = null): array From c3e35b9bda32b8a22039d5e4d257ae4e014f1b9b Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Mon, 2 Jan 2023 18:04:09 +0000 Subject: [PATCH 09/65] Apply fixes from StyleCI --- .../Features/Publications/ValidatesPublicationField.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 2c81bf08aff..95039751525 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -26,7 +26,8 @@ public function __construct(PublicationType $publicationType, PublicationFieldDe $this->fieldDefinition = $fieldDefinition; } - public static function makeDynamicValidationRulesForPublicationFieldEntry(Models\PublicationFieldDefinition $fieldDefinition, ?PublicationType $publicationType): array { + public static function makeDynamicValidationRulesForPublicationFieldEntry(Models\PublicationFieldDefinition $fieldDefinition, ?PublicationType $publicationType): array + { if ($fieldDefinition->type == PublicationFieldTypes::Image) { if ($publicationType !== null) { $mediaFiles = PublicationService::getMediaForPubType($publicationType); @@ -62,7 +63,8 @@ public static function getDefaultRulesForFieldType(PublicationFieldTypes $type): return $type->rules(); } - public static function getValidationRulesForPublicationFieldDefinition(?PublicationType $publicationType, PublicationFieldDefinition $fieldDefinition): array { + public static function getValidationRulesForPublicationFieldDefinition(?PublicationType $publicationType, PublicationFieldDefinition $fieldDefinition): array + { return array_merge( self::getDefaultRulesForFieldType($fieldDefinition->type), self::makeDynamicValidationRulesForPublicationFieldEntry($fieldDefinition, $publicationType), From 8123c87347be3776241077b701f7d3faacc9dd39 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:05:20 +0100 Subject: [PATCH 10/65] Refactor getValidationRules to be object oriented --- .../Features/Publications/ValidatesPublicationField.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 95039751525..648e8b75c2c 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -72,17 +72,14 @@ public static function getValidationRulesForPublicationFieldDefinition(?Publicat ); } - /** - * @param \Hyde\Framework\Features\Publications\Models\PublicationType|null $publicationType Required only when using the 'image' type. - */ - public function getValidationRules(?PublicationType $publicationType = null): Collection + public function getValidationRules(): Collection { - return collect(self::getValidationRulesForPublicationFieldDefinition($publicationType, $this)); + return collect(self::getValidationRulesForPublicationFieldDefinition($this->publicationType, $this->fieldDefinition)); } public function validate(mixed $input = null, Arrayable|array|null $fieldRules = null, ?PublicationType $publicationType = null): array { - $rules = evaluate_arrayable($fieldRules ?? $this->getValidationRules($publicationType)); + $rules = evaluate_arrayable($fieldRules ?? $this->getValidationRules()); return validator([$this->name => $input], [$this->name => $rules])->validate(); } From 03c0a87a89fbfd3b72918e1f4d6b192d17caaf01 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:06:15 +0100 Subject: [PATCH 11/65] Refactor validate to be object oriented --- .../Features/Publications/ValidatesPublicationField.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 648e8b75c2c..66f228936d9 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -77,10 +77,10 @@ public function getValidationRules(): Collection return collect(self::getValidationRulesForPublicationFieldDefinition($this->publicationType, $this->fieldDefinition)); } - public function validate(mixed $input = null, Arrayable|array|null $fieldRules = null, ?PublicationType $publicationType = null): array + public function validate(mixed $input = null, Arrayable|array|null $fieldRules = null): array { $rules = evaluate_arrayable($fieldRules ?? $this->getValidationRules()); - return validator([$this->name => $input], [$this->name => $rules])->validate(); + return validator([$this->fieldDefinition->name => $input], [$this->fieldDefinition->name => $rules])->validate(); } } From a07eda7fc1381cdf1bee201ec08083870ffa9e34 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:06:33 +0100 Subject: [PATCH 12/65] Split comma-separated values into multiple lines --- .../Features/Publications/ValidatesPublicationField.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 66f228936d9..b3d44a49296 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -81,6 +81,9 @@ public function validate(mixed $input = null, Arrayable|array|null $fieldRules = { $rules = evaluate_arrayable($fieldRules ?? $this->getValidationRules()); - return validator([$this->fieldDefinition->name => $input], [$this->fieldDefinition->name => $rules])->validate(); + return validator( + [$this->fieldDefinition->name => $input], + [$this->fieldDefinition->name => $rules] + )->validate(); } } From d001a1fbc0cd1abcd0a7d3def424d4dcd3dc9fde Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:10:01 +0100 Subject: [PATCH 13/65] Update PublicationFieldDefinition getValidationRules method to defer to service --- .../Features/Publications/Models/PublicationFieldDefinition.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 93fd301abc9..f7d641da8bc 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -59,7 +59,7 @@ public function toArray(): array */ public function getValidationRules(?PublicationType $publicationType = null): Collection { - return collect(ValidatesPublicationField::getValidationRulesForPublicationFieldDefinition($publicationType, $this)); + return (new ValidatesPublicationField($publicationType, $this))->getValidationRules(); } /** From 22f559afeac7ca080f74a097584a24e246d8221e Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:11:33 +0100 Subject: [PATCH 14/65] PublicationFieldDefinition::getValidationRules now no longer accepts null for the type In production, we only validate fields that actually exist (and thus have a publication type). The only reason it allowed null was to make it easier to test, but that's not a reason to add complexity. Instead we can just mock the publication type in the tests. --- .../Publications/Models/PublicationFieldDefinition.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index f7d641da8bc..c01777ba2bd 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -54,10 +54,8 @@ public function toArray(): array /** * @deprecated Use the ValidatesPublicationField class instead. - * - * @param \Hyde\Framework\Features\Publications\Models\PublicationType|null $publicationType Required only when using the 'image' type. */ - public function getValidationRules(?PublicationType $publicationType = null): Collection + public function getValidationRules(PublicationType $publicationType): Collection { return (new ValidatesPublicationField($publicationType, $this))->getValidationRules(); } From 40ad9931e07a46069b0e57ab7fdc0adadcddb540 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:12:57 +0100 Subject: [PATCH 15/65] Mock the publication type in test See 22f559afeac7ca080f74a097584a24e246d8221e --- .../PublicationFieldDefinitionTest.php | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php index 599653991e1..600dbe5dcdc 100644 --- a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php +++ b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php @@ -146,19 +146,19 @@ public function testValidateMethodAcceptsArrayableOfRules() public function testGetRules() { - $rules = (new PublicationFieldDefinition('string', 'myString'))->getValidationRules(); + $rules = (new PublicationFieldDefinition('string', 'myString'))->getValidationRules($this->createMock(PublicationType::class)); $this->assertSame(['string'], $rules->toArray()); } public function testGetRulesWithCustomTypeRules() { - $rules = (new PublicationFieldDefinition('string', 'myString', rules: ['foo', 'bar']))->getValidationRules(); + $rules = (new PublicationFieldDefinition('string', 'myString', rules: ['foo', 'bar']))->getValidationRules($this->createMock(PublicationType::class)); $this->assertSame(['string', 'foo', 'bar'], $rules->toArray()); } public function testGetRulesForArray() { - $rules = (new PublicationFieldDefinition('array', 'myArray'))->getValidationRules(); + $rules = (new PublicationFieldDefinition('array', 'myArray'))->getValidationRules($this->createMock(PublicationType::class)); $this->assertSame(['array'], $rules->toArray()); } @@ -176,7 +176,7 @@ public function testValidateArrayFails() public function testGetRulesForDatetime() { - $rules = (new PublicationFieldDefinition('datetime', 'myDatetime'))->getValidationRules(); + $rules = (new PublicationFieldDefinition('datetime', 'myDatetime'))->getValidationRules($this->createMock(PublicationType::class)); $this->assertSame(['date'], $rules->toArray()); } @@ -194,25 +194,25 @@ public function testValidateDatetimeFailsForInvalidType() public function testGetRulesForFloat() { - $rules = (new PublicationFieldDefinition('float', 'myFloat'))->getValidationRules(); + $rules = (new PublicationFieldDefinition('float', 'myFloat'))->getValidationRules($this->createMock(PublicationType::class)); $this->assertSame(['numeric'], $rules->toArray()); } public function testGetRulesForInteger() { - $rules = (new PublicationFieldDefinition('integer', 'myInteger'))->getValidationRules(); + $rules = (new PublicationFieldDefinition('integer', 'myInteger'))->getValidationRules($this->createMock(PublicationType::class)); $this->assertSame(['integer', 'numeric'], $rules->toArray()); } public function testGetRulesForString() { - $rules = (new PublicationFieldDefinition('string', 'myString'))->getValidationRules(); + $rules = (new PublicationFieldDefinition('string', 'myString'))->getValidationRules($this->createMock(PublicationType::class)); $this->assertSame(['string'], $rules->toArray()); } public function testGetRulesForText() { - $rules = (new PublicationFieldDefinition('text', 'myText'))->getValidationRules(); + $rules = (new PublicationFieldDefinition('text', 'myText'))->getValidationRules($this->createMock(PublicationType::class)); $this->assertSame(['string'], $rules->toArray()); } @@ -227,13 +227,13 @@ public function testGetRulesForImage() public function testGetRulesForTag() { - $rules = (new PublicationFieldDefinition('tag', 'myTag'))->getValidationRules(); + $rules = (new PublicationFieldDefinition('tag', 'myTag'))->getValidationRules($this->createMock(PublicationType::class)); $this->assertSame(['in:'], $rules->toArray()); } public function testGetRulesForUrl() { - $rules = (new PublicationFieldDefinition('url', 'myUrl'))->getValidationRules(); + $rules = (new PublicationFieldDefinition('url', 'myUrl'))->getValidationRules($this->createMock(PublicationType::class)); $this->assertSame(['url'], $rules->toArray()); } From e39540f8d9edb4813b4bee74a55637bb05c879a2 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:13:37 +0100 Subject: [PATCH 16/65] Update PublicationFieldDefinition validate method to defer to service --- .../Publications/Models/PublicationFieldDefinition.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index c01777ba2bd..2be8d4abbdd 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -67,8 +67,6 @@ public function getValidationRules(PublicationType $publicationType): Collection */ public function validate(mixed $input = null, Arrayable|array|null $fieldRules = null, ?PublicationType $publicationType = null): array { - $rules = evaluate_arrayable($fieldRules ?? $this->getValidationRules($publicationType)); - - return validator([$this->name => $input], [$this->name => $rules])->validate(); + return (new ValidatesPublicationField($publicationType, $this))->validate($input, $fieldRules); } } From a716a9413b75afe43cbba4dec39b3c9d3e744384 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:14:57 +0100 Subject: [PATCH 17/65] PublicationFieldDefinition::validate now no longer accepts null for the type --- .../Publications/Models/PublicationFieldDefinition.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 2be8d4abbdd..c1e68a24914 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -62,10 +62,8 @@ public function getValidationRules(PublicationType $publicationType): Collection /** * @deprecated Use the ValidatesPublicationField class instead. - * - * @param \Hyde\Framework\Features\Publications\Models\PublicationType|null $publicationType Required only when using the 'image' type. */ - public function validate(mixed $input = null, Arrayable|array|null $fieldRules = null, ?PublicationType $publicationType = null): array + public function validate(mixed $input = null, Arrayable|array|null $fieldRules = null, PublicationType $publicationType): array { return (new ValidatesPublicationField($publicationType, $this))->validate($input, $fieldRules); } From fb528278842a0c97c67c30c62f2fb77193461c62 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:15:55 +0100 Subject: [PATCH 18/65] Reorder PublicationFieldDefinition::validate method arguments to put required argument first --- .../Commands/ValidatePublicationsCommand.php | 4 +-- .../Models/PublicationFieldDefinition.php | 2 +- .../PublicationFieldDefinitionTest.php | 27 ++++++++++--------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php index 2607d4333fe..4865e1134e2 100644 --- a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php +++ b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php @@ -80,9 +80,9 @@ public function safeHandle(): int } $pubTypeField->validate( + $pubType, $publication->matter->get($fieldName), - $publicationFieldRules->get($fieldName), - $pubType + $publicationFieldRules->get($fieldName) ); $this->output->writeln(" $checkmark"); } catch (Exception $e) { diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index c1e68a24914..f4fa35eeb52 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -63,7 +63,7 @@ public function getValidationRules(PublicationType $publicationType): Collection /** * @deprecated Use the ValidatesPublicationField class instead. */ - public function validate(mixed $input = null, Arrayable|array|null $fieldRules = null, PublicationType $publicationType): array + public function validate(PublicationType $publicationType, mixed $input = null, Arrayable|array|null $fieldRules = null): array { return (new ValidatesPublicationField($publicationType, $this))->validate($input, $fieldRules); } diff --git a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php index 600dbe5dcdc..3e888053e22 100644 --- a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php +++ b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php @@ -101,46 +101,46 @@ public function test_name_gets_stored_as_kebab_case() public function testValidate() { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate('foo'); + $validated = (new PublicationFieldDefinition('string', 'myString'))->validate('foo', 'foo'); $this->assertSame(['my-string' => 'foo'], $validated); $this->expectValidationException('The my-string must be a string.'); - (new PublicationFieldDefinition('string', 'myString'))->validate(1); + (new PublicationFieldDefinition('string', 'myString'))->validate(1, 1); } public function testValidateWithCustomTypeRules() { - $validated = (new PublicationFieldDefinition('string', 'myString', rules: ['min:3']))->validate('foo'); + $validated = (new PublicationFieldDefinition('string', 'myString', rules: ['min:3']))->validate('foo', 'foo'); $this->assertSame(['my-string' => 'foo'], $validated); $this->expectValidationException('The my-string must be at least 5 characters.'); - (new PublicationFieldDefinition('string', 'myString', rules: ['min:5']))->validate('foo'); + (new PublicationFieldDefinition('string', 'myString', rules: ['min:5']))->validate('foo', 'foo'); } public function testValidateWithCustomRuleCollection() { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate('foo', ['min:3']); + $validated = (new PublicationFieldDefinition('string', 'myString'))->validate('foo', 'foo', ['min:3']); $this->assertSame(['my-string' => 'foo'], $validated); $this->expectValidationException('The my-string must be at least 5 characters.'); - (new PublicationFieldDefinition('string', 'myString'))->validate('foo', ['min:5']); + (new PublicationFieldDefinition('string', 'myString'))->validate('foo', 'foo', ['min:5']); } public function testValidateWithCustomRuleCollectionOverridesDefaultRules() { $this->expectValidationException('The my-string must be a number.'); - (new PublicationFieldDefinition('string', 'myString'))->validate('foo', ['numeric']); + (new PublicationFieldDefinition('string', 'myString'))->validate('foo', 'foo', ['numeric']); } public function testValidateMethodAcceptsArrayOfRules() { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate('foo', ['min:3']); + $validated = (new PublicationFieldDefinition('string', 'myString'))->validate('foo', 'foo', ['min:3']); $this->assertSame(['my-string' => 'foo'], $validated); } public function testValidateMethodAcceptsArrayableOfRules() { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate('foo', collect(['min:3'])); + $validated = (new PublicationFieldDefinition('string', 'myString'))->validate('foo', 'foo', collect(['min:3'])); $this->assertSame(['my-string' => 'foo'], $validated); } @@ -164,14 +164,15 @@ public function testGetRulesForArray() public function testValidateArrayPasses() { - $validated = (new PublicationFieldDefinition('array', 'myArray'))->validate(['foo', 'bar', 'baz']); + $validated = (new PublicationFieldDefinition('array', 'myArray'))->validate(['foo', 'bar', 'baz'], + ['foo', 'bar', 'baz']); $this->assertSame(['my-array' => ['foo', 'bar', 'baz']], $validated); } public function testValidateArrayFails() { $this->expectValidationException('The my-array must be an array.'); - (new PublicationFieldDefinition('array', 'myArray'))->validate('foo'); + (new PublicationFieldDefinition('array', 'myArray'))->validate('foo', 'foo'); } public function testGetRulesForDatetime() @@ -182,14 +183,14 @@ public function testGetRulesForDatetime() public function testValidateDatetimePasses() { - $validated = (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate('2021-01-01'); + $validated = (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate('2021-01-01', '2021-01-01'); $this->assertSame(['my-datetime' => '2021-01-01'], $validated); } public function testValidateDatetimeFailsForInvalidType() { $this->expectValidationException('The my-datetime is not a valid date.'); - (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate('string'); + (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate('string', 'string'); } public function testGetRulesForFloat() From 58929d87e84109b50d929a6354377d522004ad92 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:16:18 +0100 Subject: [PATCH 19/65] Revert deprecations as methods now no longer contain logic --- .../Publications/Models/PublicationFieldDefinition.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index f4fa35eeb52..579376f642a 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -52,17 +52,11 @@ public function toArray(): array ]); } - /** - * @deprecated Use the ValidatesPublicationField class instead. - */ public function getValidationRules(PublicationType $publicationType): Collection { return (new ValidatesPublicationField($publicationType, $this))->getValidationRules(); } - /** - * @deprecated Use the ValidatesPublicationField class instead. - */ public function validate(PublicationType $publicationType, mixed $input = null, Arrayable|array|null $fieldRules = null): array { return (new ValidatesPublicationField($publicationType, $this))->validate($input, $fieldRules); From 6d38d20cf5aad462515c61ab111fd776c69203d7 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:18:05 +0100 Subject: [PATCH 20/65] Mock the publication type in test --- .../PublicationFieldDefinitionTest.php | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php index 3e888053e22..ae45abfdacd 100644 --- a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php +++ b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php @@ -101,46 +101,46 @@ public function test_name_gets_stored_as_kebab_case() public function testValidate() { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate('foo', 'foo'); + $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 'foo'); $this->assertSame(['my-string' => 'foo'], $validated); $this->expectValidationException('The my-string must be a string.'); - (new PublicationFieldDefinition('string', 'myString'))->validate(1, 1); + (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 1); } public function testValidateWithCustomTypeRules() { - $validated = (new PublicationFieldDefinition('string', 'myString', rules: ['min:3']))->validate('foo', 'foo'); + $validated = (new PublicationFieldDefinition('string', 'myString', rules: ['min:3']))->validate($this->createMock(PublicationType::class), 'foo'); $this->assertSame(['my-string' => 'foo'], $validated); $this->expectValidationException('The my-string must be at least 5 characters.'); - (new PublicationFieldDefinition('string', 'myString', rules: ['min:5']))->validate('foo', 'foo'); + (new PublicationFieldDefinition('string', 'myString', rules: ['min:5']))->validate($this->createMock(PublicationType::class), 'foo'); } public function testValidateWithCustomRuleCollection() { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate('foo', 'foo', ['min:3']); + $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 'foo', ['min:3']); $this->assertSame(['my-string' => 'foo'], $validated); $this->expectValidationException('The my-string must be at least 5 characters.'); - (new PublicationFieldDefinition('string', 'myString'))->validate('foo', 'foo', ['min:5']); + (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 'foo', ['min:5']); } public function testValidateWithCustomRuleCollectionOverridesDefaultRules() { $this->expectValidationException('The my-string must be a number.'); - (new PublicationFieldDefinition('string', 'myString'))->validate('foo', 'foo', ['numeric']); + (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 'foo', ['numeric']); } public function testValidateMethodAcceptsArrayOfRules() { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate('foo', 'foo', ['min:3']); + $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 'foo', ['min:3']); $this->assertSame(['my-string' => 'foo'], $validated); } public function testValidateMethodAcceptsArrayableOfRules() { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate('foo', 'foo', collect(['min:3'])); + $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 'foo', collect(['min:3'])); $this->assertSame(['my-string' => 'foo'], $validated); } @@ -164,15 +164,14 @@ public function testGetRulesForArray() public function testValidateArrayPasses() { - $validated = (new PublicationFieldDefinition('array', 'myArray'))->validate(['foo', 'bar', 'baz'], - ['foo', 'bar', 'baz']); + $validated = (new PublicationFieldDefinition('array', 'myArray'))->validate($this->createMock(PublicationType::class), ['foo', 'bar', 'baz']); $this->assertSame(['my-array' => ['foo', 'bar', 'baz']], $validated); } public function testValidateArrayFails() { $this->expectValidationException('The my-array must be an array.'); - (new PublicationFieldDefinition('array', 'myArray'))->validate('foo', 'foo'); + (new PublicationFieldDefinition('array', 'myArray'))->validate($this->createMock(PublicationType::class), 'foo'); } public function testGetRulesForDatetime() @@ -183,14 +182,14 @@ public function testGetRulesForDatetime() public function testValidateDatetimePasses() { - $validated = (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate('2021-01-01', '2021-01-01'); + $validated = (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate($this->createMock(PublicationType::class), '2021-01-01'); $this->assertSame(['my-datetime' => '2021-01-01'], $validated); } public function testValidateDatetimeFailsForInvalidType() { $this->expectValidationException('The my-datetime is not a valid date.'); - (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate('string', 'string'); + (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate($this->createMock(PublicationType::class), 'string'); } public function testGetRulesForFloat() From c2119208daafe8bae3bd17dfdb4ae9eee1af06aa Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:18:33 +0100 Subject: [PATCH 21/65] Extract testing helper method --- .../PublicationFieldDefinitionTest.php | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php index ae45abfdacd..a71c2599d98 100644 --- a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php +++ b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php @@ -9,6 +9,7 @@ use Hyde\Framework\Features\Publications\PublicationFieldTypes; use Hyde\Testing\TestCase; use Illuminate\Validation\ValidationException; +use PHPUnit\Framework\MockObject\MockObject; use ValueError; /** @@ -101,118 +102,118 @@ public function test_name_gets_stored_as_kebab_case() public function testValidate() { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 'foo'); + $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 'foo'); $this->assertSame(['my-string' => 'foo'], $validated); $this->expectValidationException('The my-string must be a string.'); - (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 1); + (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 1); } public function testValidateWithCustomTypeRules() { - $validated = (new PublicationFieldDefinition('string', 'myString', rules: ['min:3']))->validate($this->createMock(PublicationType::class), 'foo'); + $validated = (new PublicationFieldDefinition('string', 'myString', rules: ['min:3']))->validate($this->mockPublicationType(), 'foo'); $this->assertSame(['my-string' => 'foo'], $validated); $this->expectValidationException('The my-string must be at least 5 characters.'); - (new PublicationFieldDefinition('string', 'myString', rules: ['min:5']))->validate($this->createMock(PublicationType::class), 'foo'); + (new PublicationFieldDefinition('string', 'myString', rules: ['min:5']))->validate($this->mockPublicationType(), 'foo'); } public function testValidateWithCustomRuleCollection() { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 'foo', ['min:3']); + $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 'foo', ['min:3']); $this->assertSame(['my-string' => 'foo'], $validated); $this->expectValidationException('The my-string must be at least 5 characters.'); - (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 'foo', ['min:5']); + (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 'foo', ['min:5']); } public function testValidateWithCustomRuleCollectionOverridesDefaultRules() { $this->expectValidationException('The my-string must be a number.'); - (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 'foo', ['numeric']); + (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 'foo', ['numeric']); } public function testValidateMethodAcceptsArrayOfRules() { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 'foo', ['min:3']); + $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 'foo', ['min:3']); $this->assertSame(['my-string' => 'foo'], $validated); } public function testValidateMethodAcceptsArrayableOfRules() { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->createMock(PublicationType::class), 'foo', collect(['min:3'])); + $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 'foo', collect(['min:3'])); $this->assertSame(['my-string' => 'foo'], $validated); } public function testGetRules() { - $rules = (new PublicationFieldDefinition('string', 'myString'))->getValidationRules($this->createMock(PublicationType::class)); + $rules = (new PublicationFieldDefinition('string', 'myString'))->getValidationRules($this->mockPublicationType()); $this->assertSame(['string'], $rules->toArray()); } public function testGetRulesWithCustomTypeRules() { - $rules = (new PublicationFieldDefinition('string', 'myString', rules: ['foo', 'bar']))->getValidationRules($this->createMock(PublicationType::class)); + $rules = (new PublicationFieldDefinition('string', 'myString', rules: ['foo', 'bar']))->getValidationRules($this->mockPublicationType()); $this->assertSame(['string', 'foo', 'bar'], $rules->toArray()); } public function testGetRulesForArray() { - $rules = (new PublicationFieldDefinition('array', 'myArray'))->getValidationRules($this->createMock(PublicationType::class)); + $rules = (new PublicationFieldDefinition('array', 'myArray'))->getValidationRules($this->mockPublicationType()); $this->assertSame(['array'], $rules->toArray()); } public function testValidateArrayPasses() { - $validated = (new PublicationFieldDefinition('array', 'myArray'))->validate($this->createMock(PublicationType::class), ['foo', 'bar', 'baz']); + $validated = (new PublicationFieldDefinition('array', 'myArray'))->validate($this->mockPublicationType(), ['foo', 'bar', 'baz']); $this->assertSame(['my-array' => ['foo', 'bar', 'baz']], $validated); } public function testValidateArrayFails() { $this->expectValidationException('The my-array must be an array.'); - (new PublicationFieldDefinition('array', 'myArray'))->validate($this->createMock(PublicationType::class), 'foo'); + (new PublicationFieldDefinition('array', 'myArray'))->validate($this->mockPublicationType(), 'foo'); } public function testGetRulesForDatetime() { - $rules = (new PublicationFieldDefinition('datetime', 'myDatetime'))->getValidationRules($this->createMock(PublicationType::class)); + $rules = (new PublicationFieldDefinition('datetime', 'myDatetime'))->getValidationRules($this->mockPublicationType()); $this->assertSame(['date'], $rules->toArray()); } public function testValidateDatetimePasses() { - $validated = (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate($this->createMock(PublicationType::class), '2021-01-01'); + $validated = (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate($this->mockPublicationType(), '2021-01-01'); $this->assertSame(['my-datetime' => '2021-01-01'], $validated); } public function testValidateDatetimeFailsForInvalidType() { $this->expectValidationException('The my-datetime is not a valid date.'); - (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate($this->createMock(PublicationType::class), 'string'); + (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate($this->mockPublicationType(), 'string'); } public function testGetRulesForFloat() { - $rules = (new PublicationFieldDefinition('float', 'myFloat'))->getValidationRules($this->createMock(PublicationType::class)); + $rules = (new PublicationFieldDefinition('float', 'myFloat'))->getValidationRules($this->mockPublicationType()); $this->assertSame(['numeric'], $rules->toArray()); } public function testGetRulesForInteger() { - $rules = (new PublicationFieldDefinition('integer', 'myInteger'))->getValidationRules($this->createMock(PublicationType::class)); + $rules = (new PublicationFieldDefinition('integer', 'myInteger'))->getValidationRules($this->mockPublicationType()); $this->assertSame(['integer', 'numeric'], $rules->toArray()); } public function testGetRulesForString() { - $rules = (new PublicationFieldDefinition('string', 'myString'))->getValidationRules($this->createMock(PublicationType::class)); + $rules = (new PublicationFieldDefinition('string', 'myString'))->getValidationRules($this->mockPublicationType()); $this->assertSame(['string'], $rules->toArray()); } public function testGetRulesForText() { - $rules = (new PublicationFieldDefinition('text', 'myText'))->getValidationRules($this->createMock(PublicationType::class)); + $rules = (new PublicationFieldDefinition('text', 'myText'))->getValidationRules($this->mockPublicationType()); $this->assertSame(['string'], $rules->toArray()); } @@ -227,13 +228,13 @@ public function testGetRulesForImage() public function testGetRulesForTag() { - $rules = (new PublicationFieldDefinition('tag', 'myTag'))->getValidationRules($this->createMock(PublicationType::class)); + $rules = (new PublicationFieldDefinition('tag', 'myTag'))->getValidationRules($this->mockPublicationType()); $this->assertSame(['in:'], $rules->toArray()); } public function testGetRulesForUrl() { - $rules = (new PublicationFieldDefinition('url', 'myUrl'))->getValidationRules($this->createMock(PublicationType::class)); + $rules = (new PublicationFieldDefinition('url', 'myUrl'))->getValidationRules($this->mockPublicationType()); $this->assertSame(['url'], $rules->toArray()); } @@ -242,4 +243,9 @@ protected function expectValidationException(string $message): void $this->expectException(ValidationException::class); $this->expectExceptionMessage($message); } + + protected function mockPublicationType(): PublicationType|MockObject + { + return $this->createMock(PublicationType::class); + } } From 8869ce106718cd6588fe5f9c173110d59d487ac5 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Mon, 2 Jan 2023 18:19:59 +0000 Subject: [PATCH 22/65] Apply fixes from StyleCI --- .../Features/Publications/Models/PublicationFieldDefinition.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 579376f642a..69eaf0e8fa2 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -5,8 +5,6 @@ namespace Hyde\Framework\Features\Publications\Models; use function array_filter; -use function collect; -use function Hyde\evaluate_arrayable; use Hyde\Framework\Features\Publications\PublicationFieldTypes; use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Hyde\Support\Concerns\Serializable; From d0d46fb1dd26398916799c2ea0f8e67dee86dba6 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:24:27 +0100 Subject: [PATCH 23/65] Move tests for moved logic to the new test class --- .../PublicationFieldDefinitionTest.php | 152 +-------------- .../Feature/ValidatesPublicationsTest.php | 181 ++++++++++++++++++ 2 files changed, 184 insertions(+), 149 deletions(-) diff --git a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php index a71c2599d98..322d46663f6 100644 --- a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php +++ b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php @@ -7,7 +7,10 @@ use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; use Hyde\Framework\Features\Publications\Models\PublicationType; use Hyde\Framework\Features\Publications\PublicationFieldTypes; +use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Hyde\Testing\TestCase; +use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Support\Collection; use Illuminate\Validation\ValidationException; use PHPUnit\Framework\MockObject\MockObject; use ValueError; @@ -99,153 +102,4 @@ public function test_name_gets_stored_as_kebab_case() $field = new PublicationFieldDefinition('string', 'Test Field'); $this->assertSame('test-field', $field->name); } - - public function testValidate() - { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 'foo'); - $this->assertSame(['my-string' => 'foo'], $validated); - - $this->expectValidationException('The my-string must be a string.'); - (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 1); - } - - public function testValidateWithCustomTypeRules() - { - $validated = (new PublicationFieldDefinition('string', 'myString', rules: ['min:3']))->validate($this->mockPublicationType(), 'foo'); - $this->assertSame(['my-string' => 'foo'], $validated); - - $this->expectValidationException('The my-string must be at least 5 characters.'); - (new PublicationFieldDefinition('string', 'myString', rules: ['min:5']))->validate($this->mockPublicationType(), 'foo'); - } - - public function testValidateWithCustomRuleCollection() - { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 'foo', ['min:3']); - $this->assertSame(['my-string' => 'foo'], $validated); - - $this->expectValidationException('The my-string must be at least 5 characters.'); - (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 'foo', ['min:5']); - } - - public function testValidateWithCustomRuleCollectionOverridesDefaultRules() - { - $this->expectValidationException('The my-string must be a number.'); - (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 'foo', ['numeric']); - } - - public function testValidateMethodAcceptsArrayOfRules() - { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 'foo', ['min:3']); - $this->assertSame(['my-string' => 'foo'], $validated); - } - - public function testValidateMethodAcceptsArrayableOfRules() - { - $validated = (new PublicationFieldDefinition('string', 'myString'))->validate($this->mockPublicationType(), 'foo', collect(['min:3'])); - $this->assertSame(['my-string' => 'foo'], $validated); - } - - public function testGetRules() - { - $rules = (new PublicationFieldDefinition('string', 'myString'))->getValidationRules($this->mockPublicationType()); - $this->assertSame(['string'], $rules->toArray()); - } - - public function testGetRulesWithCustomTypeRules() - { - $rules = (new PublicationFieldDefinition('string', 'myString', rules: ['foo', 'bar']))->getValidationRules($this->mockPublicationType()); - $this->assertSame(['string', 'foo', 'bar'], $rules->toArray()); - } - - public function testGetRulesForArray() - { - $rules = (new PublicationFieldDefinition('array', 'myArray'))->getValidationRules($this->mockPublicationType()); - $this->assertSame(['array'], $rules->toArray()); - } - - public function testValidateArrayPasses() - { - $validated = (new PublicationFieldDefinition('array', 'myArray'))->validate($this->mockPublicationType(), ['foo', 'bar', 'baz']); - $this->assertSame(['my-array' => ['foo', 'bar', 'baz']], $validated); - } - - public function testValidateArrayFails() - { - $this->expectValidationException('The my-array must be an array.'); - (new PublicationFieldDefinition('array', 'myArray'))->validate($this->mockPublicationType(), 'foo'); - } - - public function testGetRulesForDatetime() - { - $rules = (new PublicationFieldDefinition('datetime', 'myDatetime'))->getValidationRules($this->mockPublicationType()); - $this->assertSame(['date'], $rules->toArray()); - } - - public function testValidateDatetimePasses() - { - $validated = (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate($this->mockPublicationType(), '2021-01-01'); - $this->assertSame(['my-datetime' => '2021-01-01'], $validated); - } - - public function testValidateDatetimeFailsForInvalidType() - { - $this->expectValidationException('The my-datetime is not a valid date.'); - (new PublicationFieldDefinition('datetime', 'myDatetime'))->validate($this->mockPublicationType(), 'string'); - } - - public function testGetRulesForFloat() - { - $rules = (new PublicationFieldDefinition('float', 'myFloat'))->getValidationRules($this->mockPublicationType()); - $this->assertSame(['numeric'], $rules->toArray()); - } - - public function testGetRulesForInteger() - { - $rules = (new PublicationFieldDefinition('integer', 'myInteger'))->getValidationRules($this->mockPublicationType()); - $this->assertSame(['integer', 'numeric'], $rules->toArray()); - } - - public function testGetRulesForString() - { - $rules = (new PublicationFieldDefinition('string', 'myString'))->getValidationRules($this->mockPublicationType()); - $this->assertSame(['string'], $rules->toArray()); - } - - public function testGetRulesForText() - { - $rules = (new PublicationFieldDefinition('text', 'myText'))->getValidationRules($this->mockPublicationType()); - $this->assertSame(['string'], $rules->toArray()); - } - - public function testGetRulesForImage() - { - $this->directory('_media/foo'); - $this->file('_media/foo/bar.jpg'); - $this->file('_media/foo/baz.png'); - $rules = (new PublicationFieldDefinition('image', 'myImage'))->getValidationRules(publicationType: new PublicationType('foo')); - $this->assertSame(['in:_media/foo/bar.jpg,_media/foo/baz.png'], $rules->toArray()); - } - - public function testGetRulesForTag() - { - $rules = (new PublicationFieldDefinition('tag', 'myTag'))->getValidationRules($this->mockPublicationType()); - $this->assertSame(['in:'], $rules->toArray()); - } - - public function testGetRulesForUrl() - { - $rules = (new PublicationFieldDefinition('url', 'myUrl'))->getValidationRules($this->mockPublicationType()); - $this->assertSame(['url'], $rules->toArray()); - } - - protected function expectValidationException(string $message): void - { - $this->expectException(ValidationException::class); - $this->expectExceptionMessage($message); - } - - protected function mockPublicationType(): PublicationType|MockObject - { - return $this->createMock(PublicationType::class); - } } diff --git a/packages/framework/tests/Feature/ValidatesPublicationsTest.php b/packages/framework/tests/Feature/ValidatesPublicationsTest.php index dcf6a7ed02e..9da490ee491 100644 --- a/packages/framework/tests/Feature/ValidatesPublicationsTest.php +++ b/packages/framework/tests/Feature/ValidatesPublicationsTest.php @@ -9,6 +9,11 @@ use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Hyde\Testing\TestCase; +use Illuminate\Validation\ValidationException; +use PHPUnit\Framework\MockObject\MockObject; + +use function collect; + /** * @covers \Hyde\Framework\Features\Publications\ValidatesPublicationField */ @@ -21,4 +26,180 @@ public function testConstruct() $this->createMock(PublicationFieldDefinition::class) )); } + + public function testValidate() + { + $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); + $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', null); + $this->assertSame(['my-string' => 'foo'], $validated); + + $this->expectValidationException('The my-string must be a string.'); + $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); + (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate(1, null); + } + + public function testValidateWithCustomTypeRules() + { + $fieldDefinition = new PublicationFieldDefinition('string', 'myString', rules: ['min:3']); + $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', null); + $this->assertSame(['my-string' => 'foo'], $validated); + + $this->expectValidationException('The my-string must be at least 5 characters.'); + $fieldDefinition = new PublicationFieldDefinition('string', 'myString', rules: ['min:5']); + (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', null); + } + + public function testValidateWithCustomRuleCollection() + { + $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); + $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', ['min:3']); + $this->assertSame(['my-string' => 'foo'], $validated); + + $this->expectValidationException('The my-string must be at least 5 characters.'); + $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); + (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', ['min:5']); + } + + public function testValidateWithCustomRuleCollectionOverridesDefaultRules() + { + $this->expectValidationException('The my-string must be a number.'); + $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); + (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', ['numeric']); + } + + public function testValidateMethodAcceptsArrayOfRules() + { + $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); + $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', ['min:3']); + $this->assertSame(['my-string' => 'foo'], $validated); + } + + public function testValidateMethodAcceptsArrayableOfRules() + { + $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); + $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', + collect(['min:3'])); + $this->assertSame(['my-string' => 'foo'], $validated); + } + + public function testGetRules() + { + $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); + $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); + $this->assertSame(['string'], $rules->toArray()); + } + + public function testGetRulesWithCustomTypeRules() + { + $fieldDefinition = new PublicationFieldDefinition('string', 'myString', rules: ['foo', 'bar']); + $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); + $this->assertSame(['string', 'foo', 'bar'], $rules->toArray()); + } + + public function testGetRulesForArray() + { + $fieldDefinition = new PublicationFieldDefinition('array', 'myArray'); + $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); + $this->assertSame(['array'], $rules->toArray()); + } + + public function testValidateArrayPasses() + { + $fieldDefinition = new PublicationFieldDefinition('array', 'myArray'); + $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate([ + 'foo', 'bar', 'baz' + ], null); + $this->assertSame(['my-array' => ['foo', 'bar', 'baz']], $validated); + } + + public function testValidateArrayFails() + { + $this->expectValidationException('The my-array must be an array.'); + $fieldDefinition = new PublicationFieldDefinition('array', 'myArray'); + (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', null); + } + + public function testGetRulesForDatetime() + { + $fieldDefinition = new PublicationFieldDefinition('datetime', 'myDatetime'); + $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); + $this->assertSame(['date'], $rules->toArray()); + } + + public function testValidateDatetimePasses() + { + $fieldDefinition = new PublicationFieldDefinition('datetime', 'myDatetime'); + $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('2021-01-01', null); + $this->assertSame(['my-datetime' => '2021-01-01'], $validated); + } + + public function testValidateDatetimeFailsForInvalidType() + { + $this->expectValidationException('The my-datetime is not a valid date.'); + $fieldDefinition = new PublicationFieldDefinition('datetime', 'myDatetime'); + (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('string', null); + } + + public function testGetRulesForFloat() + { + $fieldDefinition = new PublicationFieldDefinition('float', 'myFloat'); + $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); + $this->assertSame(['numeric'], $rules->toArray()); + } + + public function testGetRulesForInteger() + { + $fieldDefinition = new PublicationFieldDefinition('integer', 'myInteger'); + $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); + $this->assertSame(['integer', 'numeric'], $rules->toArray()); + } + + public function testGetRulesForString() + { + $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); + $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); + $this->assertSame(['string'], $rules->toArray()); + } + + public function testGetRulesForText() + { + $fieldDefinition = new PublicationFieldDefinition('text', 'myText'); + $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); + $this->assertSame(['string'], $rules->toArray()); + } + + public function testGetRulesForImage() + { + $this->directory('_media/foo'); + $this->file('_media/foo/bar.jpg'); + $this->file('_media/foo/baz.png'); + $fieldDefinition = new PublicationFieldDefinition('image', 'myImage'); + $rules = (new ValidatesPublicationField((new PublicationType('foo')), $fieldDefinition))->getValidationRules(); + $this->assertSame(['in:_media/foo/bar.jpg,_media/foo/baz.png'], $rules->toArray()); + } + + public function testGetRulesForTag() + { + $fieldDefinition = new PublicationFieldDefinition('tag', 'myTag'); + $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); + $this->assertSame(['in:'], $rules->toArray()); + } + + public function testGetRulesForUrl() + { + $fieldDefinition = new PublicationFieldDefinition('url', 'myUrl'); + $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); + $this->assertSame(['url'], $rules->toArray()); + } + + protected function expectValidationException(string $message): void + { + $this->expectException(ValidationException::class); + $this->expectExceptionMessage($message); + } + + protected function mockPublicationType(): PublicationType|MockObject + { + return $this->createMock(PublicationType::class); + } } From 6e23e2c4d4c4e83e7a0630c0d0ffa55798f720f2 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:25:31 +0100 Subject: [PATCH 24/65] Remove redundant arguments in test --- .../tests/Feature/ValidatesPublicationsTest.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/framework/tests/Feature/ValidatesPublicationsTest.php b/packages/framework/tests/Feature/ValidatesPublicationsTest.php index 9da490ee491..c36f6072d6d 100644 --- a/packages/framework/tests/Feature/ValidatesPublicationsTest.php +++ b/packages/framework/tests/Feature/ValidatesPublicationsTest.php @@ -30,23 +30,23 @@ public function testConstruct() public function testValidate() { $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); - $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', null); + $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo'); $this->assertSame(['my-string' => 'foo'], $validated); $this->expectValidationException('The my-string must be a string.'); $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); - (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate(1, null); + (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate(1); } public function testValidateWithCustomTypeRules() { $fieldDefinition = new PublicationFieldDefinition('string', 'myString', rules: ['min:3']); - $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', null); + $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo'); $this->assertSame(['my-string' => 'foo'], $validated); $this->expectValidationException('The my-string must be at least 5 characters.'); $fieldDefinition = new PublicationFieldDefinition('string', 'myString', rules: ['min:5']); - (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', null); + (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo'); } public function testValidateWithCustomRuleCollection() @@ -108,7 +108,7 @@ public function testValidateArrayPasses() $fieldDefinition = new PublicationFieldDefinition('array', 'myArray'); $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate([ 'foo', 'bar', 'baz' - ], null); + ]); $this->assertSame(['my-array' => ['foo', 'bar', 'baz']], $validated); } @@ -116,7 +116,7 @@ public function testValidateArrayFails() { $this->expectValidationException('The my-array must be an array.'); $fieldDefinition = new PublicationFieldDefinition('array', 'myArray'); - (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', null); + (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo'); } public function testGetRulesForDatetime() @@ -129,7 +129,7 @@ public function testGetRulesForDatetime() public function testValidateDatetimePasses() { $fieldDefinition = new PublicationFieldDefinition('datetime', 'myDatetime'); - $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('2021-01-01', null); + $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('2021-01-01'); $this->assertSame(['my-datetime' => '2021-01-01'], $validated); } @@ -137,7 +137,7 @@ public function testValidateDatetimeFailsForInvalidType() { $this->expectValidationException('The my-datetime is not a valid date.'); $fieldDefinition = new PublicationFieldDefinition('datetime', 'myDatetime'); - (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('string', null); + (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('string'); } public function testGetRulesForFloat() From 791ab221a3d9c92a44c8bef20d06f3c1df168526 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:25:54 +0100 Subject: [PATCH 25/65] Remove unnecessary argument identifiers in test --- .../framework/tests/Feature/ValidatesPublicationsTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/framework/tests/Feature/ValidatesPublicationsTest.php b/packages/framework/tests/Feature/ValidatesPublicationsTest.php index c36f6072d6d..1917dde5987 100644 --- a/packages/framework/tests/Feature/ValidatesPublicationsTest.php +++ b/packages/framework/tests/Feature/ValidatesPublicationsTest.php @@ -40,12 +40,12 @@ public function testValidate() public function testValidateWithCustomTypeRules() { - $fieldDefinition = new PublicationFieldDefinition('string', 'myString', rules: ['min:3']); + $fieldDefinition = new PublicationFieldDefinition('string', 'myString', ['min:3']); $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo'); $this->assertSame(['my-string' => 'foo'], $validated); $this->expectValidationException('The my-string must be at least 5 characters.'); - $fieldDefinition = new PublicationFieldDefinition('string', 'myString', rules: ['min:5']); + $fieldDefinition = new PublicationFieldDefinition('string', 'myString', ['min:5']); (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo'); } @@ -91,7 +91,7 @@ public function testGetRules() public function testGetRulesWithCustomTypeRules() { - $fieldDefinition = new PublicationFieldDefinition('string', 'myString', rules: ['foo', 'bar']); + $fieldDefinition = new PublicationFieldDefinition('string', 'myString', ['foo', 'bar']); $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); $this->assertSame(['string', 'foo', 'bar'], $rules->toArray()); } From 8e0f62ea50fe746212ed1df594847386597be536 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Mon, 2 Jan 2023 18:27:17 +0000 Subject: [PATCH 26/65] Apply fixes from StyleCI --- .../tests/Feature/PublicationFieldDefinitionTest.php | 6 ------ .../framework/tests/Feature/ValidatesPublicationsTest.php | 6 ++---- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php index 322d46663f6..928ea95f698 100644 --- a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php +++ b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php @@ -5,14 +5,8 @@ namespace Hyde\Framework\Testing\Feature; use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; -use Hyde\Framework\Features\Publications\Models\PublicationType; use Hyde\Framework\Features\Publications\PublicationFieldTypes; -use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Hyde\Testing\TestCase; -use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Support\Collection; -use Illuminate\Validation\ValidationException; -use PHPUnit\Framework\MockObject\MockObject; use ValueError; /** diff --git a/packages/framework/tests/Feature/ValidatesPublicationsTest.php b/packages/framework/tests/Feature/ValidatesPublicationsTest.php index 1917dde5987..8dc836e9f71 100644 --- a/packages/framework/tests/Feature/ValidatesPublicationsTest.php +++ b/packages/framework/tests/Feature/ValidatesPublicationsTest.php @@ -4,16 +4,14 @@ namespace Hyde\Framework\Testing\Feature; +use function collect; use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; use Hyde\Framework\Features\Publications\Models\PublicationType; use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Hyde\Testing\TestCase; - use Illuminate\Validation\ValidationException; use PHPUnit\Framework\MockObject\MockObject; -use function collect; - /** * @covers \Hyde\Framework\Features\Publications\ValidatesPublicationField */ @@ -107,7 +105,7 @@ public function testValidateArrayPasses() { $fieldDefinition = new PublicationFieldDefinition('array', 'myArray'); $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate([ - 'foo', 'bar', 'baz' + 'foo', 'bar', 'baz', ]); $this->assertSame(['my-array' => ['foo', 'bar', 'baz']], $validated); } From 169d229851a478ccb57a3ce3a2a171fc64b01e86 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:27:31 +0100 Subject: [PATCH 27/65] Deprecate the $fieldRules argument as it should not be necessary I don't see where this is needed (anymore) as the custom and dynamic rules are merged in with the defaults. --- .../Features/Publications/ValidatesPublicationField.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index b3d44a49296..170e9e7254b 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -4,6 +4,7 @@ namespace Hyde\Framework\Features\Publications; +use JetBrains\PhpStorm\Deprecated; use function collect; use function Hyde\evaluate_arrayable; use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; @@ -77,7 +78,7 @@ public function getValidationRules(): Collection return collect(self::getValidationRulesForPublicationFieldDefinition($this->publicationType, $this->fieldDefinition)); } - public function validate(mixed $input = null, Arrayable|array|null $fieldRules = null): array + public function validate(mixed $input = null, #[Deprecated]Arrayable|array|null $fieldRules = null): array { $rules = evaluate_arrayable($fieldRules ?? $this->getValidationRules()); From 9aa6955ca481fc33c49d0b421a065945fbc23626 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:30:08 +0100 Subject: [PATCH 28/65] Deprecate dynamic logic in static method to reduce complexity --- .../Features/Publications/ValidatesPublicationField.php | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 170e9e7254b..994ef5ae6bd 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -27,6 +27,7 @@ public function __construct(PublicationType $publicationType, PublicationFieldDe $this->fieldDefinition = $fieldDefinition; } + /** @deprecated This will only be handled when validating using instance methods */ public static function makeDynamicValidationRulesForPublicationFieldEntry(Models\PublicationFieldDefinition $fieldDefinition, ?PublicationType $publicationType): array { if ($fieldDefinition->type == PublicationFieldTypes::Image) { From 4b4ffd75827a6e697dcd4050a51d9c7928a9d246 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:31:41 +0100 Subject: [PATCH 29/65] Deprecate parameters only needed for deprecated code --- .../Publications/Models/PublicationFieldDefinition.php | 3 ++- .../Features/Publications/ValidatesPublicationField.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 69eaf0e8fa2..7b7b77753bf 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -4,6 +4,7 @@ namespace Hyde\Framework\Features\Publications\Models; +use JetBrains\PhpStorm\Deprecated; use function array_filter; use Hyde\Framework\Features\Publications\PublicationFieldTypes; use Hyde\Framework\Features\Publications\ValidatesPublicationField; @@ -55,7 +56,7 @@ public function getValidationRules(PublicationType $publicationType): Collection return (new ValidatesPublicationField($publicationType, $this))->getValidationRules(); } - public function validate(PublicationType $publicationType, mixed $input = null, Arrayable|array|null $fieldRules = null): array + public function validate(PublicationType $publicationType, mixed $input = null, #[Deprecated]Arrayable|array|null $fieldRules = null): array { return (new ValidatesPublicationField($publicationType, $this))->validate($input, $fieldRules); } diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 994ef5ae6bd..0c815a87070 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -65,7 +65,7 @@ public static function getDefaultRulesForFieldType(PublicationFieldTypes $type): return $type->rules(); } - public static function getValidationRulesForPublicationFieldDefinition(?PublicationType $publicationType, PublicationFieldDefinition $fieldDefinition): array + public static function getValidationRulesForPublicationFieldDefinition(#[Deprecated]?PublicationType $publicationType, PublicationFieldDefinition $fieldDefinition): array { return array_merge( self::getDefaultRulesForFieldType($fieldDefinition->type), From a8b884dae3b69d27471e6a5ee1eb26444643d1f7 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Mon, 2 Jan 2023 18:31:54 +0000 Subject: [PATCH 30/65] Apply fixes from StyleCI --- .../Publications/Models/PublicationFieldDefinition.php | 5 ++--- .../Features/Publications/ValidatesPublicationField.php | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 7b7b77753bf..8afa6986f28 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -4,15 +4,14 @@ namespace Hyde\Framework\Features\Publications\Models; -use JetBrains\PhpStorm\Deprecated; use function array_filter; use Hyde\Framework\Features\Publications\PublicationFieldTypes; use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Hyde\Support\Concerns\Serializable; use Hyde\Support\Contracts\SerializableContract; -use Illuminate\Contracts\Support\Arrayable; use Illuminate\Support\Collection; use Illuminate\Support\Str; +use JetBrains\PhpStorm\Deprecated; use function str_starts_with; use function strtolower; @@ -56,7 +55,7 @@ public function getValidationRules(PublicationType $publicationType): Collection return (new ValidatesPublicationField($publicationType, $this))->getValidationRules(); } - public function validate(PublicationType $publicationType, mixed $input = null, #[Deprecated]Arrayable|array|null $fieldRules = null): array + public function validate(PublicationType $publicationType, mixed $input = null, #[Deprecated]Arrayable | array | null $fieldRules = null): array { return (new ValidatesPublicationField($publicationType, $this))->validate($input, $fieldRules); } diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 0c815a87070..230237855a7 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -4,13 +4,12 @@ namespace Hyde\Framework\Features\Publications; -use JetBrains\PhpStorm\Deprecated; use function collect; use function Hyde\evaluate_arrayable; use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; use Hyde\Framework\Features\Publications\Models\PublicationType; -use Illuminate\Contracts\Support\Arrayable; use Illuminate\Support\Collection; +use JetBrains\PhpStorm\Deprecated; use function validator; /** @@ -79,7 +78,7 @@ public function getValidationRules(): Collection return collect(self::getValidationRulesForPublicationFieldDefinition($this->publicationType, $this->fieldDefinition)); } - public function validate(mixed $input = null, #[Deprecated]Arrayable|array|null $fieldRules = null): array + public function validate(mixed $input = null, #[Deprecated]Arrayable | array | null $fieldRules = null): array { $rules = evaluate_arrayable($fieldRules ?? $this->getValidationRules()); From 50db626794bf2675e9bd15d96952419ec3eddd0d Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:34:57 +0100 Subject: [PATCH 31/65] Remove deprecated $fieldRules argument to reduce complexity --- .../Commands/ValidatePublicationsCommand.php | 3 +- .../Models/PublicationFieldDefinition.php | 5 ++- .../ValidatesPublicationField.php | 2 +- .../Feature/ValidatesPublicationsTest.php | 33 ------------------- 4 files changed, 4 insertions(+), 39 deletions(-) diff --git a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php index 4865e1134e2..2e77e31291e 100644 --- a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php +++ b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php @@ -81,8 +81,7 @@ public function safeHandle(): int $pubTypeField->validate( $pubType, - $publication->matter->get($fieldName), - $publicationFieldRules->get($fieldName) + $publication->matter->get($fieldName) ); $this->output->writeln(" $checkmark"); } catch (Exception $e) { diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 8afa6986f28..60cd64c691d 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -11,7 +11,6 @@ use Hyde\Support\Contracts\SerializableContract; use Illuminate\Support\Collection; use Illuminate\Support\Str; -use JetBrains\PhpStorm\Deprecated; use function str_starts_with; use function strtolower; @@ -55,8 +54,8 @@ public function getValidationRules(PublicationType $publicationType): Collection return (new ValidatesPublicationField($publicationType, $this))->getValidationRules(); } - public function validate(PublicationType $publicationType, mixed $input = null, #[Deprecated]Arrayable | array | null $fieldRules = null): array + public function validate(PublicationType $publicationType, mixed $input = null): array { - return (new ValidatesPublicationField($publicationType, $this))->validate($input, $fieldRules); + return (new ValidatesPublicationField($publicationType, $this))->validate($input); } } diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 230237855a7..78478c91733 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -78,7 +78,7 @@ public function getValidationRules(): Collection return collect(self::getValidationRulesForPublicationFieldDefinition($this->publicationType, $this->fieldDefinition)); } - public function validate(mixed $input = null, #[Deprecated]Arrayable | array | null $fieldRules = null): array + public function validate(mixed $input = null): array { $rules = evaluate_arrayable($fieldRules ?? $this->getValidationRules()); diff --git a/packages/framework/tests/Feature/ValidatesPublicationsTest.php b/packages/framework/tests/Feature/ValidatesPublicationsTest.php index 8dc836e9f71..6315e3df743 100644 --- a/packages/framework/tests/Feature/ValidatesPublicationsTest.php +++ b/packages/framework/tests/Feature/ValidatesPublicationsTest.php @@ -47,39 +47,6 @@ public function testValidateWithCustomTypeRules() (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo'); } - public function testValidateWithCustomRuleCollection() - { - $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); - $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', ['min:3']); - $this->assertSame(['my-string' => 'foo'], $validated); - - $this->expectValidationException('The my-string must be at least 5 characters.'); - $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); - (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', ['min:5']); - } - - public function testValidateWithCustomRuleCollectionOverridesDefaultRules() - { - $this->expectValidationException('The my-string must be a number.'); - $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); - (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', ['numeric']); - } - - public function testValidateMethodAcceptsArrayOfRules() - { - $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); - $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', ['min:3']); - $this->assertSame(['my-string' => 'foo'], $validated); - } - - public function testValidateMethodAcceptsArrayableOfRules() - { - $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); - $validated = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->validate('foo', - collect(['min:3'])); - $this->assertSame(['my-string' => 'foo'], $validated); - } - public function testGetRules() { $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); From 62c6b7bc60da6445a4d096c082fd309940e5db72 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:37:47 +0100 Subject: [PATCH 32/65] Deprecate validation helpers outside of scope --- .../Features/Publications/Models/PublicationFieldDefinition.php | 2 ++ .../Framework/Features/Publications/Models/PublicationType.php | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 60cd64c691d..e0dad8bcd93 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -49,11 +49,13 @@ public function toArray(): array ]); } + /** @deprecated use {@see \Hyde\Framework\Features\Publications\ValidatesPublicationField} instead */ public function getValidationRules(PublicationType $publicationType): Collection { return (new ValidatesPublicationField($publicationType, $this))->getValidationRules(); } + /** @deprecated use {@see \Hyde\Framework\Features\Publications\ValidatesPublicationField} instead */ public function validate(PublicationType $publicationType, mixed $input = null): array { return (new ValidatesPublicationField($publicationType, $this))->validate($input); diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationType.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationType.php index 216a8fe0ddc..4a95b68e419 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationType.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationType.php @@ -106,7 +106,7 @@ public function getFields(): Collection return Collection::make($result); } - /** @return \Illuminate\Support\Collection */ + /** @deprecated use {@see \Hyde\Framework\Features\Publications\ValidatesPublicationField} instead */ public function getFieldRules(): Collection { return Collection::make( From 4751950ed2d5dde4fdbb0dbc8315413530eaa7b1 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:40:26 +0100 Subject: [PATCH 33/65] Use the new ValidatesPublicationField helper --- .../framework/src/Console/Commands/MakePublicationCommand.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Console/Commands/MakePublicationCommand.php b/packages/framework/src/Console/Commands/MakePublicationCommand.php index 4fa8e1a42e2..672ed7fc045 100644 --- a/packages/framework/src/Console/Commands/MakePublicationCommand.php +++ b/packages/framework/src/Console/Commands/MakePublicationCommand.php @@ -13,6 +13,7 @@ use Hyde\Framework\Features\Publications\Models\PublicationType; use Hyde\Framework\Features\Publications\PublicationFieldTypes; use Hyde\Framework\Features\Publications\PublicationService; +use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Illuminate\Support\Collection; use function implode; use function in_array; @@ -178,7 +179,7 @@ protected function captureTagFieldInput(PublicationFieldDefinition $field): ?Pub protected function captureOtherFieldInput(PublicationFieldDefinition $field): ?PublicationFieldValue { - $selection = $this->askForFieldData($field->name, $field->getValidationRules()->toArray()); + $selection = $this->askForFieldData($field->name, ValidatesPublicationField::getValidationRulesForPublicationFieldDefinition($this->publicationType, $field)); if (empty($selection)) { return null; } From fab7b15815ceed751b0e20a444d369d4ca17d214 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Mon, 2 Jan 2023 18:40:52 +0000 Subject: [PATCH 34/65] Apply fixes from StyleCI --- packages/framework/tests/Feature/ValidatesPublicationsTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/framework/tests/Feature/ValidatesPublicationsTest.php b/packages/framework/tests/Feature/ValidatesPublicationsTest.php index 6315e3df743..0d7e5e42249 100644 --- a/packages/framework/tests/Feature/ValidatesPublicationsTest.php +++ b/packages/framework/tests/Feature/ValidatesPublicationsTest.php @@ -4,7 +4,6 @@ namespace Hyde\Framework\Testing\Feature; -use function collect; use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; use Hyde\Framework\Features\Publications\Models\PublicationType; use Hyde\Framework\Features\Publications\ValidatesPublicationField; From b66c336e77e72aea7762194d83b3ea89184b0a63 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:42:12 +0100 Subject: [PATCH 35/65] No longer include dynamic data in static method --- .../Features/Publications/ValidatesPublicationField.php | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 78478c91733..993ae0ce5e3 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -68,7 +68,6 @@ public static function getValidationRulesForPublicationFieldDefinition(#[Depreca { return array_merge( self::getDefaultRulesForFieldType($fieldDefinition->type), - self::makeDynamicValidationRulesForPublicationFieldEntry($fieldDefinition, $publicationType), self::getCustomRulesFromPublicationTypeSchema($fieldDefinition) ); } From 27b50dac6501fcd8a4baf2633d3063de5c6a8994 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:43:00 +0100 Subject: [PATCH 36/65] Remove unused deprecated parameter --- .../framework/src/Console/Commands/MakePublicationCommand.php | 2 +- .../Features/Publications/ValidatesPublicationField.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/framework/src/Console/Commands/MakePublicationCommand.php b/packages/framework/src/Console/Commands/MakePublicationCommand.php index 672ed7fc045..00723546533 100644 --- a/packages/framework/src/Console/Commands/MakePublicationCommand.php +++ b/packages/framework/src/Console/Commands/MakePublicationCommand.php @@ -179,7 +179,7 @@ protected function captureTagFieldInput(PublicationFieldDefinition $field): ?Pub protected function captureOtherFieldInput(PublicationFieldDefinition $field): ?PublicationFieldValue { - $selection = $this->askForFieldData($field->name, ValidatesPublicationField::getValidationRulesForPublicationFieldDefinition($this->publicationType, $field)); + $selection = $this->askForFieldData($field->name, ValidatesPublicationField::getValidationRulesForPublicationFieldDefinition($field)); if (empty($selection)) { return null; } diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 993ae0ce5e3..912f1b38d0b 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -64,7 +64,7 @@ public static function getDefaultRulesForFieldType(PublicationFieldTypes $type): return $type->rules(); } - public static function getValidationRulesForPublicationFieldDefinition(#[Deprecated]?PublicationType $publicationType, PublicationFieldDefinition $fieldDefinition): array + public static function getValidationRulesForPublicationFieldDefinition(PublicationFieldDefinition $fieldDefinition): array { return array_merge( self::getDefaultRulesForFieldType($fieldDefinition->type), @@ -74,7 +74,7 @@ public static function getValidationRulesForPublicationFieldDefinition(#[Depreca public function getValidationRules(): Collection { - return collect(self::getValidationRulesForPublicationFieldDefinition($this->publicationType, $this->fieldDefinition)); + return collect(self::getValidationRulesForPublicationFieldDefinition($this->fieldDefinition)); } public function validate(mixed $input = null): array From 8bf38be8d44bc70cacccc43ad53ebaf7654dd7e7 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:43:50 +0100 Subject: [PATCH 37/65] Protect previously protected public helper method Got lost in the PhpStorm refactor --- .../Features/Publications/ValidatesPublicationField.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 912f1b38d0b..05fd3da5d17 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -59,7 +59,7 @@ public static function getCustomRulesFromPublicationTypeSchema(PublicationFieldD return $fieldDefinition->rules; } - public static function getDefaultRulesForFieldType(PublicationFieldTypes $type): array + protected static function getDefaultRulesForFieldType(PublicationFieldTypes $type): array { return $type->rules(); } From d2577b602483fe1493ff5e462357dd1e5bebd65b Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:44:43 +0100 Subject: [PATCH 38/65] Reorder methods --- .../ValidatesPublicationField.php | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 05fd3da5d17..c01d925ff59 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -26,6 +26,21 @@ public function __construct(PublicationType $publicationType, PublicationFieldDe $this->fieldDefinition = $fieldDefinition; } + public function getValidationRules(): Collection + { + return collect(self::getValidationRulesForPublicationFieldDefinition($this->fieldDefinition)); + } + + public function validate(mixed $input = null): array + { + $rules = evaluate_arrayable($fieldRules ?? $this->getValidationRules()); + + return validator( + [$this->fieldDefinition->name => $input], + [$this->fieldDefinition->name => $rules] + )->validate(); + } + /** @deprecated This will only be handled when validating using instance methods */ public static function makeDynamicValidationRulesForPublicationFieldEntry(Models\PublicationFieldDefinition $fieldDefinition, ?PublicationType $publicationType): array { @@ -59,11 +74,6 @@ public static function getCustomRulesFromPublicationTypeSchema(PublicationFieldD return $fieldDefinition->rules; } - protected static function getDefaultRulesForFieldType(PublicationFieldTypes $type): array - { - return $type->rules(); - } - public static function getValidationRulesForPublicationFieldDefinition(PublicationFieldDefinition $fieldDefinition): array { return array_merge( @@ -72,18 +82,8 @@ public static function getValidationRulesForPublicationFieldDefinition(Publicati ); } - public function getValidationRules(): Collection - { - return collect(self::getValidationRulesForPublicationFieldDefinition($this->fieldDefinition)); - } - - public function validate(mixed $input = null): array + protected static function getDefaultRulesForFieldType(PublicationFieldTypes $type): array { - $rules = evaluate_arrayable($fieldRules ?? $this->getValidationRules()); - - return validator( - [$this->fieldDefinition->name => $input], - [$this->fieldDefinition->name => $rules] - )->validate(); + return $type->rules(); } } From e534d516d9aa8b0588309989c8451b4d0632127d Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:44:52 +0100 Subject: [PATCH 39/65] Import used function --- .../Features/Publications/ValidatesPublicationField.php | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index c01d925ff59..3d4e8904f83 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -4,6 +4,7 @@ namespace Hyde\Framework\Features\Publications; +use function array_merge; use function collect; use function Hyde\evaluate_arrayable; use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; From ba9487bec8fb5e13003e1d50539b5a06fa6e4744 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:45:40 +0100 Subject: [PATCH 40/65] Make deprecated public static method protected instance --- .../Features/Publications/ValidatesPublicationField.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 3d4e8904f83..d2441953697 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -42,8 +42,7 @@ public function validate(mixed $input = null): array )->validate(); } - /** @deprecated This will only be handled when validating using instance methods */ - public static function makeDynamicValidationRulesForPublicationFieldEntry(Models\PublicationFieldDefinition $fieldDefinition, ?PublicationType $publicationType): array + protected function makeDynamicValidationRulesForPublicationFieldEntry(Models\PublicationFieldDefinition $fieldDefinition, ?PublicationType $publicationType): array { if ($fieldDefinition->type == PublicationFieldTypes::Image) { if ($publicationType !== null) { From 7664b8627402021eb4587ecd217d1d7fa3b45e34 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:48:05 +0100 Subject: [PATCH 41/65] Merge in dynamic rules when using instance method --- .../Features/Publications/ValidatesPublicationField.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index d2441953697..1409ae40254 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -29,7 +29,10 @@ public function __construct(PublicationType $publicationType, PublicationFieldDe public function getValidationRules(): Collection { - return collect(self::getValidationRulesForPublicationFieldDefinition($this->fieldDefinition)); + return collect(array_merge( + self::getValidationRulesForPublicationFieldDefinition($this->fieldDefinition), + $this->makeDynamicValidationRulesForPublicationFieldEntry($this->fieldDefinition, $this->publicationType) + )); } public function validate(mixed $input = null): array From ced525f5e2a695ae2a99fb13d56bd02da363337a Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Mon, 2 Jan 2023 18:48:24 +0000 Subject: [PATCH 42/65] Apply fixes from StyleCI --- .../Features/Publications/ValidatesPublicationField.php | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 1409ae40254..9830bde0c0b 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -10,7 +10,6 @@ use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; use Hyde\Framework\Features\Publications\Models\PublicationType; use Illuminate\Support\Collection; -use JetBrains\PhpStorm\Deprecated; use function validator; /** From da837964b2eb2247f99b07144781706fa1bc1bce Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:50:47 +0100 Subject: [PATCH 43/65] Refactor helper method to utilize instance properties --- .../Publications/ValidatesPublicationField.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 9830bde0c0b..83fc44957e2 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -30,7 +30,7 @@ public function getValidationRules(): Collection { return collect(array_merge( self::getValidationRulesForPublicationFieldDefinition($this->fieldDefinition), - $this->makeDynamicValidationRulesForPublicationFieldEntry($this->fieldDefinition, $this->publicationType) + $this->makeDynamicValidationRulesForPublicationFieldEntry() )); } @@ -44,11 +44,11 @@ public function validate(mixed $input = null): array )->validate(); } - protected function makeDynamicValidationRulesForPublicationFieldEntry(Models\PublicationFieldDefinition $fieldDefinition, ?PublicationType $publicationType): array + protected function makeDynamicValidationRulesForPublicationFieldEntry(): array { - if ($fieldDefinition->type == PublicationFieldTypes::Image) { - if ($publicationType !== null) { - $mediaFiles = PublicationService::getMediaForPubType($publicationType); + if ($this->fieldDefinition->type == PublicationFieldTypes::Image) { + if ($this->publicationType !== null) { + $mediaFiles = PublicationService::getMediaForPubType($this->publicationType); $valueList = $mediaFiles->implode(','); } else { $valueList = ''; @@ -57,9 +57,9 @@ protected function makeDynamicValidationRulesForPublicationFieldEntry(Models\Pub return ["in:$valueList"]; } - if ($fieldDefinition->type == PublicationFieldTypes::Tag) { - if ($publicationType !== null) { - $tagValues = PublicationService::getValuesForTagName($publicationType->getIdentifier()) ?? collect([]); + if ($this->fieldDefinition->type == PublicationFieldTypes::Tag) { + if ($this->publicationType !== null) { + $tagValues = PublicationService::getValuesForTagName($this->publicationType->getIdentifier()) ?? collect([]); $valueList = $tagValues->implode(','); } else { $valueList = ''; From 6c33e542245e1b6fe1f865dce4df58bee22d8d5d Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:52:25 +0100 Subject: [PATCH 44/65] Unwrap already evaluated conditions --- .../Publications/ValidatesPublicationField.php | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 83fc44957e2..6e76f3f184d 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -36,7 +36,7 @@ public function getValidationRules(): Collection public function validate(mixed $input = null): array { - $rules = evaluate_arrayable($fieldRules ?? $this->getValidationRules()); + $rules = evaluate_arrayable($this->getValidationRules()); return validator( [$this->fieldDefinition->name => $input], @@ -47,23 +47,15 @@ public function validate(mixed $input = null): array protected function makeDynamicValidationRulesForPublicationFieldEntry(): array { if ($this->fieldDefinition->type == PublicationFieldTypes::Image) { - if ($this->publicationType !== null) { - $mediaFiles = PublicationService::getMediaForPubType($this->publicationType); - $valueList = $mediaFiles->implode(','); - } else { - $valueList = ''; - } + $mediaFiles = PublicationService::getMediaForPubType($this->publicationType); + $valueList = $mediaFiles->implode(','); return ["in:$valueList"]; } if ($this->fieldDefinition->type == PublicationFieldTypes::Tag) { - if ($this->publicationType !== null) { - $tagValues = PublicationService::getValuesForTagName($this->publicationType->getIdentifier()) ?? collect([]); - $valueList = $tagValues->implode(','); - } else { - $valueList = ''; - } + $tagValues = PublicationService::getValuesForTagName($this->publicationType->getIdentifier()) ?? collect([]); + $valueList = $tagValues->implode(','); return ["in:$valueList"]; } From 08ee4a26d73310240b8371c229f5ed0cc45a925a Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 19:53:22 +0100 Subject: [PATCH 45/65] Unwrap unnecessary evaluation --- .../Features/Publications/ValidatesPublicationField.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 6e76f3f184d..75f0fda8b17 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -6,7 +6,6 @@ use function array_merge; use function collect; -use function Hyde\evaluate_arrayable; use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; use Hyde\Framework\Features\Publications\Models\PublicationType; use Illuminate\Support\Collection; @@ -36,7 +35,7 @@ public function getValidationRules(): Collection public function validate(mixed $input = null): array { - $rules = evaluate_arrayable($this->getValidationRules()); + $rules = $this->getValidationRules(); return validator( [$this->fieldDefinition->name => $input], From c66e3eac043e7855b87d4bb453410bb14e8b29ef Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 21:31:36 +0100 Subject: [PATCH 46/65] Reorder methods --- .../Publications/ValidatesPublicationField.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 75f0fda8b17..d0742c08af4 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -62,11 +62,6 @@ protected function makeDynamicValidationRulesForPublicationFieldEntry(): array return []; } - public static function getCustomRulesFromPublicationTypeSchema(PublicationFieldDefinition $fieldDefinition): array - { - return $fieldDefinition->rules; - } - public static function getValidationRulesForPublicationFieldDefinition(PublicationFieldDefinition $fieldDefinition): array { return array_merge( @@ -75,6 +70,11 @@ public static function getValidationRulesForPublicationFieldDefinition(Publicati ); } + public static function getCustomRulesFromPublicationTypeSchema(PublicationFieldDefinition $fieldDefinition): array + { + return $fieldDefinition->rules; + } + protected static function getDefaultRulesForFieldType(PublicationFieldTypes $type): array { return $type->rules(); From 4ff77c493d440f381bb5e8ca0e05362d76d5b1cd Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 21:32:17 +0100 Subject: [PATCH 47/65] Inline helper methods only used within the file --- .../Publications/ValidatesPublicationField.php | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index d0742c08af4..c0f2b952d9b 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -65,18 +65,8 @@ protected function makeDynamicValidationRulesForPublicationFieldEntry(): array public static function getValidationRulesForPublicationFieldDefinition(PublicationFieldDefinition $fieldDefinition): array { return array_merge( - self::getDefaultRulesForFieldType($fieldDefinition->type), - self::getCustomRulesFromPublicationTypeSchema($fieldDefinition) + $fieldDefinition->type->rules(), + $fieldDefinition->rules ); } - - public static function getCustomRulesFromPublicationTypeSchema(PublicationFieldDefinition $fieldDefinition): array - { - return $fieldDefinition->rules; - } - - protected static function getDefaultRulesForFieldType(PublicationFieldTypes $type): array - { - return $type->rules(); - } } From 71d3ab2d5d6649010086a0e075a2163a5e259463 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 21:36:07 +0100 Subject: [PATCH 48/65] Add simple method to get the merged rules on the field definition --- .../Models/PublicationFieldDefinition.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index e0dad8bcd93..90ad21d89c2 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -11,6 +11,7 @@ use Hyde\Support\Contracts\SerializableContract; use Illuminate\Support\Collection; use Illuminate\Support\Str; +use function array_merge; use function str_starts_with; use function strtolower; @@ -49,6 +50,16 @@ public function toArray(): array ]); } + /** + * Get the validation rules for this field. + * + * @return array + */ + public function getRules(): array + { + return array_merge($this->type->rules(), $this->rules); + } + /** @deprecated use {@see \Hyde\Framework\Features\Publications\ValidatesPublicationField} instead */ public function getValidationRules(PublicationType $publicationType): Collection { From a8fb99d2ca5379a34a9a6b8882c36e879d29cc51 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 21:36:28 +0100 Subject: [PATCH 49/65] Use the getRules method --- .../Features/Publications/ValidatesPublicationField.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index c0f2b952d9b..a6dea151a85 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -64,9 +64,6 @@ protected function makeDynamicValidationRulesForPublicationFieldEntry(): array public static function getValidationRulesForPublicationFieldDefinition(PublicationFieldDefinition $fieldDefinition): array { - return array_merge( - $fieldDefinition->type->rules(), - $fieldDefinition->rules - ); + return $fieldDefinition->getRules(); } } From c485e5d2af62f90ba6b270f933e373965bd44721 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 21:36:49 +0100 Subject: [PATCH 50/65] Inline getValidationRulesForPublicationFieldDefinition method --- .../src/Console/Commands/MakePublicationCommand.php | 2 +- .../Features/Publications/ValidatesPublicationField.php | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/framework/src/Console/Commands/MakePublicationCommand.php b/packages/framework/src/Console/Commands/MakePublicationCommand.php index 00723546533..b05ecd935ba 100644 --- a/packages/framework/src/Console/Commands/MakePublicationCommand.php +++ b/packages/framework/src/Console/Commands/MakePublicationCommand.php @@ -179,7 +179,7 @@ protected function captureTagFieldInput(PublicationFieldDefinition $field): ?Pub protected function captureOtherFieldInput(PublicationFieldDefinition $field): ?PublicationFieldValue { - $selection = $this->askForFieldData($field->name, ValidatesPublicationField::getValidationRulesForPublicationFieldDefinition($field)); + $selection = $this->askForFieldData($field->name, $field->getRules()); if (empty($selection)) { return null; } diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index a6dea151a85..d8a5d80c021 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -28,7 +28,7 @@ public function __construct(PublicationType $publicationType, PublicationFieldDe public function getValidationRules(): Collection { return collect(array_merge( - self::getValidationRulesForPublicationFieldDefinition($this->fieldDefinition), + $this->fieldDefinition->getRules(), $this->makeDynamicValidationRulesForPublicationFieldEntry() )); } @@ -61,9 +61,4 @@ protected function makeDynamicValidationRulesForPublicationFieldEntry(): array return []; } - - public static function getValidationRulesForPublicationFieldDefinition(PublicationFieldDefinition $fieldDefinition): array - { - return $fieldDefinition->getRules(); - } } From d019b83966e63fbbcd959c79c54650fa73a1c9cf Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Mon, 2 Jan 2023 20:38:36 +0000 Subject: [PATCH 51/65] Apply fixes from StyleCI --- .../framework/src/Console/Commands/MakePublicationCommand.php | 1 - .../Features/Publications/Models/PublicationFieldDefinition.php | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/framework/src/Console/Commands/MakePublicationCommand.php b/packages/framework/src/Console/Commands/MakePublicationCommand.php index b05ecd935ba..61569ee6552 100644 --- a/packages/framework/src/Console/Commands/MakePublicationCommand.php +++ b/packages/framework/src/Console/Commands/MakePublicationCommand.php @@ -13,7 +13,6 @@ use Hyde\Framework\Features\Publications\Models\PublicationType; use Hyde\Framework\Features\Publications\PublicationFieldTypes; use Hyde\Framework\Features\Publications\PublicationService; -use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Illuminate\Support\Collection; use function implode; use function in_array; diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 90ad21d89c2..120b6b5b3c1 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -5,13 +5,13 @@ namespace Hyde\Framework\Features\Publications\Models; use function array_filter; +use function array_merge; use Hyde\Framework\Features\Publications\PublicationFieldTypes; use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Hyde\Support\Concerns\Serializable; use Hyde\Support\Contracts\SerializableContract; use Illuminate\Support\Collection; use Illuminate\Support\Str; -use function array_merge; use function str_starts_with; use function strtolower; From acac6eec780cd71ef87549c3978857985379a9e9 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 21:44:03 +0100 Subject: [PATCH 52/65] Update test annotation --- .../src/Console/Commands/ValidatePublicationsCommand.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php index 2e77e31291e..2378c5ffc32 100644 --- a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php +++ b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php @@ -14,7 +14,7 @@ /** * Hyde Command to validate one or all publications. * - * @see \Hyde\Framework\Testing\Feature\Commands\ValidatePublicationTypeCommandTest + * @see \Hyde\Framework\Testing\Feature\Commands\ValidatePublicationsCommandTest * * @todo Add JSON output option? */ From 5d2c29e772005a1489513116a258075db267a9b9 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 21:46:24 +0100 Subject: [PATCH 53/65] Display summary as a subtitle --- .../Commands/ValidatePublicationsCommand.php | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php index 2378c5ffc32..d7e11a9b0d2 100644 --- a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php +++ b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php @@ -11,6 +11,9 @@ use InvalidArgumentException; use LaravelZero\Framework\Commands\Command; +use function str_repeat; +use function strlen; + /** * Hyde Command to validate one or all publications. * @@ -101,7 +104,7 @@ public function safeHandle(): int $warnColor = $countWarnings ? 'yellow' : 'green'; $errorColor = $countErrors ? 'red' : 'green'; - $this->title('Summary:'); + $this->subtitle('Summary:'); $this->output->writeln("Validated $countPubTypes Publication Types, $countPubs Publications, $countFields Fields"); $this->output->writeln("Found $countWarnings Warnings"); $this->output->writeln("Found $countErrors Errors"); @@ -111,4 +114,20 @@ public function safeHandle(): int return Command::SUCCESS; } + + + /* + * Displays the given string as subtitle. + */ + public function subtitle(string $title): Command + { + $size = strlen($title); + $spaces = str_repeat(' ', $size); + + $this->output->newLine(); + $this->output->writeln("$spaces$title$spaces"); + $this->output->newLine(); + + return $this; + } } From a795c0561ca941b7ff497efdaaf2bf3d15d6036c Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 21:49:55 +0100 Subject: [PATCH 54/65] Remove unused variable --- .../src/Console/Commands/ValidatePublicationsCommand.php | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php index d7e11a9b0d2..247ab0a35fc 100644 --- a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php +++ b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php @@ -60,7 +60,6 @@ public function safeHandle(): int $countPubTypes++; $publications = PublicationService::getPublicationsForPubType($pubType); $this->output->write("Validating publication type [$name]"); - $publicationFieldRules = $pubType->getFieldRules(false); /** @var \Hyde\Pages\PublicationPage $publication */ foreach ($publications as $publication) { From c1d16e331ffc23d2da2ed6fd51529eb3cb39b037 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 21:51:50 +0100 Subject: [PATCH 55/65] Inline deprecated method with only one usage --- .../src/Console/Commands/ValidatePublicationsCommand.php | 6 ++---- .../Publications/Models/PublicationFieldDefinition.php | 6 ------ 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php index 247ab0a35fc..95107665d97 100644 --- a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php +++ b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php @@ -8,6 +8,7 @@ use Hyde\Console\Concerns\ValidatingCommand; use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; use Hyde\Framework\Features\Publications\PublicationService; +use Hyde\Framework\Features\Publications\ValidatesPublicationField; use InvalidArgumentException; use LaravelZero\Framework\Commands\Command; @@ -81,10 +82,7 @@ public function safeHandle(): int throw new Exception("Field [$fieldName] is missing from publication"); } - $pubTypeField->validate( - $pubType, - $publication->matter->get($fieldName) - ); + (new ValidatesPublicationField($pubType, $pubTypeField))->validate($publication->matter->get($fieldName)); $this->output->writeln(" $checkmark"); } catch (Exception $e) { $countErrors++; diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 120b6b5b3c1..703d5b37d6a 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -65,10 +65,4 @@ public function getValidationRules(PublicationType $publicationType): Collection { return (new ValidatesPublicationField($publicationType, $this))->getValidationRules(); } - - /** @deprecated use {@see \Hyde\Framework\Features\Publications\ValidatesPublicationField} instead */ - public function validate(PublicationType $publicationType, mixed $input = null): array - { - return (new ValidatesPublicationField($publicationType, $this))->validate($input); - } } From a1c6daf5140859e0b98eacbaebb695268c392294 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Mon, 2 Jan 2023 20:52:27 +0000 Subject: [PATCH 56/65] Apply fixes from StyleCI --- .../src/Console/Commands/ValidatePublicationsCommand.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php index 95107665d97..0d5107bc166 100644 --- a/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php +++ b/packages/framework/src/Console/Commands/ValidatePublicationsCommand.php @@ -11,7 +11,6 @@ use Hyde\Framework\Features\Publications\ValidatesPublicationField; use InvalidArgumentException; use LaravelZero\Framework\Commands\Command; - use function str_repeat; use function strlen; @@ -112,7 +111,6 @@ public function safeHandle(): int return Command::SUCCESS; } - /* * Displays the given string as subtitle. */ From 98e71aaaa5a47933b6f00a425c8c56e743e419c6 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 21:56:22 +0100 Subject: [PATCH 57/65] Remove deprecated method only used in tests --- .../Publications/Models/PublicationType.php | 10 -------- .../tests/Feature/PublicationTypeTest.php | 23 ------------------- 2 files changed, 33 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationType.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationType.php index 4a95b68e419..826cc1ab2fa 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationType.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationType.php @@ -106,16 +106,6 @@ public function getFields(): Collection return Collection::make($result); } - /** @deprecated use {@see \Hyde\Framework\Features\Publications\ValidatesPublicationField} instead */ - public function getFieldRules(): Collection - { - return Collection::make( - $this->getFields()->mapWithKeys(function (PublicationFieldDefinition $field) { - return [$field->name => $field->getValidationRules($this)]; - }) - ); - } - public function getFieldDefinition(string $fieldName): PublicationFieldDefinition { return $this->getFields()->filter(fn (PublicationFieldDefinition $field): bool => $field->name === $fieldName)->firstOrFail(); diff --git a/packages/framework/tests/Feature/PublicationTypeTest.php b/packages/framework/tests/Feature/PublicationTypeTest.php index 99faefc5f1a..42e28d8b6b4 100644 --- a/packages/framework/tests/Feature/PublicationTypeTest.php +++ b/packages/framework/tests/Feature/PublicationTypeTest.php @@ -166,29 +166,6 @@ public function test_get_list_page() $this->assertEquals(new PublicationListPage($publicationType), $publicationType->getListPage()); } - public function test_get_field_rules() - { - $publicationType = new PublicationType(...$this->getTestData()); - $this->assertEquals([ - 'title' => ['string'], - ], $publicationType->getFieldRules()->toArray()); - } - - public function test_get_field_rules_with_custom_type_rules() - { - $publicationType = new PublicationType(...$this->getTestData(['fields' => [ - 'title' => [ - 'name' => 'title', - 'type' => 'string', - 'rules' => ['required', 'foo'], - ], - ]])); - - $this->assertEquals([ - 'title' => ['string', 'required', 'foo'], - ], $publicationType->getFieldRules()->toArray()); - } - public function testGetFieldDefinition() { $publicationType = new PublicationType(...$this->getTestData()); From ce7ef4b6d9b467f58739fbd0f728b83a69b5d6f6 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 21:56:39 +0100 Subject: [PATCH 58/65] Remove unused deprecated method --- .../Publications/Models/PublicationFieldDefinition.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 703d5b37d6a..6c03637222e 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -59,10 +59,4 @@ public function getRules(): array { return array_merge($this->type->rules(), $this->rules); } - - /** @deprecated use {@see \Hyde\Framework\Features\Publications\ValidatesPublicationField} instead */ - public function getValidationRules(PublicationType $publicationType): Collection - { - return (new ValidatesPublicationField($publicationType, $this))->getValidationRules(); - } } From 377d7fb9264ef81399aaf758297ccb7591a89173 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 21:59:23 +0100 Subject: [PATCH 59/65] Test the getRules method --- .../tests/Feature/PublicationFieldDefinitionTest.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php index 928ea95f698..ae64135ee3b 100644 --- a/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php +++ b/packages/framework/tests/Feature/PublicationFieldDefinitionTest.php @@ -96,4 +96,16 @@ public function test_name_gets_stored_as_kebab_case() $field = new PublicationFieldDefinition('string', 'Test Field'); $this->assertSame('test-field', $field->name); } + + public function test_get_rules() + { + $field = new PublicationFieldDefinition('string', 'test'); + $this->assertSame(['string'], $field->getRules()); + } + + public function test_get_rules_with_custom_type_rules() + { + $field = new PublicationFieldDefinition('string', 'test', ['required', 'foo']); + $this->assertSame(['string', 'required', 'foo'], $field->getRules()); + } } From 778ea4732278a347f30f3afc762b7664057851e0 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 22:00:05 +0100 Subject: [PATCH 60/65] Update PHPDoc comment --- .../Features/Publications/Models/PublicationFieldDefinition.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 6c03637222e..14ac09b86f6 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -53,7 +53,7 @@ public function toArray(): array /** * Get the validation rules for this field. * - * @return array + * @return array The type default rules merged with any custom rules. */ public function getRules(): array { From 0102e70f9985f8e595c12c4f866044dff8512b04 Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Mon, 2 Jan 2023 21:01:19 +0000 Subject: [PATCH 61/65] Apply fixes from StyleCI --- .../Features/Publications/Models/PublicationFieldDefinition.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php index 14ac09b86f6..8252f3dea87 100644 --- a/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php +++ b/packages/framework/src/Framework/Features/Publications/Models/PublicationFieldDefinition.php @@ -7,10 +7,8 @@ use function array_filter; use function array_merge; use Hyde\Framework\Features\Publications\PublicationFieldTypes; -use Hyde\Framework\Features\Publications\ValidatesPublicationField; use Hyde\Support\Concerns\Serializable; use Hyde\Support\Contracts\SerializableContract; -use Illuminate\Support\Collection; use Illuminate\Support\Str; use function str_starts_with; use function strtolower; From 6f0fef5dfd1fd402acf34577ba84bb11e63e361c Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 22:12:59 +0100 Subject: [PATCH 62/65] Update helper to return array instead of Collection as it's only used as array --- .../ValidatesPublicationField.php | 6 ++--- .../Feature/ValidatesPublicationsTest.php | 22 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index d8a5d80c021..60f0b47e7ae 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -25,12 +25,12 @@ public function __construct(PublicationType $publicationType, PublicationFieldDe $this->fieldDefinition = $fieldDefinition; } - public function getValidationRules(): Collection + public function getValidationRules(): array { - return collect(array_merge( + return array_merge( $this->fieldDefinition->getRules(), $this->makeDynamicValidationRulesForPublicationFieldEntry() - )); + ); } public function validate(mixed $input = null): array diff --git a/packages/framework/tests/Feature/ValidatesPublicationsTest.php b/packages/framework/tests/Feature/ValidatesPublicationsTest.php index 0d7e5e42249..47cc0ba6f86 100644 --- a/packages/framework/tests/Feature/ValidatesPublicationsTest.php +++ b/packages/framework/tests/Feature/ValidatesPublicationsTest.php @@ -50,21 +50,21 @@ public function testGetRules() { $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); - $this->assertSame(['string'], $rules->toArray()); + $this->assertSame(['string'], $rules); } public function testGetRulesWithCustomTypeRules() { $fieldDefinition = new PublicationFieldDefinition('string', 'myString', ['foo', 'bar']); $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); - $this->assertSame(['string', 'foo', 'bar'], $rules->toArray()); + $this->assertSame(['string', 'foo', 'bar'], $rules); } public function testGetRulesForArray() { $fieldDefinition = new PublicationFieldDefinition('array', 'myArray'); $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); - $this->assertSame(['array'], $rules->toArray()); + $this->assertSame(['array'], $rules); } public function testValidateArrayPasses() @@ -87,7 +87,7 @@ public function testGetRulesForDatetime() { $fieldDefinition = new PublicationFieldDefinition('datetime', 'myDatetime'); $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); - $this->assertSame(['date'], $rules->toArray()); + $this->assertSame(['date'], $rules); } public function testValidateDatetimePasses() @@ -108,28 +108,28 @@ public function testGetRulesForFloat() { $fieldDefinition = new PublicationFieldDefinition('float', 'myFloat'); $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); - $this->assertSame(['numeric'], $rules->toArray()); + $this->assertSame(['numeric'], $rules); } public function testGetRulesForInteger() { $fieldDefinition = new PublicationFieldDefinition('integer', 'myInteger'); $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); - $this->assertSame(['integer', 'numeric'], $rules->toArray()); + $this->assertSame(['integer', 'numeric'], $rules); } public function testGetRulesForString() { $fieldDefinition = new PublicationFieldDefinition('string', 'myString'); $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); - $this->assertSame(['string'], $rules->toArray()); + $this->assertSame(['string'], $rules); } public function testGetRulesForText() { $fieldDefinition = new PublicationFieldDefinition('text', 'myText'); $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); - $this->assertSame(['string'], $rules->toArray()); + $this->assertSame(['string'], $rules); } public function testGetRulesForImage() @@ -139,21 +139,21 @@ public function testGetRulesForImage() $this->file('_media/foo/baz.png'); $fieldDefinition = new PublicationFieldDefinition('image', 'myImage'); $rules = (new ValidatesPublicationField((new PublicationType('foo')), $fieldDefinition))->getValidationRules(); - $this->assertSame(['in:_media/foo/bar.jpg,_media/foo/baz.png'], $rules->toArray()); + $this->assertSame(['in:_media/foo/bar.jpg,_media/foo/baz.png'], $rules); } public function testGetRulesForTag() { $fieldDefinition = new PublicationFieldDefinition('tag', 'myTag'); $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); - $this->assertSame(['in:'], $rules->toArray()); + $this->assertSame(['in:'], $rules); } public function testGetRulesForUrl() { $fieldDefinition = new PublicationFieldDefinition('url', 'myUrl'); $rules = (new ValidatesPublicationField($this->mockPublicationType(), $fieldDefinition))->getValidationRules(); - $this->assertSame(['url'], $rules->toArray()); + $this->assertSame(['url'], $rules); } protected function expectValidationException(string $message): void From b80bc1df4944fa597d81fd82ab84130b53f8fb29 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 22:14:17 +0100 Subject: [PATCH 63/65] Shorten helper method name --- .../Features/Publications/ValidatesPublicationField.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 60f0b47e7ae..4716bb2c39c 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -29,7 +29,7 @@ public function getValidationRules(): array { return array_merge( $this->fieldDefinition->getRules(), - $this->makeDynamicValidationRulesForPublicationFieldEntry() + $this->makeDynamicRules() ); } @@ -43,7 +43,7 @@ public function validate(mixed $input = null): array )->validate(); } - protected function makeDynamicValidationRulesForPublicationFieldEntry(): array + protected function makeDynamicRules(): array { if ($this->fieldDefinition->type == PublicationFieldTypes::Image) { $mediaFiles = PublicationService::getMediaForPubType($this->publicationType); From 33d8c41bce43edb6c5c127f0f5a8afd8e2bf6500 Mon Sep 17 00:00:00 2001 From: Caen De Silva Date: Mon, 2 Jan 2023 22:15:50 +0100 Subject: [PATCH 64/65] Extract method --- .../Publications/ValidatesPublicationField.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 4716bb2c39c..5ce696f0953 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -4,6 +4,7 @@ namespace Hyde\Framework\Features\Publications; +use Illuminate\Contracts\Validation\Validator; use function array_merge; use function collect; use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; @@ -35,12 +36,7 @@ public function getValidationRules(): array public function validate(mixed $input = null): array { - $rules = $this->getValidationRules(); - - return validator( - [$this->fieldDefinition->name => $input], - [$this->fieldDefinition->name => $rules] - )->validate(); + return $this->makeValidator($input, $this->getValidationRules())->validate(); } protected function makeDynamicRules(): array @@ -61,4 +57,11 @@ protected function makeDynamicRules(): array return []; } + + protected function makeValidator(mixed $input, array $rules): Validator { + return validator( + [$this->fieldDefinition->name => $input], + [$this->fieldDefinition->name => $rules] + ); + } } From bd3f57a052e7563104d825cbdc4ca161697a9d2b Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Mon, 2 Jan 2023 21:16:05 +0000 Subject: [PATCH 65/65] Apply fixes from StyleCI --- .../Features/Publications/ValidatesPublicationField.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php index 5ce696f0953..f70cb13b7af 100644 --- a/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php +++ b/packages/framework/src/Framework/Features/Publications/ValidatesPublicationField.php @@ -4,12 +4,11 @@ namespace Hyde\Framework\Features\Publications; -use Illuminate\Contracts\Validation\Validator; use function array_merge; use function collect; use Hyde\Framework\Features\Publications\Models\PublicationFieldDefinition; use Hyde\Framework\Features\Publications\Models\PublicationType; -use Illuminate\Support\Collection; +use Illuminate\Contracts\Validation\Validator; use function validator; /** @@ -58,7 +57,8 @@ protected function makeDynamicRules(): array return []; } - protected function makeValidator(mixed $input, array $rules): Validator { + protected function makeValidator(mixed $input, array $rules): Validator + { return validator( [$this->fieldDefinition->name => $input], [$this->fieldDefinition->name => $rules]