public function testEquivalenceGroups() { $fC = new Frontcontroller(); PriorityAwareTestAction::$INITIAL_PRIORITY = 10; $fC->addAction(self::TEST_ACTION_NAMESPACE, self::TEST_ACTION_NAME, ['id' => '10-1']); PriorityAwareTestAction::$INITIAL_PRIORITY = 1; $fC->addAction(self::TEST_ACTION_NAMESPACE, self::TEST_ACTION_NAME); PriorityAwareTestAction::$INITIAL_PRIORITY = 5; $fC->addAction(self::TEST_ACTION_NAMESPACE, self::TEST_ACTION_NAME); PriorityAwareTestAction::$INITIAL_PRIORITY = 10; $fC->addAction(self::TEST_ACTION_NAMESPACE, self::TEST_ACTION_NAME, ['id' => '10-2']); PriorityAwareTestAction::$INITIAL_PRIORITY = 10; $fC->addAction(self::TEST_ACTION_NAMESPACE, self::TEST_ACTION_NAME, ['id' => '10-3']); PriorityAwareTestAction::$INITIAL_PRIORITY = 20; $fC->addAction(self::TEST_ACTION_NAMESPACE, self::TEST_ACTION_NAME, ['id' => '20-1']); PriorityAwareTestAction::$INITIAL_PRIORITY = 15; $fC->addAction(self::TEST_ACTION_NAMESPACE, self::TEST_ACTION_NAME); PriorityAwareTestAction::$INITIAL_PRIORITY = 20; $fC->addAction(self::TEST_ACTION_NAMESPACE, self::TEST_ACTION_NAME, ['id' => '20-2']); $actions = $fC->getActions(); $keys = array_keys($actions); $this->assertEquals(20, $actions[$keys[0]]->getPriority()); $this->assertEquals('20-1', $actions[$keys[0]]->getInput()->getParameter('id')); $this->assertEquals(20, $actions[$keys[1]]->getPriority()); $this->assertEquals('20-2', $actions[$keys[1]]->getInput()->getParameter('id')); $this->assertEquals(15, $actions[$keys[2]]->getPriority()); $this->assertEquals(10, $actions[$keys[3]]->getPriority()); $this->assertEquals('10-1', $actions[$keys[3]]->getInput()->getParameter('id')); $this->assertEquals(10, $actions[$keys[4]]->getPriority()); $this->assertEquals('10-2', $actions[$keys[4]]->getInput()->getParameter('id')); $this->assertEquals(10, $actions[$keys[5]]->getPriority()); $this->assertEquals('10-3', $actions[$keys[5]]->getInput()->getParameter('id')); $this->assertEquals(5, $actions[$keys[6]]->getPriority()); $this->assertEquals(1, $actions[$keys[7]]->getPriority()); }
public function testMappingRegistration() { $fC = new Frontcontroller(); $fooUrlToken = 'foo'; $barUrlToken = 'bar'; $bazUrlToken = 'baz'; $fooNamespace = 'VENDOR\\foo'; $barNamespace = 'VENDOR\\bar'; $bazNamespace = 'VENDOR\\baz'; $fooName = 'say-foo'; $barName = 'say-bar'; $bazName = 'say-baz'; $fooMapping = new ActionUrlMapping($fooUrlToken, $fooNamespace, $fooName); $barMapping = new ActionUrlMapping($barUrlToken, $barNamespace, $barName); $bazMapping = new ActionUrlMapping($bazUrlToken, $bazNamespace, $bazName); $fC->registerActionUrlMapping($fooMapping); $fC->registerActionUrlMapping($barMapping); $fC->registerActionUrlMapping($bazMapping); $this->assertEquals([$fooUrlToken, $barUrlToken, $bazUrlToken], $fC->getActionUrlMappingTokens()); $this->assertCount(3, $fC->getActionUrlMappingTokens()); $this->assertEquals($fooMapping, $fC->getActionUrlMapping($fooUrlToken)); $this->assertEquals($fooMapping, $fC->getActionUrlMapping($fooNamespace, $fooName)); $this->assertEquals($barMapping, $fC->getActionUrlMapping($barUrlToken)); $this->assertEquals($barMapping, $fC->getActionUrlMapping($barNamespace, $barName)); $this->assertEquals($bazMapping, $fC->getActionUrlMapping($bazUrlToken)); $this->assertEquals($bazMapping, $fC->getActionUrlMapping($bazNamespace, $bazName)); $this->assertNull($fC->getActionUrlMapping('123456')); }
public function testMixedActions() { $fooUrlToken = 'foo'; $fooActionNamespace = 'VENDOR\\foo'; $fooActionName = 'say-foo'; $barUrlToken = 'bar'; $barActionNamespace = 'VENDOR\\bar'; $barActionName = 'say-bar'; // action on stack w/o params $_REQUEST = []; $_REQUEST[$fooUrlToken] = ''; $_REQUEST['VENDOR_baz-action:say-baz'] = ''; $_REQUEST[$barUrlToken] = ''; $filter = new TestableChainedStandardInputFilter(); $fC = new Frontcontroller(); $fC->registerActionUrlMapping(new ActionUrlMapping($fooUrlToken, $fooActionNamespace, $fooActionName)); $fC->registerActionUrlMapping(new ActionUrlMapping($barUrlToken, $barActionNamespace, $barActionName)); $filter->setFrontcontroller($fC); $filter->filter(new TestableFilterChain(), null); $actions = $fC->getActions(); $this->assertEquals($fooActionNamespace, $actions[0]->getActionNamespace()); $this->assertEquals($fooActionName, $actions[0]->getActionName()); $this->assertEquals([], $actions[0]->getInput()->getParameters()); $this->assertEquals('VENDOR\\baz', $actions[1]->getActionNamespace()); $this->assertEquals('say-baz', $actions[1]->getActionName()); $this->assertEquals([], $actions[1]->getInput()->getParameters()); $this->assertEquals($barActionNamespace, $actions[2]->getActionNamespace()); $this->assertEquals($barActionName, $actions[2]->getActionName()); $this->assertEquals([], $actions[2]->getInput()->getParameters()); // action on stack w/ params $_REQUEST = []; $_REQUEST[$fooUrlToken] = 'one:1|two:2'; $_REQUEST['VENDOR_baz-action:say-baz'] = 'one:1|two:2'; $_REQUEST[$barUrlToken] = 'one:1|two:2'; $filter = new TestableChainedStandardInputFilter(); $fC = new Frontcontroller(); $fC->registerActionUrlMapping(new ActionUrlMapping($fooUrlToken, $fooActionNamespace, $fooActionName)); $fC->registerActionUrlMapping(new ActionUrlMapping($barUrlToken, $barActionNamespace, $barActionName)); $filter->setFrontcontroller($fC); $filter->filter(new TestableFilterChain(), null); $actions = $fC->getActions(); $this->assertEquals($fooActionNamespace, $actions[0]->getActionNamespace()); $this->assertEquals($fooActionName, $actions[0]->getActionName()); $this->assertEquals(['one' => '1', 'two' => '2'], $actions[0]->getInput()->getParameters()); $this->assertEquals('VENDOR\\baz', $actions[1]->getActionNamespace()); $this->assertEquals('say-baz', $actions[1]->getActionName()); $this->assertEquals(['one' => '1', 'two' => '2'], $actions[1]->getInput()->getParameters()); $this->assertEquals($barActionNamespace, $actions[2]->getActionNamespace()); $this->assertEquals($barActionName, $actions[2]->getActionName()); $this->assertEquals(['one' => '1', 'two' => '2'], $actions[2]->getInput()->getParameters()); }
public function testMixedActions() { $fooUrlToken = 'foo'; $fooActionNamespace = 'VENDOR\\foo'; $fooActionName = 'say-foo'; $barUrlToken = 'bar'; $barActionNamespace = 'VENDOR\\bar'; $barActionName = 'say-bar'; // action on stack w/o params - trailing slash special challenge ;) $_REQUEST = []; $_REQUEST[self::REWRITTEN_QUERY_ATTRIBUTE] = '/' . $fooUrlToken . '/~/VENDOR_baz-action/say-baz/~/' . $barUrlToken . '/'; $filter = new TestableChainedUrlRewritingInputFilter(); $fC = new Frontcontroller(); $fC->registerActionUrlMapping(new ActionUrlMapping($fooUrlToken, $fooActionNamespace, $fooActionName)); $fC->registerActionUrlMapping(new ActionUrlMapping($barUrlToken, $barActionNamespace, $barActionName)); $filter->setFrontcontroller($fC); $filter->filter(new TestableFilterChain(), null); $actions = $fC->getActions(); $this->assertEquals($fooActionNamespace, $actions[0]->getActionNamespace()); $this->assertEquals($fooActionName, $actions[0]->getActionName()); $this->assertEquals([], $actions[0]->getInput()->getParameters()); $this->assertEquals('VENDOR\\baz', $actions[1]->getActionNamespace()); $this->assertEquals('say-baz', $actions[1]->getActionName()); $this->assertEquals([], $actions[1]->getInput()->getParameters()); $this->assertEquals($barActionNamespace, $actions[2]->getActionNamespace()); $this->assertEquals($barActionName, $actions[2]->getActionName()); $this->assertEquals([], $actions[2]->getInput()->getParameters()); // action on stack w/ params $_REQUEST = []; $_REQUEST[self::REWRITTEN_QUERY_ATTRIBUTE] = '/~/' . $fooUrlToken . '/one/1/two/2/~/VENDOR_baz-action/say-baz/one/1/two/2/~/' . $barUrlToken . '/one/1/two/2'; $filter = new TestableChainedUrlRewritingInputFilter(); $fC = new Frontcontroller(); $fC->registerActionUrlMapping(new ActionUrlMapping($fooUrlToken, $fooActionNamespace, $fooActionName)); $fC->registerActionUrlMapping(new ActionUrlMapping($barUrlToken, $barActionNamespace, $barActionName)); $filter->setFrontcontroller($fC); $filter->filter(new TestableFilterChain(), null); $actions = $fC->getActions(); $this->assertEquals($fooActionNamespace, $actions[0]->getActionNamespace()); $this->assertEquals($fooActionName, $actions[0]->getActionName()); $this->assertEquals(['one' => '1', 'two' => '2'], $actions[0]->getInput()->getParameters()); $this->assertEquals('VENDOR\\baz', $actions[1]->getActionNamespace()); $this->assertEquals('say-baz', $actions[1]->getActionName()); $this->assertEquals(['one' => '1', 'two' => '2'], $actions[1]->getInput()->getParameters()); $this->assertEquals($barActionNamespace, $actions[2]->getActionNamespace()); $this->assertEquals($barActionName, $actions[2]->getActionName()); $this->assertEquals(['one' => '1', 'two' => '2'], $actions[2]->getInput()->getParameters()); }