diff --git a/src/main/presenter/devicePresenter/index.ts b/src/main/presenter/devicePresenter/index.ts index 463d46efa..344ba1eb0 100644 --- a/src/main/presenter/devicePresenter/index.ts +++ b/src/main/presenter/devicePresenter/index.ts @@ -15,9 +15,11 @@ const execAsync = promisify(exec) export class DevicePresenter implements IDevicePresenter { static getDefaultHeaders(): Record { + const version = app.getVersion() return { 'HTTP-Referer': 'https://deepchatai.cn', - 'X-Title': 'DeepChat' + 'X-Title': 'DeepChat', + 'User-Agent': `DeepChat/${version}` } } async getAppVersion(): Promise { diff --git a/test/main/presenter/devicePresenter.test.ts b/test/main/presenter/devicePresenter.test.ts new file mode 100644 index 000000000..76d9ae4e5 --- /dev/null +++ b/test/main/presenter/devicePresenter.test.ts @@ -0,0 +1,39 @@ +import { describe, it, expect, vi } from 'vitest' +import { DevicePresenter } from '../../../src/main/presenter/devicePresenter/index' + +// Mock eventBus (imported by DevicePresenter via @/eventbus) +vi.mock('@/eventbus', () => ({ + eventBus: { + on: vi.fn(), + sendToRenderer: vi.fn(), + emit: vi.fn() + }, + SendTarget: { + ALL_WINDOWS: 'ALL_WINDOWS' + } +})) + +// Mock svgSanitizer (imported by DevicePresenter via @/lib/svgSanitizer) +vi.mock('@/lib/svgSanitizer', () => ({ + svgSanitizer: { + sanitize: vi.fn() + } +})) + +describe('DevicePresenter', () => { + describe('getDefaultHeaders', () => { + it('should include User-Agent header with DeepChat/ prefix', () => { + const headers = DevicePresenter.getDefaultHeaders() + + expect(headers).toHaveProperty('User-Agent') + expect(headers['User-Agent']).toMatch(/^DeepChat\//) + }) + + it('should include HTTP-Referer and X-Title headers', () => { + const headers = DevicePresenter.getDefaultHeaders() + + expect(headers['HTTP-Referer']).toBe('https://deepchatai.cn') + expect(headers['X-Title']).toBe('DeepChat') + }) + }) +})