1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
package tui
import (
"strings"
"testing"
"github.com/lukaszkasprzak/lectio/internal/config"
"github.com/lukaszkasprzak/lectio/internal/liturgy"
)
func TestVersionCycle(t *testing.T) {
m := New(config.Config{Versions: []string{"pl", "wuj", "vul"}, DefaultVersion: "pl"})
if m.version() != "pl" {
t.Fatalf("start = %q", m.version())
}
m = m.cycleVersion(+1)
if m.version() != "wuj" {
t.Errorf("after tab = %q", m.version())
}
m = m.cycleVersion(-1)
if m.version() != "pl" {
t.Errorf("after shift-tab = %q", m.version())
}
}
func TestOfflineDropsPL(t *testing.T) {
m := New(config.Config{Versions: []string{"pl", "wuj", "vul"}, DefaultVersion: "pl", Offline: true})
for _, v := range m.versions {
if v == "pl" {
t.Error("offline model kept pl")
}
}
}
// TestBodyLinesLocalisesMessages checks that the loading/no-readings/error
// messages follow cfg.UILanguage.
func TestBodyLinesLocalisesMessages(t *testing.T) {
en := Model{cfg: config.Config{UILanguage: "en"}, loading: true}
if lines := en.bodyLines(80); len(lines) == 0 || !strings.Contains(lines[0], "loading") {
t.Errorf("en loading bodyLines = %v, want it to contain %q", lines, "loading")
}
pl := Model{cfg: config.Config{UILanguage: "pl"}, loading: true}
if lines := pl.bodyLines(80); len(lines) == 0 || !strings.Contains(lines[0], "ładowanie") {
t.Errorf("pl loading bodyLines = %v, want it to contain %q", lines, "ładowanie")
}
enEmpty := Model{cfg: config.Config{UILanguage: "en"}, date: "2026-07-22"}
if lines := enEmpty.bodyLines(80); len(lines) == 0 || !strings.Contains(lines[0], "no readings for") {
t.Errorf("en no-readings bodyLines = %v, want it to contain %q", lines, "no readings for")
}
}
// TestBodyLinesLocalisesHeading checks that a modern-lectionary section
// heading's label word follows cfg.UILanguage while the citation stays
// exactly as scraped (render.LocalizeHeading, brief §3b).
func TestBodyLinesLocalisesHeading(t *testing.T) {
sec := liturgy.Section{Heading: "Ewangelia (J 20, 1. 11-18)", PartID: "ewangelia"}
en := Model{cfg: config.Config{UILanguage: "en", Lectionary: "new"}, sections: []liturgy.Section{sec}}
body := strings.Join(en.bodyLines(80), "\n")
if !strings.Contains(body, "Gospel (J 20, 1. 11-18)") {
t.Errorf("en bodyLines missing localised heading: %q", body)
}
pl := Model{cfg: config.Config{UILanguage: "pl", Lectionary: "new"}, sections: []liturgy.Section{sec}}
body = strings.Join(pl.bodyLines(80), "\n")
if !strings.Contains(body, "Ewangelia (J 20, 1. 11-18)") {
t.Errorf("pl bodyLines missing unchanged heading: %q", body)
}
}
// TestFooterKeysLocalised checks the footer keybar text follows
// cfg.UILanguage.
func TestFooterKeysLocalised(t *testing.T) {
en := Model{cfg: config.Config{UILanguage: "en"}, date: "2026-07-22"}
if out := en.View(); !strings.Contains(out, "q quit") {
t.Errorf("en View() footer missing %q: %q", "q quit", out)
}
pl := Model{cfg: config.Config{UILanguage: "pl"}, date: "2026-07-22"}
if out := pl.View(); !strings.Contains(out, "q wyjście") {
t.Errorf("pl View() footer missing %q: %q", "q wyjście", out)
}
}
|