Files
Cibello-app/docs/25-testguide.md
T
2026-08-05 19:21:11 +07:00

137 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Testguide testa hela appen i er infra, före namn och App Store
> Målgrupp: du och eventuella testare. Förutsätter att staging är uppe via
> `first-deploy.sh` (se OPENCLAW-DEPLOY-PROMPT.md). Namn behövs inte;
> App Store behövs inte.
## Tre saker går att testa, i stigande ordning av "känns som riktig app"
| Yta | Hur | Kräver |
| ------------------------------- | ------------------------------------------------ | ------------------ |
| 1. API:t | Swagger UI i webbläsaren | Bara servern |
| 2. Adminpanelen | Webbläsare | Bara servern |
| 3. **Mobilappen i din telefon** | Expo Go (gratis app) eller sidladdad Android-APK | Telefon + se nedan |
## 1. API:t 5 minuter
Öppna `http://<server>:4000/docs` alla 110+ endpoints, körbara direkt i
webbläsaren. Snabbaste vitalkontrollen:
```bash
curl -s http://<server>:4000/healthz # {"ok":true,...}
curl -s http://<server>:4000/readyz # {"ok":true,...}
```
## 2. Adminpanelen 10 minuter
```bash
cd apps/admin/dist && python3 -m http.server 5173
```
Öppna `http://<server>:5173`. Skapa ett admin-konto:
```bash
# 1. Registrera via API:t (eller appen), 2. ge admin-roll i databasen:
psql "$DATABASE_URL" -c "UPDATE users SET role='admin' WHERE email='din@mejl.se';"
```
OBS: sätt `CORS_ORIGINS=http://<server>:5173` i `.env` och starta om API:t,
annars blockeras webbläsaranrop. (Mobilappen berörs inte av CORS.)
Testa: systemöversikt (hälsa/köer), användare, feature flags, prenumerations-
grant, auditloggen, 2FA-aktivering på ditt konto.
## 3. Mobilappen i telefonen det riktiga testet
### Alternativ A: Expo Go (enklast 10 minuter, funkar för iPhone OCH Android)
1. Installera **Expo Go** (gratis, App Store/Google Play) på telefonen.
2. På en dator med repot (kan vara din laptop appen ska bara PEKA på er infra):
```bash
pnpm install
API_BASE_URL=http://<server>:4000 pnpm mobile:start
# Telefon på annat nätverk än datorn? Lägg till --tunnel:
# API_BASE_URL=https://<staging-domän> pnpm --filter @app/mobile exec expo start --tunnel
```
3. Skanna QR-koden med telefonen (kamera-appen på iPhone, Expo Go på Android).
4. Appen öppnas i telefonen och pratar med ER server.
Krav: telefonen måste kunna NÅ `API_BASE_URL` samma wifi som servern,
eller en exponerad staging-domän med TLS. Testa i telefonens webbläsare:
öppna `http://<server>:4000/healthz` svarar den där, funkar appen.
### Alternativ B: Android-APK (känns exakt som en riktig app, ingen dator vid test)
Kräver ett gratis Expo-konto (inte Google/Apple):
```bash
cd apps/mobile
# Sätt er staging-URL i eas.json under "preview".env.API_BASE_URL först!
npx eas login
npx eas build --platform android --profile preview
```
Bygget ger en `.apk`-länk skicka till testarna, installera direkt på
Android-telefoner ("okända källor" godkänns vid installation). iPhone på
detta sätt kräver Apple-konto → det väntar tills butiksfasen, använd Expo Go.
## Kör hellre allt PÅ RIKTIGT (rekommenderat)
Mockarna är bara reservläge. Med era nycklar körs allt äkta från start
se "PÅ RIKTIGT FRÅN START" i OPENCLAW-DEPLOY-PROMPT.md (`REQUIRE_REAL=1`
gör det till en grind). Då är AAMOS-svaren äkta, mejlen landar i riktiga
inkorgar och bilderna i riktig S3. Avsnittet nedan gäller ENDAST om ni
medvetet kör utan nycklar.
## Om ni ändå kör mock-läge tillfälligt
Staging kör då `AAMOS_MODE=mock`: **skanningar ger realistiska men påhittade
svar** (samma varje gång bl.a. en osäker vara som kräver bekräftelse, för
att öva gransknings-UX:et). Det är avsiktligt: allt RUNT AI:n testas på
riktigt flöden, lager, kvitton i minor units, korrigeringar. När riktiga
AAMOS kopplas (`AAMOS_MODE=http` + nyckel) blir svaren äkta utan att något
annat ändras. Mejl: staging kör `EMAIL_MODE=log` verifierings- och
återställningsmejl hamnar i `logs/api.log` i stället för i inkorgar
(sök på `mailer:log` för att hämta länkarna).
## Manuellt testprotokoll (ca 30 min per språk)
| # | Gör | Förväntat |
| --- | -------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1 | Installera/öppna appen på telefon med svenska som systemspråk | UI på svenska direkt |
| 2 | Registrera konto, gå igenom onboarding (mål, allergier välj t.ex. gluten, hushåll, läge) | Trial startar; hushåll skapat |
| 3 | Hemma-fliken → lägg till varor manuellt (t.ex. pasta 500 g, färs 400 g, lök 3 st) | Lagret visar varorna med rätt enheter |
| 4 | "Vad ska vi äta?" | Förslag med förklaringar; rätter med dina allergener syns ALDRIG |
| 5 | Öppna ett recept → skala portioner → "Laga nu" → cooking mode → klart → logga | Ingredienser dras från lagret; måltiden syns i Min dag |
| 6 | Skanna → Kyl → ta bild | Mock-svar med varor; minst en "Osäker kontrollera"; godkänn → lagret uppdateras |
| 7 | Inköpslista: lägg till varor, bocka av, "Avsluta köprundan" | Avbockade varor hamnar i lagret |
| 8 | Matlådor: laga recept med portioner till lådor | Lådan syns med "ät senast"-datum |
| 9 | Budget på Hemma-fliken | Belopp i kr, vettiga summor |
| 10 | Profil → byt språk till Español | HELA appen byter direkt, utan omstart |
| 11 | Sök ingrediens på spanska ("ajo") | Träffar Ajo (vitlök) |
| 12 | Profil → "Vad appen vet om mig" | Minnesvyn med rubriker på valt språk; pausa/radera fungerar |
| 13 | Logga ut → "Glömt lösenord?" → hämta länken ur `logs/api.log` → återställ | Nytt lösenord funkar; gamla sessioner utloggade |
| 14 | Profil → Exportera min data | JSON-export levereras |
| 15 | Byt telefonens systemspråk till danska, avinstallera + installera om (Expo Go: rensa), registrera nytt konto | Appen och välkomstmejlet (i loggen) på danska, DKK-defaults |
| 16 | Mjölkprincipen: ge en vara "Bäst före" i går (datumtyp väljs i skanningsgranskningen) och en annan "Sista förbrukningsdag" i går | Bäst före-varan: gul tagg "Passerat bäst före lukta och smaka", finns kvar i recept/förslag och räddas först. Sista förbrukning-varan: röd "Utgången". Ingen kasseras automatiskt |
Upprepa 15 på engelska/tyska/valfritt språk stickprovsvis.
## Buggrapportmall
```
Skärm/steg: (t.ex. protokoll #6, skanningsgranskning)
Språk: sv/en/…
Förväntat: …
Faktiskt: …
Correlation-ID: (syns i API-svar vid fel gör felsökning exakt)
```
## När testet är klart
1. Namnbeslut → `brand.config.json` (runbook: `namnbyte.md`).
2. Riktiga AAMOS → `pnpm eval:aamos` mot produktion (lanseringsplanen fas 2).
3. Butikskonton → EAS production-bygge → TestFlight/intern testning → granskning.