import { describe, expect, it } from "vite-plus/test"; import { splitPullRequestBody } from "./pullRequestMarkdown.logic"; describe("pull request body segmentation", () => { it("keeps a plain body as a single markdown run", () => { expect(splitPullRequestBody("## What changed\n\nSome prose.")).toEqual([ { id: "markdown:0", kind: "markdown", text: "## What changed\n\nSome prose." }, ]); }); // GitHub writes a dropped image into the body as an `<img>` tag, so a bare attachment link on // its own line is the shape it uses for a video — every one sampled in the wild was one. it("lifts a dropped video out and keeps the prose around it", () => { expect( splitPullRequestBody( "Before\n\nhttps://github.com/user-attachments/assets/2f8c1a90-1b2c-4d5e-8f90-abcdef123456\n\nAfter", ), ).toEqual([ { id: "markdown:0", kind: "markdown", text: "Before" }, { id: "attachment:1", kind: "attachment", url: "https://github.com/user-attachments/assets/2f8c1a90-1b2c-4d5e-8f90-abcdef123456", media: "video", }, { id: "markdown:2", kind: "markdown", text: "After" }, ]); }); it("names a bare link to a video file a video", () => { expect(splitPullRequestBody("https://example.com/demo.mp4?raw=1")).toEqual([ { id: "attachment:0", kind: "attachment", url: "https://example.com/demo.mp4?raw=1", media: "video", }, ]); }); it("reads the source out of a video tag, including a multi-line one", () => { expect( splitPullRequestBody( '<video controls>\n <source src="https://example.com/a.webm">\n</video>', ), ).toEqual([ { id: "attachment:0", kind: "attachment", url: "https://example.com/a.webm", media: "video", }, ]); }); it("leaves a dropped image as markdown so it still renders as an image", () => { const body = ""; expect(splitPullRequestBody(body)).toEqual([ { id: "markdown:0", kind: "markdown", text: body }, ]); }); it("leaves the img tag GitHub writes for a dropped image as markdown", () => { const body = '<img width="1414" alt="image" src="https://github.com/user-attachments/assets/7195f963-51a9-4331-be74-3e06be760422" />'; expect(splitPullRequestBody(body)).toEqual([ { id: "markdown:0", kind: "markdown", text: body }, ]); }); it("leaves an ordinary link alone, whether it is bare or written as markdown", () => { const body = "https://example.com/page\n\n[the docs](https://example.com/docs)"; expect(splitPullRequestBody(body)).toEqual([ { id: "markdown:0", kind: "markdown", text: body }, ]); }); it("never lifts a link inside fenced code out of it", () => { const body = "```\nhttps://example.com/demo.mp4\n```"; expect(splitPullRequestBody(body)).toEqual([ { id: "markdown:0", kind: "markdown", text: body }, ]); }); it("does not let a different fence marker close an open fence", () => { const body = "```\n~~~\nhttps://example.com/demo.mp4\n```"; expect(splitPullRequestBody(body)).toEqual([ { id: "markdown:0", kind: "markdown", text: body }, ]); }); it("keeps a video tag that shares its line with prose as markdown", () => { const body = 'Before <video src="https://example.com/a.mp4"></video> after'; expect(splitPullRequestBody(body)).toEqual([ { id: "markdown:0", kind: "markdown", text: body }, ]); }); it("keeps the indentation that opens a code block", () => { const body = " const answer = 42;"; expect(splitPullRequestBody(body)).toEqual([ { id: "markdown:0", kind: "markdown", text: body }, ]); }); it("treats an info-string fence as a nested opener, not a close", () => { const body = "```\n```javascript\nhttps://example.com/demo.mp4\n```"; expect(splitPullRequestBody(body)).toEqual([ { id: "markdown:0", kind: "markdown", text: body }, ]); }); it("leaves an indented code line alone even when it is only a video link", () => { const body = " https://example.com/demo.mp4"; expect(splitPullRequestBody(body)).toEqual([ { id: "markdown:0", kind: "markdown", text: body }, ]); }); it("leaves an unclosed video tag as prose without eating the rest of the body", () => { const body = ['<video src="https://example.com/a.mp4">', "still prose", "more prose"].join( "\n", ); expect(splitPullRequestBody(body)).toEqual([ { id: "markdown:0", kind: "markdown", text: body }, ]); }); it("stays linear when the body is full of unclosed video tags", () => { const body = Array.from( { length: 4_000 }, () => '<video src="https://example.com/a.mp4">', ).join("\n"); const startedAt = performance.now(); expect(splitPullRequestBody(body)).toHaveLength(1); expect(performance.now() - startedAt).toBeLessThan(1_000); }); it("refuses a non-http source rather than making a link out of it", () => { const body = '<video src="javascript:alert(1)"></video>'; expect(splitPullRequestBody(body)).toEqual([ { id: "markdown:0", kind: "markdown", text: body }, ]); });});
import { describe, expect, it } from "vite-plus/test";
import { splitPullRequestBody } from "./pullRequestMarkdown.logic";
describe("pull request body segmentation", () => {
it("keeps a plain body as a single markdown run", () => {
expect(splitPullRequestBody("## What changed\n\nSome prose.")).toEqual([
{ id: "markdown:0", kind: "markdown", text: "## What changed\n\nSome prose." },
]);
});
// GitHub writes a dropped image into the body as an `<img>` tag, so a bare attachment link on
// its own line is the shape it uses for a video — every one sampled in the wild was one.
it("lifts a dropped video out and keeps the prose around it", () => {
expect(
splitPullRequestBody(
"Before\n\nhttps://github.com/user-attachments/assets/2f8c1a90-1b2c-4d5e-8f90-abcdef123456\n\nAfter",
),
).toEqual([
{ id: "markdown:0", kind: "markdown", text: "Before" },
{
id: "attachment:1",
kind: "attachment",
url: "https://github.com/user-attachments/assets/2f8c1a90-1b2c-4d5e-8f90-abcdef123456",
media: "video",
},
{ id: "markdown:2", kind: "markdown", text: "After" },
]);
});
it("names a bare link to a video file a video", () => {
expect(splitPullRequestBody("https://example.com/demo.mp4?raw=1")).toEqual([
{
id: "attachment:0",
kind: "attachment",
url: "https://example.com/demo.mp4?raw=1",
media: "video",
},
]);
});
it("reads the source out of a video tag, including a multi-line one", () => {
expect(
splitPullRequestBody(
'<video controls>\n <source src="https://example.com/a.webm">\n</video>',
),
).toEqual([
{
id: "attachment:0",
kind: "attachment",
url: "https://example.com/a.webm",
media: "video",
},
]);
});
it("leaves a dropped image as markdown so it still renders as an image", () => {
const body = "";
expect(splitPullRequestBody(body)).toEqual([
{ id: "markdown:0", kind: "markdown", text: body },
]);
});
it("leaves the img tag GitHub writes for a dropped image as markdown", () => {
const body =
'<img width="1414" alt="image" src="https://github.com/user-attachments/assets/7195f963-51a9-4331-be74-3e06be760422" />';
expect(splitPullRequestBody(body)).toEqual([
{ id: "markdown:0", kind: "markdown", text: body },
]);
});
it("leaves an ordinary link alone, whether it is bare or written as markdown", () => {
const body = "https://example.com/page\n\n[the docs](https://example.com/docs)";
expect(splitPullRequestBody(body)).toEqual([
{ id: "markdown:0", kind: "markdown", text: body },
]);
});
it("never lifts a link inside fenced code out of it", () => {
const body = "```\nhttps://example.com/demo.mp4\n```";
expect(splitPullRequestBody(body)).toEqual([
{ id: "markdown:0", kind: "markdown", text: body },
]);
});
it("does not let a different fence marker close an open fence", () => {
const body = "```\n~~~\nhttps://example.com/demo.mp4\n```";
expect(splitPullRequestBody(body)).toEqual([
{ id: "markdown:0", kind: "markdown", text: body },
]);
});
it("keeps a video tag that shares its line with prose as markdown", () => {
const body = 'Before <video src="https://example.com/a.mp4"></video> after';
expect(splitPullRequestBody(body)).toEqual([
{ id: "markdown:0", kind: "markdown", text: body },
]);
});
it("keeps the indentation that opens a code block", () => {
const body = " const answer = 42;";
expect(splitPullRequestBody(body)).toEqual([
{ id: "markdown:0", kind: "markdown", text: body },
]);
});
it("treats an info-string fence as a nested opener, not a close", () => {
const body = "```\n```javascript\nhttps://example.com/demo.mp4\n```";
expect(splitPullRequestBody(body)).toEqual([
{ id: "markdown:0", kind: "markdown", text: body },
]);
});
it("leaves an indented code line alone even when it is only a video link", () => {
const body = " https://example.com/demo.mp4";
expect(splitPullRequestBody(body)).toEqual([
{ id: "markdown:0", kind: "markdown", text: body },
]);
});
it("leaves an unclosed video tag as prose without eating the rest of the body", () => {
const body = ['<video src="https://example.com/a.mp4">', "still prose", "more prose"].join(
"\n",
);
expect(splitPullRequestBody(body)).toEqual([
{ id: "markdown:0", kind: "markdown", text: body },
]);
});
it("stays linear when the body is full of unclosed video tags", () => {
const body = Array.from(
{ length: 4_000 },
() => '<video src="https://example.com/a.mp4">',
).join("\n");
const startedAt = performance.now();
expect(splitPullRequestBody(body)).toHaveLength(1);
expect(performance.now() - startedAt).toBeLessThan(1_000);
});
it("refuses a non-http source rather than making a link out of it", () => {
const body = '<video src="javascript:alert(1)"></video>';
expect(splitPullRequestBody(body)).toEqual([
{ id: "markdown:0", kind: "markdown", text: body },
]);
});
});