68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
package sdkserver
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"net/http"
|
||
|
|
"net/http/httptest"
|
||
|
|
"os"
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestSceneCommandsPreserveImportedSave(t *testing.T) {
|
||
|
|
chdirRepoRootSDK(t)
|
||
|
|
before, err := os.ReadFile("freesr-data.json")
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
run := func(command string) bool {
|
||
|
|
body, _ := json.Marshal(map[string]string{"command": command})
|
||
|
|
w := httptest.NewRecorder()
|
||
|
|
apiCommand(w, httptest.NewRequest(http.MethodPost, "/api/command", strings.NewReader(string(body))))
|
||
|
|
var result struct {
|
||
|
|
Success bool `json:"success"`
|
||
|
|
}
|
||
|
|
if err := json.Unmarshal(w.Body.Bytes(), &result); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
return result.Success
|
||
|
|
}
|
||
|
|
persistentBefore, err := os.ReadFile("persistent")
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
for _, invalid := range []string{"/teleport invalid", "/scene 0", "/teleport 123 bad", "/teleport 123 456 extra", "/clear lineup"} {
|
||
|
|
if run(invalid) {
|
||
|
|
t.Fatalf("accepted %s", invalid)
|
||
|
|
}
|
||
|
|
after, _ := os.ReadFile("persistent")
|
||
|
|
if string(after) != string(persistentBefore) {
|
||
|
|
t.Fatalf("invalid command %s wrote persistent", invalid)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
for _, command := range []string{"/teleport 123 456"} {
|
||
|
|
if !run(command) {
|
||
|
|
t.Fatalf("command failed: %s", command)
|
||
|
|
}
|
||
|
|
after, err := os.ReadFile("freesr-data.json")
|
||
|
|
if err != nil || string(after) != string(before) {
|
||
|
|
t.Fatalf("%s changed imported save", command)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
raw, err := os.ReadFile("persistent")
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
var saved struct {
|
||
|
|
Scene struct {
|
||
|
|
PlaneID uint32 `json:"plane_id"`
|
||
|
|
FloorID uint32 `json:"floor_id"`
|
||
|
|
} `json:"scene"`
|
||
|
|
}
|
||
|
|
if err := json.Unmarshal(raw, &saved); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if saved.Scene.PlaneID != 123 || saved.Scene.FloorID != 456 {
|
||
|
|
t.Fatalf("persistent changes missing: %+v", saved)
|
||
|
|
}
|
||
|
|
}
|