config = $this->getMockBuilder(Config::class)->disableOriginalConstructor()->getMock(); $this->fileManager = new FileManager(); $this->metadata = $this->getMockBuilder(Metadata::class)->disableOriginalConstructor()->getMock(); $this->dataCache = $this->getMockBuilder(DataCache::class)->disableOriginalConstructor()->getMock(); $this->object = new Route( $this->config, $this->metadata, $this->fileManager, $this->dataCache ); $this->reflection = new ReflectionHelper($this->object); } protected function tearDown() : void { $this->object = NULL; $this->reflection = NULL; } public function testUnifyCase1CustomRoutes() { $this->reflection->setProperty('paths', array( 'corePath' => $this->filesPath . '/testCase1/application/Espo/Resources/routes.json', 'modulePath' => $this->filesPath . '/testCase1/application/Espo/Modules/{*}/Resources/routes.json', 'customPath' => $this->filesPath . '/testCase1/custom/Espo/Custom/Resources/routes.json', )); $this->metadata ->expects($this->once()) ->method('getModuleList') ->will($this->returnValue(array( 'Crm', ))); $result = array ( array ( 'route' => '/Custom/{scope}/{id}/{name}', 'method' => 'get', 'params' => array ( 'controller' => 'Custom', 'action' => 'list', 'scope' => ':scope', 'id' => ':id', 'name' => ':name', ), ), array ( 'route' => '/Activities/{scope}/{id}/{name}', 'method' => 'get', 'params' => array ( 'controller' => 'Activities', 'action' => 'list', 'scope' => ':scope', 'id' => ':id', 'name' => ':name', ), ), array ( 'route' => '/Activities', 'method' => 'get', 'params' => array ( 'controller' => 'Activities', 'action' => 'listCalendarEvents', ), ), array ( 'route' => '/App/user', 'method' => 'get', 'params' => array ( 'controller' => 'App', 'action' => 'user', ), ), array ( 'route' => '/Metadata', 'method' => 'get', 'params' => array ( 'controller' => 'Metadata', ), ), array ( 'route' => '/{controller}/action/{action}', 'method' => 'post', 'params' => array ( 'controller' => ':controller', 'action' => ':action', ), ), array ( 'route' => '/{controller}/action/{action}', 'method' => 'get', 'params' => array ( 'controller' => ':controller', 'action' => ':action', ), ), ); $this->assertEquals($result, $this->reflection->invokeMethod('unify')); } public function testUnifyCase2ModuleRoutes() { $this->reflection->setProperty('paths', array( 'corePath' => $this->filesPath . '/testCase2/application/Espo/Resources/routes.json', 'modulePath' => $this->filesPath . '/testCase2/application/Espo/Modules/{*}/Resources/routes.json', 'customPath' => $this->filesPath . '/testCase2/custom/Espo/Custom/Resources/routes.json', )); $this->metadata ->expects($this->once()) ->method('getModuleList') ->will($this->returnValue(array( 'Crm', 'Test', ))); $result = array ( array ( 'route' => '/Activities/{scope}/{id}/{name}', 'method' => 'get', 'params' => array ( 'controller' => 'Activities', 'action' => 'list', 'scope' => ':scope', 'id' => ':id', 'name' => ':name', ), ), array ( 'route' => '/Activities', 'method' => 'get', 'params' => array ( 'controller' => 'Activities', 'action' => 'listCalendarEvents', ), ), array ( 'route' => '/Test', 'method' => 'get', 'params' => array ( 'controller' => 'Test', 'action' => 'listCalendarEvents', ), ), array ( 'route' => '/App/user', 'method' => 'get', 'params' => array ( 'controller' => 'App', 'action' => 'user', ), ), array ( 'route' => '/Metadata', 'method' => 'get', 'params' => array ( 'controller' => 'Metadata', ), ), array ( 'route' => '/{controller}/action/{action}', 'method' => 'post', 'params' => array ( 'controller' => ':controller', 'action' => ':action', ), ), array ( 'route' => '/{controller}/action/{action}', 'method' => 'get', 'params' => array ( 'controller' => ':controller', 'action' => ':action', ), ), ); $this->assertEquals($result, $this->reflection->invokeMethod('unify')); } public function testUnifyCase3ModuleRoutesWithRewrites() { $this->reflection->setProperty('paths', array( 'corePath' => $this->filesPath . '/testCase3/application/Espo/Resources/routes.json', 'modulePath' => $this->filesPath . '/testCase3/application/Espo/Modules/{*}/Resources/routes.json', 'customPath' => $this->filesPath . '/testCase3/custom/Espo/Custom/Resources/routes.json', )); $this->metadata ->expects($this->once()) ->method('getModuleList') ->will($this->returnValue(array( 'Crm', 'Test', ))); $result = array ( array ( 'route' => '/Activities/{scope}/{id}/{name}', 'method' => 'get', 'params' => array ( 'controller' => 'Test', 'action' => 'list', 'scope' => ':scope', 'id' => ':id', 'name' => ':name', ), ), array ( 'route' => '/Activities', 'method' => 'get', 'params' => array ( 'controller' => 'Activities', 'action' => 'listCalendarEvents', ), ), array ( 'route' => '/Test', 'method' => 'get', 'params' => array ( 'controller' => 'Test', 'action' => 'listCalendarEvents', ), ), array ( 'route' => '/App/user', 'method' => 'get', 'params' => array ( 'controller' => 'App', 'action' => 'user', ), ), array ( 'route' => '/Metadata', 'method' => 'get', 'params' => array ( 'controller' => 'Metadata', ), ), array ( 'route' => '/{controller}/action/{action}', 'method' => 'post', 'params' => array ( 'controller' => ':controller', 'action' => ':action', ), ), array ( 'route' => '/{controller}/action/{action}', 'method' => 'get', 'params' => array ( 'controller' => ':controller', 'action' => ':action', ), ), ); $this->assertEquals($result, $this->reflection->invokeMethod('unify')); } public function testUnifyCase4ModuleRoutesWithRewrites() { // prepare path $paths = [ 'corePath' => $this->filesPath.'/testCase4/application/Espo/Resources/routes.json', 'modulePath' => $this->filesPath.'/testCase4/application/Espo/Modules/{*}/Resources/routes.json', 'customPath' => $this->filesPath.'/testCase4/custom/Espo/Custom/Resources/routes.json', ]; $this->reflection->setProperty('paths', $paths); $this->metadata ->expects($this->once()) ->method('getModuleList') ->will($this->returnValue(array( 'Crm', 'Test', 'TestExt' ))); // prepare expected result $result = [ [ 'route' => '/Activities/{scope}/{id}/{name}', 'method' => 'get', 'params' => [ 'controller' => 'TestExt', 'action' => 'list', 'scope' => ':scope', 'id' => ':id', 'name' => ':name', ], ], [ 'route' => '/Activities', 'method' => 'get', 'params' => [ 'controller' => 'TestExt', 'action' => 'testExtListCalendarEvents' ], ], [ 'route' => '/Product', 'method' => 'get', 'params' => [ 'controller' => 'Product', 'action' => 'listProduct' ], ], [ 'route' => '/Test', 'method' => 'get', 'params' => [ 'controller' => 'Test', 'action' => 'testAction' ], ], ]; $this->assertEquals($result, $this->reflection->invokeMethod('unify')); } }