79 lines
2.3 KiB
Go
79 lines
2.3 KiB
Go
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")
|
||
|
|
}
|
||
|
|
}
|