返回 last30days-skill
preflight_test.go
根目录 / mcp / internal / tools / preflight_test.go
1 package tools
2
3 import (
4 "strings"
5 "testing"
6 )
7
8 func TestPreflightRunArgsDefaultTextIsSafe(t *testing.T) {
9 t.Setenv("LAST30DAYS_MEMORY_DIR", "")
10 args := preflightRunArgs("text")
11 want := []string{
12 "--preflight",
13 "--preflight-report-on-save-dir",
14 "~/Documents/Last30Days",
15 }
16 if strings.Join(args, "\x00") != strings.Join(want, "\x00") {
17 t.Fatalf("args = %#v, want %#v", args, want)
18 }
19 }
20
21 func TestPreflightRunArgsJSONIsSafeAndStructured(t *testing.T) {
22 t.Setenv("LAST30DAYS_MEMORY_DIR", "/tmp/last30days-reports")
23 args := preflightRunArgs("json")
24 want := []string{
25 "--preflight",
26 "--preflight-report-on-save-dir",
27 "/tmp/last30days-reports",
28 "--emit=json",
29 }
30 if strings.Join(args, "\x00") != strings.Join(want, "\x00") {
31 t.Fatalf("args = %#v, want %#v", args, want)
32 }
33 }
34
35 func TestPreflightFormatArgumentDefaultsAndValidates(t *testing.T) {
36 cases := []struct {
37 name string
38 args map[string]any
39 want string
40 wantErr bool
41 }{
42 {"missing defaults to text", map[string]any{}, "text", false},
43 {"empty defaults to text", map[string]any{"format": ""}, "text", false},
44 {"text passes", map[string]any{"format": "text"}, "text", false},
45 {"json passes", map[string]any{"format": "json"}, "json", false},
46 {"invalid rejected", map[string]any{"format": "xml"}, "", true},
47 {"non-string rejected", map[string]any{"format": true}, "", true},
48 }
49 for _, tc := range cases {
50 t.Run(tc.name, func(t *testing.T) {
51 got, err := preflightFormatArgument(tc.args)
52 if (err != nil) != tc.wantErr {
53 t.Fatalf("err = %v, wantErr = %v", err, tc.wantErr)
54 }
55 if got != tc.want {
56 t.Fatalf("got %q, want %q", got, tc.want)
57 }
58 })
59 }
60 }
61
61 lines GO