prepare-package-set.spec.ts 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { afterEach, describe, expect, it, vi } from 'vitest'
  2. import {
  3. assertDesktopHostPackageFiles,
  4. selectDesktopPackageClosure,
  5. type PackedDesktopPackage,
  6. } from '../scripts/prepare-package-set.ts'
  7. function packed(name: string, manifest: Record<string, unknown> = {}): PackedDesktopPackage {
  8. return { tarball: `${name}.tgz`, manifest: { name, version: '1.0.0', ...manifest } }
  9. }
  10. describe('desktop package-set selection', () => {
  11. afterEach(() => {
  12. vi.unstubAllEnvs()
  13. })
  14. it('does not select a packaging target when imported as a library', async () => {
  15. vi.stubEnv('DSH_DESKTOP_TARGET_PLATFORM', 'linux')
  16. vi.stubEnv('DSH_DESKTOP_TARGET_ARCH', 'x64')
  17. vi.resetModules()
  18. await expect(import('../scripts/prepare-package-set.ts')).resolves.toHaveProperty('prepareDesktopPackageSet')
  19. })
  20. it('includes only the available internal production closure', () => {
  21. const available = new Map<string, PackedDesktopPackage>([
  22. ['@deepseek-ai/dsh', packed('@deepseek-ai/dsh', {
  23. dependencies: { '@deepseek-ai/dsh-base': '^1.0.0', external: '^2.0.0' },
  24. optionalDependencies: { '@deepseek-ai/platform-package': '1.0.0', '@deepseek-ai/missing-platform': '1.0.0' },
  25. })],
  26. ['@deepseek-ai/dsh-desktop-host', packed('@deepseek-ai/dsh-desktop-host', {
  27. dependencies: { '@deepseek-ai/dsh': '^1.0.0' },
  28. })],
  29. ['@deepseek-ai/dsh-base', packed('@deepseek-ai/dsh-base', {
  30. peerDependencies: { '@deepseek-ai/cordis': '^1.0.0' },
  31. })],
  32. ['@deepseek-ai/cordis', packed('@deepseek-ai/cordis')],
  33. ['@deepseek-ai/platform-package', packed('@deepseek-ai/platform-package')],
  34. ['@deepseek-ai/unused', packed('@deepseek-ai/unused')],
  35. ])
  36. expect(selectDesktopPackageClosure(available).map(entry => entry.manifest.name)).toEqual([
  37. '@deepseek-ai/cordis',
  38. '@deepseek-ai/dsh',
  39. '@deepseek-ai/dsh-base',
  40. '@deepseek-ai/dsh-desktop-host',
  41. '@deepseek-ai/platform-package',
  42. ])
  43. })
  44. it('rejects a required internal package absent from the packed release inputs', () => {
  45. const available = new Map<string, PackedDesktopPackage>([
  46. ['@deepseek-ai/dsh', packed('@deepseek-ai/dsh', {
  47. dependencies: { '@deepseek-ai/dsh-base': '^1.0.0' },
  48. })],
  49. ['@deepseek-ai/dsh-desktop-host', packed('@deepseek-ai/dsh-desktop-host', {
  50. dependencies: { '@deepseek-ai/dsh': '^1.0.0' },
  51. })],
  52. ])
  53. expect(() => selectDesktopPackageClosure(available)).toThrow(/unpacked internal package/u)
  54. expect(() => selectDesktopPackageClosure(new Map([
  55. ['@deepseek-ai/dsh', packed('@deepseek-ai/dsh')],
  56. ]))).toThrow(/omit @deepseek-ai\/dsh-desktop-host/u)
  57. })
  58. it('requires the Desktop Host entry and its packaged overlay', () => {
  59. const files = [
  60. 'package/lib/index.js',
  61. 'package/config/desktop.cordis.patch.yml',
  62. ]
  63. expect(() => {
  64. assertDesktopHostPackageFiles(files)
  65. }).not.toThrow()
  66. expect(() => {
  67. assertDesktopHostPackageFiles(files.slice(0, 1))
  68. }).toThrow(/desktop\.cordis\.patch\.yml/u)
  69. expect(() => {
  70. assertDesktopHostPackageFiles(files.slice(1))
  71. }).toThrow(/lib\/index\.js/u)
  72. })
  73. })