feat: ui polish, docs, api hardening, and common pages
This commit is contained in:
114
api-test-document.md
Normal file
114
api-test-document.md
Normal file
@@ -0,0 +1,114 @@
|
||||
# Dewemoji API Test Document
|
||||
|
||||
This is a quick, repeatable checklist for validating the API locally or on staging.
|
||||
|
||||
## Base URLs
|
||||
|
||||
- Local: `http://127.0.0.1:8000/v1`
|
||||
- Staging: `https://dewemoji.backoffice.biz.id/v1`
|
||||
|
||||
Set once in your shell for convenience:
|
||||
|
||||
```bash
|
||||
BASE=http://127.0.0.1:8000/v1
|
||||
# BASE=https://dewemoji.backoffice.biz.id/v1
|
||||
```
|
||||
|
||||
## Health
|
||||
|
||||
```bash
|
||||
curl -s "$BASE/health" | jq .
|
||||
```
|
||||
|
||||
Expected: `{ "ok": true, ... }`
|
||||
|
||||
## Categories
|
||||
|
||||
```bash
|
||||
curl -s "$BASE/categories" | jq 'keys | length'
|
||||
```
|
||||
|
||||
Expected: number > 0.
|
||||
|
||||
## Emoji Search
|
||||
|
||||
```bash
|
||||
curl -s "$BASE/emojis?q=love&limit=5" | jq '.items | length'
|
||||
```
|
||||
|
||||
Expected: number > 0.
|
||||
|
||||
## Emoji Detail
|
||||
|
||||
```bash
|
||||
curl -s "$BASE/emoji/grinning-face" | jq '.slug,.name'
|
||||
```
|
||||
|
||||
Expected: `"grinning-face"` and `"grinning face"`.
|
||||
|
||||
## Rate-limit (Free tier)
|
||||
|
||||
```bash
|
||||
curl -i "$BASE/emojis?limit=1&page=1" | grep -E "HTTP|X-RateLimit"
|
||||
```
|
||||
|
||||
Expected:
|
||||
- `X-RateLimit-Limit`
|
||||
- `X-RateLimit-Remaining`
|
||||
- `X-RateLimit-Reset`
|
||||
|
||||
Note:
|
||||
- Local dev disables rate limiting by default, so headers may not appear on `http://127.0.0.1`.
|
||||
|
||||
## Pro key test (if you have a key)
|
||||
|
||||
```bash
|
||||
KEY=YOUR_LICENSE_KEY
|
||||
curl -s -H "Authorization: Bearer $KEY" "$BASE/emojis?q=love&limit=50" | jq '.limit,.plan'
|
||||
```
|
||||
|
||||
Expected:
|
||||
- `limit` up to 50
|
||||
- `plan` = `free` or `pro` (depending on key validation).
|
||||
|
||||
## License verify / activate / deactivate
|
||||
|
||||
```bash
|
||||
KEY=YOUR_LICENSE_KEY
|
||||
|
||||
curl -s -X POST "$BASE/license/verify" \
|
||||
-H "Authorization: Bearer $KEY" | jq .
|
||||
|
||||
curl -s -X POST "$BASE/license/activate" \
|
||||
-H "Authorization: Bearer $KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"email":"you@example.com","product":"extension","device_id":"local-dev"}' | jq .
|
||||
|
||||
curl -s -X POST "$BASE/license/deactivate" \
|
||||
-H "Authorization: Bearer $KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"product":"extension","device_id":"local-dev"}' | jq .
|
||||
```
|
||||
|
||||
Expected:
|
||||
- verify → `{ ok: true }` if key is valid.
|
||||
- activate → `{ ok: true }` and `device_id` echoed.
|
||||
- deactivate → `{ ok: true }`.
|
||||
|
||||
## Caching (ETag)
|
||||
|
||||
```bash
|
||||
ETAG=$(curl -i "$BASE/emojis?q=love&limit=5" | awk -F': ' '/^ETag:/ {print $2}' | tr -d '\r')
|
||||
curl -i -H "If-None-Match: $ETAG" "$BASE/emojis?q=love&limit=5" | head -n 1
|
||||
```
|
||||
|
||||
Expected: `HTTP/1.1 304 Not Modified`
|
||||
|
||||
## Error responses
|
||||
|
||||
```bash
|
||||
curl -s "$BASE/emoji/this-does-not-exist" | jq .
|
||||
```
|
||||
|
||||
Expected:
|
||||
- `error` = `not_found`
|
||||
Reference in New Issue
Block a user