Files
klz-cables.com/.pnpm-store/v10/files/4b/c363b44cc84d1ff55b53dfe4c602774ec9de5e0450537f4b5c9085e890197e480881e7840c74255f2743697455635e00a2677ee8ff3b1eafbc058233887d6e
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

319 lines
9.5 KiB
Plaintext

import { describe, expect, it } from 'vitest';
import { optionsAreEqual } from './optionsAreEqual.js';
describe('optionsAreEqual', ()=>{
describe('with string options', ()=>{
it('should return true for identical string arrays', ()=>{
expect(optionsAreEqual([
'a',
'b',
'c'
], [
'a',
'b',
'c'
])).toBe(true);
});
it('should return true for same values in different order', ()=>{
expect(optionsAreEqual([
'a',
'b',
'c'
], [
'c',
'a',
'b'
])).toBe(true);
});
it('should return false for different values', ()=>{
expect(optionsAreEqual([
'a',
'b'
], [
'a',
'c'
])).toBe(false);
});
it('should return false for different lengths', ()=>{
expect(optionsAreEqual([
'a',
'b'
], [
'a',
'b',
'c'
])).toBe(false);
});
});
describe('with object options', ()=>{
it('should return true for identical object arrays', ()=>{
const options1 = [
{
label: 'Option A',
value: 'a'
},
{
label: 'Option B',
value: 'b'
}
];
const options2 = [
{
label: 'Option A',
value: 'a'
},
{
label: 'Option B',
value: 'b'
}
];
expect(optionsAreEqual(options1, options2)).toBe(true);
});
it('should return true for same values with different labels', ()=>{
const options1 = [
{
label: 'First Label',
value: 'a'
},
{
label: 'Second Label',
value: 'b'
}
];
const options2 = [
{
label: 'Different Label A',
value: 'a'
},
{
label: 'Different Label B',
value: 'b'
}
];
expect(optionsAreEqual(options1, options2)).toBe(true);
});
it('should return true for same values in different order', ()=>{
const options1 = [
{
label: 'A',
value: 'a'
},
{
label: 'B',
value: 'b'
}
];
const options2 = [
{
label: 'B',
value: 'b'
},
{
label: 'A',
value: 'a'
}
];
expect(optionsAreEqual(options1, options2)).toBe(true);
});
it('should return false for different values', ()=>{
const options1 = [
{
label: 'A',
value: 'a'
},
{
label: 'B',
value: 'b'
}
];
const options2 = [
{
label: 'A',
value: 'a'
},
{
label: 'C',
value: 'c'
}
];
expect(optionsAreEqual(options1, options2)).toBe(false);
});
});
describe('with mixed string and object options', ()=>{
it('should return true when string and object have same value', ()=>{
const options1 = [
'a',
'b'
];
const options2 = [
{
label: 'A',
value: 'a'
},
{
label: 'B',
value: 'b'
}
];
expect(optionsAreEqual(options1, options2)).toBe(true);
});
it('should return false when values differ', ()=>{
const options1 = [
'a',
'b'
];
const options2 = [
{
label: 'A',
value: 'a'
},
{
label: 'C',
value: 'c'
}
];
expect(optionsAreEqual(options1, options2)).toBe(false);
});
});
describe('with timezone-like options', ()=>{
it('should return true for identical timezone options', ()=>{
const globalTimezones = [
{
label: 'New York',
value: 'America/New_York'
},
{
label: 'Los Angeles',
value: 'America/Los_Angeles'
},
{
label: 'London',
value: 'Europe/London'
}
];
const fieldTimezones = [
{
label: 'New York',
value: 'America/New_York'
},
{
label: 'Los Angeles',
value: 'America/Los_Angeles'
},
{
label: 'London',
value: 'Europe/London'
}
];
expect(optionsAreEqual(globalTimezones, fieldTimezones)).toBe(true);
});
it('should return false for custom offset timezones vs IANA timezones', ()=>{
const globalTimezones = [
{
label: 'New York',
value: 'America/New_York'
},
{
label: 'Los Angeles',
value: 'America/Los_Angeles'
}
];
const fieldTimezones = [
{
label: 'UTC+5:30',
value: '+05:30'
},
{
label: 'UTC-8',
value: '-08:00'
}
];
expect(optionsAreEqual(globalTimezones, fieldTimezones)).toBe(false);
});
it('should return false for mixed IANA and offset vs pure IANA', ()=>{
const globalTimezones = [
{
label: 'New York',
value: 'America/New_York'
},
{
label: 'London',
value: 'Europe/London'
}
];
const fieldTimezones = [
{
label: 'New York',
value: 'America/New_York'
},
{
label: 'UTC+5:30',
value: '+05:30'
}
];
expect(optionsAreEqual(globalTimezones, fieldTimezones)).toBe(false);
});
it('should return false for subset of global timezones', ()=>{
const globalTimezones = [
{
label: 'New York',
value: 'America/New_York'
},
{
label: 'Los Angeles',
value: 'America/Los_Angeles'
},
{
label: 'London',
value: 'Europe/London'
}
];
const fieldTimezones = [
{
label: 'New York',
value: 'America/New_York'
}
];
expect(optionsAreEqual(globalTimezones, fieldTimezones)).toBe(false);
});
});
describe('edge cases', ()=>{
it('should return true for both undefined', ()=>{
expect(optionsAreEqual(undefined, undefined)).toBe(true);
});
it('should return false for one undefined', ()=>{
expect(optionsAreEqual([
'a'
], undefined)).toBe(false);
expect(optionsAreEqual(undefined, [
'a'
])).toBe(false);
});
it('should return true for both empty arrays', ()=>{
expect(optionsAreEqual([], [])).toBe(true);
});
it('should return false for empty vs non-empty', ()=>{
expect(optionsAreEqual([], [
'a'
])).toBe(false);
expect(optionsAreEqual([
'a'
], [])).toBe(false);
});
it('should handle duplicate values in source (uses Set)', ()=>{
// If there are duplicates, the Set will dedupe them
// So ['a', 'a', 'b'] becomes Set{'a', 'b'} with size 2
// and ['a', 'b'] becomes Set{'a', 'b'} with size 2
// But the arrays have different lengths, so they're not equal
expect(optionsAreEqual([
'a',
'a',
'b'
], [
'a',
'b'
])).toBe(false);
});
});
});
//# sourceMappingURL=optionsAreEqual.spec.js.map