a73x

internal/site/dl_test.go

Ref:   Size: 2.5 KiB   History

package site

import (
	"os"
	"path/filepath"
	"strings"
	"testing"
)

func fixtureDist(t *testing.T) string {
	t.Helper()
	dist := filepath.Join(t.TempDir(), "v0.0.1")
	if err := os.MkdirAll(dist, 0o755); err != nil {
		t.Fatal(err)
	}
	files := map[string]string{
		"eitri-server_v0.0.1_linux_amd64.tar.gz": strings.Repeat("x", 2048),
		"eitri-cli_v0.0.1_linux_amd64.tar.gz":    "bundle",
		"SHA256SUMS":                             "abc123  eitri-server_v0.0.1_linux_amd64.tar.gz\ndef456  eitri-cli_v0.0.1_linux_amd64.tar.gz\n",
	}
	for name, body := range files {
		if err := os.WriteFile(filepath.Join(dist, name), []byte(body), 0o644); err != nil {
			t.Fatal(err)
		}
	}
	return dist
}

func TestDownloadsPageListsArtifacts(t *testing.T) {
	md, err := downloadsMarkdown(fixtureDist(t))
	if err != nil {
		t.Fatal(err)
	}
	for _, want := range []string{
		"[eitri-server_v0.0.1_linux_amd64.tar.gz](/dl/v0.0.1/eitri-server_v0.0.1_linux_amd64.tar.gz)",
		"abc123",
		"sha256sum -c SHA256SUMS",
		"[SHA256SUMS](/dl/v0.0.1/SHA256SUMS)",
		"[openapi.json](/openapi.json)",
	} {
		if !strings.Contains(md, want) {
			t.Errorf("downloads page missing %q:\n%s", want, md)
		}
	}
}

func TestDownloadsPageWithoutDist(t *testing.T) {
	md, err := downloadsMarkdown("")
	if err != nil {
		t.Fatal(err)
	}
	if !strings.Contains(md, "No release is staged") {
		t.Errorf("preview note missing:\n%s", md)
	}
	if !strings.Contains(md, "[openapi.json](/openapi.json)") {
		t.Errorf("API spec link missing from preview:\n%s", md)
	}
}

func TestDownloadsPageRequiresSums(t *testing.T) {
	dist := filepath.Join(t.TempDir(), "v0.0.1")
	if err := os.MkdirAll(dist, 0o755); err != nil {
		t.Fatal(err)
	}
	if _, err := downloadsMarkdown(dist); err == nil {
		t.Fatal("want error for dist dir without SHA256SUMS")
	}
}

// TestDownloadsPageUnsummedFilesGetPlaceholder covers the one row that can
// carry no checksum: SHA256SUMS, which cannot list itself. Everything else a
// release stages — manifest.json included — has an entry.
func TestDownloadsPageUnsummedFilesGetPlaceholder(t *testing.T) {
	dist := fixtureDist(t)
	md, err := downloadsMarkdown(dist)
	if err != nil {
		t.Fatal(err)
	}
	if strings.Contains(md, "``") {
		t.Errorf("empty sha rendered as bare backticks:\n%s", md)
	}
	if !strings.Contains(md, "| — |") {
		t.Errorf("unsummed file missing placeholder:\n%s", md)
	}
	html, _, err := render([]byte(md), nil)
	if err != nil {
		t.Fatal(err)
	}
	if strings.Contains(string(html), "``") {
		t.Errorf("stray backticks in rendered HTML:\n%s", html)
	}
}