Files
falah-mobile/qa-report-20260618_165415.md
wmj a1c5fecd83 pivot: migrate V1 mobile from Docker to Netlify serverless
- Switch Prisma schema from SQLite to PostgreSQL
- Add netlify.toml for Netlify deployment config
- Add @netlify/plugin-nextjs for serverless Next.js
- Remove Docker build files (Dockerfile, docker-compose, start.sh)
- Remove auto-healer and scripts directories
- Update next.config.ts (remove standalone output)
- Database: falah_mobile_v1 on Contabo Postgres
2026-06-28 23:02:48 +02:00

8.5 KiB

QA Test Report

Date: 2026-06-18 16:54:15 URL: https://falahos.my/mobile Layer: all

Summary

Pass Fail ⚠️ Warn Total Grade
142 15 8 165 D

Details

Result Message
Landing page (/) → 200 in 177ms
Prayer times (/prayer) → 200 in 94ms
Dhikr counter (/dhikr) → 200 in 102ms
Qibla finder (/qibla) → 200 in 112ms
Halal monitor (/halal-monitor) → 200 in 156ms
Nur AI (/nur) → 200 in 77ms
Forum (/forum) → 200 in 73ms
Souq (/souq) → 200 in 73ms
Groups (/groups) → 200 in 82ms
Health API endpoint (/api/health) → 200 in 106ms
Prayer API endpoint (/api/prayer) → 200 in 111ms
Landing returns 200 directly
Prayer API — full contract satisfied
Prayer API — all 5 prayer times present
Prayer API — date: 18 Jun 2026
Prayer API — hijri: 3 Muḥarram 1448
⚠️ Prayer API — no error for empty params, returned default data
Health API — status=ok
⚠️ Ummah ID Health → 404
Landing (/) — clean (no error patterns)
Landing (/) — contains "Falah"
Landing (/) — MISSING expected text: "Assalamualaikum"
Landing (/) — MISSING expected text: "Daily Verse"
Landing (/) — MISSING expected text: "Quick Actions"
Prayer (/prayer) — clean (no error patterns)
Prayer (/prayer) — contains "Prayer Times"
Prayer (/prayer) — MISSING expected text: "Fajr"
Prayer (/prayer) — MISSING expected text: "Dhuhr"
Prayer (/prayer) — MISSING expected text: "Asr"
Prayer (/prayer) — MISSING expected text: "Maghrib"
Prayer (/prayer) — MISSING expected text: "Isha"
Dhikr (/dhikr) — clean (no error patterns)
Dhikr (/dhikr) — contains "Dhikr"
Dhikr (/dhikr) — contains "Digital Tasbih"
Dhikr (/dhikr) — contains "SubhanAllah"
Dhikr (/dhikr) — contains "Alhamdulillah"
Dhikr (/dhikr) — contains "Allahu Akbar"
Qibla (/qibla) — clean (no error patterns)
Qibla (/qibla) — contains "Qibla Finder"
Qibla (/qibla) — contains "Kaaba"
Qibla (/qibla) — MISSING expected text: "bearing"
Halal Monitor (/halal-monitor) — clean (no error patterns)
Halal Monitor (/halal-monitor) — MISSING expected text: "Halal Monitor"
Halal Monitor (/halal-monitor) — MISSING expected text: "Restaurants"
Nur (/nur) — clean (no error patterns)
Nur (/nur) — contains "Nur"
Forum (/forum) — clean (no error patterns)
Forum (/forum) — contains "Forum"
Souq (/souq) — clean (no error patterns)
Souq (/souq) — contains "Souq"
Groups (/groups) — clean (no error patterns)
Groups (/groups) — MISSING expected text: "Groups"
Pattern "Invalid response" — absent from all pages
Pattern "Internal Server Error" — absent from all pages
Pattern "Application error" — absent from all pages
Pattern "Cannot read properties of" — absent from all pages
Pattern "undefined is not" — absent from all pages
Pattern "TypeError" — absent from all pages
Pattern "Failed to fetch" — absent from all pages
Pattern "not found" — absent from all pages
Pattern "500 Internal" — absent from all pages
Pattern "JSON Parse error" — absent from all pages
Pattern "Unexpected token" — absent from all pages
Pattern "Cannot find module" — absent from all pages
Pattern "Minified React error" — absent from all pages
/prayer — 2 loading indicators (acceptable)
/dhikr — 2 loading indicators (acceptable)
/qibla — 3 loading indicators (acceptable)
Unauthenticated / — shows content
Unauthenticated /prayer — shows content
Unauthenticated /qibla — shows content
Login — obtained token (eyJhbGciOiJIUzI1...X_ns)
Authenticated / — missing: ['Assalamualaikum']
Authenticated /prayer — missing: ['Fajr']
Authenticated /dhikr — all expected content present
Authenticated /qibla — all expected content present
⚠️ Dhikr session — HTTP 404
⚠️ Dhikr stats — HTTP 500
Qibla API — unexpected: None
/prayer — accessible and clean
/dhikr — accessible and clean
/qibla — accessible and clean
Full journey (Prayer → Dhikr → Qibla) — ALL pages clean
Prayer times for Mecca — loaded
Prayer times for Jakarta — loaded
Prayer times for London — loaded
api/prayer with bad token → 200 (graceful)
api/dhikr/stats with bad token → 401 (graceful)
⚠️ api/prayer — 200 with missing params (may silently default)
⚠️ api/qibla → 404 (unexpected)
Prayer API — handles 'space in name': New York
Prayer API — handles 'accented chars': São Paulo
Prayer API — handles 'umlaut': Köln
Prayer API — handles 'normal ref': Kuala Lumpur
Burst test — 20/20 returned 200 (avg 246ms, total 0.4s)
/this-does-not-exist → 404 (correct)
/api/nonexistent → 404 (correct)
/mobile/undefined-route → 404 (correct)
/ — 121ms
/prayer — 55ms
/dhikr — 91ms
/api/prayer?city=Kuala+Lumpur&country=MY — 94ms
/ — viewport meta present
/prayer — viewport meta present
/dhikr — viewport meta present
/qibla — viewport meta present
/halal-monitor — viewport meta present
/nur — viewport meta present
/forum — viewport meta present
/souq — viewport meta present
/groups — viewport meta present
/ — ≥44px touch targets detected
/prayer — ≥44px touch targets detected
/dhikr — ≥44px touch targets detected
/qibla — ≥44px touch targets detected
/halal-monitor — ≥44px touch targets detected
/nur — ≥44px touch targets detected
/forum — ≥44px touch targets detected
/souq — ≥44px touch targets detected
/groups — ≥44px touch targets detected
/ — no sub-12px text
/prayer — no sub-12px text
⚠️ /dhikr — sub-12px text found: ['10px']
/qibla — no sub-12px text
/halal-monitor — no sub-12px text
/nur — no sub-12px text
/forum — no sub-12px text
/souq — no sub-12px text
/groups — no sub-12px text
/ — bottom nav with 6/6 links
/prayer — bottom nav with 6/6 links
/dhikr — bottom nav with 6/6 links
/qibla — bottom nav with 6/6 links
/prayer — 2 tap targets found
/dhikr — 9 tap targets found
Landing (/) — cold=145ms warm=124ms, 13KB
Prayer (/prayer) — cold=68ms warm=66ms, 15KB
Dhikr (/dhikr) — cold=90ms warm=97ms, 18KB
Qibla (/qibla) — cold=75ms warm=83ms, 16KB
Halal Monitor (/halal-monitor) — cold=684ms warm=65ms, 14KB
Prayer API (cached) (/api/prayer?city=Kuala+Lumpur&country=MY) — cold=74ms warm=61ms, 0KB
Prayer API — 70ms
Health API — 67ms
Content-Type: text/html; charset=utf-8
⚠️ X-Content-Type-Options: MISSING
/ — no JWT token leak
/ — no GitHub PAT leak
/ — no OpenAI key leak
/ — no Private key leak
/ — no FLH secret pattern leak
/prayer — no JWT token leak
/prayer — no GitHub PAT leak
/prayer — no OpenAI key leak
/prayer — no Private key leak
/prayer — no FLH secret pattern leak
/dhikr — no JWT token leak
/dhikr — no GitHub PAT leak
/dhikr — no OpenAI key leak
/dhikr — no Private key leak
/dhikr — no FLH secret pattern leak
/qibla — no JWT token leak
/qibla — no GitHub PAT leak
/qibla — no OpenAI key leak
/qibla — no Private key leak
/qibla — no FLH secret pattern leak

Re-run

python3 tests/qa-test-suite.py