RequestHelper.test.mjs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { assert } from 'vitest'
  2. import RequestHelper from '../../../../app/src/Features/Analytics/RequestHelper.mjs'
  3. describe('RequestHelper', function () {
  4. describe('parseUtm', function () {
  5. it('returns null when query has no UTM keys', function () {
  6. assert.isNull(RequestHelper.parseUtm({ foo: 'bar' }))
  7. })
  8. it('returns null for empty query', function () {
  9. assert.isNull(RequestHelper.parseUtm({}))
  10. })
  11. it('extracts a single UTM key', function () {
  12. assert.deepEqual(
  13. RequestHelper.parseUtm({ utm_source: 'google', other: 'ignored' }),
  14. { utm_source: 'google' }
  15. )
  16. })
  17. it('extracts all UTM keys', function () {
  18. const query = {
  19. utm_campaign: 'camp',
  20. utm_source: 'src',
  21. utm_term: 'term',
  22. utm_content: 'cont',
  23. utm_medium: 'med',
  24. utm_count: '1',
  25. utm_id: 'id1',
  26. }
  27. assert.deepEqual(RequestHelper.parseUtm(query), query)
  28. })
  29. it('ignores falsy UTM values', function () {
  30. assert.isNull(RequestHelper.parseUtm({ utm_source: '' }))
  31. })
  32. })
  33. describe('parseReferrer', function () {
  34. const pageUrl = 'https://www.overleaf.com/project'
  35. describe('with no referrer', function () {
  36. it('returns direct medium', function () {
  37. assert.deepEqual(RequestHelper.parseReferrer(null, pageUrl), {
  38. medium: 'direct',
  39. })
  40. })
  41. it('returns direct medium for undefined', function () {
  42. assert.deepEqual(RequestHelper.parseReferrer(undefined, pageUrl), {
  43. medium: 'direct',
  44. })
  45. })
  46. })
  47. describe('with a search engine referrer', function () {
  48. it('returns search medium and source', function () {
  49. const result = RequestHelper.parseReferrer(
  50. 'https://www.google.com/search?q=overleaf',
  51. pageUrl
  52. )
  53. assert.equal(result.medium, 'search')
  54. assert.equal(result.source, 'Google')
  55. })
  56. })
  57. describe('with an internal referrer (same site)', function () {
  58. it('returns internal medium', function () {
  59. const result = RequestHelper.parseReferrer(
  60. 'https://www.overleaf.com/login',
  61. pageUrl
  62. )
  63. assert.equal(result.medium, 'internal')
  64. })
  65. })
  66. describe('with an unknown external referrer', function () {
  67. it('returns link medium with hostname as source', function () {
  68. const result = RequestHelper.parseReferrer(
  69. 'https://some.example.com/article',
  70. pageUrl
  71. )
  72. assert.equal(result.medium, 'link')
  73. assert.equal(result.source, 'some.example.com')
  74. })
  75. })
  76. })
  77. })