Add comprehensive test coverage and update notes
This commit is contained in:
114
tests/Unit/ForumControllerUnitTest.php
Normal file
114
tests/Unit/ForumControllerUnitTest.php
Normal file
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\ForumController;
|
||||
use App\Models\Forum;
|
||||
use App\Models\Post;
|
||||
use App\Models\Role;
|
||||
use App\Models\Thread;
|
||||
use App\Models\User;
|
||||
|
||||
it('parseIriId handles null and numeric', function (): void {
|
||||
$controller = new ForumController();
|
||||
$ref = new ReflectionMethod($controller, 'parseIriId');
|
||||
$ref->setAccessible(true);
|
||||
|
||||
expect($ref->invoke($controller, null))->toBeNull();
|
||||
expect($ref->invoke($controller, '/forums/12'))->toBe(12);
|
||||
expect($ref->invoke($controller, '7'))->toBe(7);
|
||||
expect($ref->invoke($controller, 'abc'))->toBeNull();
|
||||
});
|
||||
|
||||
it('loadLastPostsByForum returns empty for no ids', function (): void {
|
||||
$controller = new ForumController();
|
||||
$ref = new ReflectionMethod($controller, 'loadLastPostsByForum');
|
||||
$ref->setAccessible(true);
|
||||
|
||||
expect($ref->invoke($controller, []))->toBe([]);
|
||||
});
|
||||
|
||||
it('resolveGroupColor returns null for missing roles', function (): void {
|
||||
$controller = new ForumController();
|
||||
$user = User::factory()->create();
|
||||
$user->setRelation('roles', null);
|
||||
|
||||
$ref = new ReflectionMethod($controller, 'resolveGroupColor');
|
||||
$ref->setAccessible(true);
|
||||
|
||||
expect($ref->invoke($controller, null))->toBeNull();
|
||||
expect($ref->invoke($controller, $user))->toBeNull();
|
||||
});
|
||||
|
||||
it('resolveGroupColor returns first sorted role color', function (): void {
|
||||
$controller = new ForumController();
|
||||
$user = User::factory()->create();
|
||||
$roleB = Role::create(['name' => 'ROLE_B', 'color' => '#bbbbbb']);
|
||||
$roleA = Role::create(['name' => 'ROLE_A', 'color' => '#aaaaaa']);
|
||||
$user->roles()->attach([$roleB->id, $roleA->id]);
|
||||
$user->load('roles');
|
||||
|
||||
$ref = new ReflectionMethod($controller, 'resolveGroupColor');
|
||||
$ref->setAccessible(true);
|
||||
|
||||
expect($ref->invoke($controller, $user))->toBe('#aaaaaa');
|
||||
});
|
||||
|
||||
it('resolveGroupColor returns null when roles have no colors', function (): void {
|
||||
$controller = new ForumController();
|
||||
$user = User::factory()->create();
|
||||
$role = Role::create(['name' => 'ROLE_EMPTY', 'color' => null]);
|
||||
$user->roles()->attach($role);
|
||||
$user->load('roles');
|
||||
|
||||
$ref = new ReflectionMethod($controller, 'resolveGroupColor');
|
||||
$ref->setAccessible(true);
|
||||
|
||||
expect($ref->invoke($controller, $user))->toBeNull();
|
||||
});
|
||||
|
||||
it('loadLastPostsByForum returns latest post per forum', function (): void {
|
||||
$controller = new ForumController();
|
||||
$ref = new ReflectionMethod($controller, 'loadLastPostsByForum');
|
||||
$ref->setAccessible(true);
|
||||
|
||||
$category = Forum::create([
|
||||
'name' => 'Category U',
|
||||
'description' => null,
|
||||
'type' => 'category',
|
||||
'parent_id' => null,
|
||||
'position' => 1,
|
||||
]);
|
||||
$forum = Forum::create([
|
||||
'name' => 'Forum U',
|
||||
'description' => null,
|
||||
'type' => 'forum',
|
||||
'parent_id' => $category->id,
|
||||
'position' => 1,
|
||||
]);
|
||||
$thread = Thread::create([
|
||||
'forum_id' => $forum->id,
|
||||
'user_id' => null,
|
||||
'title' => 'Thread',
|
||||
'body' => 'Body',
|
||||
]);
|
||||
$older = Post::create([
|
||||
'thread_id' => $thread->id,
|
||||
'user_id' => null,
|
||||
'body' => 'Old',
|
||||
]);
|
||||
$newer = Post::create([
|
||||
'thread_id' => $thread->id,
|
||||
'user_id' => null,
|
||||
'body' => 'New',
|
||||
]);
|
||||
Post::whereKey($older->id)->update([
|
||||
'created_at' => now()->subDay(),
|
||||
'updated_at' => now()->subDay(),
|
||||
]);
|
||||
Post::whereKey($newer->id)->update([
|
||||
'created_at' => now()->addSeconds(10),
|
||||
'updated_at' => now()->addSeconds(10),
|
||||
]);
|
||||
|
||||
$result = $ref->invoke($controller, [$forum->id]);
|
||||
expect($result[$forum->id]->id)->toBe($newer->id);
|
||||
});
|
||||
Reference in New Issue
Block a user