# 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 1–5 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.
