Files
GaCy-GO/internal/sdkserver/api_max_command_test.go
T

79 lines
2.3 KiB
Go
Raw Normal View History

package sdkserver
import (
"encoding/json"
"net/http"
"net/http/httptest"
"os"
"strings"
"testing"
)
func TestMaxCommandPreservesUnknownData(t *testing.T) {
chdirRepoRootSDK(t)
raw, err := os.ReadFile("freesr-data.json")
if err != nil {
t.Fatal(err)
}
var root map[string]json.RawMessage
if err = json.Unmarshal(raw, &root); err != nil {
t.Fatal(err)
}
root["future_root"] = json.RawMessage(`{"keep":true}`)
var avatars map[string]json.RawMessage
if err = json.Unmarshal(root["avatars"], &avatars); err != nil {
t.Fatal(err)
}
var avatar map[string]json.RawMessage
if err = json.Unmarshal(avatars["1204"], &avatar); err != nil {
t.Fatal(err)
}
avatar["future_avatar"] = json.RawMessage(`"preserved"`)
avatars["1204"], _ = json.Marshal(avatar)
root["avatars"], _ = json.Marshal(avatars)
raw, _ = json.Marshal(root)
if err = os.WriteFile("freesr-data.json", raw, 0600); err != nil {
t.Fatal(err)
}
beforePersistent, err := os.ReadFile("persistent")
if err != nil {
t.Fatal(err)
}
w := httptest.NewRecorder()
apiCommand(w, httptest.NewRequest(http.MethodPost, "/api/command", strings.NewReader(`{"command":"/max"}`)))
var result struct {
Success bool `json:"success"`
}
if err = json.Unmarshal(w.Body.Bytes(), &result); err != nil || !result.Success {
t.Fatalf("command failed: %s (%v)", w.Body.String(), err)
}
raw, _ = os.ReadFile("freesr-data.json")
if err = json.Unmarshal(raw, &root); err != nil {
t.Fatal(err)
}
var futureRoot struct {
Keep bool `json:"keep"`
}
if err = json.Unmarshal(root["future_root"], &futureRoot); err != nil || !futureRoot.Keep {
t.Fatal("root data lost")
}
if err = json.Unmarshal(root["avatars"], &avatars); err != nil {
t.Fatal(err)
}
if err = json.Unmarshal(avatars["1204"], &avatar); err != nil {
t.Fatal(err)
}
var data struct {
Rank int `json:"rank"`
}
if err = json.Unmarshal(avatar["data"], &data); err != nil {
t.Fatal(err)
}
if string(avatar["future_avatar"]) != `"preserved"` || string(avatar["level"]) != "80" || string(avatar["promotion"]) != "6" || data.Rank != 6 {
t.Fatal("avatar fields lost or not updated")
}
afterPersistent, err := os.ReadFile("persistent")
if err != nil || string(beforePersistent) != string(afterPersistent) {
t.Fatal("persistent data was rewritten")
}
}