import { decodeHtml, resourceNames } from '@shell/utils/string';
describe('fx: decodeHtml', () => {
it('should decode HTML values from escaped string into valid markup', () => {
const text = '<i>whatever</i>';
const expectation = `whatever`;
const result = decodeHtml(text);
expect(result).toStrictEqual(expectation);
});
});
describe('fx: resourceNames', () => {
// default plusMore function
const t = (key: string, options: { count: number }) => {
switch (key) {
case 'generic.and':
return ' and ';
case 'generic.comma':
return ', ';
case 'promptRemove.andOthers': {
if (options.count === 0) {
return '.';
}
if (options.count === 1) {
return 'and one other.';
}
return `and ${ options.count } others.`;
}
}
};
describe.each([
['no options',
[
[[], '', {}],
[['item1'], 'item1.', {}],
[['item1', 'item2'], 'item1 and item2.', {}],
[['item1', 'item2', 'item3'], 'item1, item2 and item3.', {}],
[['item1', 'item2', 'item3', 'item4', 'item5'], 'item1, item2, item3, item4 and item5.', {}],
[['item1', 'item2', 'item3', 'item4', 'item5', 'item6'], 'item1, item2, item3, item4, item5and one other.', {}],
[['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7'], 'item1, item2, item3, item4, item5and 2 others.', {}],
]
],
['plusMore option',
[
[[], '', { plusMore: 'foo' }],
[['item1'], 'item1.', { plusMore: 'foo' }],
[['item1', 'item2'], 'item1 and item2.', { plusMore: 'foo' }],
[['item1', 'item2', 'item3'], 'item1, item2 and item3.', { plusMore: 'foo' }],
[['item1', 'item2', 'item3', 'item4', 'item5'], 'item1, item2, item3, item4 and item5.', { plusMore: 'foo' }],
[['item1', 'item2', 'item3', 'item4', 'item5', 'item6'], 'item1, item2, item3, item4, item5foo', { plusMore: 'foo' }],
[['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7'], 'item1, item2, item3, item4, item5foo', { plusMore: 'foo' }],
]
],
['endString option',
[
[[], '', { endString: false }],
[['item1'], 'item1 ', { endString: false }],
[['item1', 'item2'], 'item1 and item2 ', { endString: false }],
[['item1', 'item2'], 'item1 and item2.', { endString: '' }],
[['item1', 'item2'], 'item1 and item2foo', { endString: 'foo' }],
]
],
[
'plusMore & endString options', [
[[], '', { plusMore: '', endString: false }],
[[], '', { plusMore: 'foo', endString: 'foo' }],
[['item1'], 'item1foo', { plusMore: 'foo', endString: 'foo' }],
[['item1', 'item2'], 'item1 and item2foo', { plusMore: 'foo', endString: 'foo' }],
[['item1', 'item2'], 'item1 and item2 ', { plusMore: 'foo', endString: false }],
[['item1', 'item2', 'item3', 'item4', 'item5', 'item6'], 'item1, item2, item3, item4, item5foo', { plusMore: 'foo', endString: 'foo' }],
[['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7'], 'item1, item2, item3, item4, item5foo', { plusMore: 'foo', endString: 'foo' }],
[['item1', 'item2', 'item3', 'item4', 'item5', 'item6'], 'item1, item2, item3, item4, item5foo', { plusMore: 'foo', endString: false }],
[['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7'], 'item1, item2, item3, item4, item5foo', { plusMore: 'foo', endString: false }],
]
]
])('should build a single message from a list of names, with: %p', (_, args) => {
it.each(args)(`having: %p`, (
names,
expectation,
options,
) => {
const result = resourceNames(names, t, options);
expect(result).toStrictEqual(expectation);
});
});
});