$profile['id'], 'exp' => now()->addHour()->getTimestamp(), ])).'.sig'; self::$profiles[$profile['email']] = $profile; Http::fake([ '*/api/auth/sessions' => Http::response([ 'accessToken' => self::$accessToken, 'refreshToken' => 'fake-refresh-token', 'user' => [ 'id' => $profile['id'], 'email' => $profile['email'], 'name' => $profile['name'], ], ], 200, [ 'Set-Cookie' => 'insforge_refresh_token=fake-refresh-cookie; Path=/; HttpOnly', ]), '*/api/auth/refresh' => Http::response([ 'accessToken' => self::$accessToken, ], 200), '*/api/database/records/users*' => function (Request $request) { return self::handleUsersRequest($request); }, ]); } public static function fakeLoginFailure(): void { self::reset(); Http::fake([ '*/api/auth/sessions' => Http::response([ 'error' => 'AUTH_UNAUTHORIZED', 'message' => 'Invalid credentials', 'statusCode' => 401, ], 401), ]); } public static function fakeProfile(array $profile): void { self::$profiles[$profile['email']] = $profile; } private static function handleUsersRequest(Request $request) { parse_str((string) parse_url($request->url(), PHP_URL_QUERY) ?? '', $query); $method = strtoupper($request->method()); if ($method === 'GET') { foreach (self::$profiles as $profile) { if (($query['email'] ?? null) === 'eq.'.$profile['email'] || ($query['id'] ?? null) === 'eq.'.$profile['id']) { return Http::response([$profile], 200); } } return Http::response([], 200); } if ($method === 'POST') { $payload = $request->data()[0] ?? []; if (! is_array($payload)) { return Http::response([], 201); } self::$profiles[$payload['email']] = array_merge([ 'role' => 'operator', 'is_active' => true, ], $payload); return Http::response([], 201); } if ($method === 'PATCH') { $targetId = str_replace('eq.', '', $query['id'] ?? ''); foreach (self::$profiles as &$profile) { if ($profile['id'] === $targetId) { $profile = array_merge($profile, $request->data()); } } unset($profile); return Http::response([], 200); } return Http::response([], 200); } }