diff --git a/web/e2e/model-pricing.spec.ts b/web/e2e/model-pricing.spec.ts index 733edd5..f6e5bfb 100644 --- a/web/e2e/model-pricing.spec.ts +++ b/web/e2e/model-pricing.spec.ts @@ -34,9 +34,15 @@ async function countGeneratorRatioRows(page: Page) { async function fetchModelPricing( request: APIRequestContext, model: string, + userId: number, ): Promise { const response = await request.get( `/api/option/model_pricing/${encodeURIComponent(model)}`, + { + headers: { + 'New-API-User': String(userId), + }, + }, ); expect(response.ok()).toBeTruthy(); return (await response.json()) as ModelPricingConfig; @@ -70,9 +76,9 @@ test.describe.serial('Model Pricing E2E', () => { await fillByTestId(page, 'generator-base-price', '0.2'); const generator = page.getByTestId('model-pricing-generator'); - await generator.locator('input[value="replace_all"]').check({ force: true }); + await generator.getByTestId('generator-strategy-replace-all').click(); const qualityRowIndex = (await countGeneratorRatioRows(page)) - 1; - await fillByTestId(page, `generator-ratio-value-${qualityRowIndex}`, 'standard'); + await fillByTestId(page, `generator-ratio-value-${qualityRowIndex}`, '2'); await fillByTestId(page, `generator-ratio-ratio-${qualityRowIndex}`, '1.5'); await expect(page.getByTestId('generator-apply')).toBeEnabled(); await page.getByTestId('generator-apply').click(); @@ -99,7 +105,13 @@ test.describe.serial('Model Pricing E2E', () => { await page.getByTestId(`model-pricing-edit-${model}`).click(); await expect(page.getByTestId('model-pricing-editor')).toBeVisible(); - const data = await fetchModelPricing(request, model); + const rootUserId = await page.evaluate(() => { + const user = window.localStorage.getItem('user'); + return user ? JSON.parse(user).id : null; + }); + expect(typeof rootUserId).toBe('number'); + + const data = await fetchModelPricing(request, model, rootUserId as number); expect(data.success).toBe(true); expect(data.data.schema_version).toBe(1); expect(data.data.scope).toBe('model'); diff --git a/web/playwright.config.ts b/web/playwright.config.ts index 7b3730a..3e2ebbf 100644 --- a/web/playwright.config.ts +++ b/web/playwright.config.ts @@ -2,6 +2,8 @@ import { defineConfig } from '@playwright/test'; import path from 'node:path'; import { cnBaseURL, playwrightArtifactRoot } from './e2e/fixtures/cluster'; +const chromiumExecutablePath = process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH; + export default defineConfig({ testDir: './e2e', testMatch: ['**/*.spec.ts', '**/*.spec.js'], @@ -27,6 +29,11 @@ export default defineConfig({ use: { baseURL: cnBaseURL, headless: true, + launchOptions: chromiumExecutablePath + ? { + executablePath: chromiumExecutablePath, + } + : undefined, screenshot: 'only-on-failure', trace: 'retain-on-failure', video: 'retain-on-failure', diff --git a/web/src/pages/Setting/Operation/ModelPricing/GeneratorModal.jsx b/web/src/pages/Setting/Operation/ModelPricing/GeneratorModal.jsx index dbeb85d..6182deb 100644 --- a/web/src/pages/Setting/Operation/ModelPricing/GeneratorModal.jsx +++ b/web/src/pages/Setting/Operation/ModelPricing/GeneratorModal.jsx @@ -118,7 +118,6 @@ export default function GeneratorModal({ visible, dimensions, billingUnit, exist return ( } > - + {t('基础价格是所有倍率计算的起点,当前单位为 {{unitLabel}}。最终价格 = 基础价格 × 各维度倍率。', { unitLabel })} @@ -152,8 +151,12 @@ export default function GeneratorModal({ visible, dimensions, billingUnit, exist data-testid='generator-base-price' /> setStrategy(event.target.value)}> - {t('保留手动行')} - {t('全部替换')} + + {t('保留手动行')} + + + {t('全部替换')} + `${index}`} />