anonymize-query-params.spec.ts 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { describe, it, expect } from 'vitest';
  2. import { anonymizeQueryParams } from './anonymize-query-params';
  3. describe('anonymizeQueryParams', () => {
  4. /* eslint-disable max-len */
  5. it.each`
  6. description | target | paramNames | expected
  7. ${'no matching parameters'} | ${'/_api/v3/test?other=value&another=test'} | ${['nonexistent']} | ${'/_api/v3/test?other=value&another=test'}
  8. ${'single string parameter'} | ${'/_api/v3/search?q=sensitive-query'} | ${['q']} | ${'/_api/v3/search?q=%5BANONYMIZED%5D'}
  9. ${'array-style parameters'} | ${'/_api/v3/page/test?paths[]=/user/john&paths[]=/user/jane'} | ${['paths']} | ${'/_api/v3/page/test?paths%5B%5D=%5BANONYMIZED%5D'}
  10. ${'JSON array format'} | ${'/_api/v3/test?paths=["/user/john","/user/jane"]'} | ${['paths']} | ${'/_api/v3/test?paths=%5B%22%5BANONYMIZED%5D%22%5D'}
  11. ${'multiple parameters'} | ${'/_api/v3/test?q=secret&path=/user/john&other=keep'} | ${['q', 'path']} | ${'/_api/v3/test?q=%5BANONYMIZED%5D&path=%5BANONYMIZED%5D&other=keep'}
  12. ${'empty parameter value'} | ${'/_api/v3/test?q=&other=value'} | ${['q']} | ${'/_api/v3/test?q=&other=value'}
  13. ${'parameter without value'} | ${'/_api/v3/test?q&other=value'} | ${['q']} | ${'/_api/v3/test?q&other=value'}
  14. ${'mixed array and single'} | ${'/_api/v3/test?q=search&paths[]=/user/john&paths[]=/user/jane'} | ${['q', 'paths']} | ${'/_api/v3/test?q=%5BANONYMIZED%5D&paths%5B%5D=%5BANONYMIZED%5D'}
  15. ${'malformed JSON array'} | ${'/_api/v3/test?paths=["/user/john"'} | ${['paths']} | ${'/_api/v3/test?paths=%5BANONYMIZED%5D'}
  16. ${'empty JSON array'} | ${'/_api/v3/test?paths=[]'} | ${['paths']} | ${'/_api/v3/test?paths=%5BANONYMIZED%5D'}
  17. ${'single item JSON array'} | ${'/_api/v3/test?paths=["/user/john"]'} | ${['paths']} | ${'/_api/v3/test?paths=%5B%22%5BANONYMIZED%5D%22%5D'}
  18. ${'URL with no query params'} | ${'/_api/v3/test'} | ${['q']} | ${'/_api/v3/test'}
  19. ${'complex path with encoding'} | ${'/_api/v3/test?path=%2Fuser%2Fjohn%20doe'} | ${['path']} | ${'/_api/v3/test?path=%5BANONYMIZED%5D'}
  20. `('should handle $description', ({ target, paramNames, expected }) => {
  21. /* eslint-enable max-len */
  22. const result = anonymizeQueryParams(target, paramNames);
  23. expect(result).toBe(expected);
  24. });
  25. it.each`
  26. description | target | paramNames | expected
  27. ${'invalid URL format'} | ${'not-a-valid-url'} | ${['q']} | ${'not-a-valid-url'}
  28. ${'empty string target'} | ${''} | ${['q']} | ${''}
  29. ${'empty paramNames array'} | ${'/_api/v3/test?q=secret'} | ${[]} | ${'/_api/v3/test?q=secret'}
  30. `('should handle edge cases: $description', ({ target, paramNames, expected }) => {
  31. const result = anonymizeQueryParams(target, paramNames);
  32. expect(result).toBe(expected);
  33. });
  34. });