/** * @test */ 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; }