import { describe, it, expect } from 'vitest';
import {
buildBlogmarkMarkdownLink,
extractBlogmarkPayloadFromDeepLink,
generateBlogmarkBookmarkletSource,
} from '../../src/main/shared/blogmark';
describe('blogmark deep-link payload', () => {
it('extracts and sanitizes title and URL from deep link', () => {
const payload = extractBlogmarkPayloadFromDeepLink(
'bds://new-post?title=Hello%20%3Cb%3EWorld%3C%2Fb%3E&url=https%3A%2F%2Fexample.com%2Fpost%3Fx%3D1%23frag',
);
expect(payload).toEqual({
title: 'Hello World',
url: 'https://example.com/post?x=1',
});
});
it('rejects non-http URLs', () => {
const payload = extractBlogmarkPayloadFromDeepLink(
'bds://new-post?title=Unsafe&url=javascript%3Aalert(1)',
);
expect(payload).toBeNull();
});
it('rejects entity-obfuscated script URLs', () => {
const payload = extractBlogmarkPayloadFromDeepLink(
'bds://new-post?title=Unsafe&url=javascript%26%2397%3Balert(1)',
);
expect(payload).toBeNull();
});
it('builds safe markdown source link', () => {
const markdown = buildBlogmarkMarkdownLink('A [title] (test)', 'https://example.com/x?y=1');
expect(markdown).toBe('[A \\[title\\] \\(test\\)]()');
});
it('generates bookmarklet that targets bds protocol', () => {
const source = generateBlogmarkBookmarkletSource();
expect(source.startsWith('javascript:')).toBe(true);
expect(source).toContain('bds://new-post?title=');
expect(source).toContain('encodeURIComponent(document.title');
expect(source).toContain('encodeURIComponent(location.href');
});
});