import { describe, test, expect } from 'vitest'; import { clientLocale } from '../config/env.json'; import { convertToLocalizedString, generateSearchPlaceholder, roundDownToNearestHundred } from './generate-search-placeholder'; describe('Search bar placeholder tests:', () => { describe('Number rounding', () => { test('Numbers less than 100 return 0', () => { const testArr = [0, 1, 50, 99]; testArr.forEach(num => { expect(roundDownToNearestHundred(num)).toEqual(0); }); }); test('Numbers greater than 100 return a number rounded down to the nearest 100', () => { const testArr = [ { num: 100, expected: 100 }, { num: 101, expected: 100 }, { num: 199, expected: 100 }, { num: 999, expected: 900 }, { num: 1000, expected: 1000 }, { num: 1001, expected: 1000 }, { num: 1999, expected: 1900 }, { num: 10000, expected: 10000 }, { num: 10001, expected: 10000 }, { num: 19999, expected: 19900 } ]; testArr.forEach(obj => { expect(roundDownToNearestHundred(obj.num)).toEqual(obj.expected); }); }); }); describe('Number formatting', () => { test('Numbers are converted to the correct decimal or comma format for each locale', () => { const testArr = [ { num: 100, locale: 'en', expected: '100' }, { num: 100, locale: 'zh', expected: '100' }, { num: 100, locale: 'de', expected: '100' }, { num: 1000, locale: 'en', expected: '1,000' }, { num: 1000, locale: 'zh', expected: '1,000' }, { num: 1000, locale: 'de', expected: '1.000' }, { num: 10000, locale: 'en', expected: '10,000' }, { num: 10000, locale: 'zh', expected: '10,000' }, { num: 10000, locale: 'de', expected: '10.000' }, { num: 100000, locale: 'en', expected: '100,000' }, { num: 100000, locale: 'zh', expected: '100,000' }, { num: 100000, locale: 'de', expected: '100.000' } ]; testArr.forEach(obj => { const { num, locale, expected } = obj; expect(convertToLocalizedString(num, locale)).toEqual(expected); }); }); }); // Note: Only test the English locale to prevent duplicate tests, // and just to ensure the logic is working as expected. if (clientLocale === 'english') { describe('Placeholder strings', () => { test('When the total number of hits is less than 100 the expected placeholder is generated', async () => { const expected = 'Search our books and courses'; const placeholderText = await generateSearchPlaceholder({ mockRecordsNum: 99, locale: 'english' }); expect(placeholderText).toEqual(expected); }); test('When the total number of hits is equal to 100 the expected placeholder is generated', async () => { const placeholderText = await generateSearchPlaceholder({ mockRecordsNum: 100, locale: 'english' }); const expected = 'Search 100+ of our books and courses'; expect(placeholderText).toEqual(expected); }); test('When the total number of hits is greater than 100 the expected placeholder is generated', async () => { const placeholderText = await generateSearchPlaceholder({ mockRecordsNum: 11000, locale: 'english' }); const expected = 'Search 11,000+ of our books and courses'; expect(placeholderText).toEqual(expected); }); }); } });