Implement artifact-level render command with Markdown output and update docs
This commit is contained in:
140
internal/render/markdown_test.go
Normal file
140
internal/render/markdown_test.go
Normal file
@@ -0,0 +1,140 @@
|
||||
package render
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestMarkdownRendererDefaultTranscriptShape(t *testing.T) {
|
||||
transcript := Transcript{
|
||||
Schema: "seriatim-intermediate",
|
||||
Metadata: Metadata{
|
||||
Application: "seriatim",
|
||||
Version: "v-test",
|
||||
},
|
||||
Segments: []Segment{
|
||||
{ID: 1, Start: 1, End: 4, Speaker: "Eric", Text: "Hello there."},
|
||||
{ID: 2, Start: 5, End: 8, Speaker: "Mike", Text: "Welcome back, everyone."},
|
||||
},
|
||||
}
|
||||
|
||||
output, err := MarkdownRenderer{}.Render(transcript, Options{
|
||||
Title: "Transcript",
|
||||
IncludeTimestamps: true,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("render markdown: %v", err)
|
||||
}
|
||||
|
||||
if !strings.Contains(output, "# Transcript") {
|
||||
t.Fatalf("expected title in output:\n%s", output)
|
||||
}
|
||||
if !strings.Contains(output, "[00:00:01–00:00:04] **Eric:** Hello there.") {
|
||||
t.Fatalf("expected first segment in output:\n%s", output)
|
||||
}
|
||||
if !strings.Contains(output, "[00:00:05–00:00:08] **Mike:** Welcome back, everyone.") {
|
||||
t.Fatalf("expected second segment in output:\n%s", output)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMarkdownRendererWithoutTimestamps(t *testing.T) {
|
||||
transcript := Transcript{
|
||||
Segments: []Segment{
|
||||
{ID: 1, Start: 1, End: 4, Speaker: "Eric", Text: "Hello."},
|
||||
},
|
||||
}
|
||||
|
||||
output, err := MarkdownRenderer{}.Render(transcript, Options{
|
||||
Title: "Transcript",
|
||||
IncludeTimestamps: false,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("render markdown: %v", err)
|
||||
}
|
||||
if strings.Contains(output, "[00:00:01") {
|
||||
t.Fatalf("timestamps should be omitted:\n%s", output)
|
||||
}
|
||||
if !strings.Contains(output, "**Eric:** Hello.") {
|
||||
t.Fatalf("expected speaker/text line:\n%s", output)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMarkdownRendererWithSegmentIDs(t *testing.T) {
|
||||
transcript := Transcript{
|
||||
Segments: []Segment{
|
||||
{ID: 17, Start: 1, End: 4, Speaker: "Eric", Text: "Hello."},
|
||||
},
|
||||
}
|
||||
|
||||
output, err := MarkdownRenderer{}.Render(transcript, Options{
|
||||
Title: "Transcript",
|
||||
IncludeTimestamps: true,
|
||||
IncludeSegmentIDs: true,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("render markdown: %v", err)
|
||||
}
|
||||
if !strings.Contains(output, "[#17]") {
|
||||
t.Fatalf("expected segment ID in output:\n%s", output)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMarkdownRendererMetadataOnlyWhenRequested(t *testing.T) {
|
||||
transcript := Transcript{
|
||||
Schema: "seriatim-full",
|
||||
Metadata: Metadata{
|
||||
Application: "seriatim",
|
||||
Version: "v-test",
|
||||
},
|
||||
}
|
||||
|
||||
withMetadata, err := MarkdownRenderer{}.Render(transcript, Options{
|
||||
Title: "Transcript",
|
||||
IncludeMetadata: true,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("render with metadata: %v", err)
|
||||
}
|
||||
if !strings.Contains(withMetadata, "- Application: seriatim") {
|
||||
t.Fatalf("expected metadata block:\n%s", withMetadata)
|
||||
}
|
||||
|
||||
withoutMetadata, err := MarkdownRenderer{}.Render(transcript, Options{Title: "Transcript"})
|
||||
if err != nil {
|
||||
t.Fatalf("render without metadata: %v", err)
|
||||
}
|
||||
if strings.Contains(withoutMetadata, "- Application: seriatim") {
|
||||
t.Fatalf("metadata should be omitted:\n%s", withoutMetadata)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMarkdownRendererCategoryHintItalicsAndUnknownCategories(t *testing.T) {
|
||||
transcript := Transcript{
|
||||
Segments: []Segment{
|
||||
{ID: 1, Start: 1, End: 2, Speaker: "A", Text: "bg", Categories: []string{"background"}},
|
||||
{ID: 2, Start: 2, End: 3, Speaker: "B", Text: "bc", Categories: []string{"backchannel"}},
|
||||
{ID: 3, Start: 3, End: 4, Speaker: "C", Text: "fill", Categories: []string{"filler"}},
|
||||
{ID: 4, Start: 4, End: 5, Speaker: "D", Text: "plain", Categories: []string{"unknown-tag"}},
|
||||
},
|
||||
}
|
||||
|
||||
output, err := MarkdownRenderer{}.Render(transcript, Options{
|
||||
Title: "Transcript",
|
||||
IncludeTimestamps: false,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("render markdown: %v", err)
|
||||
}
|
||||
if !strings.Contains(output, "**A:** *bg*") {
|
||||
t.Fatalf("expected background italics:\n%s", output)
|
||||
}
|
||||
if !strings.Contains(output, "**B:** *bc*") {
|
||||
t.Fatalf("expected backchannel italics:\n%s", output)
|
||||
}
|
||||
if !strings.Contains(output, "**C:** *fill*") {
|
||||
t.Fatalf("expected filler italics:\n%s", output)
|
||||
}
|
||||
if !strings.Contains(output, "**D:** plain") {
|
||||
t.Fatalf("expected unknown category to be ignored:\n%s", output)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user