This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / appview / pages / ratchet_test.go
2.5 kB 91 lines
1package pages 2 3import ( 4 "io/fs" 5 "regexp" 6 "strings" 7 "testing" 8) 9 10var repoRkeyAllowlist = map[string]bool{ 11 "templates/repo/settings/sites.html": true, 12} 13 14var repoRkeyPattern = regexp.MustCompile(`\.(Repo|RepoInfo)\.Rkey\b`) 15 16func TestNoRepoRkeyInTemplates(t *testing.T) { 17 err := fs.WalkDir(Files, "templates", func(path string, d fs.DirEntry, err error) error { 18 if err != nil { 19 return err 20 } 21 if d.IsDir() || !strings.HasSuffix(path, ".html") { 22 return nil 23 } 24 if repoRkeyAllowlist[path] { 25 return nil 26 } 27 data, err := fs.ReadFile(Files, path) 28 if err != nil { 29 return err 30 } 31 for i, line := range strings.Split(string(data), "\n") { 32 if repoRkeyPattern.MatchString(line) { 33 t.Errorf("%s:%d uses .Repo.Rkey or .RepoInfo.Rkey in URL position. Use .Slug to prefer Name over TID-Rkey.\n %s", 34 path, i+1, strings.TrimSpace(line)) 35 } 36 } 37 return nil 38 }) 39 if err != nil { 40 t.Fatal(err) 41 } 42} 43 44var bareDidAllowlist = map[string]bool{ 45 "templates/strings/string.html": true, 46 "templates/strings/fragments/form.html": true, 47} 48 49var didCloseAsUrlSegment = regexp.MustCompile(`\.(?:Did|OwnerDid)\s*\}\}\s*/`) 50var printfWithUrlFormat = regexp.MustCompile(`printf\s+"[^"]*/[^"]*%s`) 51var didArgRef = regexp.MustCompile(`\b[\$\.]\w+(?:\.\w+)*\.(?:Did|OwnerDid)\b`) 52 53func TestNoBareDidInTemplateRepoUrls(t *testing.T) { 54 err := fs.WalkDir(Files, "templates", func(path string, d fs.DirEntry, err error) error { 55 if err != nil { 56 return err 57 } 58 if d.IsDir() || !strings.HasSuffix(path, ".html") { 59 return nil 60 } 61 if bareDidAllowlist[path] { 62 return nil 63 } 64 data, err := fs.ReadFile(Files, path) 65 if err != nil { 66 return err 67 } 68 for i, line := range strings.Split(string(data), "\n") { 69 for _, idx := range didCloseAsUrlSegment.FindAllStringIndex(line, -1) { 70 openIdx := strings.LastIndex(line[:idx[0]], "{{") 71 if openIdx == -1 { 72 continue 73 } 74 action := line[openIdx:idx[1]] 75 if !strings.Contains(action, "resolve") { 76 t.Errorf("%s:%d renders raw DID as URL path segment. Wrap in `resolve` so the handle appears.\n %s", 77 path, i+1, strings.TrimSpace(line)) 78 break 79 } 80 } 81 if printfWithUrlFormat.MatchString(line) && didArgRef.MatchString(line) && !strings.Contains(line, "resolve ") { 82 t.Errorf("%s:%d builds a URL path via printf with a raw DID arg. Wrap the DID in `resolve` so handle appears.\n %s", 83 path, i+1, strings.TrimSpace(line)) 84 } 85 } 86 return nil 87 }) 88 if err != nil { 89 t.Fatal(err) 90 } 91}