diff --git a/docs/quality/evidence/qa-browser-acceptance-runtime.json b/docs/quality/evidence/qa-browser-acceptance-runtime.json index 3aeedb2..4eca9f9 100644 --- a/docs/quality/evidence/qa-browser-acceptance-runtime.json +++ b/docs/quality/evidence/qa-browser-acceptance-runtime.json @@ -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ı." } diff --git a/docs/quality/uygulama-durumu.md b/docs/quality/uygulama-durumu.md index b1024f4..e3acb4f 100644 --- a/docs/quality/uygulama-durumu.md +++ b/docs/quality/uygulama-durumu.md @@ -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. diff --git a/tests/browser-acceptance.mjs b/tests/browser-acceptance.mjs index 4e39cb4..16caa4c 100644 --- a/tests/browser-acceptance.mjs +++ b/tests/browser-acceptance.mjs @@ -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'); }