/** * Test group define and middleware for group. */ public function testGroup() { TestUtils::clearRoutes(); // Called? $globalBefore = false; $globalBeforePost = false; $globalAfter = false; $groupBefore = false; $groupAfter = false; // Done int. $done = 0; // Hold if we already called. $called = false; // Set global middleware, before. Router::getInstance()->before(function () use(&$globalBefore) { $globalBefore = true; }); Router::getInstance()->before(function () use(&$globalBeforePost) { $globalBeforePost = true; }, null, ['POST']); Router::getInstance()->after(function () use(&$globalAfter) { $globalAfter = true; }); // Define group. Router::group('group1', function (Router $router) use(&$done, &$called, &$groupBefore, &$groupAfter) { // Add before that will only pass 1 time (the first time) $router->before(function () use(&$called, &$groupBefore) { $groupBefore = true; if ($called) { return false; } $called = true; return true; }); // Add test get $router->get('/middleware/1', function () use(&$done) { $done++; }); // Add test after $router->after(function () use(&$groupAfter) { $groupAfter = true; }); }); Router::getInstance()->post("/middleware/2", function () use(&$done) { $done++; }); // Ok, lets spoof. $router = Router::getInstance(); $this->spoof('/middleware/1', 'GET'); $router->run(); $this->assertEquals(1, $done); $this->assertTrue($globalBefore); $this->assertTrue($globalAfter); $this->assertTrue($groupBefore); $this->assertTrue($groupAfter); $this->assertFalse($globalBeforePost); // Second time should not call the $done one again! $this->spoof('/middleware/1', 'GET'); $router->run(); $this->assertEquals(1, $done); $this->assertTrue($globalBefore); $this->assertTrue($globalAfter); $this->assertTrue($groupBefore); $this->assertTrue($groupAfter); $this->assertFalse($globalBeforePost); // Call the post one! $this->spoof('/middleware/2', 'POST'); $router->run(); $this->assertEquals(2, $done); $this->assertTrue($globalBefore); $this->assertTrue($globalAfter); $this->assertTrue($groupBefore); $this->assertTrue($groupAfter); $this->assertTrue($globalBeforePost); }