constants.test.ts 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. import { describe, it, expect } from 'vitest'
  2. import {
  3. FALLBACK_VERSIONS,
  4. ERROR_MESSAGES,
  5. STATUS_MESSAGES,
  6. NPM_REGISTRY,
  7. GIT_MIRRORS,
  8. NODEJS_MIRRORS,
  9. VSCODE_API,
  10. MIN_SUPPORTED_NODE_VERSION,
  11. MAX_MAJOR_VERSIONS,
  12. REQUEST_TIMEOUT,
  13. MAX_RETRIES,
  14. RETRY_DELAY,
  15. VERSION_CACHE_TTL,
  16. SOURCE_UPDATE_CACHE_TTL,
  17. BREW_PACKAGES,
  18. APP_NAME
  19. } from '../electron/modules/constants'
  20. describe('constants', () => {
  21. describe('FALLBACK_VERSIONS', () => {
  22. it('should have valid Node.js version format', () => {
  23. expect(FALLBACK_VERSIONS.nodejs).toMatch(/^\d+\.\d+\.\d+$/)
  24. })
  25. it('should have valid VS Code version format', () => {
  26. expect(FALLBACK_VERSIONS.vscode).toMatch(/^\d+\.\d+\.\d+$/)
  27. })
  28. it('should have valid Git version format', () => {
  29. expect(FALLBACK_VERSIONS.git).toMatch(/^\d+\.\d+\.\d+$/)
  30. })
  31. })
  32. describe('ERROR_MESSAGES', () => {
  33. it('should have all required error messages', () => {
  34. expect(ERROR_MESSAGES.NETWORK_ERROR).toBeDefined()
  35. expect(ERROR_MESSAGES.TIMEOUT_ERROR).toBeDefined()
  36. expect(ERROR_MESSAGES.VERSION_FETCH_ERROR).toBeDefined()
  37. expect(ERROR_MESSAGES.INSTALL_ERROR).toBeDefined()
  38. expect(ERROR_MESSAGES.PERMISSION_ERROR).toBeDefined()
  39. expect(ERROR_MESSAGES.UNSUPPORTED_PLATFORM).toBeDefined()
  40. expect(ERROR_MESSAGES.UNKNOWN_SOFTWARE).toBeDefined()
  41. expect(ERROR_MESSAGES.INSTALL_CANCELLED).toBeDefined()
  42. })
  43. })
  44. describe('STATUS_MESSAGES', () => {
  45. it('should have all required status messages', () => {
  46. expect(STATUS_MESSAGES.PREPARING).toBeDefined()
  47. expect(STATUS_MESSAGES.INSTALLING).toBeDefined()
  48. expect(STATUS_MESSAGES.CONFIGURING).toBeDefined()
  49. expect(STATUS_MESSAGES.COMPLETE).toBeDefined()
  50. expect(STATUS_MESSAGES.READY).toBeDefined()
  51. })
  52. })
  53. describe('NPM_REGISTRY', () => {
  54. it('should be a valid URL', () => {
  55. expect(NPM_REGISTRY).toMatch(/^https?:\/\//)
  56. })
  57. })
  58. describe('GIT_MIRRORS', () => {
  59. it('should have huaweicloud mirror', () => {
  60. expect(GIT_MIRRORS.huaweicloud).toBeDefined()
  61. expect(GIT_MIRRORS.huaweicloud.name).toBeDefined()
  62. expect(GIT_MIRRORS.huaweicloud.getDownloadUrl).toBeTypeOf('function')
  63. expect(GIT_MIRRORS.huaweicloud.versionsUrl).toBeDefined()
  64. })
  65. it('should have github mirror', () => {
  66. expect(GIT_MIRRORS.github).toBeDefined()
  67. expect(GIT_MIRRORS.github.name).toBeDefined()
  68. expect(GIT_MIRRORS.github.getDownloadUrl).toBeTypeOf('function')
  69. expect(GIT_MIRRORS.github.versionsUrl).toBeDefined()
  70. })
  71. it('should generate valid download URLs', () => {
  72. const huaweiUrl = GIT_MIRRORS.huaweicloud.getDownloadUrl('2.47.1', '64')
  73. expect(huaweiUrl).toContain('2.47.1')
  74. expect(huaweiUrl).toContain('64')
  75. const githubUrl = GIT_MIRRORS.github.getDownloadUrl('2.47.1', '64')
  76. expect(githubUrl).toContain('2.47.1')
  77. expect(githubUrl).toContain('64')
  78. })
  79. })
  80. describe('NODEJS_MIRRORS', () => {
  81. it('should have official mirror', () => {
  82. expect(NODEJS_MIRRORS.official).toBeDefined()
  83. expect(NODEJS_MIRRORS.official.name).toBeDefined()
  84. expect(NODEJS_MIRRORS.official.getDownloadUrl).toBeTypeOf('function')
  85. expect(NODEJS_MIRRORS.official.versionsUrl).toBeDefined()
  86. })
  87. it('should have npmmirror mirror', () => {
  88. expect(NODEJS_MIRRORS.npmmirror).toBeDefined()
  89. expect(NODEJS_MIRRORS.npmmirror.name).toBeDefined()
  90. expect(NODEJS_MIRRORS.npmmirror.getDownloadUrl).toBeTypeOf('function')
  91. expect(NODEJS_MIRRORS.npmmirror.versionsUrl).toBeDefined()
  92. })
  93. it('should generate valid download URLs', () => {
  94. const officialUrl = NODEJS_MIRRORS.official.getDownloadUrl('22.12.0', 'x64')
  95. expect(officialUrl).toContain('22.12.0')
  96. expect(officialUrl).toContain('x64')
  97. const npmmirrorUrl = NODEJS_MIRRORS.npmmirror.getDownloadUrl('22.12.0', 'x64')
  98. expect(npmmirrorUrl).toContain('22.12.0')
  99. expect(npmmirrorUrl).toContain('x64')
  100. })
  101. })
  102. describe('VSCODE_API', () => {
  103. it('should have versionsUrl', () => {
  104. expect(VSCODE_API.versionsUrl).toBeDefined()
  105. expect(VSCODE_API.versionsUrl).toMatch(/^https?:\/\//)
  106. })
  107. it('should generate valid download URLs', () => {
  108. const url = VSCODE_API.getDownloadUrl('1.96.0', 'x64', 'user')
  109. expect(url).toContain('1.96.0')
  110. expect(url).toContain('x64')
  111. expect(url).toContain('user')
  112. })
  113. })
  114. describe('Configuration values', () => {
  115. it('should have valid MIN_SUPPORTED_NODE_VERSION', () => {
  116. expect(MIN_SUPPORTED_NODE_VERSION).toBeGreaterThanOrEqual(16)
  117. })
  118. it('should have valid MAX_MAJOR_VERSIONS', () => {
  119. expect(MAX_MAJOR_VERSIONS).toBeGreaterThan(0)
  120. })
  121. it('should have valid REQUEST_TIMEOUT', () => {
  122. expect(REQUEST_TIMEOUT).toBeGreaterThan(0)
  123. })
  124. it('should have valid MAX_RETRIES', () => {
  125. expect(MAX_RETRIES).toBeGreaterThan(0)
  126. })
  127. it('should have valid RETRY_DELAY', () => {
  128. expect(RETRY_DELAY).toBeGreaterThan(0)
  129. })
  130. it('should have valid VERSION_CACHE_TTL', () => {
  131. expect(VERSION_CACHE_TTL).toBeGreaterThan(0)
  132. })
  133. it('should have valid SOURCE_UPDATE_CACHE_TTL', () => {
  134. expect(SOURCE_UPDATE_CACHE_TTL).toBeGreaterThan(0)
  135. })
  136. })
  137. describe('BREW_PACKAGES', () => {
  138. it('should have nodejs packages', () => {
  139. expect(BREW_PACKAGES.nodejs).toBeDefined()
  140. expect(BREW_PACKAGES.nodejs.default).toBeDefined()
  141. })
  142. it('should have vscode packages', () => {
  143. expect(BREW_PACKAGES.vscode).toBeDefined()
  144. expect(BREW_PACKAGES.vscode.stable).toBeDefined()
  145. expect(BREW_PACKAGES.vscode.insiders).toBeDefined()
  146. })
  147. it('should have git packages', () => {
  148. expect(BREW_PACKAGES.git).toBeDefined()
  149. expect(BREW_PACKAGES.git.stable).toBeDefined()
  150. })
  151. })
  152. describe('APP_NAME', () => {
  153. it('should be defined', () => {
  154. expect(APP_NAME).toBeDefined()
  155. expect(APP_NAME).toBeTypeOf('string')
  156. })
  157. })
  158. })