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); }); }); });