markTestSkipped('Нужен xdebug_get_headers() для проверки заголовков ответа'); } header_remove(); $this->users_file = sys_get_temp_dir() . '/bicycle_after_users_' . uniqid('', true) . '.php'; file_put_contents($this->users_file, ' ['password' => password_hash('x', PASSWORD_DEFAULT), 'role' => 'admin'], 'bob' => ['password' => password_hash('x', PASSWORD_DEFAULT), 'role' => 'manager'], ], true) . ';'); Config::set('auth', ['driver' => 'file', 'users_file' => $this->users_file, 'session_key' => 'auth_user']); Profiler::reset(); } protected function tearDown(): void { header_remove(); unlink($this->users_file); Session::instance()->destroy(); Profiler::reset(); foreach ([Session::class, Auth::class] as $class) { $ref = new ReflectionClass($class); $prop = $ref->getProperty($class === Session::class ? 'instances' : '_instances'); $prop->setAccessible(true); $prop->setValue(null, []); } $ref = new ReflectionClass(Config::class); $prop = $ref->getProperty('config'); $prop->setAccessible(true); $prop->setValue(null, null); } public function testNoXProfilerHeaderForGuest(): void { (new AfterTestController())->executeAction('pingAction'); $headers = implode("\n", xdebug_get_headers()); $this->assertStringNotContainsString('X-Profiler:', $headers); } public function testNoXProfilerHeaderForNonAdmin(): void { Session::instance()->set('auth_user', 'bob'); (new AfterTestController())->executeAction('pingAction'); $headers = implode("\n", xdebug_get_headers()); $this->assertStringNotContainsString('X-Profiler:', $headers); } public function testXProfilerHeaderForAdminContainsSqlSummary(): void { Session::instance()->set('auth_user', 'admin'); Profiler::log('SELECT * FROM budget', [], 12.34); (new AfterTestController())->executeAction('pingAction'); $header = null; foreach (xdebug_get_headers() as $h) { if (str_starts_with($h, 'X-Profiler:')) { $header = $h; } } $this->assertNotNull($header); $data = json_decode(substr($header, strlen('X-Profiler: ')), true, 512, JSON_THROW_ON_ERROR); $this->assertSame(1, $data['sql_count']); $this->assertSame('SELECT * FROM budget', $data['sql'][0]['sql']); } }