Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 79 additions & 0 deletions src/publish/draft-url.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import assert from "node:assert/strict";
import { describe, it } from "vitest";
import { resolveDraftEditorUrl } from "./draft-url.js";

describe("resolveDraftEditorUrl", () => {
it("returns the original url if draftId is undefined", () => {
assert.equal(
resolveDraftEditorUrl("https://example.substack.com/publish/post", undefined),
"https://example.substack.com/publish/post",
);
});

it("returns empty string if draftId is undefined and draftUrl is empty", () => {
assert.equal(resolveDraftEditorUrl("", undefined), "");
});

it("returns empty string if draftUrl is empty", () => {
assert.equal(resolveDraftEditorUrl("", "12345"), "");
});

it("returns the original url if it already ends with the draftId", () => {
assert.equal(
resolveDraftEditorUrl("https://example.substack.com/publish/post/12345", "12345"),
"https://example.substack.com/publish/post/12345",
);
});

it("returns the original url if it already ends with the draftId and has trailing slash", () => {
assert.equal(
resolveDraftEditorUrl("https://example.substack.com/publish/post/12345/", "12345"),
"https://example.substack.com/publish/post/12345/",
);
});

it("replaces existing numeric draft ID with the new one", () => {
assert.equal(
resolveDraftEditorUrl("https://example.substack.com/publish/post/999", "12345"),
"https://example.substack.com/publish/post/12345",
);
});

it("appends draftId if it is missing", () => {
assert.equal(
resolveDraftEditorUrl("https://example.substack.com/publish/post", "12345"),
"https://example.substack.com/publish/post/12345",
);
});

it("handles urls with trailing slash", () => {
assert.equal(
resolveDraftEditorUrl("https://example.substack.com/publish/post/", "12345"),
"https://example.substack.com/publish/post/12345",
);
});

it("preserves query parameters and hashes (catch block logic)", () => {
// URL without protocol to trigger the catch block
assert.equal(
resolveDraftEditorUrl("example.substack.com/publish/post?foo=bar#baz", "12345"),
"example.substack.com/publish/post/12345?foo=bar#baz",
);
});

it("preserves query parameters and hashes when replacing draftId (catch block logic)", () => {
// URL without protocol to trigger the catch block
assert.equal(
resolveDraftEditorUrl("example.substack.com/publish/post/999?foo=bar#baz", "12345"),
"example.substack.com/publish/post/12345?foo=bar#baz",
);
});

it("preserves query parameters and hashes when draftId is already correct (catch block logic)", () => {
// URL without protocol to trigger the catch block
assert.equal(
resolveDraftEditorUrl("example.substack.com/publish/post/12345?foo=bar#baz", "12345"),
"example.substack.com/publish/post/12345?foo=bar#baz",
);
});
});
Loading