cover mobile viewport in browser acceptance

This commit is contained in:
2026-09-06 19:02:08 +03:00
parent efdafa8218
commit 2c3ae87e9a
3 changed files with 30 additions and 1 deletions
@@ -31,7 +31,14 @@
"readyOutputButtonsEnabled": true,
"printPopupTitle": "Evrak Kontrol Listesi",
"overviewStatus": 200,
"overviewFrames": 3
"overviewFrames": 3,
"mobileStatus": 200,
"mobileOverflow": {
"viewport": 390,
"scrollWidth": 390,
"horizontalOverflow": false
},
"mobileTenderList": true
},
"scope": "Yerel sentetik QA; gerçek başvuru veya dış sağlayıcı çağrısı yapılmadı."
}
+6
View File
@@ -2134,3 +2134,9 @@ Doğrulama: giriş HTTP 200, beş şehrin tamamı görünür (her biri 3 eşleş
Üretim kodunda kullanılmayan ve Türkçe karakterleri WinAnsi nedeniyle bozabilen eski `src/services/pdf.js`/jsPDF yolu kaldırıldı. Teklif belgelerinin üretim yolu artık Türkçe HTML ve tarayıcının yazdırma/PDF akışı; `bidDocs.js` açıklaması da bu durumu yansıtıyor. `jspdf` ve yalnız bu yola ait bağımlılıklar paket kilidinden çıkarıldı.
Doğrulama: jsPDF ve eski üreticiye kaynak referansı kalmadı; test ve üretim derlemesi başarılı. Gerçek resmi ihale dosyasıyla çok sayfalı PDF görsel kabulü ve beş resmi ihale başvurusu hâlâ açık işlerdir.
### 2026-09-06 · 390px mobil browser kabulü
Headless kabul koşucusuna 390×844 piksel görünüm eklendi. Giriş sonrası yatay taşma (`scrollWidth`), ihale listesi erişilebilir adı ve temel liste görünümü kontrol ediliyor. Bu kanıt gerçek iOS/Android cihaz performansı veya dokunmatik davranışının yerine geçmez.
Doğrulama: masaüstü ve mobil browser kabulü başarılı; mobil görünümde viewport 390 px, scrollWidth 390 px ve yatay taşma yok.
+16
View File
@@ -61,6 +61,22 @@ 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 });
try {
const mobileResponse = await mobile.goto(url, { waitUntil: 'networkidle' });
evidence.checks.mobileStatus = mobileResponse?.status();
const mobileOverflow = await mobile.evaluate(() => ({
viewport: window.innerWidth,
scrollWidth: document.documentElement.scrollWidth,
horizontalOverflow: document.documentElement.scrollWidth > window.innerWidth + 1,
}));
evidence.checks.mobileOverflow = mobileOverflow;
if (mobileOverflow.horizontalOverflow) throw new Error('390px görünümünde yatay taşma var.');
await mobile.getByRole('button', { name: 'Test hesabıyla gir' }).click();
await mobile.waitForLoadState('networkidle');
evidence.checks.mobileTenderList = await mobile.getByLabel('İhale listesi').count() === 1;
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');
}