package common import ( "bytes" "os" "path/filepath" "testing" ) func TestAhaHelpSettingPreservesRunAndExplicitOff(t *testing.T) { resource, err := os.ReadFile(filepath.Join("..", "..", "resources", "AhaHelpConfig.json")) if err != nil { t.Fatal(err) } t.Chdir(t.TempDir()) if err := os.Mkdir("resources", 0755); err != nil { t.Fatal(err) } if err := os.WriteFile(filepath.Join("resources", "AhaHelpConfig.json"), resource, 0644); err != nil { t.Fatal(err) } initial := []byte(`{"currency_wars":{"keep":{"revision":42}},"ex_ranks_unlocked":{"1204":false},"unrelated":"preserve"}`) if err := os.WriteFile("persistent", initial, 0644); err != nil { t.Fatal(err) } if level, err := ReadAhaHelpLevel(); err != nil || level != nil { t.Fatalf("legacy setting: %v %v", level, err) } afterRead, _ := os.ReadFile("persistent") if !bytes.Equal(afterRead, initial) { t.Fatal("read changed persistent") } levels, err := LoadAhaHelpLevels() if err != nil { t.Fatal(err) } for _, row := range levels { if err := SaveAhaHelpLevel(&row.BuffLevel); err != nil { t.Fatal(err) } selected, err := ReadAhaHelpLevel() if err != nil || selected == nil || *selected != row.BuffLevel { t.Fatalf("selected level: %v %v", selected, err) } } off := uint32(0) if err := SaveAhaHelpLevel(&off); err != nil { t.Fatal(err) } selected, err := ReadAhaHelpLevel() if err != nil || selected == nil || *selected != 0 { t.Fatalf("explicit off lost: %v %v", selected, err) } beforeInvalid, _ := os.ReadFile("persistent") invalid := ^uint32(0) if err := SaveAhaHelpLevel(&invalid); err == nil { t.Fatal("accepted absent level") } afterInvalid, _ := os.ReadFile("persistent") if !bytes.Equal(beforeInvalid, afterInvalid) { t.Fatal("invalid setting changed persistent") } if err := SaveAhaHelpLevel(nil); err != nil { t.Fatal(err) } root, err := readCurrencyWarsPersistentRoot() if err != nil { t.Fatal(err) } if _, ok := root["aha_help_level"]; ok { t.Fatal("legacy reset retained override") } for _, key := range []string{"currency_wars", "ex_ranks_unlocked", "unrelated"} { if len(root[key]) == 0 { t.Fatalf("lost %s", key) } } }