prime8dev

prime8dev
git clone https://git.prime8.dev/prime8dev.git
Log | Files | Refs | README | LICENSE

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 }