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) } }