From 41dc18c9b1eed78cf0391b9953518c7eb071b526 Mon Sep 17 00:00:00 2001 From: David Siegfried <david.siegfried@uni-vechta.de> Date: Tue, 21 Jun 2022 13:03:39 +0000 Subject: [PATCH] fix functional resource management tests, fixes #1193 Closes #1193 Merge request studip/studip!709 --- lib/resources/ResourceManager.class.php | 31 ++-- .../lib/models/resources/BuildingTest.php | 2 +- .../lib/models/resources/LocationTest.php | 2 +- .../resources/ResourceAssignmentTest.php | 2 +- .../models/resources/ResourceCategoryTest.php | 2 +- .../lib/models/resources/ResourceTest.php | 2 +- .../lib/models/resources/RoomTest.php | 2 +- .../lib/resources/ResourceManagerTest.php | 144 +++--------------- 8 files changed, 44 insertions(+), 143 deletions(-) diff --git a/lib/resources/ResourceManager.class.php b/lib/resources/ResourceManager.class.php index e0d94667617..13588a47814 100644 --- a/lib/resources/ResourceManager.class.php +++ b/lib/resources/ResourceManager.class.php @@ -534,6 +534,24 @@ class ResourceManager } } + /** + * Check if the coordinate are in appropriate CRSWGS_84 format. + * + * - latitude: up to 2 digits, decimal point, 1 to 10 digits for fraction + * - longitude: up to 3 digits, decimal point, 1 to 10 digits for fraction + * - altitude: up to 5 digits, decimal point, 1 to 10 digits for fraction + * + * @param string $coordinate_string + * @return bool + */ + public static function validateCoordinates(string $coordinate_string): bool + { + return preg_match( + ResourcePropertyDefinition::CRSWGS84_REGEX, + $coordinate_string + ); + } + // Static methods for position properties: @@ -557,17 +575,8 @@ class ResourceManager $coordinate_string = $property->state; - //Check, if the coordinate string ends with "CRSWGS_84/" - //and if all the numbers are in the appropriate format: - //- latitude: up to 2 digits, decimal point, 1 to 10 digits for fraction - //- longitude: up to 3 digits, decimal point, 1 to 10 digits for fraction - //- altitude: up to 5 digits, decimal point, 1 to 10 digits for fraction - //before the decimal point. After the decimal point, - //In that case it is a coordinate format we can parse: - if(!preg_match( - ResourcePropertyDefinition::CRSWGS84_REGEX, - $coordinate_string - )) { + // Show error message when coordinates are invalid + if (!self::validateCoordinates($coordinate_string)) { PageLayout::postError(_('Die Positionsangabe kann nicht umgewandelt werden, da sie ungültige Daten enthält!')); } diff --git a/tests/functional/lib/models/resources/BuildingTest.php b/tests/functional/lib/models/resources/BuildingTest.php index c3f4e82136f..109cccb5027 100644 --- a/tests/functional/lib/models/resources/BuildingTest.php +++ b/tests/functional/lib/models/resources/BuildingTest.php @@ -46,7 +46,7 @@ class BuildingTest extends \Codeception\Test\Unit // Workaround old-style Stud.IP-API using $GLOBALS['user'] $this->oldUser = $GLOBALS['user']; $GLOBALS['user'] = new \Seminar_User( - \User::build(['user_id' => 'cli', 'username' => 'cli', 'perms' => 'autor'], false) + \User::findByUsername('root@studip') ); //As a final step we create the SORM objects for our test cases: diff --git a/tests/functional/lib/models/resources/LocationTest.php b/tests/functional/lib/models/resources/LocationTest.php index ba18e7e91d0..97b139c42b4 100644 --- a/tests/functional/lib/models/resources/LocationTest.php +++ b/tests/functional/lib/models/resources/LocationTest.php @@ -49,7 +49,7 @@ class LocationTest extends \Codeception\Test\Unit // Workaround old-style Stud.IP-API using $GLOBALS['user'] $this->oldUser = $GLOBALS['user']; $GLOBALS['user'] = new \Seminar_User( - \User::build(['user_id' => 'cli', 'username' => 'cli', 'perms' => 'autor'], false) + \User::findByUsername('root@studip') ); //As a final step we create the SORM objects for our test cases: diff --git a/tests/functional/lib/models/resources/ResourceAssignmentTest.php b/tests/functional/lib/models/resources/ResourceAssignmentTest.php index 78b71f87f15..f1a6a6ce816 100644 --- a/tests/functional/lib/models/resources/ResourceAssignmentTest.php +++ b/tests/functional/lib/models/resources/ResourceAssignmentTest.php @@ -47,7 +47,7 @@ class ResourceAssignmentTest extends \Codeception\Test\Unit // Workaround old-style Stud.IP-API using $GLOBALS['user'] $this->oldUser = $GLOBALS['user']; $GLOBALS['user'] = new \Seminar_User( - \User::build(['user_id' => 'cli', 'username' => 'cli', 'perms' => 'root'], false) + \User::findByUsername('root@studip') ); $this->oldPerm = $GLOBALS['perm']; $GLOBALS['perm'] = new \Seminar_Perm(); diff --git a/tests/functional/lib/models/resources/ResourceCategoryTest.php b/tests/functional/lib/models/resources/ResourceCategoryTest.php index 1042508bf46..59e97c6114c 100644 --- a/tests/functional/lib/models/resources/ResourceCategoryTest.php +++ b/tests/functional/lib/models/resources/ResourceCategoryTest.php @@ -159,7 +159,7 @@ class ResourceCategoryTest extends \Codeception\Test\Unit $def = new ResourcePropertyDefinition(); $def->name = 'test'; - $def->type = 'unknown'; + $def->type = 'bool'; $def->store(); $prop = $resource_cat->addProperty( diff --git a/tests/functional/lib/models/resources/ResourceTest.php b/tests/functional/lib/models/resources/ResourceTest.php index 24b8b56e4e0..86c46f97b91 100644 --- a/tests/functional/lib/models/resources/ResourceTest.php +++ b/tests/functional/lib/models/resources/ResourceTest.php @@ -28,7 +28,7 @@ class ResourceTest extends \Codeception\Test\Unit // Workaround old-style Stud.IP-API using $GLOBALS['user'] $this->oldUser = $GLOBALS['user']; $GLOBALS['user'] = new \Seminar_User( - \User::build(['user_id' => 'cli', 'username' => 'cli', 'perms' => 'root'], false) + \User::findByUsername('root@studip') ); $this->oldPerm = $GLOBALS['perm']; $GLOBALS['perm'] = new \Seminar_Perm(); diff --git a/tests/functional/lib/models/resources/RoomTest.php b/tests/functional/lib/models/resources/RoomTest.php index 1d689cacec2..baf65737c9b 100644 --- a/tests/functional/lib/models/resources/RoomTest.php +++ b/tests/functional/lib/models/resources/RoomTest.php @@ -49,7 +49,7 @@ class RoomTest extends \Codeception\Test\Unit // Workaround old-style Stud.IP-API using $GLOBALS['user'] $this->oldUser = $GLOBALS['user']; $GLOBALS['user'] = new \Seminar_User( - \User::build(['user_id' => 'cli', 'username' => 'cli', 'perms' => 'root'], false) + \User::findByUsername('root@studip') ); $this->oldPerm = $GLOBALS['perm']; $GLOBALS['perm'] = new \Seminar_Perm(); diff --git a/tests/functional/lib/resources/ResourceManagerTest.php b/tests/functional/lib/resources/ResourceManagerTest.php index 8eb309ca876..5b65c3b774c 100644 --- a/tests/functional/lib/resources/ResourceManagerTest.php +++ b/tests/functional/lib/resources/ResourceManagerTest.php @@ -29,7 +29,7 @@ class ResourceManagerTest extends \Codeception\Test\Unit // Workaround old-style Stud.IP-API using $GLOBALS['user'] $this->oldUser = $GLOBALS['user']; $GLOBALS['user'] = new \Seminar_User( - \User::build(['user_id' => 'cli', 'username' => 'cli', 'perms' => 'autor'], false) + \User::findByUsername('root@studip') ); //As a final step we create the SORM objects for our test cases: @@ -299,139 +299,31 @@ class ResourceManagerTest extends \Codeception\Test\Unit ); } - public function testEmptyPositionState() + /** + * @dataProvider coordinateProvider + */ + public function testCoordinatesValidation($coordinates) { - $this->expectException(ResourcePropertyStateException::class); - - $position = new ResourceProperty(); - $position->getId(); - $position->property_id = $this->position_def->id; - $position->state = ''; - - ResourceManager::getPositionArray($position); - } - - public function testBadLatitudePositionState1() - { - $this->expectException(ResourcePropertyStateException::class); - - $position = new ResourceProperty(); - $position->getId(); - $position->property_id = $this->position_def->id; - $position->state = '14.29302-31.28323-5.292CRSWGS_84/'; - - ResourceManager::getPositionArray($position); + $this->assertFalse(ResourceManager::validateCoordinates($coordinates)); } - public function testBadLatitudePositionState2() + public static function coordinateProvider(): array { - $this->expectException(ResourcePropertyStateException::class); - $position = new ResourceProperty(); - $position->getId(); - $position->property_id = $this->position_def->id; - $position->state = '+14-31.28323-5.292CRSWGS_84/'; + return [ + 'empty' => [''], - ResourceManager::getPositionArray($position); - } + 'bad-latitude-1' => ['14.29302-31.28323-5.292CRSWGS_84/'], + 'bad-latitude-2' => ['+14-31.28323-5.292CRSWGS_84/'], + 'missing-latitude' => ['-31.28323-5.292CRSWGS_84/'], - public function testMissingLatitudePositionState() - { - $this->expectException(ResourcePropertyStateException::class); + 'bad-longitude-1' => ['-14.29302-31-5.292CRSWGS_84/'], + 'bad-longitude-2' => ['-14.29302-+31.28323-5.292CRSWGS_84/'], - $position = new ResourceProperty(); - $position->property_id = $this->position_def->id; - $position->state = '-31.28323-5.292CRSWGS_84/'; + 'missing-altitude' => ['-14.29302-31.28323CRSWGS_84/'], - ResourceManager::getPositionArray($position); + 'bad-suffix' => ['-14.29302-31.28323-5.292CRSWGS_84'], + 'missing-suffix' => ['-14.29302-31.28323-5.292'], + ]; } - - public function testBadLongitudePositionState1() - { - $this->expectException(ResourcePropertyStateException::class); - - $position = new ResourceProperty(); - $position->property_id = $this->position_def->id; - $position->state = '-14.29302-31-5.292CRSWGS_84/'; - - ResourceManager::getPositionArray($position); - } - - public function testBadLongitudePositionState2() - { - $this->expectException(ResourcePropertyStateException::class); - - $position = new ResourceProperty(); - $position->property_id = $this->position_def->id; - $position->state = '-14.29302-+31.28323-5.292CRSWGS_84/'; - - ResourceManager::getPositionArray($position); - } - - public function testMissingLongitudePositionState() - { - $this->expectException(ResourcePropertyStateException::class); - - $position = new ResourceProperty(); - $position->property_id = $this->position_def->id; - $position->state = '-14.29302--5.292CRSWGS_84/'; - - ResourceManager::getPositionArray($position); - } - - public function testBadAltitudePositionState1() - { - $this->expectException(ResourcePropertyStateException::class); - - $position = new ResourceProperty(); - $position->property_id = $this->position_def->id; - $position->state = '-14.29302-31.28323-+5.292CRSWGS_84/'; - - ResourceManager::getPositionArray($position); - } - - public function testBadAltitudePositionState2() - { - $this->expectException(ResourcePropertyStateException::class); - - $position = new ResourceProperty(); - $position->property_id = $this->position_def->id; - $position->state = '-14.29302-31.28323+5292CRSWGS_84/'; - - ResourceManager::getPositionArray($position); - } - - public function testMissingAltitudePositionState() - { - $this->expectException(ResourcePropertyStateException::class); - - $position = new ResourceProperty(); - $position->property_id = $this->position_def->id; - $position->state = '-14.29302-31.28323CRSWGS_84/'; - - ResourceManager::getPositionArray($position); - } - - public function testBadSuffixPositionState() - { - $this->expectException(ResourcePropertyStateException::class); - - $position = new ResourceProperty(); - $position->property_id = $this->position_def->id; - $position->state = '-14.29302-31.28323-5.292CRSWGS_84'; - - ResourceManager::getPositionArray($position); - } - - public function testMissingSuffixPositionState() - { - $this->expectException(ResourcePropertyStateException::class); - - $position = new ResourceProperty(); - $position->property_id = $this->position_def->id; - $position->state = '-14.29302-31.28323-5.292'; - - ResourceManager::getPositionArray($position); - } - } -- GitLab