mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-05 00:45:29 +08:00
77 lines
2.4 KiB
Go
77 lines
2.4 KiB
Go
package admin
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
)
|
|
|
|
func TestKeyEndpointsPreserveStructuredMetadata(t *testing.T) {
|
|
h := newAdminTestHandler(t, `{
|
|
"api_keys":[{"key":"k1","name":"primary","remark":"prod"}]
|
|
}`)
|
|
|
|
r := chi.NewRouter()
|
|
r.Post("/admin/keys", h.addKey)
|
|
r.Put("/admin/keys/{key}", h.updateKey)
|
|
r.Delete("/admin/keys/{key}", h.deleteKey)
|
|
|
|
addBody := []byte(`{"key":"k2","name":"secondary","remark":"staging"}`)
|
|
addReq := httptest.NewRequest(http.MethodPost, "/admin/keys", bytes.NewReader(addBody))
|
|
addRec := httptest.NewRecorder()
|
|
r.ServeHTTP(addRec, addReq)
|
|
if addRec.Code != http.StatusOK {
|
|
t.Fatalf("add status=%d body=%s", addRec.Code, addRec.Body.String())
|
|
}
|
|
|
|
snap := h.Store.Snapshot()
|
|
if len(snap.APIKeys) != 2 {
|
|
t.Fatalf("unexpected api keys after add: %#v", snap.APIKeys)
|
|
}
|
|
if snap.APIKeys[0].Name != "primary" || snap.APIKeys[0].Remark != "prod" {
|
|
t.Fatalf("existing metadata was lost after add: %#v", snap.APIKeys[0])
|
|
}
|
|
if snap.APIKeys[1].Name != "secondary" || snap.APIKeys[1].Remark != "staging" {
|
|
t.Fatalf("new metadata was lost after add: %#v", snap.APIKeys[1])
|
|
}
|
|
|
|
updateBody := map[string]any{
|
|
"name": "primary-updated",
|
|
"remark": "prod-updated",
|
|
}
|
|
updateBytes, _ := json.Marshal(updateBody)
|
|
updateReq := httptest.NewRequest(http.MethodPut, "/admin/keys/k1", bytes.NewReader(updateBytes))
|
|
updateRec := httptest.NewRecorder()
|
|
r.ServeHTTP(updateRec, updateReq)
|
|
if updateRec.Code != http.StatusOK {
|
|
t.Fatalf("update status=%d body=%s", updateRec.Code, updateRec.Body.String())
|
|
}
|
|
|
|
snap = h.Store.Snapshot()
|
|
if len(snap.APIKeys) != 2 {
|
|
t.Fatalf("unexpected api keys after update: %#v", snap.APIKeys)
|
|
}
|
|
if snap.APIKeys[0].Key != "k1" || snap.APIKeys[0].Name != "primary-updated" || snap.APIKeys[0].Remark != "prod-updated" {
|
|
t.Fatalf("metadata update did not persist: %#v", snap.APIKeys[0])
|
|
}
|
|
|
|
deleteReq := httptest.NewRequest(http.MethodDelete, "/admin/keys/k1", nil)
|
|
deleteRec := httptest.NewRecorder()
|
|
r.ServeHTTP(deleteRec, deleteReq)
|
|
if deleteRec.Code != http.StatusOK {
|
|
t.Fatalf("delete status=%d body=%s", deleteRec.Code, deleteRec.Body.String())
|
|
}
|
|
|
|
snap = h.Store.Snapshot()
|
|
if len(snap.APIKeys) != 1 || snap.APIKeys[0].Key != "k2" {
|
|
t.Fatalf("unexpected api keys after delete: %#v", snap.APIKeys)
|
|
}
|
|
if len(snap.Keys) != 1 || snap.Keys[0] != "k2" {
|
|
t.Fatalf("unexpected legacy keys after delete: %#v", snap.Keys)
|
|
}
|
|
}
|