Files
seriatim/internal/render/markdown_test.go

141 lines
4.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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:0100:00:04] **Eric:** Hello there.") {
t.Fatalf("expected first segment in output:\n%s", output)
}
if !strings.Contains(output, "[00:00:0500: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)
}
}