1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-23 00:22:19 +01:00

test: add anonymise unit tests (#3722)

Adds unit tests to `anonymise` functions. 

See:
https://github.com/Unleash/unleash/pull/3683#pullrequestreview-1418223563
This commit is contained in:
Nuno Góis 2023-05-09 14:20:39 +01:00 committed by GitHub
parent b4d91f793e
commit 72eba37cec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 133 additions and 1 deletions

View File

@ -0,0 +1,132 @@
import { anonymise, anonymiseKeys } from './anonymise';
const REGEX_MATCH = /^[a-f0-9]{9}@unleash\.run$/;
test('anonymise', () => {
expect(anonymise('test')).toMatch(REGEX_MATCH);
});
describe('anonymiseKeys', () => {
test.each([
null,
undefined,
true,
false,
'test',
123,
[1, 2, 3],
{ test: 'test' },
])(
'A parameter without keys (non-object, non-array) should return the same value',
(obj) => expect(anonymiseKeys(obj!, [])).toStrictEqual(obj),
);
test('An object should anonymise the specified keys', () => {
expect(
anonymiseKeys({ test: 'test', test2: 'test2' }, ['test']),
).toStrictEqual({
test: expect.stringMatching(REGEX_MATCH),
test2: 'test2',
});
});
test('An array of objects should anonymise the specified keys', () => {
expect(
anonymiseKeys(
[
{ test: 'test', test2: 'test2' },
{ test: 'test', test2: 'test2' },
],
['test'],
),
).toStrictEqual([
{ test: expect.stringMatching(REGEX_MATCH), test2: 'test2' },
{ test: expect.stringMatching(REGEX_MATCH), test2: 'test2' },
]);
});
test('A complex array/object should anonymise the specified keys, no matter the depth', () => {
expect(
anonymiseKeys(
[
{
test1: [],
anon: 'secret',
other: 'other',
test2: {
test3: 'test3',
test4: [
{
test5: {
anon2: 'secret2',
},
},
],
},
},
{
test6: [
{
test7: [
{
test8: {
anon: 'secret3',
other2: 'other2',
},
},
],
test9: {
other3: 'other3',
anon2: 'secret4',
test10: {
anon: 'secret5',
},
},
other4: 'other4',
},
],
},
],
['anon', 'anon2'],
),
).toStrictEqual([
{
test1: [],
anon: expect.stringMatching(REGEX_MATCH),
other: 'other',
test2: {
test3: 'test3',
test4: [
{
test5: {
anon2: expect.stringMatching(REGEX_MATCH),
},
},
],
},
},
{
test6: [
{
test7: [
{
test8: {
anon: expect.stringMatching(REGEX_MATCH),
other2: 'other2',
},
},
],
test9: {
other3: 'other3',
anon2: expect.stringMatching(REGEX_MATCH),
test10: {
anon: expect.stringMatching(REGEX_MATCH),
},
},
other4: 'other4',
},
],
},
]);
});
});

View File

@ -14,7 +14,7 @@ export function anonymiseKeys<T>(object: T, keys: string[]): T {
}
if (Array.isArray(object)) {
return object.map((item) => anonymiseKeys(item, keys)) as unknown as T;
return object.map((item) => anonymiseKeys(item, keys)) as T;
} else {
return Object.keys(object).reduce((result, key) => {
if (