CAPS04-FE-REFACTOR-2 / tests /Feature /AuthProxyTest.php
wepee's picture
change: move api to controller
1e5ae4b
Raw
History Blame Contribute Delete
6.68 kB
<?php
use Illuminate\Http\Client\Request as HttpRequest;
use Illuminate\Support\Facades\Http;
test('login is proxied to rag api and redirects by role', function () {
config(['services.rag.base_url' => 'https://rag.test/api/v1']);
Http::fake([
'https://rag.test/api/v1/auth/login' => Http::response([
'token' => 'jwt-token',
'user' => [
'created_at' => '2026-05-01T10:00:00Z',
'email' => 'student@example.com',
'id' => 1,
'identity_number' => '123456',
'name' => 'Alma',
'phone' => '081234567890',
'role' => 'student',
'status' => 'active',
'updated_at' => '2026-05-01T10:00:00Z',
],
]),
]);
$this->from(route('login'))
->post(route('auth.login.store'), [
'email' => 'student@example.com',
'password' => 'secret123',
'remember' => true,
])
->assertRedirect(route('mahasiswa', absolute: false))
->assertCookie('sevima_raghub_auth_token')
->assertCookie('sevima_raghub_auth_user')
->assertSessionHas('status', 'Login berhasil.')
->assertSessionHasNoErrors();
Http::assertSent(fn (HttpRequest $request): bool => $request->method() === 'POST'
&& $request->url() === 'https://rag.test/api/v1/auth/login'
&& $request['email'] === 'student@example.com'
&& $request['password'] === 'secret123');
});
test('login uses backend error message', function () {
config(['services.rag.base_url' => 'https://rag.test/api/v1']);
Http::fake([
'https://rag.test/api/v1/auth/login' => Http::response([
'message' => 'Invalid email or password.',
], 422),
]);
$this->from(route('login'))
->post(route('auth.login.store'), [
'email' => 'student@example.com',
'password' => 'wrong-password',
])
->assertRedirect(route('login'))
->assertSessionHasErrors(['auth' => 'Invalid email or password.']);
});
test('register is proxied to rag api and flashes backend message', function () {
config(['services.rag.base_url' => 'https://rag.test/api/v1']);
Http::fake([
'https://rag.test/api/v1/auth/register' => Http::response([
'message' => 'Registration successful.',
'user' => [
'created_at' => '2026-05-01T10:00:00Z',
'email' => 'student@example.com',
'id' => 1,
'identity_number' => '123456',
'name' => 'Alma',
'role' => 'student',
'status' => 'active',
'updated_at' => '2026-05-01T10:00:00Z',
],
], 201),
]);
$this->from(route('register.mahasiswa'))
->post(route('auth.register.store'), [
'email' => 'student@example.com',
'identity_number' => '123456',
'name' => 'Alma',
'password' => 'secret123',
'phone' => '081234567890',
'role' => 'student',
])
->assertRedirect(route('login'))
->assertSessionHas('status', 'Registration successful.')
->assertSessionHasNoErrors();
Http::assertSent(fn (HttpRequest $request): bool => $request->method() === 'POST'
&& $request->url() === 'https://rag.test/api/v1/auth/register'
&& $request['email'] === 'student@example.com'
&& $request['identity_number'] === '123456'
&& $request['name'] === 'Alma'
&& $request['password'] === 'secret123'
&& $request['phone'] === '081234567890'
&& $request['role'] === 'student');
});
test('register uses backend error message', function () {
config(['services.rag.base_url' => 'https://rag.test/api/v1']);
Http::fake([
'https://rag.test/api/v1/auth/register' => Http::response([
'detail' => [
['msg' => 'Email already registered.'],
],
], 422),
]);
$this->from(route('register.mahasiswa'))
->post(route('auth.register.store'), [
'email' => 'student@example.com',
'identity_number' => '123456',
'name' => 'Alma',
'password' => 'secret123',
'role' => 'student',
])
->assertRedirect(route('register.mahasiswa'))
->assertSessionHasErrors(['auth' => 'Email already registered.']);
});
test('register maps backend field validation errors to matching fields', function () {
config(['services.rag.base_url' => 'https://rag.test/api/v1']);
Http::fake([
'https://rag.test/api/v1/auth/register' => Http::response([
'errors' => [
[
'field' => 'name',
'label' => 'Full Name',
'message' => 'Full Name harus berisi minimal nama depan dan nama belakang.',
],
[
'field' => 'role',
'label' => 'Role',
'message' => 'admin is not allowed for self-registration',
],
],
'field_errors' => [
'name' => 'Full Name harus berisi minimal nama depan dan nama belakang.',
'role' => 'admin is not allowed for self-registration',
],
'message' => 'Periksa kembali field yang ditandai.',
], 422),
]);
$this->from(route('register.mahasiswa'))
->post(route('auth.register.store'), [
'email' => 'student@example.com',
'identity_number' => '123456',
'name' => 'Alma',
'password' => 'secret123',
'role' => 'student',
])
->assertRedirect(route('register.mahasiswa'))
->assertSessionHasErrors([
'name' => 'Full Name harus berisi minimal nama depan dan nama belakang.',
'role' => 'admin is not allowed for self-registration',
]);
});
test('register rejects identity number with letters before calling backend', function () {
config(['services.rag.base_url' => 'https://rag.test/api/v1']);
Http::fake();
$this->from(route('register.mahasiswa'))
->post(route('auth.register.store'), [
'email' => 'student@example.com',
'identity_number' => 'AB123456',
'name' => 'Alma Putri',
'password' => 'secret123',
'role' => 'student',
])
->assertRedirect(route('register.mahasiswa'))
->assertSessionHasErrors(['identity_number']);
Http::assertNothingSent();
});