Fix city generation retries and remove city-wide economy mechanics
This commit is contained in:
1 parent
85df37c26e
commit
63f0c72ff3
21 files changed
+252
-585
No files matched your search
@@ -0,0 +1,37 @@
|
||||
// Run with `node --import tsx scripts/generation-browser-smoke.mjs`.
|
||||
// Uses the same optional Playwright environment variables as browser-smoke.mjs.
|
||||
import { createRequire } from 'node:module';
|
||||
import { resolve } from 'node:path';
|
||||
import assert from 'node:assert/strict';
|
||||
import { create, toBinary } from '@bufbuild/protobuf';
|
||||
import { CityJobSchema } from '../client/generated/city_pb.ts';
|
||||
const require = createRequire(process.env.CITYGEN_BROWSER_MODULES ? resolve(process.env.CITYGEN_BROWSER_MODULES, 'package.json') : import.meta.url);
|
||||
const { chromium } = require('playwright');
|
||||
const browser = await chromium.launch({ headless: true, executablePath: process.env.CITYGEN_BROWSER_EXECUTABLE });
|
||||
try {
|
||||
const page = await browser.newPage();
|
||||
const errors = []; page.on('pageerror', error => errors.push(error.message));
|
||||
let posts = 0, polls = 0, failed = false;
|
||||
await page.route('**/api/cities/jobs**', async route => {
|
||||
if (route.request().method() === 'POST') posts++;
|
||||
else polls++;
|
||||
const job = create(CityJobSchema, { id: 'resume-test', cityId: 'test', status: failed ? 'failed' : 'running', stage: 'Повтор Overpass', error: failed ? 'Overpass временно недоступен' : '' });
|
||||
await route.fulfill({ contentType: 'application/x-protobuf', body: Buffer.from(toBinary(CityJobSchema, job)) });
|
||||
});
|
||||
const url = `${process.env.CITYGEN_TEST_URL || 'http://127.0.0.1:3000'}/?create-city&job=resume-test`;
|
||||
await page.goto(url);
|
||||
await page.getByText('Повтор Overpass…', { exact: true }).waitFor();
|
||||
await page.reload();
|
||||
await page.getByText('Повтор Overpass…', { exact: true }).waitFor();
|
||||
await page.getByRole('button', { name: 'Закрыть ожидание', exact: true }).click();
|
||||
await page.locator('.overlay').waitFor({ state: 'hidden' });
|
||||
await page.getByRole('button', { name: 'Сгенерировать', exact: true }).click();
|
||||
await page.getByText('Повтор Overpass…', { exact: true }).waitFor();
|
||||
failed = true;
|
||||
await page.locator('.err').filter({ hasText: 'Overpass временно недоступен' }).waitFor();
|
||||
assert.equal(new URL(page.url()).searchParams.has('job'), false);
|
||||
assert.equal(posts, 0, 'reload and resume must not create another job');
|
||||
assert.ok(polls >= 3);
|
||||
assert.deepEqual(errors, []);
|
||||
console.log(JSON.stringify({ generationResume: 'passed', posts, polls }));
|
||||
} finally { await browser.close(); }
|
||||
Reference in new issue
Block a user