Files
klz-cables.com/.pnpm-store/v10/files/e1/4d8bd77b807fab1f4519e7b715e0d7cd0be83f59e2da4a092094630a766279ae5f099885e828956ad1b505f1a100f3f5f3b45b79943c69b078972a4451410b
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

1 line
17 KiB
Plaintext

{"version":3,"sources":["../../src/utilities/validateTimezones.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { InvalidConfiguration } from '../errors/index.js'\nimport { validateTimezones } from './validateTimezones.js'\n\ndescribe('validateTimezones', () => {\n describe('valid timezones', () => {\n it('should accept UTC timezone', () => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: 'UTC', value: 'UTC' }],\n }),\n ).not.toThrow()\n })\n\n it.each([\n 'America/New_York',\n 'America/Los_Angeles',\n 'America/Chicago',\n 'Europe/London',\n 'Europe/Paris',\n 'Europe/Berlin',\n 'Asia/Tokyo',\n 'Asia/Shanghai',\n 'Asia/Singapore',\n 'Australia/Sydney',\n 'Pacific/Auckland',\n ])('should accept valid IANA timezone: %s', (timezone) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: timezone, value: timezone }],\n }),\n ).not.toThrow()\n })\n\n it('should accept multiple valid timezones', () => {\n expect(() =>\n validateTimezones({\n timezones: [\n { label: 'New York', value: 'America/New_York' },\n { label: 'London', value: 'Europe/London' },\n { label: 'Tokyo', value: 'Asia/Tokyo' },\n ],\n }),\n ).not.toThrow()\n })\n\n it('should accept empty array', () => {\n expect(() =>\n validateTimezones({\n timezones: [],\n }),\n ).not.toThrow()\n })\n\n it('should accept undefined timezones', () => {\n expect(() =>\n validateTimezones({\n timezones: undefined,\n }),\n ).not.toThrow()\n })\n })\n\n describe('invalid timezones', () => {\n it('should throw for completely invalid timezone', () => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: 'Invalid', value: 'Invalid/Timezone' }],\n }),\n ).toThrow(InvalidConfiguration)\n })\n\n it('should throw for made up timezone', () => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: 'Fake', value: 'Fake/Place' }],\n }),\n ).toThrow(InvalidConfiguration)\n })\n\n it('should throw for empty string timezone value', () => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: 'Empty', value: '' }],\n }),\n ).toThrow(InvalidConfiguration)\n })\n\n it('should throw for random string timezone', () => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: 'Random', value: 'not-a-timezone' }],\n }),\n ).toThrow(InvalidConfiguration)\n })\n })\n\n describe('misspelled timezones', () => {\n it.each([\n ['Asian/Tokyo', 'Asia/Tokyo'],\n ['Asian/Shanghai', 'Asia/Shanghai'],\n ['Asian/Singapore', 'Asia/Singapore'],\n ['Asian/Seoul', 'Asia/Seoul'],\n ['Asian/Bangkok', 'Asia/Bangkok'],\n ])('should throw for misspelled \"Asian/\" instead of \"Asia/\": %s', (misspelled) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: misspelled, value: misspelled }],\n }),\n ).toThrow(InvalidConfiguration)\n })\n\n it.each([\n ['Americas/New_York', 'America/New_York'],\n ['Americas/Los_Angeles', 'America/Los_Angeles'],\n ['Americas/Chicago', 'America/Chicago'],\n ])('should throw for misspelled \"Americas/\" instead of \"America/\": %s', (misspelled) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: misspelled, value: misspelled }],\n }),\n ).toThrow(InvalidConfiguration)\n })\n\n it.each([\n ['Europ/London', 'Europe/London'],\n ['Euorpe/Paris', 'Europe/Paris'],\n ['Europa/Berlin', 'Europe/Berlin'],\n ])('should throw for misspelled Europe region: %s', (misspelled) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: misspelled, value: misspelled }],\n }),\n ).toThrow(InvalidConfiguration)\n })\n\n it.each([\n ['Australa/Sydney', 'Australia/Sydney'],\n ['Austrlia/Melbourne', 'Australia/Melbourne'],\n ])('should throw for misspelled Australia region: %s', (misspelled) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: misspelled, value: misspelled }],\n }),\n ).toThrow(InvalidConfiguration)\n })\n\n it.each([\n ['Pacific/Aukland', 'Pacific/Auckland'],\n ['Pacfic/Auckland', 'Pacific/Auckland'],\n ])('should throw for misspelled Pacific region or city: %s', (misspelled) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: misspelled, value: misspelled }],\n }),\n ).toThrow(InvalidConfiguration)\n })\n\n it.each([\n 'America/NewYork', // missing underscore\n 'America/New-York', // hyphen instead of underscore\n 'America/newyork', // missing underscore and wrong case for city\n ])('should throw for incorrectly formatted city name: %s', (misspelled) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: misspelled, value: misspelled }],\n }),\n ).toThrow(InvalidConfiguration)\n })\n\n // Note: Intl API is case-insensitive, so lowercase versions like 'america/new_york' are valid\n it('should accept lowercase timezone (Intl API is case-insensitive)', () => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: 'lowercase', value: 'america/new_york' }],\n }),\n ).not.toThrow()\n })\n })\n\n describe('error messages', () => {\n it('should include timezone value in error message', () => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: 'Bad', value: 'Invalid/Zone' }],\n }),\n ).toThrow(/Invalid\\/Zone/)\n })\n\n it('should include source in error message when provided', () => {\n expect(() =>\n validateTimezones({\n source: 'admin.timezones.supportedTimezones',\n timezones: [{ label: 'Bad', value: 'Invalid/Zone' }],\n }),\n ).toThrow(/admin\\.timezones\\.supportedTimezones/)\n })\n\n it('should include field name in source for field-level errors', () => {\n expect(() =>\n validateTimezones({\n source: 'field \"publishedAt\" timezone.supportedTimezones',\n timezones: [{ label: 'Bad', value: 'Asian/Tokyo' }],\n }),\n ).toThrow(/field \"publishedAt\"/)\n })\n })\n\n describe('mixed valid and invalid timezones', () => {\n it('should throw when array contains at least one invalid timezone', () => {\n expect(() =>\n validateTimezones({\n timezones: [\n { label: 'New York', value: 'America/New_York' },\n { label: 'Invalid', value: 'Asian/Tokyo' }, // misspelled\n { label: 'London', value: 'Europe/London' },\n ],\n }),\n ).toThrow(InvalidConfiguration)\n })\n\n it('should throw on first invalid timezone encountered', () => {\n expect(() =>\n validateTimezones({\n timezones: [\n { label: 'First Invalid', value: 'Fake/First' },\n { label: 'Second Invalid', value: 'Fake/Second' },\n ],\n }),\n ).toThrow(/Fake\\/First/)\n })\n })\n\n describe('UTC offset timezones', () => {\n describe('valid UTC offsets', () => {\n it.each([\n '+00:00',\n '-00:00',\n '+05:30',\n '-08:00',\n '+12:00',\n '-12:00',\n '+14:00', // max positive offset (Line Islands)\n '+09:30', // half-hour offset\n '+05:45', // 45-minute offset (Nepal)\n ])('should accept valid HH:mm format offset: %s', (offset) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: `UTC${offset}`, value: offset }],\n }),\n ).not.toThrow()\n })\n\n it('should accept mixed IANA and offset timezones', () => {\n expect(() =>\n validateTimezones({\n timezones: [\n { label: 'New York', value: 'America/New_York' },\n { label: 'UTC+5:30', value: '+05:30' },\n { label: 'UTC', value: 'UTC' },\n { label: 'UTC-8', value: '-08:00' },\n ],\n }),\n ).not.toThrow()\n })\n })\n\n describe('invalid UTC offsets', () => {\n it.each(['+0530', '-0800', '+0000', '+1200', '+00', '-08', '+9', '-5'])(\n 'should throw for non-HH:mm format offset: %s',\n (offset) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: `Invalid ${offset}`, value: offset }],\n }),\n ).toThrow(InvalidConfiguration)\n },\n )\n\n it.each(['+15:00', '-13:00', '+25:00', '-20:00'])(\n 'should throw for out of range hour offset: %s',\n (offset) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: `Invalid ${offset}`, value: offset }],\n }),\n ).toThrow(InvalidConfiguration)\n },\n )\n\n it.each(['+05:60', '-08:99', '+12:75', '+00:61'])(\n 'should throw for invalid minutes in offset: %s',\n (offset) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: `Invalid ${offset}`, value: offset }],\n }),\n ).toThrow(InvalidConfiguration)\n },\n )\n\n it.each(['05:30', '0800', '12', '530'])(\n 'should throw for offset missing sign: %s',\n (offset) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: `Missing sign ${offset}`, value: offset }],\n }),\n ).toThrow(InvalidConfiguration)\n },\n )\n\n it.each(['++05:30', '--08:00', '+-05:30', '-+08:00'])(\n 'should throw for malformed sign in offset: %s',\n (offset) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: `Malformed ${offset}`, value: offset }],\n }),\n ).toThrow(InvalidConfiguration)\n },\n )\n\n it.each(['+ 05:30', '- 08:00', '+05 :30', '+05: 30'])(\n 'should throw for offset with spaces: %s',\n (offset) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: `Spaced ${offset}`, value: offset }],\n }),\n ).toThrow(InvalidConfiguration)\n },\n )\n\n it.each(['+5:', '+:30', ':', '+:', '-:'])(\n 'should throw for incomplete offset format: %s',\n (offset) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: `Incomplete ${offset}`, value: offset }],\n }),\n ).toThrow(InvalidConfiguration)\n },\n )\n\n it.each(['+05:30:00', '+05:30:30', '-08:00:00'])(\n 'should throw for offset with seconds: %s',\n (offset) => {\n expect(() =>\n validateTimezones({\n timezones: [{ label: `With seconds ${offset}`, value: offset }],\n }),\n ).toThrow(InvalidConfiguration)\n },\n )\n })\n })\n})\n"],"names":["describe","expect","it","InvalidConfiguration","validateTimezones","timezones","label","value","not","toThrow","each","timezone","undefined","misspelled","source","offset"],"mappings":"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"}