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')); } }