import { NoteListColumns } from '../plugins/api/noteListType';
import renderTemplate from './renderTemplate';
describe('renderTemplate', () => {
it('should render a template', () => {
const columns: NoteListColumns = [
{
name: 'note.is_todo',
width: 40,
},
{
name: 'note.user_updated_time',
width: 100,
},
{
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
name: 'note.titleHtml' as any, // Testing backward compatibility
width: 200,
},
{
name: 'note.title',
width: 0,
},
];
const template = // html
`
{{#cells}}
{{{contentHtml}}}
{{/cells}}
`;
const valueTemplates = {
'note.is_todo': // html
`
{{#note.is_todo}}
{{#note.todo_completed}}[x]{{/note.todo_completed}}{{^note.todo_completed}}[ ]{{/note.todo_completed}}
{{/note.is_todo}}
{{^note.is_todo}}
(-)
{{/note.is_todo}}
`,
};
const view = {
'note': {
'user_updated_time': '18/02/24 14:30',
'titleHtml': 'Hello',
'title': 'Hello2',
'is_todo': 0,
'todo_completed': 10000,
},
};
{
const actual = renderTemplate(columns, template, valueTemplates, view);
expect(actual).toContain('18/02/24 14:30');
expect(actual).toContain('Hello');
expect(actual).toContain('Hello2');
const widthInfo = actual.match(/(width: (\d+)px|flex: 1)/g);
expect(widthInfo).toEqual(['width: 40px', 'width: 100px', 'width: 200px', 'flex: 1']);
const dataNames = actual.match(/data-name="(.*?)"/g);
expect(dataNames).toEqual([
'data-name="note.is_todo"',
'data-name="note.user_updated_time"',
'data-name="note.titleHtml"',
'data-name="note.title"',
]);
expect(actual).toContain('(-)');
}
{
const actual = renderTemplate(columns, template, valueTemplates, { note: { ...view.note, is_todo: 1 } });
expect(actual).toContain('[x]');
}
{
const actual = renderTemplate(columns, template, valueTemplates, { note: { ...view.note, is_todo: 1, todo_completed: 0 } });
expect(actual).toContain('[ ]');
}
});
});