diff --git a/src/Validator/Validator.php b/src/Validator/Validator.php
index 7bdd03e..0d6bdbb 100644
--- a/src/Validator/Validator.php
+++ b/src/Validator/Validator.php
@@ -31,7 +31,7 @@ class Validator
}
$propertyAnnotations = $this->_getPropertyAnnotations($property);
- if (empty($value) && !in_array('required', $propertyAnnotations, true)) {
+ if (empty($value) && count(array_filter($property['rules'], static fn($rule) => str_starts_with($rule, 'required'))) === 0) {
return true;
}
@@ -69,9 +69,9 @@ class Validator
*/
public function isObjectValid($object): bool
{
- if (!$object->validated) {
+// if (!$object->validated) {
$object = $this->validateObject($object);
- }
+// }
return !in_array(false, $object->validated, true);
}
@@ -91,7 +91,7 @@ class Validator
foreach ($properties as $property) {
$propertyValue = $object->{$property['name']};
- if (empty($propertyValue) && !in_array('required', $property['rules'], true)) {
+ if (empty($propertyValue) && count(array_filter($property['rules'], static fn($rule) => str_starts_with($rule, 'required'))) === 0) {
continue;
}
@@ -117,7 +117,7 @@ class Validator
$args_annotation = array_splice($annotation, 1);
- return $this->{sprintf('_validate%s', ucfirst($annotation[0]))}($property, ...$args_annotation);
+ return $this->{sprintf('_validate%s', ucfirst($annotation[0]))}($property, $args_annotation);
}
@@ -199,7 +199,6 @@ class Validator
{
$options = [
'options' => [
- 'default' => 0,
'min_range' => 0,
'max_range' => 23
]
diff --git a/tests/FailingTest.php b/tests/FailingTest.php
new file mode 100644
index 0000000..17291e1
--- /dev/null
+++ b/tests/FailingTest.php
@@ -0,0 +1,114 @@
+srss = SRSS::create();
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->title = 'title'; // mandatory
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->description = 'desc'; // mandatory
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+
+ $this->srss->link = 'desc'; // mandatory but should be a url
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->link = 'https://example.org';
+ self::assertTrue($this->srss->isValid(), var_export($this->srss->validated, true));
+
+ $this->srss->language = 'en-en'; // should be a valid language
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->language = 'en-us'; // should be a valid
+ self::assertTrue($this->srss->isValid(), var_export($this->srss->validated, true));
+
+ $this->srss->copyright = 'test'; // should not have html element
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->copyright = 'shikiryu';
+ self::assertTrue($this->srss->isValid(), var_export($this->srss->validated, true));
+
+ $this->srss->managingEditor = 'test'; // should not have html element
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->managingEditor = 'shikiryu';
+ self::assertTrue($this->srss->isValid(), var_export($this->srss->validated, true));
+
+ $this->srss->webMaster = 'test'; // should not have html element
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->webMaster = 'shikiryu';
+ self::assertTrue($this->srss->isValid(), var_export($this->srss->validated, true));
+
+ $this->srss->pubDate = 'test'; // should be a valid date
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->pubDate = (new DateTime())->format(DATE_RSS);
+ self::assertTrue($this->srss->isValid(), var_export($this->srss->validated, true));
+
+ $this->srss->lastBuildDate = 'test'; // should be a valid date
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->lastBuildDate = (new DateTime())->format(DATE_RSS);
+ self::assertTrue($this->srss->isValid(), var_export($this->srss->validated, true));
+
+ $this->srss->generator = 'test'; // should not have html element
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->generator = 'shikiryuRSS';
+ self::assertTrue($this->srss->isValid(), var_export($this->srss->validated, true));
+
+ $this->srss->docs = 'desc'; //should be a url
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->docs = 'https://example.org';
+ self::assertTrue($this->srss->isValid(), var_export($this->srss->validated, true));
+
+ $this->srss->ttl = 'desc'; // should be an int
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->ttl = '85';
+ self::assertTrue($this->srss->isValid(), var_export($this->srss->validated, true));
+
+ // rating and textInput not tested because there's no validation
+
+ $this->srss->skipHours = 'desc'; // should be an hour
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->skipHours = '12';
+ self::assertTrue($this->srss->isValid(), var_export($this->srss->validated, true));
+
+ $this->srss->skipDays = 'desc'; // should be a day
+ self::assertFalse($this->srss->isValid(), var_export($this->srss->validated, true));
+ $this->srss->skipDays = 'monday';
+ self::assertTrue($this->srss->isValid(), var_export($this->srss->validated, true));
+ }
+
+ public function testItem()
+ {
+ $item = new Shikiryu\SRSS\Entity\Item();
+
+ self::assertFalse($item->isValid(), var_export($item->validated, true));
+ $item->title = 'title';
+ self::assertTrue($item->isValid(), var_export($item->validated, true));
+
+ $item->link = 'test';
+ self::assertFalse($item->isValid(), var_export($item->validated, true));
+ $item->link = 'https://example.org/link1';
+ self::assertTrue($item->isValid(), var_export($item->validated, true));
+
+ $item->title = null;
+ self::assertFalse($item->isValid(), var_export($item->validated, true));
+ $item->description = 'desc';
+ self::assertTrue($item->isValid(), var_export($item->validated, true));
+ $item->title = 'title';
+ self::assertTrue($item->isValid(), var_export($item->validated, true));
+
+ $item->author = 'test';
+ self::assertFalse($item->isValid(), var_export($item->validated, true));
+ $item->author = 'email@example.org';
+ self::assertTrue($item->isValid(), var_export($item->validated, true));
+
+ $item->comments = 'test';
+ self::assertFalse($item->isValid(), var_export($item->validated, true));
+ $item->comments = 'https://example.org/link1';
+ self::assertTrue($item->isValid(), var_export($item->validated, true));
+
+ // guid is not validated and, so, not tested
+ }
+}
\ No newline at end of file