From 71fe1c3dcb3afc61f9c7bf88877da6056c8fc34a Mon Sep 17 00:00:00 2001 From: Johan Cwiklinski Date: Fri, 24 May 2024 22:05:26 +0200 Subject: [PATCH] Fixes; tests objects filters --- .../Filters/ObjectsList.php | 32 ++-- lib/GaletteObjectsLend/Repository/Objects.php | 2 +- .../Filters/tests/units/ObjectsList.php | 143 ++++++++++++++++++ 3 files changed, 154 insertions(+), 23 deletions(-) create mode 100644 tests/GaletteObjectsLend/Filters/tests/units/ObjectsList.php diff --git a/lib/GaletteObjectsLend/Filters/ObjectsList.php b/lib/GaletteObjectsLend/Filters/ObjectsList.php index 1374973..961a7a4 100644 --- a/lib/GaletteObjectsLend/Filters/ObjectsList.php +++ b/lib/GaletteObjectsLend/Filters/ObjectsList.php @@ -172,11 +172,12 @@ public function __set(string $name, mixed $value): void } break; case 'filter_str': + case 'query': $this->$name = $value; break; case 'category_filter': if (is_numeric($value)) { - $this->$name = $value; + $this->$name = (int)$value; } elseif ($value !== null) { Analog::log( '[ObjectsList] Value for property `' . $name . @@ -192,7 +193,7 @@ public function __set(string $name, mixed $value): void case Objects::ALL_OBJECTS: case Objects::ACTIVE_OBJECTS: case Objects::INACTIVE_OBJECTS: - $this->active_filter = $value; + $this->active_filter = (int)$value; break; default: Analog::log( @@ -206,7 +207,7 @@ public function __set(string $name, mixed $value): void break; case 'field_filter': if (is_numeric($value)) { - $this->$name = $value; + $this->$name = (int)$value; } elseif ($value !== null) { Analog::log( '[ObjectsList] Value for property `' . $name . @@ -215,31 +216,18 @@ public function __set(string $name, mixed $value): void ); } break; - case 'query': - $this->$name = $value; - break; default: - Analog::log( - '[ObjectsList] Unable to set proprety `' . $name . '`', - Analog::WARNING + throw new \RuntimeException( + sprintf( + 'Unable to set property "%s::%s"!', + __CLASS__, + $name + ) ); - break; } } } - /** - * Add SQL limit - * - * @param Select $select Original select - * - * @return void - */ - public function setLimit(Select $select): void - { - $this->setLimits($select); - } - /** * Set commons filters for templates * diff --git a/lib/GaletteObjectsLend/Repository/Objects.php b/lib/GaletteObjectsLend/Repository/Objects.php index e23fe32..2d8b2b7 100644 --- a/lib/GaletteObjectsLend/Repository/Objects.php +++ b/lib/GaletteObjectsLend/Repository/Objects.php @@ -123,7 +123,7 @@ public function getObjectsList( //add limits to retrieve only relevant rows if ($limit === true) { - $this->filters->setLimit($select); + $this->filters->setLimits($select); } $rows = $this->zdb->execute($select); diff --git a/tests/GaletteObjectsLend/Filters/tests/units/ObjectsList.php b/tests/GaletteObjectsLend/Filters/tests/units/ObjectsList.php new file mode 100644 index 0000000..48091f8 --- /dev/null +++ b/tests/GaletteObjectsLend/Filters/tests/units/ObjectsList.php @@ -0,0 +1,143 @@ +. + */ + +declare(strict_types=1); + +namespace GaletteObjectslend\Filters\test\units; + +use Galette\GaletteTestCase; + +/** + * Objects filters tests class + * + * @author Johan Cwiklinski + */ +class ObjectsList extends GaletteTestCase +{ + /** + * Test filter defaults values + * + * @param \GaletteObjectsLend\Filters\ObjectsList $filters Filters instance + * + * @return void + */ + protected function testDefaults(\GaletteObjectsLend\Filters\ObjectsList $filters): void + { + $this->assertSame(\GaletteObjectsLend\Repository\Objects::ORDERBY_NAME, $filters->orderby); + $this->assertSame(\GaletteObjectsLend\Filters\ObjectsList::ORDER_ASC, $filters->ordered); + $this->assertNull($filters->filter_str); + $this->assertNull($filters->category_filter); + $this->assertNull($filters->active_filter); + $this->assertNull($filters->field_filter); + $this->assertSame([], $filters->selected); + } + + /** + * Test creation + * + * @return void + */ + public function testCreate(): void + { + $filters = new \GaletteObjectsLend\Filters\ObjectsList(); + + $this->testDefaults($filters); + + //change order field + $filters->orderby = \GaletteObjectsLend\Repository\Objects::ORDERBY_STATUS; + $this->assertSame(\GaletteObjectsLend\Repository\Objects::ORDERBY_STATUS, $filters->orderby); + $this->assertSame(\GaletteObjectsLend\Filters\ObjectsList::ORDER_ASC, $filters->ordered); + + //same order field again: direction inverted + $filters->orderby = \GaletteObjectsLend\Repository\Objects::ORDERBY_STATUS; + $this->assertSame(\GaletteObjectsLend\Repository\Objects::ORDERBY_STATUS, $filters->orderby); + $this->assertSame(\GaletteObjectsLend\Filters\ObjectsList::ORDER_DESC, $filters->ordered); + + //not existing order, same kept + $filters->ordered = 42; + $this->assertSame(\GaletteObjectsLend\Repository\Objects::ORDERBY_STATUS, $filters->orderby); + $this->assertSame(\GaletteObjectsLend\Filters\ObjectsList::ORDER_DESC, $filters->ordered); + + //change direction only + $filters->ordered = \GaletteObjectsLend\Filters\ObjectsList::ORDER_ASC; + $this->assertSame(\GaletteObjectsLend\Repository\Objects::ORDERBY_STATUS, $filters->orderby); + $this->assertSame(\GaletteObjectsLend\Filters\ObjectsList::ORDER_ASC, $filters->ordered); + + //set string filter + $filters->filter_str = 'a string'; + $this->assertSame('a string', $filters->filter_str); + + //Set activity filter + $filters->active_filter = \GaletteObjectsLend\Repository\Objects::INACTIVE_OBJECTS; + $this->assertSame(\GaletteObjectsLend\Repository\Objects::INACTIVE_OBJECTS, $filters->active_filter); + + //cast is forced + $filters->active_filter = (string)\GaletteObjectsLend\Repository\Objects::INACTIVE_OBJECTS; + $this->assertSame(\GaletteObjectsLend\Repository\Objects::INACTIVE_OBJECTS, $filters->active_filter); + + //out of known values, no change + $filters->active_filter = 42; + $this->assertSame(\GaletteObjectsLend\Repository\Objects::INACTIVE_OBJECTS, $filters->active_filter); + + $filters->field_filter = \GaletteObjectsLend\Repository\Objects::FILTER_SERIAL; + $this->assertSame(\GaletteObjectsLend\Repository\Objects::FILTER_SERIAL, $filters->field_filter); + + //cast is forced + $filters->field_filter = (string)\GaletteObjectsLend\Repository\Objects::FILTER_SERIAL; + $this->assertSame(\GaletteObjectsLend\Repository\Objects::FILTER_SERIAL, $filters->field_filter); + + //non numeric value, no change + $filters->field_filter = 'abc'; + $this->assertSame(\GaletteObjectsLend\Repository\Objects::FILTER_SERIAL, $filters->field_filter); + + //reinit and test defaults are back + $filters->reinit(); + $this->testDefaults($filters); + } + + /** + * Test setting non existing filter + * + * @return void + */ + public function testSetNotExisting() + { + $filters = new \GaletteObjectsLend\Filters\ObjectsList(); + $this->testDefaults($filters); + + $this->expectException(\RuntimeException::class); + $filters->non_existing = 42; + } + + /** + * Test getting non existing filter + * + * @return void + */ + public function testGetNotExisting() + { + $filters = new \GaletteObjectsLend\Filters\ObjectsList(); + $this->testDefaults($filters); + + $this->expectException(\RuntimeException::class); + $value = $filters->non_existing; + } +}