package upstream import ( "encoding/json" "os" "path/filepath" "testing" ) func TestSnapshotAndKeys(t *testing.T) { s, err := Load(filepath.Join("..", "..", "build", "upstream")) if err != nil { t.Fatal(err) } if s.Lock.Tag != "v28.0.0" || len(s.Templates) != 13 || len(s.Locales) != 28 { t.Fatalf("unexpected baseline %s", s.Lock.Tag) } keys, err := ReferencedKeys(s) if err != nil { t.Fatal(err) } found := map[string]bool{} for _, k := range keys { found[k] = true } for _, k := range []string{"mail.issue.action.push_1", "mail.issue.action.push_n", "actions.runs.attempt"} { if !found[k] { t.Fatalf("missing key %s", k) } } delete(s.Locales["en-US"], "actions.runs.attempt") if ValidateKeys(s) == nil { t.Fatal("missing English key accepted") } if !validTag("v28.0.0") || validTag("v1.27.3") || validTag("v28.1.0-rc1") { t.Fatal("tag policy") } for _, p := range []string{"../x", "/x", "C:/x", "mail\\x"} { if SafePath(p) { t.Fatal("unsafe path accepted") } } } func TestSnapshotRejectsChecksumAndAdapterDrift(t *testing.T) { s, err := Load(filepath.Join("..", "..", "build", "upstream")) if err != nil { t.Fatal(err) } dir := t.TempDir() for p, b := range s.Files { target := filepath.Join(dir, filepath.FromSlash(p)) if err := os.MkdirAll(filepath.Dir(target), 0755); err != nil { t.Fatal(err) } if err := os.WriteFile(target, b, 0644); err != nil { t.Fatal(err) } } writeLock := func() { b, _ := json.Marshal(s.Lock) if err := os.WriteFile(filepath.Join(dir, "lock.json"), b, 0644); err != nil { t.Fatal(err) } } writeLock() p := "templates/mail/base/head.tmpl" if err := os.WriteFile(filepath.Join(dir, filepath.FromSlash(p)), []byte("changed"), 0644); err != nil { t.Fatal(err) } if _, err := Load(dir); err == nil { t.Fatal("checksum mismatch accepted") } if err := os.WriteFile(filepath.Join(dir, filepath.FromSlash(p)), s.Files[p], 0644); err != nil { t.Fatal(err) } p = "modules/translation/translation.go" if err := os.WriteFile(filepath.Join(dir, filepath.FromSlash(p)), []byte("changed"), 0644); err != nil { t.Fatal(err) } s.Lock.Files[p] = Digest([]byte("changed")) writeLock() if _, err := Load(dir); err == nil { t.Fatal("changed translation adapter accepted despite updated checksum") } }