Add the CLI, site, and sample content so the project can run locally. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package cli
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestReadWritePostFile(t *testing.T) {
|
|
dir := t.TempDir()
|
|
publishedAt := "2026-05-28T12:00:00+08:00"
|
|
post := postFile{
|
|
Path: filepath.Join(dir, "hello.md"),
|
|
Frontmatter: postFrontmatter{
|
|
ID: "post-1",
|
|
Slug: "hello",
|
|
Title: "Hello",
|
|
Summary: "Summary",
|
|
Status: "published",
|
|
Tags: []string{"go", "astro"},
|
|
Version: 2,
|
|
SlugSource: "manual",
|
|
PublishedAt: &publishedAt,
|
|
CreatedAt: "2026-05-28T11:00:00+08:00",
|
|
UpdatedAt: "2026-05-28T12:00:00+08:00",
|
|
},
|
|
Body: "Body\n",
|
|
}
|
|
|
|
if err := writePostFile(post); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
got, err := readPostFile(post.Path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got.Frontmatter.ID != post.Frontmatter.ID || got.Frontmatter.Slug != post.Frontmatter.Slug {
|
|
t.Fatalf("frontmatter mismatch: %#v", got.Frontmatter)
|
|
}
|
|
if got.Body != post.Body {
|
|
t.Fatalf("body = %q, want %q", got.Body, post.Body)
|
|
}
|
|
if len(got.Frontmatter.Tags) != 2 || got.Frontmatter.Tags[1] != "astro" {
|
|
t.Fatalf("tags = %#v", got.Frontmatter.Tags)
|
|
}
|
|
}
|
|
|
|
func TestReadPostFileRequiresFrontmatter(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "bad.md")
|
|
if err := os.WriteFile(path, []byte("no frontmatter"), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := readPostFile(path); err == nil {
|
|
t.Fatal("expected frontmatter error")
|
|
}
|
|
}
|