package builder import ( "bytes" "gitea-mail-templates/tools/upstream" "os" "path/filepath" "testing" ) func TestGenerationPreservesSnapshot(t *testing.T) { s, err := upstream.Load(filepath.Join("..", "..", "build", "upstream")) if err != nil { t.Fatal(err) } packages, err := BuildAll(filepath.Join("..", "..", "themes"), s, nil) if err != nil { t.Fatal(err) } for name, p := range packages { if len(p.Files) != len(s.Templates)+3 { t.Fatalf("%s missing generated files", name) } for filename, generated := range p.Files { if _, ok := p.Theme.Controls[filename]; ok { continue } original, err := StripInjections(generated) if err != nil { t.Fatal(err) } baseline := s.Templates[filename] if !bytes.HasPrefix([]byte(filename), []byte("mail/base/")) { baseline, err = AdaptOfficial(s, filename) if err != nil { t.Fatal(err) } } if !bytes.Equal(original, baseline) { t.Fatal("official source altered") } } again, err := Build(s, p.Theme) if err != nil { t.Fatal(err) } for filename, b := range again.Files { if !bytes.Equal(b, p.Files[filename]) { t.Fatal("nondeterministic build") } } } shared, err := Build(s, &Theme{Name: "test", Mode: "shared", CSS: "a {color:#000}"}) if err != nil { t.Fatal(err) } if len(shared.Files) != 2 { t.Fatal("shared theme overridesæ£æ–‡") } output := filepath.Join(t.TempDir(), "build", "themes") if err := Write(output, s, map[string]*Package{"test": packages["mono"]}); err != nil { t.Fatal(err) } if err := Write(output, s, map[string]*Package{"test": shared}); err != nil { t.Fatal(err) } if _, err := os.Stat(filepath.Join(output, "test", "mail", "repo", "release.tmpl")); !os.IsNotExist(err) { t.Fatal("stale framed override retained") } } func TestRejectUnsafeDecorationAndAnchors(t *testing.T) { for _, markup := range []string{"