create([ 'username' => 'admin_export', 'password_hash' => 'unused', 'name' => '管理员', 'status' => 'active', ]); $competition = Competition::query()->create([ 'slug' => 'xxf', 'name' => '测试赛', 'published' => true, ]); $application = Application::query()->create([ 'user_id' => User::query()->create(['mobile' => '13800138002'])->id, 'competition_id' => $competition->id, 'status' => 'submitted', 'project_name' => '项目A', ]); Sanctum::actingAs($admin); $this->getJson("/api/v1/admin/competitions/{$competition->id}/applications/export/meta?mode=xlsx") ->assertOk() ->assertJsonPath('mode', AdminApplicationExportService::MODE_XLSX) ->assertJsonPath('includes_attachments', false) ->assertJsonPath('part_count', 1); $this->getJson("/api/v1/admin/competitions/{$competition->id}/applications/export/meta?mode=all") ->assertOk() ->assertJsonPath('mode', AdminApplicationExportService::MODE_ALL) ->assertJsonPath('includes_attachments', true); $this->getJson("/api/v1/admin/competitions/{$competition->id}/applications/export/meta?mode=selected&application_ids[]={$application->id}") ->assertOk() ->assertJsonPath('mode', AdminApplicationExportService::MODE_SELECTED) ->assertJsonPath('includes_attachments', true); } public function test_selected_export_requires_application_ids(): void { $admin = AdminUser::query()->create([ 'username' => 'admin_export2', 'password_hash' => 'unused', 'name' => '管理员2', 'status' => 'active', ]); $competition = Competition::query()->create([ 'slug' => 'xxf2', 'name' => '测试赛2', 'published' => true, ]); Application::query()->create([ 'user_id' => User::query()->create(['mobile' => '13800138004'])->id, 'competition_id' => $competition->id, 'status' => 'submitted', ]); Sanctum::actingAs($admin); $this->getJson("/api/v1/admin/competitions/{$competition->id}/applications/export/meta?mode=selected") ->assertStatus(422) ->assertJsonValidationErrors(['application_ids']); } }