# Plan de test manuel API mobile

Preparer:

```bash
npm start
```

Base:

```bash
BASE="http://localhost:3200/api/mobile/v1"
COMPANY="audit-nettoyage-1781088147002"
EMAIL="admin@example.com"
PASSWORD="votre-mot-de-passe"
```

## 1. Statut API

```bash
curl -sS "$BASE" | jq
```

Attendu: `success: true`.

## 2. Login

```bash
curl -sS -X POST "$BASE/auth/login" \
  -H "Content-Type: application/json" \
  -d "{
    \"companySlug\":\"$COMPANY\",
    \"email\":\"$EMAIL\",
    \"password\":\"$PASSWORD\",
    \"deviceId\":\"manual-test\",
    \"deviceName\":\"Terminal\"
  }" | tee /tmp/lustra-mobile-login.json | jq
```

Extraire les tokens:

```bash
ACCESS="$(jq -r '.data.accessToken' /tmp/lustra-mobile-login.json)"
REFRESH="$(jq -r '.data.refreshToken' /tmp/lustra-mobile-login.json)"
```

## 3. Me

```bash
curl -sS "$BASE/me" \
  -H "Authorization: Bearer $ACCESS" | jq
```

Attendu: utilisateur courant, `companyId`, `companySlug`, role.

## 4. Dashboard

```bash
curl -sS "$BASE/dashboard" \
  -H "Authorization: Bearer $ACCESS" | jq
```

Attendu: stats adaptees au role.

## 5. Interventions

```bash
curl -sS "$BASE/interventions?limit=10" \
  -H "Authorization: Bearer $ACCESS" | jq
```

Detail:

```bash
INTERVENTION_ID="1"
curl -sS "$BASE/interventions/$INTERVENTION_ID" \
  -H "Authorization: Bearer $ACCESS" | jq
```

Equipe assignable et assignation:

```bash
curl -sS "$BASE/interventions/staff" \
  -H "Authorization: Bearer $ACCESS" | jq

curl -sS -X POST "$BASE/interventions/$INTERVENTION_ID/assign" \
  -H "Authorization: Bearer $ACCESS" \
  -H "Content-Type: application/json" \
  -d '{"assignedUserId":15,"staffUserIds":[15]}' | jq
```

## 5bis. Devis / factures mobiles

```bash
curl -sS "$BASE/quotes?limit=10" \
  -H "Authorization: Bearer $ACCESS" | jq

QUOTE_ID="1"
curl -sS "$BASE/quotes/$QUOTE_ID" \
  -H "Authorization: Bearer $ACCESS" | jq

curl -L "$BASE/quotes/$QUOTE_ID/pdf" \
  -H "Authorization: Bearer $ACCESS" \
  -o /tmp/devis-mobile.pdf

curl -sS -X POST "$BASE/quotes" \
  -H "Authorization: Bearer $ACCESS" \
  -H "Content-Type: application/json" \
  -d '{
    "clientId": 8,
    "serviceType": "Nettoyage test",
    "interventionAddress": "Rue Test 1, Genève",
    "items": [
      {"description":"Nettoyage", "quantity":1, "unit":"forfait", "unitPrice":120}
    ]
  }' | jq

INVOICE_ID="1"
curl -L "$BASE/invoices/$INVOICE_ID/pdf" \
  -H "Authorization: Bearer $ACCESS" \
  -o /tmp/facture-mobile.pdf
```

## 5ter. Heures employés

Avec un token employé:

```bash
curl -sS "$BASE/time-entries" \
  -H "Authorization: Bearer $ACCESS" | jq

curl -sS -X POST "$BASE/time-entries" \
  -H "Authorization: Bearer $ACCESS" \
  -H "Content-Type: application/json" \
  -d '{
    "workDate":"2026-06-12",
    "morningStartTime":"08:00",
    "morningEndTime":"12:00",
    "afternoonStartTime":"13:00",
    "afternoonEndTime":"17:00",
    "expenseAmount":3.5,
    "workNote":"Test mobile"
  }' | jq
```

Avec un token admin:

```bash
curl -sS "$BASE/time-entries/team?status=submitted" \
  -H "Authorization: Bearer $ACCESS" | jq

TIME_ENTRY_ID="1"
curl -sS -X POST "$BASE/time-entries/$TIME_ENTRY_ID/status" \
  -H "Authorization: Bearer $ACCESS" \
  -H "Content-Type: application/json" \
  -d '{"status":"approved"}' | jq
```

## 6. Refresh

```bash
curl -sS -X POST "$BASE/auth/refresh" \
  -H "Content-Type: application/json" \
  -d "{\"refreshToken\":\"$REFRESH\",\"deviceId\":\"manual-test\"}" \
  | tee /tmp/lustra-mobile-refresh.json | jq
```

Le refresh token precedent doit etre revoque.

## 7. Push token

```bash
ACCESS="$(jq -r '.data.accessToken' /tmp/lustra-mobile-refresh.json)"
curl -sS -X POST "$BASE/push-tokens" \
  -H "Authorization: Bearer $ACCESS" \
  -H "Content-Type: application/json" \
  -d '{
    "platform":"expo",
    "token":"ExponentPushToken[manual-test]",
    "deviceId":"manual-test",
    "deviceName":"Terminal"
  }' | jq
```

## 8. Messages

```bash
curl -sS "$BASE/messages" \
  -H "Authorization: Bearer $ACCESS" | jq
```

Creation/reponse:

```bash
curl -sS -X POST "$BASE/messages" \
  -H "Authorization: Bearer $ACCESS" \
  -H "Content-Type: application/json" \
  -d '{"subject":"Test mobile","body":"Message depuis API mobile"}' | jq
```

## 9. Offline events

```bash
curl -sS -X POST "$BASE/sync/offline-events" \
  -H "Authorization: Bearer $ACCESS" \
  -H "Content-Type: application/json" \
  -d '{
    "deviceId":"manual-test",
    "events":[
      {"clientId":"local-1","type":"note","payload":{"text":"test"}}
    ]
  }' | jq
```

## 10. Logout

```bash
NEW_REFRESH="$(jq -r '.data.refreshToken' /tmp/lustra-mobile-refresh.json)"
curl -sS -X POST "$BASE/auth/logout" \
  -H "Content-Type: application/json" \
  -d "{\"refreshToken\":\"$NEW_REFRESH\"}" | jq
```

## Verifications DB utiles

```sql
SELECT id, user_id, company_id, device_id, expires_at, revoked_at FROM mobile_refresh_tokens ORDER BY id DESC LIMIT 10;
SELECT id, user_id, company_id, platform, device_id, enabled, last_seen_at FROM push_tokens ORDER BY id DESC LIMIT 10;
SELECT id, company_id, user_id, device_id, event_type, sync_status FROM offline_queue_events ORDER BY id DESC LIMIT 10;
```
