126 lines
4.1 KiB
TypeScript
126 lines
4.1 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import {
|
|
buildBlogmarkTransformOutputEntries,
|
|
buildBlogmarkTransformToastNotifications,
|
|
parseBlogmarkCreatedEventPayload,
|
|
} from '../../../src/renderer/navigation/blogmarkTransformOutput';
|
|
|
|
describe('parseBlogmarkCreatedEventPayload', () => {
|
|
it('parses legacy payload shape where event value is the post itself', () => {
|
|
const payload = parseBlogmarkCreatedEventPayload({ id: 'post-1', title: 'Legacy post' });
|
|
|
|
expect(payload).toEqual({
|
|
post: { id: 'post-1', title: 'Legacy post' },
|
|
transform: undefined,
|
|
});
|
|
});
|
|
|
|
it('parses new payload shape with post and transform metadata', () => {
|
|
const payload = parseBlogmarkCreatedEventPayload({
|
|
post: { id: 'post-2', title: 'With transforms' },
|
|
transform: {
|
|
appliedScriptIds: ['a', 'b'],
|
|
errors: [{ scriptId: 'c', scriptSlug: 'c', message: 'boom' }],
|
|
toasts: ['done'],
|
|
},
|
|
});
|
|
|
|
expect(payload).toEqual({
|
|
post: { id: 'post-2', title: 'With transforms' },
|
|
transform: {
|
|
appliedScriptIds: ['a', 'b'],
|
|
errors: [{ scriptId: 'c', scriptSlug: 'c', message: 'boom' }],
|
|
toasts: ['done'],
|
|
},
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('buildBlogmarkTransformOutputEntries', () => {
|
|
const t = (key: string, values?: Record<string, string | number>) => {
|
|
if (key === 'app.blogmark.transforms.summary') {
|
|
return `summary:${values?.applied}:${values?.failed}`;
|
|
}
|
|
if (key === 'app.blogmark.transforms.appliedList') {
|
|
return `applied:${values?.scripts}`;
|
|
}
|
|
if (key === 'app.blogmark.transforms.failed') {
|
|
return `failed:${values?.script}:${values?.message}`;
|
|
}
|
|
if (key === 'app.blogmark.transforms.toast') {
|
|
return `toast:${values?.message}`;
|
|
}
|
|
if (key === 'app.blogmark.transforms.errorToast') {
|
|
return `error-toast:${values?.count}`;
|
|
}
|
|
return key;
|
|
};
|
|
|
|
it('returns empty list when no transform info is provided', () => {
|
|
expect(buildBlogmarkTransformOutputEntries(undefined, t)).toEqual([]);
|
|
});
|
|
|
|
it('returns summary and applied list entries for successful transforms', () => {
|
|
const entries = buildBlogmarkTransformOutputEntries(
|
|
{
|
|
appliedScriptIds: ['alpha', 'beta'],
|
|
errors: [],
|
|
toasts: [],
|
|
},
|
|
t,
|
|
);
|
|
|
|
expect(entries).toHaveLength(2);
|
|
expect(entries[0]?.kind).toBe('result');
|
|
expect(entries[0]?.message).toBe('summary:2:0');
|
|
expect(entries[1]?.kind).toBe('result');
|
|
expect(entries[1]?.message).toBe('applied:alpha, beta');
|
|
});
|
|
|
|
it('returns one error entry per failed transform', () => {
|
|
const entries = buildBlogmarkTransformOutputEntries(
|
|
{
|
|
appliedScriptIds: ['alpha'],
|
|
errors: [
|
|
{ scriptId: 'broken', scriptSlug: 'broken_slug', message: 'boom' },
|
|
{ scriptId: 'bad', scriptSlug: 'bad_slug', message: 'invalid output' },
|
|
],
|
|
toasts: ['Step finished'],
|
|
},
|
|
t,
|
|
);
|
|
|
|
expect(entries).toHaveLength(5);
|
|
expect(entries[0]?.message).toBe('summary:1:2');
|
|
expect(entries[1]?.message).toBe('applied:alpha');
|
|
expect(entries[2]?.kind).toBe('result');
|
|
expect(entries[2]?.message).toBe('toast:Step finished');
|
|
expect(entries[3]?.kind).toBe('error');
|
|
expect(entries[3]?.message).toBe('failed:broken_slug:boom');
|
|
expect(entries[4]?.kind).toBe('error');
|
|
expect(entries[4]?.message).toBe('failed:bad_slug:invalid output');
|
|
});
|
|
});
|
|
|
|
describe('buildBlogmarkTransformToastNotifications', () => {
|
|
const t = (key: string, values?: Record<string, string | number>) => {
|
|
if (key === 'app.blogmark.transforms.errorToast') {
|
|
return `error-toast:${values?.count}`;
|
|
}
|
|
return key;
|
|
};
|
|
|
|
it('returns toast notifications for script toasts and aggregated errors', () => {
|
|
const notifications = buildBlogmarkTransformToastNotifications({
|
|
appliedScriptIds: ['alpha'],
|
|
toasts: ['Saved one item'],
|
|
errors: [{ scriptId: 'broken', scriptSlug: 'broken_slug', message: 'boom' }],
|
|
}, t);
|
|
|
|
expect(notifications).toEqual([
|
|
{ kind: 'success', message: 'Saved one item' },
|
|
{ kind: 'error', message: 'error-toast:1' },
|
|
]);
|
|
});
|
|
});
|