// Copyright (C) 2026 Danilo M. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as // published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. package notify import ( "os" "path/filepath" "testing" ) func writeConfig(t *testing.T, body string) string { t.Helper() p := filepath.Join(t.TempDir(), "config.json") if err := os.WriteFile(p, []byte(body), 0o600); err != nil { t.Fatal(err) } return p } func TestLoadConfigMissingFileIsDefaults(t *testing.T) { got := LoadConfig(filepath.Join(t.TempDir(), "absent.json")) if got != DefaultConfig() { t.Errorf("got %+v, want defaults", got) } } func TestLoadConfigMalformedIsDefaults(t *testing.T) { got := LoadConfig(writeConfig(t, `{"liveCap": 5,`)) if got != DefaultConfig() { t.Errorf("got %+v, want defaults", got) } } func TestLoadConfigPartialMergesOverDefaults(t *testing.T) { got := LoadConfig(writeConfig(t, `{"timeouts": {"low": 3}, "historyCap": 50, "muted": ["x"]}`)) want := DefaultConfig() want.Timeouts.Low = 3 want.HistoryCap = 50 if got != want { t.Errorf("got %+v, want %+v", got, want) } } func TestLoadConfigWrongTypeKeepsThatDefault(t *testing.T) { got := LoadConfig(writeConfig(t, `{"liveCap": "many", "historyCap": 7}`)) if got.LiveCap != 20 || got.HistoryCap != 7 { t.Errorf("got live %d history %d, want 20 and 7", got.LiveCap, got.HistoryCap) } } func TestLoadConfigClamps(t *testing.T) { got := LoadConfig(writeConfig(t, `{"liveCap": 0, "historyCap": 1000, "timeouts": {"normal": -4}}`)) if got.LiveCap != 1 || got.HistoryCap != 100 || got.Timeouts.Normal != 10 { t.Errorf("got %+v", got) } }