create([ 'username' => 'admin_settings', 'password_hash' => 'unused', 'name' => '管理员', 'status' => 'active', ])); $competition = Competition::query()->create([ 'slug' => 'xxf-settings', 'name' => '测试赛', 'published' => true, 'status' => 'published', 'settings' => [ 'success_notice' => [ 'enabled' => true, 'message' => '报名成功,请保持手机畅通', ], 'review_portal' => [ 'enabled' => true, 'message' => '', ], 'post_close_file_edit' => [ 'enabled' => true, 'user_mobiles' => ['13800138000'], ], ], ]); $this->patchJson("/api/v1/admin/competitions/{$competition->id}", [ 'name' => '测试赛', 'slug' => 'xxf-settings', 'status' => 'published', 'published' => true, 'settings' => [ 'success_notice' => [ 'enabled' => true, 'message' => '报名成功,请保持手机畅通', ], 'review_portal' => [ 'enabled' => true, 'message' => '', ], 'post_close_file_edit' => [ 'enabled' => false, 'user_mobiles' => [], ], ], ])->assertOk(); $competition->refresh(); $settings = $competition->settings; $this->assertIsArray($settings); $this->assertSame(true, data_get($settings, 'success_notice.enabled')); $this->assertSame('报名成功,请保持手机畅通', data_get($settings, 'success_notice.message')); $this->assertSame(false, data_get($settings, 'post_close_file_edit.enabled')); $this->assertSame([], data_get($settings, 'post_close_file_edit.user_mobiles')); } public function test_update_keeps_success_notice_when_enabling_post_close_file_edit(): void { Sanctum::actingAs(AdminUser::query()->create([ 'username' => 'admin_settings_2', 'password_hash' => 'unused', 'name' => '管理员', 'status' => 'active', ])); $competition = Competition::query()->create([ 'slug' => 'xxf-settings-2', 'name' => '测试赛2', 'published' => true, 'status' => 'published', 'settings' => [ 'success_notice' => [ 'enabled' => true, 'message' => '保留我', ], ], ]); $this->patchJson("/api/v1/admin/competitions/{$competition->id}", [ 'name' => '测试赛2', 'slug' => 'xxf-settings-2', 'status' => 'published', 'published' => true, 'settings' => [ 'success_notice' => [ 'enabled' => true, 'message' => '保留我', ], 'review_portal' => [ 'enabled' => true, 'message' => '', ], 'post_close_file_edit' => [ 'enabled' => true, 'user_mobiles' => ['13900139000'], ], ], ])->assertOk(); $competition->refresh(); $this->assertSame('保留我', data_get($competition->settings, 'success_notice.message')); $this->assertSame(true, data_get($competition->settings, 'post_close_file_edit.enabled')); $this->assertSame(['13900139000'], data_get($competition->settings, 'post_close_file_edit.user_mobiles')); } public function test_pledge_title_and_subtitle_are_saved_and_exposed_publicly(): void { Sanctum::actingAs(AdminUser::query()->create([ 'username' => 'admin_pledge_copy', 'password_hash' => 'unused', 'name' => '管理员', 'status' => 'active', ])); $competition = Competition::query()->create([ 'slug' => 'pledge-copy', 'name' => '承诺书文案赛', 'published' => true, 'status' => 'signup_open', ]); $this->patchJson("/api/v1/admin/competitions/{$competition->id}", [ 'pledge_title' => '{name}赛事承诺书', 'pledge_title_en' => '{name} Declaration', 'pledge_subtitle' => '请完整阅读并签名。', 'pledge_subtitle_en' => 'Please read and sign below.', ])->assertOk() ->assertJsonPath('pledge_title', '{name}赛事承诺书') ->assertJsonPath('pledge_title_en', '{name} Declaration') ->assertJsonPath('pledge_subtitle', '请完整阅读并签名。') ->assertJsonPath('pledge_subtitle_en', 'Please read and sign below.'); $this->getJson('/api/v1/public/competitions/by-slug/pledge-copy') ->assertOk() ->assertJsonPath('pledge_title', '{name}赛事承诺书') ->assertJsonPath('pledge_title_en', '{name} Declaration') ->assertJsonPath('pledge_subtitle', '请完整阅读并签名。') ->assertJsonPath('pledge_subtitle_en', 'Please read and sign below.'); } }