合并远程主分支客户端收口

This commit is contained in:
2026-08-13 17:13:36 +08:00
240 changed files with 4900 additions and 20399 deletions

View File

@@ -1,4 +1,4 @@
import { completeSetup, expect, test } from './fixtures/electron';
import { completeSetup, expect, openModelsPage, test } from './fixtures/electron';
const TEST_PROVIDER_ID = 'moonshot-e2e';
const TEST_PROVIDER_LABEL = 'Moonshot E2E';
@@ -6,16 +6,29 @@ const TEST_PROVIDER_LABEL = 'Moonshot E2E';
async function seedTestProvider(page: Parameters<typeof completeSetup>[0]): Promise<void> {
await page.evaluate(async ({ providerId, providerLabel }) => {
const now = new Date().toISOString();
await window.electron.ipcRenderer.invoke('provider:save', {
id: providerId,
name: providerLabel,
type: 'moonshot',
baseUrl: 'https://api.moonshot.cn/v1',
model: 'kimi-k2.6',
enabled: true,
createdAt: now,
updatedAt: now,
const result = await window.electron.ipcRenderer.invoke('hostapi:fetch', {
path: '/api/provider-accounts',
method: 'POST',
body: {
account: {
id: providerId,
vendorId: 'moonshot',
label: providerLabel,
authMode: 'api_key',
baseUrl: 'https://api.moonshot.cn/v1',
model: 'kimi-k2.6',
enabled: true,
isDefault: false,
createdAt: now,
updatedAt: now,
},
apiKey: 'sk-e2e-provider-key',
},
});
if (!result?.ok || !result.data?.ok || result.data.json?.success !== true) {
throw new Error(`Failed to seed provider: ${JSON.stringify(result)}`);
}
}, { providerId: TEST_PROVIDER_ID, providerLabel: TEST_PROVIDER_LABEL });
}
@@ -24,8 +37,7 @@ test.describe('NianCode provider lifecycle', () => {
await completeSetup(page);
await seedTestProvider(page);
await page.getByTestId('sidebar-nav-models').click();
await expect(page.getByTestId('providers-settings')).toBeVisible();
await openModelsPage(page);
await expect(page.getByTestId(`provider-card-${TEST_PROVIDER_ID}`)).toContainText(TEST_PROVIDER_LABEL);
await page.getByTestId(`provider-card-${TEST_PROVIDER_ID}`).hover();
@@ -39,7 +51,7 @@ test.describe('NianCode provider lifecycle', () => {
await completeSetup(page);
await seedTestProvider(page);
await page.getByTestId('sidebar-nav-models').click();
await openModelsPage(page);
await expect(page.getByTestId(`provider-card-${TEST_PROVIDER_ID}`)).toContainText(TEST_PROVIDER_LABEL);
await page.getByTestId(`provider-card-${TEST_PROVIDER_ID}`).hover();
@@ -52,10 +64,11 @@ test.describe('NianCode provider lifecycle', () => {
try {
const relaunchedPage = await relaunchedApp.firstWindow();
await relaunchedPage.waitForLoadState('domcontentloaded');
await expect(relaunchedPage.getByTestId('ai-module-selection-page')).toBeVisible();
await relaunchedPage.getByTestId('ai-module-option-programming').click();
await expect(relaunchedPage.getByTestId('main-layout')).toBeVisible();
await relaunchedPage.getByTestId('sidebar-nav-models').click();
await expect(relaunchedPage.getByTestId('providers-settings')).toBeVisible();
await openModelsPage(relaunchedPage);
await expect(relaunchedPage.getByTestId(`provider-card-${TEST_PROVIDER_ID}`)).toHaveCount(0);
await expect(relaunchedPage.getByText(TEST_PROVIDER_LABEL)).toHaveCount(0);
} finally {
@@ -147,8 +160,7 @@ test.describe('NianCode provider lifecycle', () => {
});
});
await page.getByTestId('sidebar-nav-models').click();
await expect(page.getByTestId('providers-settings')).toBeVisible();
await openModelsPage(page);
await page.getByTestId('providers-add-button').click();
await expect(page.getByTestId('add-provider-dialog')).toBeVisible();
@@ -160,7 +172,7 @@ test.describe('NianCode provider lifecycle', () => {
await page.getByTestId('add-provider-model-id-input').fill('local-model');
await page.getByTestId('add-provider-submit-button').click();
await expect(page.getByTestId('provider-card-custom')).toContainText('LM Studio Local');
await expect(page.getByTestId(/^provider-card-custom-/).filter({ hasText: 'LM Studio Local' })).toBeVisible();
});
test('edit form validates the new API key inline before saving (single button)', async ({ electronApp, page }) => {
@@ -223,8 +235,7 @@ test.describe('NianCode provider lifecycle', () => {
});
});
await page.getByTestId('sidebar-nav-models').click();
await expect(page.getByTestId('providers-settings')).toBeVisible();
await openModelsPage(page);
await expect(page.getByTestId('provider-card-moonshot-edit')).toBeVisible();
await page.getByTestId('provider-card-moonshot-edit').hover();