create(['mobile' => '13800138088']); $competition = Competition::query()->create([ 'slug' => 'xxf', 'name' => '测试赛', 'published' => true, ]); Application::query()->create([ 'user_id' => $user->id, 'competition_id' => $competition->id, 'status' => 'draft', ]); Sanctum::actingAs($user); $this->postJson('/api/applications/current/save?competition_slug=xxf', [ 'player_name' => '张三', 'project_name' => '测试项目', ]) ->assertOk() ->assertJsonPath('player_name', '张三') ->assertJsonPath('project_name', '测试项目'); } public function test_second_draft_save_rejects_invalid_email_and_keeps_previous_value(): void { $user = User::query()->create(['mobile' => '13800138089']); $competition = Competition::query()->create([ 'slug' => 'xxf-email', 'name' => '测试赛', 'published' => true, ]); Application::query()->create([ 'user_id' => $user->id, 'competition_id' => $competition->id, 'status' => 'draft', ]); Sanctum::actingAs($user); $this->postJson('/api/applications/current/save?competition_slug=xxf-email', [ 'player_name' => '张三', 'contact_email' => 'ok@example.com', ]) ->assertOk() ->assertJsonPath('contact_email', 'ok@example.com'); $this->postJson('/api/applications/current/save?competition_slug=xxf-email', [ 'player_name' => '李四', 'contact_email' => 'bad-email', ]) ->assertUnprocessable() ->assertJsonValidationErrors(['contact_email']); $this->getJson('/api/applications/current?competition_slug=xxf-email') ->assertOk() ->assertJsonPath('player_name', '张三') ->assertJsonPath('contact_email', 'ok@example.com'); } public function test_draft_save_response_does_not_prefill_blank_email_from_user_profile(): void { $user = User::query()->create([ 'mobile' => '13800138090', 'email' => 'profile@example.com', ]); $competition = Competition::query()->create([ 'slug' => 'xxf-prefill', 'name' => '测试赛', 'published' => true, ]); Application::query()->create([ 'user_id' => $user->id, 'competition_id' => $competition->id, 'status' => 'draft', ]); $schema = FormSchemaDefinition::query()->create([ 'competition_id' => $competition->id, 'purpose' => FormSchemaDefinition::PURPOSE_SIGNUP, 'name' => '报名表', 'version' => 1, 'is_published' => true, 'schema_json' => [ [ 'key' => 'contact_email', 'type' => 'email', 'label' => '注册邮箱', 'prefill_from' => 'user.email', ], ], ]); $competition->update(['form_schema_id' => $schema->id]); Sanctum::actingAs($user); $this->postJson('/api/applications/current/save?competition_slug=xxf-prefill', [ 'contact_email' => '', ]) ->assertOk() ->assertJsonPath('contact_email', null); } }