set('auth.basic.enabled', true); config()->set('auth.basic.user', 'staging'); config()->set('auth.basic.password', 'secret'); }); function handleBasicAuth(Request $request): Response { return (new BasicAuthMiddleware)->handle($request, fn () => response('ok')); } test('rejects request without credentials', function () { $response = handleBasicAuth(Request::create('/dashboard', 'GET')); expect($response->getStatusCode())->toBe(401) ->and($response->headers->get('WWW-Authenticate'))->toBe('Basic'); }); test('rejects request with wrong password', function () { $request = Request::create('/dashboard', 'GET', server: [ 'PHP_AUTH_USER' => 'staging', 'PHP_AUTH_PW' => 'wrong', ]); expect(handleBasicAuth($request)->getStatusCode())->toBe(401); }); test('passes request with correct credentials', function () { $request = Request::create('/dashboard', 'GET', server: [ 'PHP_AUTH_USER' => 'staging', 'PHP_AUTH_PW' => 'secret', ]); expect(handleBasicAuth($request)->getStatusCode())->toBe(200); }); test('skips gate entirely when disabled', function () { config()->set('auth.basic.enabled', false); expect(handleBasicAuth(Request::create('/dashboard', 'GET'))->getStatusCode())->toBe(200); }); test('skips gate when credentials are not configured', function () { config()->set('auth.basic.user', null); config()->set('auth.basic.password', null); expect(handleBasicAuth(Request::create('/dashboard', 'GET'))->getStatusCode())->toBe(200); }); test('skips basic auth for api and livewire routes', function () { expect(handleBasicAuth(Request::create('/api/v1/press-releases', 'GET'))->getStatusCode())->toBe(200) ->and(handleBasicAuth(Request::create('/livewire/update', 'POST'))->getStatusCode())->toBe(200); });