Skip to content
Snippets Groups Projects
Select Git revision
  • 1b837a1abd760f296718b18604d0d6e7f1bf1687
  • main default protected
  • step-3263
  • feature/plugins-cli
  • feature/vite
  • step-2484-peerreview
  • biest/issue-5051
  • tests/simplify-jsonapi-tests
  • fix/typo-in-1a70031
  • feature/broadcasting
  • database-seeders-and-factories
  • feature/peer-review-2
  • feature-feedback-jsonapi
  • feature/peerreview
  • feature/balloon-plus
  • feature/stock-images-unsplash
  • tic-2588
  • 5.0
  • 5.2
  • biest/unlock-blocks
  • biest-1514
21 results

ResourceManagerTest.php

Blame
  • Forked from Stud.IP / Stud.IP
    3917 commits behind the upstream repository.
    David Siegfried's avatar
    David Siegfried authored and Jan-Hendrik Willms committed
    1b837a1a
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ResourceManagerTest.php 12.16 KiB
    <?php
    require_once __DIR__ . '/../../_bootstrap.php';
    
    class ResourceManagerTest extends \Codeception\Test\Unit
    {
        protected $db_handle;
        protected $oldUser;
    
        protected function _before()
        {
            //First we must initialise the StudipPDO database connection:
            $this->db_handle = new \StudipPDO(
                'mysql:host='
                    . $GLOBALS['DB_STUDIP_HOST']
                    . ';dbname='
                    . $GLOBALS['DB_STUDIP_DATABASE'],
                $GLOBALS['DB_STUDIP_USER'],
                $GLOBALS['DB_STUDIP_PASSWORD']
            );
    
            //Then we must start a transaction before we access the database,
            //otherwise we would spam the live database with test data!
            $this->db_handle->beginTransaction();
    
            //Now we tell the DBManager about the connection
            //we have established to the Stud.IP database:
            \DBManager::getInstance()->setConnection('studip', $this->db_handle);
    
            // 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)
            );
    
            //As a final step we create the SORM objects for our test cases:
    
            $this->test_cat = new ResourceCategory();
            $this->test_cat->class_name = 'Resource';
            $this->test_cat->store();
    
            $this->position_def = new ResourcePropertyDefinition();
            $this->position_def->name = 'test_pos';
            $this->position_def->type = 'position';
            $this->position_def->store();
    
            $this->perm_user = new User();
            $this->perm_user->username = 'test_resource_perm';
            $this->perm_user->perms = 'autor';
            $this->perm_user->store();
    
            $this->perm_resource = $this->test_cat->createResource(
                'Permission Test Resource'
            );
            $this->perm_resource->store();
    
            $this->test_def = new ResourcePropertyDefinition();
            $this->test_def->name = 'test_is_test';
            $this->test_def->type = 'bool';
            $this->test_def->store();
    
            //Everything is set up for the test cases.
        }
    
        protected function _after()
        {
            //We must roll back the changes we made in this test
            //so that the live database remains unchanged after
            //all the test cases of this test have been finished:
            $this->db_handle->rollBack();
    
            // Workaround old-style Stud.IP-API using $GLOBALS['user']
            $GLOBALS['user'] = $this->oldUser;
         }
    
        public function testCreateCategory()
        {
            $category = ResourceManager::createCategory(
                'Test',
                'Test for createCategory',
                'Resource',
                true,
                '9',
                [
                    [
                        'test_is_test',
                        true,
                        false,
                        true
                    ]
                ]
            );
    
            $this->assertEquals(
                'Test',
                $category->name
            );
    
            $this->assertEquals(
                'Test for createCategory',
                $category->description
            );
    
            $this->assertEquals(
                'Resource',
                $category->class_name
            );
    
            $this->assertEquals(
                '1',
                $category->system
            );
    
            $this->assertEquals(
                '9',
                $category->iconnr
            );
    
            $this->assertEquals(
                true,
                $category->hasProperty('test_is_test', 'bool')
            );
        }
    
        public function testCreateLocationCategory()
        {
            $location_cat = ResourceManager::createLocationCategory(
                'TestLocation',
                'A test location category',
                [
                    [
                        'test_is_test',
                        true,
                        true,
                        true
                    ]
                ]
            );
    
            //Test default properties:
            $this->assertEquals(
                true,
                $location_cat->hasProperty('geo_coordinates', 'position')
            );
    
            //Test optional properties:
            $this->assertEquals(
                true,
                $location_cat->hasProperty('test_is_test', 'bool')
            );
        }
    
        public function testCreateBuildingCategory()
        {
            $building_cat = ResourceManager::createBuildingCategory(
                'TestBuilding',
                'A test building category',
                [
                    [
                        'test_is_test',
                        true,
                        true,
                        true
                    ]
                ]
            );
    
            //Test default properties:
            $this->assertEquals(
                true,
                $building_cat->hasProperty('address', 'text')
            );
    
            $this->assertEquals(
                true,
                $building_cat->hasProperty('accessible', 'bool')
            );
    
            $this->assertEquals(
                true,
                $building_cat->hasProperty('geo_coordinates', 'position')
            );
    
            $this->assertEquals(
                true,
                $building_cat->hasProperty('number', 'text')
            );
    
            //Test optional properties:
            $this->assertEquals(
                true,
                $building_cat->hasProperty('test_is_test', 'bool')
            );
        }
    
        public function testCreateRoomCategory()
        {
            $room_cat = ResourceManager::createRoomCategory(
                'TestRoom',
                'A test room category',
                [
                    [
                        'test_is_test',
                        true,
                        true,
                        true
                    ]
                ]
            );
    
            //Test default properties:
            $this->assertEquals(
                true,
                $room_cat->hasProperty('room_type', 'select')
            );
    
            $this->assertEquals(
                true,
                $room_cat->hasProperty('seats', 'num')
            );
    
            $this->assertEquals(
                true,
                $room_cat->hasProperty('booking_plan_is_public', 'bool')
            );
    
            //Test optional properties:
            $this->assertEquals(
                true,
                $room_cat->hasProperty('test_is_test', 'bool')
            );
        }
    
        public function testCopyResource()
        {
            $copy = ResourceManager::copyResource(
                $this->perm_resource,
                false
            );
    
            $this->assertEquals(
                $this->perm_resource->name,
                $copy->name
            );
        }
    
        public function testMoveResource()
        {
            $parent_res = $this->test_cat->createResource('Parent Resource');
            $new_res = $this->test_cat->createResource('Moved Resource');
    
            $result = ResourceManager::moveResource($new_res, $parent_res);
    
            $this->assertEquals(true, $result);
    
            $this->assertEquals(
                $parent_res->id,
                $new_res->parent_id
            );
    
            $this->assertEquals(
                $parent_res->children[0]->id,
                $new_res->id
            );
        }
    
        public function testGoodPositions()
        {
            $position = new ResourceProperty();
            $position->getId();
            $position->property_id = $this->position_def->id;
            $position->state = '+8.040295+17.988283+83.934CRSWGS_84/';
    
            $position_array = ResourceManager::getPositionArray($position);
    
            $this->assertEquals(
                ['8.040295', '17.988283', '83.934'],
                $position_array
            );
    
            $position_url = ResourceManager::getMapUrlForResourcePosition($position);
    
            $this->assertEquals(
                'https://www.openstreetmap.org/#map=19/8.040295/17.988283',
                $position_url
            );
    
            $position->state = '-14.29302-31.28323-5.292CRSWGS_84/';
    
            $this->assertEquals(
                ['-14.29302', '-31.28323', '-5.292'],
                ResourceManager::getPositionArray($position)
            );
    
            $position_url = ResourceManager::getMapUrlForResourcePosition($position);
    
            $this->assertEquals(
                'https://www.openstreetmap.org/#map=19/-14.29302/-31.28323',
                $position_url
            );
        }
    
        public function testEmptyPositionState()
        {
            $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);
        }
    
        public function testBadLatitudePositionState2()
        {
            $this->expectException(ResourcePropertyStateException::class);
    
            $position = new ResourceProperty();
            $position->getId();
            $position->property_id = $this->position_def->id;
            $position->state = '+14-31.28323-5.292CRSWGS_84/';
    
            ResourceManager::getPositionArray($position);
        }
    
        public function testMissingLatitudePositionState()
        {
            $this->expectException(ResourcePropertyStateException::class);
    
            $position = new ResourceProperty();
            $position->property_id = $this->position_def->id;
            $position->state = '-31.28323-5.292CRSWGS_84/';
    
            ResourceManager::getPositionArray($position);
        }
    
        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);
        }
    
    }