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