diff --git a/ui_settings_test.go b/ui_settings_test.go new file mode 100644 index 0000000..aa66892 --- /dev/null +++ b/ui_settings_test.go @@ -0,0 +1,71 @@ +package main + +import ( + "path/filepath" + "strings" + "testing" + + "git.stormux.org/storm/barnard/config" + "git.stormux.org/storm/barnard/noise" + "git.stormux.org/storm/barnard/uiterm" +) + +func TestOutputScrollScopeLeavesInputHomeAndEndAlone(t *testing.T) { + if outputScrollAllowed(uiViewInput) { + t.Fatal("message input unexpectedly allowed global chat scrolling") + } + for _, view := range []string{uiViewTree, uiViewAdmin} { + if !outputScrollAllowed(view) { + t.Errorf("%s unexpectedly disabled chat scrolling", view) + } + } +} + +func TestAudioSettingsExposeCurrentValuesAndPersistMicChanges(t *testing.T) { + configPath := filepath.Join(t.TempDir(), "barnard.toml") + userConfig := config.NewConfig(&configPath) + b := &Barnard{UserConfig: userConfig, NoiseSuppressor: noise.NewSuppressor()} + + items := b.audioSettingsItems() + labels := make([]string, 0, len(items)) + for _, item := range items { + labels = append(labels, item.String()) + } + joined := strings.Join(labels, "\n") + for _, wanted := range []string{"Automatic gain control: on", "Noise suppression: off", "Microphone level: 100 percent"} { + if !strings.Contains(joined, wanted) { + t.Errorf("settings did not include %q:\n%s", wanted, joined) + } + } + + items[0].(adminItem).action() + items[1].(adminItem).action() + reloaded := config.NewConfig(&configPath) + if reloaded.GetAGCEnabled() { + t.Fatal("settings action did not persist disabled automatic gain control") + } + if !reloaded.GetNoiseSuppressionEnabled() { + t.Fatal("settings action did not persist enabled noise suppression") + } + + if got := b.adjustMicVolume(-0.1); got < 0.899 || got > 0.901 { + t.Fatalf("adjusted microphone level = %v, want 0.9", got) + } + if got := config.NewConfig(&configPath).GetMicVolume(); got < 0.899 || got > 0.901 { + t.Fatalf("persisted microphone level = %v, want 0.9", got) + } + if got := b.setMicVolume(2); got != 1 { + t.Fatalf("clamped microphone level = %v, want 1", got) + } +} + +func TestKeyboardHelpUsesConfiguredBindings(t *testing.T) { + f2 := uiterm.KeyF2 + b := &Barnard{Hotkeys: &config.Hotkeys{ + HelpMenu: &f2, + }} + items := b.keyboardHelpItems() + if len(items) == 0 || !strings.Contains(items[0].(adminItem).children[0].String(), "F2") { + t.Fatal("keyboard help did not use the configured help binding") + } +}