polen
Version:
A framework for delightful GraphQL developer portals
75 lines • 2.45 kB
JavaScript
import { Ts } from '@wollybeard/kit';
import { objFilter, ObjOmit, ObjPick, objPolicyFilter } from './kit-temp.js';
// Test 1: objPolicyFilter with allow mode
{
const result = objPolicyFilter(`allow`, testObj, [`a`, `c`]);
Ts.assertEqual()(result);
}
// Test 2: objPolicyFilter with deny mode
{
const result = objPolicyFilter(`deny`, testObj, [`a`, `c`]);
Ts.assertEqual()(result);
}
// Test 3: objFilter returns Partial<T>
{
const result = objFilter(testObj, (key, value) => value !== `hello`);
Ts.assertEqual()(result);
// All properties are optional
Ts.assertSub()(undefined);
Ts.assertSub()(undefined);
Ts.assertSub()(undefined);
Ts.assertSub()(undefined);
}
// Test 4: ObjPick type inference
{
const result = ObjPick(testObj, [`a`, `c`]);
Ts.assertEqual()(result);
}
// Test 5: ObjOmit type inference
{
const result = ObjOmit(testObj, [`a`, `c`]);
Ts.assertEqual()(result);
}
// Test 6: ObjPolicyFilter type-level function
{
}
// Test 7: Edge cases
{
// Empty object
const empty = {};
const allowEmpty = objPolicyFilter(`allow`, empty, []);
const denyEmpty = objPolicyFilter(`deny`, empty, []);
const filterEmpty = objFilter(empty, () => true);
Ts.assertEqual()(allowEmpty);
Ts.assertEqual()(denyEmpty);
Ts.assertEqual()(filterEmpty);
// Single property object
const single = { a: 1 };
const allowSingle = objPolicyFilter(`allow`, single, [`a`]);
const denySingle = objPolicyFilter(`deny`, single, [`a`]);
const filterSingle = objFilter(single, () => true);
Ts.assertEqual()(allowSingle);
Ts.assertEqual()(denySingle);
Ts.assertEqual()(filterSingle);
}
// Test 8: Complex nested object
{
const complexObj = {};
const picked = objPolicyFilter(`allow`, complexObj, [`nested`, `optional`]);
Ts.assertEqual()(picked);
const omitted = objPolicyFilter(`deny`, complexObj, [`nested`, `optional`]);
Ts.assertEqual()(omitted);
const filtered = objFilter(complexObj, (key) => key !== `array`);
Ts.assertEqual()(filtered);
}
// Test 9: Keys parameter type inference
{
// With const assertion
const keys1 = [`a`, `c`];
const result1 = objPolicyFilter(`allow`, testObj, keys1);
Ts.assertEqual()(result1);
// Without const assertion (wider type)
const keys2 = [`a`, `c`];
const result2 = objPolicyFilter(`allow`, testObj, keys2);
}
//# sourceMappingURL=kit-temp.test-d.js.map