projects_test.go (1877B)
1 package content 2 3 import ( 4 "os" 5 "os/exec" 6 "path/filepath" 7 "strings" 8 "testing" 9 10 "git.prime8.dev/moncheeta/prime8dev/internal/config" 11 "git.prime8.dev/moncheeta/prime8dev/internal/external" 12 ) 13 14 func run(t *testing.T, dir string, args ...string) { 15 t.Helper() 16 cmd := exec.Command("git", args...) 17 cmd.Dir = dir 18 cmd.Env = append(os.Environ(), "GIT_AUTHOR_NAME=t", "GIT_AUTHOR_EMAIL=t@t", "GIT_COMMITTER_NAME=t", "GIT_COMMITTER_EMAIL=t@t") 19 if out, err := cmd.CombinedOutput(); err != nil { 20 t.Fatalf("git %v: %v\n%s", args, err, out) 21 } 22 } 23 24 func commitReadme(t *testing.T, work, body string) { 25 t.Helper() 26 if err := os.WriteFile(filepath.Join(work, "README.md"), []byte(body), 0o644); err != nil { 27 t.Fatal(err) 28 } 29 run(t, work, "add", ".") 30 run(t, work, "commit", "-qm", "readme") 31 run(t, work, "push", "-q", "origin", "HEAD:master") 32 } 33 34 func TestReadmeFollowsHead(t *testing.T) { 35 root := t.TempDir() 36 repos := filepath.Join(root, "repos") 37 work := filepath.Join(root, "work") 38 run(t, root, "init", "-q", "--bare", "-b", "master", filepath.Join(repos, "demo.git")) 39 run(t, root, "init", "-q", "-b", "master", work) 40 run(t, work, "remote", "add", "origin", filepath.Join(repos, "demo.git")) 41 42 t.Setenv("GIT_REPOS_DIR", repos) 43 git := external.NewGit() 44 readmeMemo = map[string]memoEntry{} 45 46 commitReadme(t, work, "# demo\n\nfirst version\n") 47 p := config.Project{ID: "demo", Repo: "demo"} 48 withReadme(git, &p) 49 if !strings.Contains(p.HTML, "first version") { 50 t.Fatalf("first render: %q", p.HTML) 51 } 52 53 commitReadme(t, work, "# demo\n\nsecond version\n") 54 p = config.Project{ID: "demo", Repo: "demo"} 55 withReadme(git, &p) 56 if !strings.Contains(p.HTML, "second version") { 57 t.Fatalf("after push: %q", p.HTML) 58 } 59 } 60 61 func TestNoRepoNoReadme(t *testing.T) { 62 p := config.Project{ID: "x"} 63 withReadme(external.NewGit(), &p) 64 if p.HTML != "" { 65 t.Fatalf("got %q", p.HTML) 66 } 67 }