Files
fotospiel-app/tests/Feature/Tenant/ProfileApiTest.php

91 lines
3.0 KiB
PHP

<?php
namespace Tests\Feature\Tenant;
use App\Models\User;
use App\Notifications\VerifyEmailNotification;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Notification;
class ProfileApiTest extends TenantTestCase
{
public function test_profile_endpoint_returns_current_user_details(): void
{
$response = $this->authenticatedRequest('GET', '/api/v1/tenant/profile');
$response->assertOk();
$payload = $response->json('data');
$this->assertSame($this->tenantUser->id, $payload['id']);
$this->assertSame($this->tenantUser->email, $payload['email']);
$this->assertSame($this->tenantUser->name, $payload['name']);
$this->assertTrue($payload['email_verified']);
}
public function test_profile_update_allows_name_and_email_changes(): void
{
Notification::fake();
$newEmail = 'updated-'.$this->tenantUser->id.'@example.com';
$response = $this->authenticatedRequest('PUT', '/api/v1/tenant/profile', [
'name' => 'Updated Name',
'email' => $newEmail,
'preferred_locale' => 'en',
]);
$response->assertOk();
$payload = $response->json('data');
$this->assertSame('Updated Name', $payload['name']);
$this->assertSame($newEmail, $payload['email']);
$this->assertFalse($payload['email_verified']);
$this->assertSame('en', $payload['preferred_locale']);
$this->assertDatabaseHas(User::class, [
'id' => $this->tenantUser->id,
'name' => 'Updated Name',
'email' => $newEmail,
'preferred_locale' => 'en',
]);
Notification::assertSentToTimes($this->tenantUser->fresh(), VerifyEmailNotification::class, 1);
}
public function test_profile_update_requires_current_password_for_password_change(): void
{
$response = $this->authenticatedRequest('PUT', '/api/v1/tenant/profile', [
'name' => $this->tenantUser->name,
'email' => $this->tenantUser->email,
'current_password' => 'wrong-password',
'password' => 'new-secure-password',
'password_confirmation' => 'new-secure-password',
]);
$response->assertStatus(422);
$response->assertJson([
'error' => [
'code' => 'profile.invalid_current_password',
],
]);
}
public function test_profile_update_allows_password_change_with_correct_current_password(): void
{
$newPassword = 'NewStrongPassword123!';
$response = $this->authenticatedRequest('PUT', '/api/v1/tenant/profile', [
'name' => $this->tenantUser->name,
'email' => $this->tenantUser->email,
'current_password' => 'password',
'password' => $newPassword,
'password_confirmation' => $newPassword,
]);
$response->assertOk();
$this->tenantUser->refresh();
$this->assertTrue(Hash::check($newPassword, $this->tenantUser->password));
}
}