diff --git a/src/device/input/parse/v01/server.go b/src/device/input/parse/v01/server.go index 4fe5a28..a861c5c 100644 --- a/src/device/input/parse/v01/server.go +++ b/src/device/input/parse/v01/server.go @@ -168,8 +168,8 @@ func (v01 *V01) serveGM(w http.ResponseWriter, r *http.Request) { v01.serveGMShuffle(w, r) v01.cfg.Quiet = false case "/gm/rpc/swap": - if err := v01.serveGMSwap(r, r.URL.Query().Get("a"), r.URL.Query().Get("b")); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + if errCode, err := v01.serveGMSwap(r, r.URL.Query().Get("a"), r.URL.Query().Get("b")); err != nil { + http.Error(w, err.Error(), errCode) return } v01.cfg.Quiet = false @@ -226,7 +226,7 @@ func (v01 *V01) serveGMShuffle(w http.ResponseWriter, r *http.Request) { v01.servePutBroadcastValue(strings.Join(msg, ", ")) } -func (v01 *V01) serveGMSwap(r *http.Request, nameA, nameB string) error { +func (v01 *V01) serveGMSwap(r *http.Request, nameA, nameB string) (int, error) { getUserNameFor := func(like string) string { for k, v := range v01.cfg.Users { if k == like || v.Alias == like { @@ -238,15 +238,15 @@ func (v01 *V01) serveGMSwap(r *http.Request, nameA, nameB string) error { userA := getUserNameFor(nameA) userB := getUserNameFor(nameB) if userA == "" || userB == "" { - return errors.New("who dat?") + return http.StatusBadRequest, errors.New("who dat?") } if userA == userB { - return errors.New("/spiderman-pointing") + return http.StatusConflict, errors.New("/spiderman-pointing") } a := v01.cfg.Users[userA] b := v01.cfg.Users[userB] a.Player, b.Player = b.Player, a.Player v01.cfg.Users[userA] = a v01.cfg.Users[userB] = b - return nil + return http.StatusOK, nil } diff --git a/src/device/input/parse/v01/server_test.go b/src/device/input/parse/v01/server_test.go index b131efa..f8123ae 100644 --- a/src/device/input/parse/v01/server_test.go +++ b/src/device/input/parse/v01/server_test.go @@ -209,6 +209,33 @@ func TestServeGM(t *testing.T) { }) t.Run("swap", func(t *testing.T) { + t.Run("self", func(t *testing.T) { + v01 := NewV01(ctx, nil) + v01.cfg.Quiet = true + v01.cfg.Users = map[string]configUser{ + "bel": configUser{Player: 1}, + } + resp := do(v01, "/gm/rpc/swap?a=bel&b=bel", "") + if resp.Code != http.StatusConflict { + t.Error(resp.Code) + } + if !v01.cfg.Quiet { + t.Error(v01.cfg.Quiet) + } + }) + + t.Run("who", func(t *testing.T) { + v01 := NewV01(ctx, nil) + v01.cfg.Quiet = true + resp := do(v01, "/gm/rpc/swap?a=bel", "") + if resp.Code != http.StatusBadRequest { + t.Error(resp.Code) + } + if !v01.cfg.Quiet { + t.Error(v01.cfg.Quiet) + } + }) + t.Run("happy", func(t *testing.T) { v01 := NewV01(ctx, nil) v01.cfg.Quiet = true