115 lines
3.6 KiB
PHP
115 lines
3.6 KiB
PHP
<?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);
|
|
});
|