diff options
8 files changed, 44 insertions, 143 deletions
diff --git a/lib/resources/ResourceManager.class.php b/lib/resources/ResourceManager.class.php index e0d9466..13588a4 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 c3f4e82..109cccb 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 ba18e7e..97b139c 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 78b71f8..f1a6a6c 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 1042508..59e97c6 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 24b8b56..86c46f9 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 1d689ca..baf6573 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 8eb309c..5b65c3b 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); - } - } |
