cover ICS import in browser acceptance

This commit is contained in:
2026-09-06 18:46:44 +03:00
parent 704aa9f960
commit 7f42bb2bc6
3 changed files with 20 additions and 2 deletions
@@ -24,6 +24,8 @@
"count": 3 "count": 3
} }
], ],
"icsImported": true,
"icsPersistsAfterTabChange": true,
"overviewStatus": 200, "overviewStatus": 200,
"overviewFrames": 3 "overviewFrames": 3
}, },
+1 -1
View File
@@ -2111,4 +2111,4 @@ Doğrulama: 292/292 otomatik test ve üretim derlemesi başarılı.
CI iş akışı da Chromium’u kurup bu koşucuyu her push ve pull request’te çalıştırıyor; tarayıcı kabulinin yalnızca geliştirici makinesinde geçmesine güvenilmiyor. CI iş akışı da Chromium’u kurup bu koşucuyu her push ve pull request’te çalıştırıyor; tarayıcı kabulinin yalnızca geliştirici makinesinde geçmesine güvenilmiyor.
Doğrulama: giriş HTTP 200, beş şehrin tamamı görünür (her biri 3 eşleşme), üç hazırlık özeti çerçevesi açıldı. Doğrulama: giriş HTTP 200, beş şehrin tamamı görünür (her biri 3 eşleşme), ICS içe aktarma ve sekme değişimi sonrası kalıcılık başarılı, üç hazırlık özeti çerçevesi açıldı.
+17 -1
View File
@@ -1,6 +1,8 @@
// Local-only browser acceptance runner. It uses the disposable fixtures served by browser-qa.mjs. // Local-only browser acceptance runner. It uses the disposable fixtures served by browser-qa.mjs.
import { spawn } from 'node:child_process'; import { spawn } from 'node:child_process';
import { writeFile, mkdir } from 'node:fs/promises'; import { writeFile, mkdir, mkdtemp, rm } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { chromium } from 'playwright'; import { chromium } from 'playwright';
const server = spawn(process.execPath, ['tests/browser-qa.mjs'], { cwd: new URL('..', import.meta.url), stdio: ['ignore', 'pipe', 'inherit'] }); const server = spawn(process.execPath, ['tests/browser-qa.mjs'], { cwd: new URL('..', import.meta.url), stdio: ['ignore', 'pipe', 'inherit'] });
@@ -25,6 +27,20 @@ try {
await page.waitForLoadState('networkidle'); await page.waitForLoadState('networkidle');
evidence.checks.visibleCities = await Promise.all(['Giresun', 'Kayseri', 'Akdeniz', 'Aksaray', 'Tepecik'].map(async city => ({ city, count: await page.getByText(city, { exact: false }).count() }))); evidence.checks.visibleCities = await Promise.all(['Giresun', 'Kayseri', 'Akdeniz', 'Aksaray', 'Tepecik'].map(async city => ({ city, count: await page.getByText(city, { exact: false }).count() })));
if (evidence.checks.visibleCities.some(item => item.count < 1)) throw new Error('Beş sentetik şehirden biri görünmedi.'); if (evidence.checks.visibleCities.some(item => item.count < 1)) throw new Error('Beş sentetik şehirden biri görünmedi.');
await page.getByRole('button', { name: 'İhale Takvimi' }).click();
await page.waitForLoadState('networkidle');
const icsDir = await mkdtemp(join(tmpdir(), 'ihaleist-ics-'));
const icsPath = join(icsDir, 'qa.ics');
await writeFile(icsPath, 'BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:qa-calendar\r\nDTSTART:20260910T070000Z\r\nSUMMARY:Harici Mikroskop\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n');
try {
await page.locator('input[aria-label="ICS takvim dosyası seç"]').setInputFiles(icsPath);
await page.getByText('1 harici etkinlik içe aktarıldı.', { exact: true }).waitFor();
evidence.checks.icsImported = true;
await page.getByRole('button', { name: 'Keşfet' }).click();
await page.getByRole('button', { name: 'İhale Takvimi' }).click();
evidence.checks.icsPersistsAfterTabChange = await page.getByText('1 harici etkinlik içe aktarıldı.', { exact: true }).count() === 1;
if (!evidence.checks.icsPersistsAfterTabChange) throw new Error('ICS kaydı sekme değişiminden sonra korunmadı.');
} finally { await rm(icsDir, { recursive: true, force: true }); }
const overview = await page.goto(`${url.replace(/\/qa-signin$/, '')}/qa-overview`, { waitUntil: 'networkidle' }); const overview = await page.goto(`${url.replace(/\/qa-signin$/, '')}/qa-overview`, { waitUntil: 'networkidle' });
evidence.checks.overviewStatus = overview?.status(); evidence.checks.overviewStatus = overview?.status();
evidence.checks.overviewFrames = await page.locator('iframe[title^="Hazırlık"]').count(); evidence.checks.overviewFrames = await page.locator('iframe[title^="Hazırlık"]').count();