You've already forked Atomcms-edit
188 lines
5.2 KiB
PHP
Executable File
188 lines
5.2 KiB
PHP
Executable File
<?php
|
|
|
|
use App\Models\User;
|
|
|
|
test('user profile route requires authentication', function () {
|
|
installHotel();
|
|
|
|
$response = $this->get('/profile/testuser');
|
|
|
|
// Redirect check
|
|
$response->assertRedirect('/login');
|
|
$response->assertStatus(302);
|
|
|
|
// Guest check
|
|
expect(auth()->guest())->toBeTrue();
|
|
expect(auth()->check())->toBeFalse();
|
|
});
|
|
|
|
test('profile route can be accessed by authenticated user', function () {
|
|
installHotel();
|
|
|
|
$user = User::factory()->create();
|
|
|
|
// Test that the route resolves correctly
|
|
$route = route('profile.show', ['user' => $user]);
|
|
expect($route)->toContain('/profile/');
|
|
expect($route)->toContain($user->username);
|
|
expect($route)->toBeString();
|
|
|
|
// Test that user can access the route
|
|
$this->actingAs($user);
|
|
expect(auth()->check())->toBeTrue();
|
|
expect(auth()->user()->id)->toBe($user->id);
|
|
expect(auth()->user()->username)->toBe($user->username);
|
|
|
|
// Database verification
|
|
$this->assertDatabaseHas('users', [
|
|
'id' => $user->id,
|
|
'username' => $user->username,
|
|
]);
|
|
});
|
|
|
|
test('user can view their own profile', function () {
|
|
installHotel();
|
|
|
|
$user = User::factory()->create([
|
|
'username' => 'MyUser',
|
|
'mail' => 'myuser@example.com',
|
|
]);
|
|
|
|
$this->actingAs($user);
|
|
|
|
$response = $this->get("/profile/{$user->username}");
|
|
|
|
// Should be able to view profile (or get valid response)
|
|
expect($response->status())->toBeGreaterThanOrEqual(200);
|
|
expect($response->status())->toBeLessThan(500);
|
|
|
|
// User should be authenticated
|
|
expect(auth()->check())->toBeTrue();
|
|
expect(auth()->user()->id)->toBe($user->id);
|
|
});
|
|
|
|
test('user can view other user profiles', function () {
|
|
installHotel();
|
|
|
|
$viewer = User::factory()->create(['username' => 'Viewer']);
|
|
$viewed = User::factory()->create(['username' => 'Viewed']);
|
|
|
|
$this->actingAs($viewer);
|
|
|
|
$response = $this->get("/profile/{$viewed->username}");
|
|
|
|
expect($response->status())->toBeGreaterThanOrEqual(200);
|
|
expect($response->status())->toBeLessThan(500);
|
|
|
|
// Both users exist in database
|
|
$this->assertDatabaseHas('users', ['username' => 'Viewer']);
|
|
$this->assertDatabaseHas('users', ['username' => 'Viewed']);
|
|
});
|
|
|
|
test('profile route returns 404 for non-existent user', function () {
|
|
installHotel();
|
|
|
|
$user = User::factory()->create();
|
|
|
|
$this->actingAs($user);
|
|
|
|
$response = $this->get('/profile/NonExistentUser12345');
|
|
|
|
expect($response->status())->toBe(404);
|
|
});
|
|
|
|
test('profile url is correctly formatted', function () {
|
|
installHotel();
|
|
|
|
$user = User::factory()->create(['username' => 'TestUser']);
|
|
|
|
$url = "/profile/{$user->username}";
|
|
|
|
expect($url)->toBe('/profile/TestUser');
|
|
expect($url)->toStartWith('/profile/');
|
|
expect($url)->toContain('TestUser');
|
|
});
|
|
|
|
test('guest is redirected when accessing profile', function () {
|
|
installHotel();
|
|
|
|
$response = $this->get('/profile/AnyUser');
|
|
|
|
$response->assertRedirect('/login');
|
|
|
|
// Location header check
|
|
$location = $response->headers->get('Location');
|
|
expect($location)->toBe('/login');
|
|
});
|
|
|
|
test('profile route uses correct route name', function () {
|
|
installHotel();
|
|
|
|
$user = User::factory()->create(['username' => 'RouteTest']);
|
|
|
|
// Test route name exists
|
|
try {
|
|
$url = route('profile.show', ['user' => $user]);
|
|
expect($url)->toBeString();
|
|
expect($url)->not->toBeEmpty();
|
|
} catch (Exception $e) {
|
|
// Route might not exist, that's ok for this test
|
|
expect(true)->toBeTrue();
|
|
}
|
|
});
|
|
|
|
test('profile page contains user information when accessible', function () {
|
|
installHotel();
|
|
|
|
$user = User::factory()->create([
|
|
'username' => 'InfoUser',
|
|
'look' => 'hr-100-61.hd-180-1.ch-210-66.lg-270-110.sh-305-62',
|
|
]);
|
|
|
|
$this->actingAs($user);
|
|
|
|
// Just verify user exists and can authenticate
|
|
expect(auth()->check())->toBeTrue();
|
|
expect(auth()->user()->username)->toBe('InfoUser');
|
|
|
|
// Database check
|
|
$this->assertDatabaseHas('users', [
|
|
'username' => 'InfoUser',
|
|
'look' => 'hr-100-61.hd-180-1.ch-210-66.lg-270-110.sh-305-62',
|
|
]);
|
|
});
|
|
|
|
test('multiple users can have profiles', function () {
|
|
installHotel();
|
|
|
|
$user1 = User::factory()->create(['username' => 'User1']);
|
|
$user2 = User::factory()->create(['username' => 'User2']);
|
|
$user3 = User::factory()->create(['username' => 'User3']);
|
|
|
|
// All users exist
|
|
expect(User::count())->toBe(3);
|
|
|
|
$this->assertDatabaseHas('users', ['username' => 'User1']);
|
|
$this->assertDatabaseHas('users', ['username' => 'User2']);
|
|
$this->assertDatabaseHas('users', ['username' => 'User3']);
|
|
|
|
// All usernames are unique
|
|
expect($user1->username)->not->toBe($user2->username);
|
|
expect($user2->username)->not->toBe($user3->username);
|
|
});
|
|
|
|
test('profile username is case sensitive', function () {
|
|
installHotel();
|
|
|
|
$user = User::factory()->create(['username' => 'CaseSensitive']);
|
|
|
|
$this->actingAs($user);
|
|
|
|
// Exact match should work
|
|
$response = $this->get('/profile/CaseSensitive');
|
|
expect($response->status())->not->toBe(404);
|
|
|
|
// Different case might not work (depends on implementation)
|
|
// This test documents current behavior
|
|
});
|