Scalr\Tests\Api\Rest\Routing\TableTest::testAppendRoute PHP Method

testAppendRoute() public method

public testAppendRoute ( )
    public function testAppendRoute()
    {
        /* @var $tableItem \Scalr\Api\Rest\Routing\Item */
        $ret = $table = new Table();
        $route1 = (new Route('/api/users/v:apiversion/hotels', function () {
        }, ['apiversion' => '[\\d]+']))->setMethods([Request::METHOD_GET]);
        $route2 = (new Route('/api/users/v:apiversion/flights', function () {
        }, ['apiversion' => '[\\d]+']))->setMethods([Request::METHOD_POST]);
        $table->appendRoute($route1);
        $table->appendRoute($route2);
        //api level
        $this->assertEquals(1, $table->count());
        $this->assertSubClassOf('Traversable', $table);
        $this->assertInstanceOf('ArrayAccess', $table);
        $this->assertArrayHasKey('api', $table);
        $this->assertEmpty($table->hasRegexp());
        $this->assertEquals([], $table->getRegexpItemIterator()->getArrayCopy());
        $tableItem = $table['api'];
        $this->assertInstanceOf('Scalr\\Api\\Rest\\Routing\\Item', $tableItem);
        $this->assertInstanceOf('Scalr\\Api\\Rest\\Routing\\PathPart', $tableItem->getPathPart());
        $this->assertEquals('api', $tableItem->getPathPart()->value);
        $this->assertEmpty($tableItem->routes);
        //users level
        $table = $tableItem->getTable();
        $this->assertEquals(1, $table->count());
        $this->assertSubClassOf('Traversable', $table);
        $this->assertInstanceOf('ArrayAccess', $table);
        $this->assertArrayHasKey('users', $table);
        $this->assertEmpty($table->hasRegexp());
        $this->assertEquals([], $table->getRegexpItemIterator()->getArrayCopy());
        $tableItem = $table['users'];
        $this->assertInstanceOf('Scalr\\Api\\Rest\\Routing\\Item', $tableItem);
        $this->assertInstanceOf('Scalr\\Api\\Rest\\Routing\\PathPart', $tableItem->getPathPart());
        $this->assertEquals('users', $tableItem->getPathPart()->value);
        $this->assertEmpty($tableItem->routes);
        //v:apiversion level
        $table = $tableItem->getTable();
        $this->assertEquals(1, $table->count());
        $this->assertSubClassOf('Traversable', $table);
        $this->assertInstanceOf('ArrayAccess', $table);
        $iterator = $table->getIterator();
        list($uriPart, $tableItem) = each($iterator);
        $this->assertContains('^v(?<apiversion>', $uriPart);
        $this->assertNotEmpty($table->hasRegexp());
        $this->assertInstanceOf('Scalr\\Api\\Rest\\Routing\\Item', $tableItem);
        $this->assertInstanceOf('Scalr\\Api\\Rest\\Routing\\PathPart', $tableItem->getPathPart());
        $this->assertContains('^v(?<apiversion>', $tableItem->getPathPart()->value);
        $this->assertTrue(!$tableItem->getPathPart()->isString());
        $this->assertEmpty($tableItem->routes);
        //last level
        $table = $tableItem->getTable();
        $this->assertEquals(2, $table->count());
        $this->assertSubClassOf('Traversable', $table);
        $this->assertInstanceOf('ArrayAccess', $table);
        $this->assertArrayHasKey('hotels', $table);
        $this->assertArrayHasKey('flights', $table);
        $this->assertEmpty($table->hasRegexp());
        $this->assertEquals([], $table->getRegexpItemIterator()->getArrayCopy());
        $this->assertNotEmpty($table['hotels']->routes);
        $this->assertEquals($route1, $table['hotels']->routes[0]);
        $this->assertNotEmpty($table['flights']->routes);
        $this->assertEquals($route2, $table['flights']->routes[0]);
        return $ret;
    }