You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
3.1 KiB

3 months ago
<?php
namespace Tests\Feature;
use App\Models\AdminUser;
use App\Models\Application;
use App\Models\Competition;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Laravel\Sanctum\Sanctum;
use Tests\TestCase;
class AdminApplicationListTest extends TestCase
{
use RefreshDatabase;
public function test_admin_application_list_excludes_soft_deleted_records(): void
{
Sanctum::actingAs(AdminUser::query()->create([
'username' => 'admin_list',
'password_hash' => 'unused',
'name' => '管理员',
'status' => 'active',
]));
$competition = Competition::query()->create([
'slug' => 'xxf',
'name' => '测试赛',
'published' => true,
]);
$active = Application::query()->create([
'user_id' => User::query()->create(['mobile' => '13800138001'])->id,
'competition_id' => $competition->id,
'status' => 'submitted',
'project_name' => '有效项目',
]);
$deleted = Application::query()->create([
'user_id' => User::query()->create(['mobile' => '13800138002'])->id,
'competition_id' => $competition->id,
'status' => 'submitted',
'project_name' => '已删除项目',
]);
$deleted->forceFill(['deleted_at' => now()])->save();
$response = $this->getJson("/api/v1/admin/competitions/{$competition->id}/applications?status=submitted")
->assertOk();
$ids = collect($response->json('data'))->pluck('id')->all();
$this->assertContains($active->id, $ids);
$this->assertNotContains($deleted->id, $ids);
}
3 months ago
public function test_admin_application_list_filters_by_review_result(): void
{
Sanctum::actingAs(AdminUser::query()->create([
'username' => 'admin_filter',
'password_hash' => 'unused',
'name' => '管理员',
'status' => 'active',
]));
$competition = Competition::query()->create([
'slug' => 'xxf-filter',
'name' => '筛选测试赛',
'published' => true,
]);
$passed = Application::query()->create([
'user_id' => User::query()->create(['mobile' => '13800138011'])->id,
'competition_id' => $competition->id,
'status' => 'submitted',
'project_name' => '已通过项目',
'review_result' => 'passed',
]);
Application::query()->create([
'user_id' => User::query()->create(['mobile' => '13800138012'])->id,
'competition_id' => $competition->id,
'status' => 'submitted',
'project_name' => '待评定项目',
'review_result' => null,
]);
$response = $this->getJson("/api/v1/admin/competitions/{$competition->id}/applications?status=submitted&review_result=passed")
->assertOk();
$ids = collect($response->json('data'))->pluck('id')->all();
$this->assertContains($passed->id, $ids);
$this->assertCount(1, $ids);
}
3 months ago
}