@shopify/polaris
Version:
Shopify’s admin product component library
76 lines (65 loc) • 1.8 kB
text/typescript
import {pick} from '../pick';
describe('pick', () => {
it('returns an empty object when null is provided', () => {
expect(pick(null, 'a')).toStrictEqual({});
});
it('returns an empty object when an empty keypath is provided', () => {
expect(pick({propA: 1}, '')).toStrictEqual({});
});
it('does not mutate the original object', () => {
const obj = {propA: 1};
expect(pick(obj, 'propA')).not.toBe(obj);
});
it('returns a object with values picked from the provided argument', () => {
expect(
pick({propA: 1, propB: 2, propC: 3}, 'propA', 'propC'),
).toStrictEqual({
propA: 1,
propC: 3,
});
});
it('flattens paths', () => {
expect(
pick({propA: 1, propB: 2, propC: 3}, ['propA', 'propB'], 'propC'),
).toStrictEqual({
propA: 1,
propB: 2,
propC: 3,
});
});
it('picks a key over a path', () => {
expect(
pick({propA: {propB: 3}, 'propA.propB': 5}, 'propA.propB'),
).toStrictEqual({
'propA.propB': 5,
});
});
it('picks keys with undefined values', () => {
expect(Object.entries(pick({propA: undefined}, 'propA'))).toStrictEqual([
['propA', undefined],
]);
});
it('filters out unmatched keypaths', () => {
expect(Object.entries(pick({propA: 1, propB: 2}, 'propG'))).toStrictEqual(
[],
);
});
describe('nested paths', () => {
it('picks array paths', () => {
expect(
pick({propA: {propB: 3}, 'propA.propB': 5}, ['propA', 'propB']),
).toStrictEqual({
propA: {
propB: 3,
},
});
});
it('picks combined keypaths', () => {
expect(pick({propA: {propB: 3}}, 'propA.propB')).toStrictEqual({
propA: {
propB: 3,
},
});
});
});
});