aboutsummaryrefslogtreecommitdiff
path: root/internal/cli/callayer_test.go
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-07-27 13:23:51 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-07-27 13:23:51 +0200
commite91a7dadb4401a553ffdd4f3661640921e425eb6 (patch)
tree94df3ed52204c186c505a19e1efc650895edf795 /internal/cli/callayer_test.go
parentfb3fdc69fad0f374c419559d99d75ba8c81aa632 (diff)
downloadlectio-e91a7dadb4401a553ffdd4f3661640921e425eb6.tar.gz
lectio-e91a7dadb4401a553ffdd4f3661640921e425eb6.zip
feat(cli): --cal-new scaffold + --cal-check lint for custom calendar layers
Also: reject out-of-range MM-DD in resolveDate (strict validation for user data).
Diffstat (limited to 'internal/cli/callayer_test.go')
-rw-r--r--internal/cli/callayer_test.go57
1 files changed, 57 insertions, 0 deletions
diff --git a/internal/cli/callayer_test.go b/internal/cli/callayer_test.go
new file mode 100644
index 0000000..4803fdf
--- /dev/null
+++ b/internal/cli/callayer_test.go
@@ -0,0 +1,57 @@
+package cli
+
+import (
+ "bytes"
+ "os"
+ "path/filepath"
+ "strings"
+ "testing"
+)
+
+func TestRunCalNewAndCheck(t *testing.T) {
+ dir := t.TempDir()
+ t.Setenv("LECTIO_CONFIG", filepath.Join(dir, "config.ini"))
+
+ var buf bytes.Buffer
+ if code := runCalNew("krakow", &buf, &buf); code != 0 {
+ t.Fatalf("cal-new exit %d: %s", code, buf.String())
+ }
+ path := filepath.Join(dir, "calendars", "krakow.ini")
+ if _, err := os.Stat(path); err != nil {
+ t.Fatal("scaffold not written")
+ }
+
+ // the scaffold must validate clean
+ buf.Reset()
+ if code := runCalCheck("krakow", &buf, &buf); code != 0 {
+ t.Fatalf("cal-check on scaffold exit %d: %s", code, buf.String())
+ }
+ if !strings.Contains(buf.String(), "ok:") {
+ t.Errorf("expected ok, got: %s", buf.String())
+ }
+
+ // refuse to overwrite
+ buf.Reset()
+ if code := runCalNew("krakow", &buf, &buf); code == 0 {
+ t.Error("cal-new should refuse to overwrite an existing file")
+ }
+}
+
+func TestRunCalCheckReportsBadFields(t *testing.T) {
+ dir := t.TempDir()
+ t.Setenv("LECTIO_CONFIG", filepath.Join(dir, "config.ini"))
+ os.MkdirAll(filepath.Join(dir, "calendars"), 0o755)
+ os.WriteFile(filepath.Join(dir, "calendars", "bad.ini"),
+ []byte("[layer]\nid = bad\n\n[x]\ndate = 99-99\nrank = archfeast\ncolour = teal\n"), 0o644)
+
+ var buf bytes.Buffer
+ if code := runCalCheck("bad", &buf, &buf); code == 0 {
+ t.Fatalf("cal-check should fail on bad fields:\n%s", buf.String())
+ }
+ out := buf.String()
+ for _, want := range []string{"date", "rank", "colour"} {
+ if !strings.Contains(out, want) {
+ t.Errorf("expected a %s problem reported:\n%s", want, out)
+ }
+ }
+}