Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/croogo/croogo/Core/tests/TestCase/CroogoRouterTest.php
<?php

namespace Croogo\Core\Test\TestCase;

use
Cake\Cache\Cache;
use
Cake\Core\Configure;
use
Cake\Http\ServerRequest;
use
Cake\ORM\TableRegistry;
use
Croogo\Core\Router;
use
Croogo\Core\TestSuite\TestCase;

class
CroogoRouterTest extends TestCase
{

    public
$fixtures = [
//      'plugin.Croogo/Settings.Setting',
//      'plugin.Croogo/Taxonomy.Vocabulary',
       
'plugin.Croogo/Taxonomy.Type',
//      'plugin.Croogo/Taxonomy.TypesVocabulary',
   
];

    public function
setUp()
    {
       
parent::setUp();

       
// This test case is only valid for 2.3.x series
       
$this->skipIf(version_compare(Configure::version(), '2.3.1', '<'));
    }

   
/**
     * testHomeRoute
     */
   
public function testHomeRoute()
    {
       
$promoted = [
           
'plugin' => 'Croogo/Nodes',
           
'controller' => 'Nodes',
           
'action' => 'promoted',
        ];
       
Router::connect('/', $promoted);
       
$result = Router::routes();

       
$this->assertEquals(1, count($result));
       
$this->assertNotEmpty($result[0]);
       
$this->assertInstanceOf('Cake\\Routing\\Route\\Route', $result[0]);
       
$homeRequest = new ServerRequest('/');
       
$reversed = Router::parseRequest($homeRequest);
       
$this->assertEquals($promoted, array_intersect_key($promoted, $reversed));

       
// another route
       
$index = [
           
'plugin' => 'Croogo/Nodes',
           
'controller' => 'Nodes',
           
'action' => 'index',
        ];
       
Router::connect('/nodes', $index);
       
$result = Router::routes();
       
$this->assertEquals(2, count($result));
       
$reversed = Router::parseRequest($homeRequest);
       
$this->assertEquals($promoted, array_intersect_key($promoted, $reversed));

       
$terms = [
           
'plugin' => 'Croogo/Nodes',
           
'controller' => 'Nodes',
           
'action' => 'terms',
        ];
       
Router::connect('/', $terms);
       
$result = Router::routes();
       
$this->assertEquals(3, count($result));

       
// override '/' route
//      Router::promote();
       
$reversed = Router::parseRequest($homeRequest);
       
$this->assertEquals($terms, array_intersect_key($terms, $reversed));
    }

    public function
testContentType()
    {
       
$this->markTestIncomplete('This test needs to be ported to CakePHP 3.0');
       
// Reload plugin routes
       
Router::reload();

       
$params = [
           
'plugin' => 'Croogo/Nodes',
           
'controller' => 'Nodes',
           
'action' => 'index',
           
'type' => 'blog',
        ];
       
$result = Router::reverse($params);
       
$this->assertEquals('/blog', $result);

       
Router::reload();
       
Router::contentType('blog');
       
$result = Router::reverse($params);
       
$this->assertEquals('/blog', $result);

       
Router::contentType('page');
       
$params = [
           
'url' => [],
           
'plugin' => 'Croogo/Nodes',
           
'controller' => 'Nodes',
           
'action' => 'index',
           
'type' => 'page',
        ];
       
$result = Router::reverse($params);
       
$this->assertEquals('/page', $result);

       
Router::$initialized = false;
    }

    public function
testRoutableContentTypes()
    {
       
// Reload plugin routes
       
$this->markTestIncomplete('This test needs to be ported to CakePHP 3.0');
       
Plugin::routes();

       
$table = TableRegistry::get('Croogo/Taxonomy.Types');
       
$type = $table->save($table->newEntity([
           
'title' => 'Press Release',
           
'alias' => 'press-release',
           
'description' => '',
        ]));
       
$table->save($type);
       
Cache::clear(false, 'croogo_types');
       
$type = $table->findByAlias('press-release')->first();
       
Router::routableContentTypes();

       
$params = [
           
'url' => [],
           
'plugin' => 'Croogo/Nodes',
           
'controller' => 'Nodes',
           
'action' => 'index',
           
'type' => 'press-release',
        ];
       
$result = Router::reverse($params);
       
$this->assertEquals('/press-release', $result);

       
$type->params = [
           
'routes' => true
       
];
       
$table->save($type);
       
Cache::clear(false, 'croogo_types');
       
Router::reload();
       
Router::routableContentTypes();

       
$result = Router::reverse($params);
       
$this->assertEquals('/press-release', $result);
    }

   
/**
     * testWhitelistedDetectorWithInvalidIp
     */
   
public function testWhitelistedDetectorWithInvalidIp()
    {
       
$request = $this->getMockBuilder(ServerRequest::class)
            ->
setMethods(['clientIp'])
            ->
getMock();
       
$request->addDetector('whitelisted', ['Croogo\\Core\\Router', 'isWhitelistedRequest']);

       
Configure::write('Site.ipWhitelist', '127.0.0.2');
       
$request->expects($this->once())
            ->
method('clientIp')
            ->
will($this->returnValue('8.8.8.8'));
       
$this->assertFalse($request->is('whitelisted'));
    }

   
/**
     * testWhitelistedDetectorWithValidIp
     */
   
public function testWhitelistedDetectorWithValidIp()
    {
       
$request = $this->getMockBuilder(ServerRequest::class)
            ->
setMethods(['clientIp'])
            ->
getMock();
       
$request->addDetector('whitelisted', ['Croogo\\Core\\Router', 'isWhitelistedRequest']);

       
Configure::write('Site.ipWhitelist', '127.0.0.2');
       
$request->expects($this->once())
            ->
method('clientIp')
            ->
will($this->returnValue('127.0.0.2'));
       
$this->assertTrue($request->is('whitelisted'));
    }
}