desktop-auto-update-environment.spec.ts 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { describe, expect, it } from 'vitest'
  2. import {
  3. desktopBuildRecordFilename,
  4. desktopUpdateMetadataFilename,
  5. resolveDesktopAutoUpdateConfig,
  6. resolveDesktopAutoUpdateEnvironment,
  7. resolveDesktopAutoUpdateTarget,
  8. resolveDesktopUploadConfig,
  9. } from '../scripts/desktop-auto-update-environment.mjs'
  10. describe('desktop auto-update environment', () => {
  11. it('defaults packages and uploads to the test deployment', () => {
  12. expect(resolveDesktopAutoUpdateEnvironment({})).toBe('test')
  13. expect(resolveDesktopAutoUpdateConfig({
  14. DOWNLOAD_TEST_ORIGIN: 'https://desktop-updates.example.com/',
  15. }, 'darwin', 'arm64')).toEqual({
  16. environment: 'test',
  17. target: 'mac-arm64',
  18. origin: 'https://desktop-updates.example.com',
  19. publicUrl: 'https://desktop-updates.example.com/dsh-desk/feeds/mac-arm64/',
  20. keyPrefix: 'dsh-desk/feeds/mac-arm64',
  21. })
  22. expect(resolveDesktopUploadConfig({
  23. DOWNLOAD_TEST_ORIGIN: 'https://desktop-updates.example.com/',
  24. DOWNLOAD_TEST_COS_BUCKET: 'test-download-bucket',
  25. }, 'darwin', 'arm64')).toMatchObject({
  26. bucket: 'test-download-bucket',
  27. secretIdEnvName: 'DOWNLOAD_TEST_COS_SECRET_ID',
  28. secretKeyEnvName: 'DOWNLOAD_TEST_COS_SECRET_KEY',
  29. })
  30. })
  31. it('selects the production URL for packages and bucket for uploads', () => {
  32. expect(resolveDesktopAutoUpdateConfig({
  33. DSH_DESKTOP_AUTO_UPDATE_ENV: 'production',
  34. }, 'win32', 'x64')).toMatchObject({
  35. environment: 'production',
  36. target: 'win-x64',
  37. publicUrl: 'https://download.deepseek.com/dsh-desk/feeds/win-x64/',
  38. })
  39. expect(resolveDesktopUploadConfig({
  40. DSH_DESKTOP_AUTO_UPDATE_ENV: 'production',
  41. DOWNLOAD_PROD_COS_BUCKET: 'production-download-bucket',
  42. }, 'win32', 'x64')).toMatchObject({
  43. bucket: 'production-download-bucket',
  44. secretIdEnvName: 'DOWNLOAD_PROD_COS_SECRET_ID',
  45. secretKeyEnvName: 'DOWNLOAD_PROD_COS_SECRET_KEY',
  46. })
  47. })
  48. it('requires the selected deployment origin for packages and bucket only for uploads', () => {
  49. expect(() => resolveDesktopAutoUpdateConfig({}, 'darwin', 'arm64'))
  50. .toThrow(/DOWNLOAD_TEST_ORIGIN/u)
  51. expect(resolveDesktopAutoUpdateConfig({
  52. DOWNLOAD_TEST_ORIGIN: 'https://desktop-updates.example.com',
  53. }, 'darwin', 'arm64').publicUrl).toContain('/mac-arm64/')
  54. expect(() => resolveDesktopUploadConfig({
  55. DOWNLOAD_TEST_ORIGIN: 'https://desktop-updates.example.com',
  56. }, 'darwin', 'arm64')).toThrow(/DOWNLOAD_TEST_COS_BUCKET/u)
  57. expect(() => resolveDesktopUploadConfig({
  58. DSH_DESKTOP_AUTO_UPDATE_ENV: 'production',
  59. }, 'win32', 'x64')).toThrow(/DOWNLOAD_PROD_COS_BUCKET/u)
  60. })
  61. it('rejects a test download URL that is not an HTTPS origin', () => {
  62. expect(() => resolveDesktopAutoUpdateConfig({
  63. DOWNLOAD_TEST_ORIGIN: 'https://desktop-updates.example.com/releases',
  64. }, 'darwin', 'arm64')).toThrow(/HTTPS origin without a path/u)
  65. expect(() => resolveDesktopAutoUpdateConfig({
  66. DOWNLOAD_TEST_ORIGIN: 'http://desktop-updates.example.com',
  67. }, 'darwin', 'arm64')).toThrow(/HTTPS origin/u)
  68. })
  69. it('rejects unknown deployments and targets', () => {
  70. expect(() => resolveDesktopAutoUpdateEnvironment({
  71. DSH_DESKTOP_AUTO_UPDATE_ENV: 'staging',
  72. })).toThrow(/test.*production/u)
  73. expect(() => resolveDesktopAutoUpdateTarget('linux', 'x64')).toThrow(/unsupported target/u)
  74. expect(() => desktopBuildRecordFilename('linux-x64' as 'mac-arm64')).toThrow(/unsupported target/u)
  75. })
  76. it('uses Nightly metadata for stable and prerelease Desktop versions', () => {
  77. expect(desktopUpdateMetadataFilename('1.2.3', 'darwin')).toBe('nightly-mac.yml')
  78. expect(desktopUpdateMetadataFilename('1.2.3-alpha.4', 'darwin')).toBe('nightly-mac.yml')
  79. expect(desktopUpdateMetadataFilename('1.2.3-beta.2', 'win32')).toBe('nightly.yml')
  80. expect(() => desktopUpdateMetadataFilename('not-semver', 'darwin')).toThrow(/invalid Desktop version/u)
  81. expect(() => desktopUpdateMetadataFilename('1.2.3', 'linux')).toThrow(/unsupported metadata platform/u)
  82. })
  83. })