contractRecords.test.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import {
  2. formatSignTime,
  3. getFileType,
  4. normalizeContractRecords,
  5. getUserIdFromSessionStorage,
  6. resolveContractFileUrl,
  7. } from './contractRecords'
  8. describe('contractRecords', () => {
  9. test('normalizes contract API payload into file cards', () => {
  10. const records = normalizeContractRecords({
  11. signTime: '2026-06-04T17:09:37.000+08:00',
  12. signerName: '靳世辉',
  13. merchantId: 12,
  14. file: [
  15. {
  16. id: 1,
  17. contractName: '合同图片.png',
  18. fileUrl: '/profile/upload/contract.png',
  19. },
  20. {
  21. id: 5,
  22. contractName: '我的合同',
  23. fileUrl: 'https://example.com/contract.pdf',
  24. },
  25. ],
  26. })
  27. expect(records).toEqual([
  28. {
  29. id: 1,
  30. contractName: '合同图片.png',
  31. signTime: '2026.06.04 17:09:37',
  32. signerName: '靳世辉',
  33. merchantId: 12,
  34. fileUrl: '/profile/upload/contract.png',
  35. fileType: 'image',
  36. },
  37. {
  38. id: 5,
  39. contractName: '我的合同',
  40. signTime: '2026.06.04 17:09:37',
  41. signerName: '靳世辉',
  42. merchantId: 12,
  43. fileUrl: 'https://example.com/contract.pdf',
  44. fileType: 'pdf',
  45. },
  46. ])
  47. })
  48. test('returns an empty list for missing file arrays', () => {
  49. expect(normalizeContractRecords(null)).toEqual([])
  50. expect(normalizeContractRecords({ file: null })).toEqual([])
  51. })
  52. test('resolves relative upload urls against the API origin', () => {
  53. expect(
  54. resolveContractFileUrl('/profile/upload/a.png', 'https://city.baoxianzhanggui.com/nightFragrance')
  55. ).toBe('https://city.baoxianzhanggui.com/profile/upload/a.png')
  56. expect(resolveContractFileUrl('https://example.com/a.png', 'https://host/api')).toBe(
  57. 'https://example.com/a.png'
  58. )
  59. })
  60. test('formats date and detects supported file types', () => {
  61. expect(formatSignTime('2026-06-04T17:09:37.000+08:00')).toBe('2026.06.04 17:09:37')
  62. expect(formatSignTime('')).toBe('')
  63. expect(getFileType('a.jpeg')).toBe('image')
  64. expect(getFileType('a.PDF')).toBe('pdf')
  65. expect(getFileType('http://example.com/file')).toBe('unknown')
  66. })
  67. test('reads userId from session storage user information', () => {
  68. const storage = {
  69. getItem(key) {
  70. const values = {
  71. userInfo: JSON.stringify({ id: 12 }),
  72. }
  73. return values[key] || ''
  74. },
  75. }
  76. expect(getUserIdFromSessionStorage(storage)).toBe(12)
  77. })
  78. test('falls back to direct session storage userId', () => {
  79. const storage = {
  80. getItem(key) {
  81. return key === 'userId' ? '12' : ''
  82. },
  83. }
  84. expect(getUserIdFromSessionStorage(storage)).toBe('12')
  85. })
  86. test('scans unknown session storage keys for nested merchant ids', () => {
  87. const values = {
  88. currentUser: JSON.stringify({
  89. data: {
  90. merchant: {
  91. id: 12,
  92. },
  93. },
  94. }),
  95. }
  96. const storage = {
  97. length: 1,
  98. key(index) {
  99. return Object.keys(values)[index]
  100. },
  101. getItem(key) {
  102. return values[key] || ''
  103. },
  104. }
  105. expect(getUserIdFromSessionStorage(storage)).toBe(12)
  106. })
  107. })