Files
falah-mobile/qa-report-20260618_193920.md
T
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.6 KiB

QA Test Report

Date: 2026-06-18 19:39:20 URL: https://falahos.my/mobile Layer: all

Summary

Pass Fail ⚠️ Warn Total Grade
143 15 7 165 D

Details

Result Message
Landing page (/) → 200 in 267ms
Prayer times (/prayer) → 200 in 135ms
Dhikr counter (/dhikr) → 200 in 173ms
Qibla finder (/qibla) → 200 in 157ms
Halal monitor (/halal-monitor) → 200 in 95ms
Nur AI (/nur) → 200 in 111ms
Forum (/forum) → 200 in 109ms
Souq (/souq) → 200 in 117ms
Groups (/groups) → 200 in 111ms
Health API endpoint (/api/health) → 200 in 110ms
Prayer API endpoint (/api/prayer) → 200 in 356ms
Landing returns 200 directly
Prayer API — full contract satisfied
Prayer API — all 5 prayer times present
Prayer API — date: 19 Jun 2026
Prayer API — hijri: 4 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...Rqnk)
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 — received data: {'dayStats': {'userId': 'cmqgdj5ta00009aare9z8x4df', 'date': '2026-06-18', 'subhanallah': 0, 'alhamd
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 157ms, total 0.3s)
/this-does-not-exist → 404 (correct)
/api/nonexistent → 404 (correct)
/mobile/undefined-route → 404 (correct)
/ — 115ms
/prayer — 72ms
/dhikr — 58ms
/api/prayer?city=Kuala+Lumpur&country=MY — 50ms
/ — 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=128ms warm=127ms, 13KB
Prayer (/prayer) — cold=58ms warm=62ms, 15KB
Dhikr (/dhikr) — cold=101ms warm=67ms, 18KB
Qibla (/qibla) — cold=75ms warm=67ms, 16KB
Halal Monitor (/halal-monitor) — cold=64ms warm=63ms, 14KB
Prayer API (cached) (/api/prayer?city=Kuala+Lumpur&country=MY) — cold=64ms warm=68ms, 0KB
Prayer API — 89ms
Health API — 100ms
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