Add comprehensive test coverage and update notes
Some checks failed
CI/CD Pipeline / test (push) Successful in 3s
CI/CD Pipeline / deploy (push) Failing after 15s

This commit is contained in:
2026-02-08 19:04:12 +01:00
parent 160430e128
commit 88e4a70f88
43 changed files with 6114 additions and 520 deletions

View 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);
});