From ae72335b5de6688fd1ebead03847304db6883cfd Mon Sep 17 00:00:00 2001 From: Andrii V Date: Thu, 7 Aug 2025 20:47:00 +0200 Subject: [PATCH] test: add a test for bugged fields --- .../apps/admin/tests/test_admin_settings.py | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/rhodecode/apps/admin/tests/test_admin_settings.py b/rhodecode/apps/admin/tests/test_admin_settings.py index 7486a335..53da9754 100644 --- a/rhodecode/apps/admin/tests/test_admin_settings.py +++ b/rhodecode/apps/admin/tests/test_admin_settings.py @@ -315,6 +315,51 @@ class TestAdminSettingsVcs(object): setting = SettingsModel().get_setting_by_name(setting_key) assert setting.app_settings_value is new_value + def test_vcs_settings_cache_consistency(self, form_defaults, csrf_token): + """Test that VCS settings show fresh values after update (cache bug fix).""" + from rhodecode.apps.admin.views.settings import AdminSettingsView + + # Test PR and diff cache settings that were affected by the cache bug + settings_to_test = { + "pr_merge_enabled": False, + "diff_cache": True, + "auto_merge_enabled": False, + } + + # Also test UI setting for repository size hook + ui_settings_to_test = { + "hooks_changegroup_repo_size": True, + } + + # Update form with new values for regular settings + for setting_key, new_value in settings_to_test.items(): + form_defaults[f"rhodecode_{setting_key}"] = str(new_value).lower() + + # Update form with new values for UI settings + for ui_key, new_value in ui_settings_to_test.items(): + form_defaults[ui_key] = str(new_value).lower() + + form_defaults["csrf_token"] = csrf_token + + # Submit the form + self.app.post(route_path("admin_settings_vcs_update"), params=form_defaults, status=302) + + # Check db has correct values + for setting_key, expected_value in settings_to_test.items(): + setting = SettingsModel().get_setting_by_name(setting_key) + assert setting.app_settings_value is expected_value + + # Check form defaults should show fresh values (not cached stale ones) + fresh_defaults = AdminSettingsView._form_defaults() + for setting_key, expected_value in settings_to_test.items(): + form_key = f"rhodecode_{setting_key}" + actual_value = fresh_defaults.get(form_key) + assert actual_value is expected_value + + for ui_key, expected_value in ui_settings_to_test.items(): + actual_value = fresh_defaults.get(ui_key) + assert actual_value is expected_value + @pytest.fixture() def disable_sql_cache(self, request): # patch _do_orm_execute so it returns None similar like if we don't use a cached query