verify analytics accessibility in browser QA

This commit is contained in:
2026-09-06 19:11:46 +03:00
parent caaf5a7fbe
commit 9b9df43a00
4 changed files with 15 additions and 1 deletions
@@ -24,6 +24,7 @@
"count": 3 "count": 3
} }
], ],
"analyticsTargetLabel": true,
"icsImported": true, "icsImported": true,
"icsStorageScoped": true, "icsStorageScoped": true,
"icsPersistsAfterTabChange": true, "icsPersistsAfterTabChange": true,
+6
View File
@@ -2188,3 +2188,9 @@ Doğrulama: 293 otomatik test ve üretim derlemesi başarılı. Gerçek tarayıc
Son giriş, sekme oturumu ve belge uyarısı kayıtları ortak `hesapAnahtari` yardımcısıyla trim/lowercase/URL kodlamalı anahtar kullanıyor. Böylece istemci tarafındaki tüm hesap kapsamlı zaman damgaları aynı normalizasyon kuralını paylaşır. Son giriş, sekme oturumu ve belge uyarısı kayıtları ortak `hesapAnahtari` yardımcısıyla trim/lowercase/URL kodlamalı anahtar kullanıyor. Böylece istemci tarafındaki tüm hesap kapsamlı zaman damgaları aynı normalizasyon kuralını paylaşır.
Doğrulama: 293 otomatik test ve üretim derlemesi başarılı. İki gerçek hesaplı tarayıcı kabulü ve canlı deployment açık. Doğrulama: 293 otomatik test ve üretim derlemesi başarılı. İki gerçek hesaplı tarayıcı kabulü ve canlı deployment açık.
### 2026-09-06 · Analitik erişilebilirlik kabulü
Browser QA artık Pazar → Analitik Dashboard akışını açıp ciro hedefi alanının `Ciro hedefi (TL)` erişilebilir adına sahip olduğunu doğruluyor. Böylece yeni form sınırları yalnız kaynak kodda değil, dinamik sekme yüklemesi sonrasında da kontrol ediliyor.
Doğrulama: browser QA başarılı; analitik erişilebilirlik kontrolü, ICS, çıktı ve 390px kontrolleri birlikte geçti.
+2 -1
View File
@@ -92,7 +92,7 @@ export const AnalyticsDashboard = () => {
<span className="text-blue-200 uppercase tracking-wider flex items-center gap-1"> <span className="text-blue-200 uppercase tracking-wider flex items-center gap-1">
<Target className="w-3.5 h-3.5 text-amber-300" /> Ciro Hedefi <Target className="w-3.5 h-3.5 text-amber-300" /> Ciro Hedefi
</span> </span>
<button type="button" onClick={() => setEditing((e) => !e)} className="text-blue-200 hover:text-white" title="Hedefi düzenle"> <button type="button" aria-label="Ciro hedefini düzenle" onClick={() => setEditing((e) => !e)} className="text-blue-200 hover:text-white" title="Hedefi düzenle">
{hedef > 0 ? <span className="text-amber-300 font-black">%{hedefYuzde}</span> : <Pencil className="w-3.5 h-3.5" />} {hedef > 0 ? <span className="text-amber-300 font-black">%{hedefYuzde}</span> : <Pencil className="w-3.5 h-3.5" />}
</button> </button>
</div> </div>
@@ -100,6 +100,7 @@ export const AnalyticsDashboard = () => {
<div className="flex items-center gap-1.5 pt-1"> <div className="flex items-center gap-1.5 pt-1">
<input <input
type="number" type="number"
aria-label="Ciro hedefi (TL)"
value={hedef || ''} value={hedef || ''}
min="0" min="0"
step="0.01" step="0.01"
+6
View File
@@ -27,6 +27,12 @@ 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: 'Pazar', exact: true }).click();
await page.getByRole('button', { name: 'Analitik Dashboard', exact: true }).click();
await page.getByLabel('Ciro hedefi (TL)', { exact: true }).waitFor({ state: 'attached', timeout: 10_000 });
evidence.checks.analyticsTargetLabel = await page.getByLabel('Ciro hedefi (TL)', { exact: true }).count() === 1;
if (!evidence.checks.analyticsTargetLabel) throw new Error('Analitik ciro hedefi alanı erişilebilir ad taşımıyor.');
await page.getByRole('button', { name: 'Keşfet', exact: true }).click();
await page.getByRole('button', { name: 'İhale Takvimi' }).click(); await page.getByRole('button', { name: 'İhale Takvimi' }).click();
await page.waitForLoadState('networkidle'); await page.waitForLoadState('networkidle');
const icsDir = await mkdtemp(join(tmpdir(), 'ihaleist-ics-')); const icsDir = await mkdtemp(join(tmpdir(), 'ihaleist-ics-'));