run browser acceptance outside Istanbul timezone

This commit is contained in:
2026-09-06 19:22:52 +03:00
parent 97592a05c0
commit fa3fdf0fee
3 changed files with 16 additions and 5 deletions
@@ -1,6 +1,7 @@
{
"url": "http://127.0.0.1:5173/qa-signin",
"checks": {
"browserTimezone": "America/New_York",
"signInStatus": 200,
"visibleCities": [
{
+6
View File
@@ -2248,3 +2248,9 @@ Doğrulama: 294 otomatik test, üretim derlemesi ve browser QA başarılı.
İhale kaynak geçmişi, notlar, AI iş geçmişi, belge deposu, API anahtarları, bildirim abonelikleri ve kur/sağlayıcı kayıtlarındaki ISO zaman gösterimleri `Europe/Istanbul` ile sabitlendi. Kullanıcının cihaz saat dilimi artık aynı kaydın farklı gün/saat görünmesine neden olmuyor.
Doğrulama: 294 otomatik test, üretim derlemesi ve `git diff --check` başarılı. Farklı cihaz saat dilimlerinde görsel kabul ayrıca yapılmalı.
### 2026-09-06 · Farklı cihaz saat diliminde browser kabulü
Browser QA Playwright context’i `America/New_York` saat diliminde çalışacak şekilde ayarlandı; buna rağmen İstanbul tarih/saat akışları, günlük bülten, ICS, çıktı ve mobil viewport kontrolleri başarılı. Böylece önceki zaman standardizasyonu yalnızca Türkiye yerel cihazında değil, farklı cihaz saat diliminde de sınanıyor.
Doğrulama: browserTimezone `America/New_York`, mobil viewport 390 px ve yatay taşma yok; tüm kabul kontrolleri başarılı.
+9 -5
View File
@@ -18,8 +18,10 @@ const url = await new Promise((resolve, reject) => {
});
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage({ viewport: { width: 1440, height: 1000 } });
const evidence = { url, checks: {}, scope: 'Yerel sentetik QA; gerçek başvuru veya dış sağlayıcı çağrısı yapılmadı.' };
const context = await browser.newContext({ timezoneId: 'America/New_York' });
const page = await context.newPage();
await page.setViewportSize({ width: 1440, height: 1000 });
const evidence = { url, checks: { browserTimezone: 'America/New_York' }, scope: 'Yerel sentetik QA; gerçek başvuru veya dış sağlayıcı çağrısı yapılmadı.' };
try {
const response = await page.goto(url, { waitUntil: 'networkidle' });
evidence.checks.signInStatus = response?.status();
@@ -54,7 +56,8 @@ try {
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 readyPage = await browser.newPage({ viewport: { width: 1440, height: 1000 } });
const readyPage = await context.newPage();
await readyPage.setViewportSize({ width: 1440, height: 1000 });
try {
const readyResponse = await readyPage.goto(`${url.replace(/\/qa-signin$/, '')}/qa-source-update?ready=1&file=1`, { waitUntil: 'networkidle' });
evidence.checks.readyPreparationStatus = readyResponse?.status();
@@ -80,7 +83,8 @@ try {
evidence.checks.overviewStatus = overview?.status();
evidence.checks.overviewFrames = await page.locator('iframe[title^="Hazırlık"]').count();
if (evidence.checks.overviewFrames !== 3) throw new Error('Hazırlık özeti üç görünüm alanında açılmadı.');
const mobile = await browser.newPage({ viewport: { width: 390, height: 844 }, deviceScaleFactor: 1 });
const mobile = await context.newPage();
await mobile.setViewportSize({ width: 390, height: 844 });
try {
const mobileResponse = await mobile.goto(url, { waitUntil: 'networkidle' });
evidence.checks.mobileStatus = mobileResponse?.status();
@@ -97,7 +101,7 @@ try {
if (!evidence.checks.mobileTenderList) throw new Error('390px görünümünde ihale listesi bulunamadı.');
} finally { await mobile.close(); }
} finally {
await page.close(); await browser.close(); server.kill('SIGTERM');
await page.close(); await context.close(); await browser.close(); server.kill('SIGTERM');
}
await mkdir('docs/quality/evidence', { recursive: true });
await writeFile('docs/quality/evidence/qa-browser-acceptance-runtime.json', JSON.stringify(evidence, null, 2) + '\n');