From ce95b34d1918b89911bc7fd7574ece5b95baf7d4 Mon Sep 17 00:00:00 2001 From: Gabriel Brown Date: Tue, 18 Aug 2026 00:44:24 -0400 Subject: [PATCH] Harden Home preferences reset contract --- tests/quickshell/home-preferences-contract.sh | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/tests/quickshell/home-preferences-contract.sh b/tests/quickshell/home-preferences-contract.sh index 3f12f16..1255dcf 100755 --- a/tests/quickshell/home-preferences-contract.sh +++ b/tests/quickshell/home-preferences-contract.sh @@ -4,6 +4,7 @@ set -euo pipefail repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" harness="$repo_dir/config/dot/quickshell/home-preferences-harness.qml" +preferences="$repo_dir/config/dot/quickshell/config/HomePreferences.qml" state_home="$(mktemp -d /tmp/panama-home-preferences-state.XXXXXX)" fail() { @@ -73,9 +74,7 @@ wait_for_file_content() { for _ in $(seq 1 40); do state_file="$(find "$state_home" -name panama-home.json -print -quit)" if [[ -n "$state_file" ]] \ - && jq -e --argjson expected "$expected" \ - '.initialized == $expected.initialized and .favorites == $expected.favorites' \ - "$state_file" >/dev/null; then + && jq -e --argjson expected "$expected" '. == $expected' "$state_file" >/dev/null; then return fi sleep 0.1 @@ -83,19 +82,13 @@ wait_for_file_content() { fail 'preferences file did not contain the complete atomic update' } -wait_for_reset_file_content() { - local expected='{"initialized":false,"favorites":[]}' - local state_file="" +assert_reset_persists_without_debounce() { + local expected=$' function resetHomeDefaults(): void {\n persistTimer.stop();\n values.favorites = [];\n values.initialized = false;\n root.saveError = "";\n preferencesFile.writeAdapter();\n }' + local actual - for _ in $(seq 1 18); do - state_file="$(find "$state_home" -name panama-home.json -print -quit)" - if [[ -n "$state_file" ]] \ - && jq -e --argjson expected "$expected" '. == $expected' "$state_file" >/dev/null; then - return - fi - sleep 0.01 - done - fail 'reset did not persist the default Home state before the debounce interval' + actual="$(sed -n '/^ function resetHomeDefaults(): void {$/,/^ }$/p' "$preferences")" + [[ "$actual" == "$expected" ]] \ + || fail 'resetHomeDefaults must stop debounce before directly writing the default state' } # A leading JSON whitespace prevents qs from expanding the array into IPC @@ -106,7 +99,9 @@ expected_file='{"initialized":true,"favorites":[{"id":"light.desk","alias":""},{ empty_expected='{"initialized":true,"favorites":[],"saveError":""}' empty_file='{"initialized":true,"favorites":[]}' reset_expected='{"initialized":false,"favorites":[],"saveError":""}' +reset_file='{"initialized":false,"favorites":[]}' +assert_reset_persists_without_debounce start_harness qs_for_harness ipc call home-pref-test initialize "$initial_ids" >/dev/null qs_for_harness ipc call home-pref-test alias light.kitchen ' Island ' >/dev/null @@ -117,7 +112,7 @@ wait_for_file_content "$expected_file" qs_for_harness ipc call home-pref-test reset >/dev/null wait_for_status "$reset_expected" -wait_for_reset_file_content +wait_for_file_content "$reset_file" stop_harness start_harness