anonymize-query-params.spec.ts 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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=%5BANONYMIZED%5D&other=value'}
  13. ${'parameter without value'} | ${'/_api/v3/test?q&other=value'} | ${['q']} | ${'/_api/v3/test?q=%5BANONYMIZED%5D&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. ${'with section'} | ${'/_api/v3/test?q=search#section'} | ${['q']} | ${'/_api/v3/test?q=%5BANONYMIZED%5D#section'}
  16. ${'malformed JSON array'} | ${'/_api/v3/test?paths=["/user/john"'} | ${['paths']} | ${'/_api/v3/test?paths=%5BANONYMIZED%5D'}
  17. ${'empty JSON array'} | ${'/_api/v3/test?paths=[]'} | ${['paths']} | ${'/_api/v3/test?paths=%5BANONYMIZED%5D'}
  18. ${'single item JSON array'} | ${'/_api/v3/test?paths=["/user/john"]'} | ${['paths']} | ${'/_api/v3/test?paths=%5B%22%5BANONYMIZED%5D%22%5D'}
  19. ${'URL with no query params'} | ${'/_api/v3/test'} | ${['q']} | ${'/_api/v3/test'}
  20. ${'complex path with encoding'} | ${'/_api/v3/test?path=%2Fuser%2Fjohn%20doe'} | ${['path']} | ${'/_api/v3/test?path=%5BANONYMIZED%5D'}
  21. `('should handle $description', ({ target, paramNames, expected }) => {
  22. /* eslint-enable max-len */
  23. const result = anonymizeQueryParams(target, paramNames);
  24. expect(result).toBe(expected);
  25. });
  26. it.each`
  27. description | target | paramNames | expected
  28. ${'invalid URL format'} | ${'not-a-valid-url'} | ${['q']} | ${'not-a-valid-url'}
  29. ${'empty string target'} | ${''} | ${['q']} | ${''}
  30. ${'empty paramNames array'} | ${'/_api/v3/test?q=secret'} | ${[]} | ${'/_api/v3/test?q=secret'}
  31. `('should handle edge cases: $description', ({ target, paramNames, expected }) => {
  32. const result = anonymizeQueryParams(target, paramNames);
  33. expect(result).toBe(expected);
  34. });
  35. });