diff --git a/internal/router/command_test.go b/internal/router/command_test.go index bdbb77b..28cb590 100644 --- a/internal/router/command_test.go +++ b/internal/router/command_test.go @@ -921,3 +921,31 @@ func TestCommandPlanetRouteRemove(t *testing.T) { }) } } + +func TestMultipleCommands(t *testing.T) { + e := newExecutor() + r := setupRouterExecutor(e) + + payload := &rest.Command{ + Actor: commandDefaultActor, + Commands: []json.RawMessage{ + encodeCommand(&rest.CommandRaceRelation{ + CommandMeta: rest.CommandMeta{Type: rest.CommandTypeRaceRelation}, + Acceptor: "Opponent", + Relation: "PEACE", + }), + encodeCommand(&rest.CommandRaceVote{ + CommandMeta: rest.CommandMeta{Type: rest.CommandTypeRaceVote}, + Acceptor: "Opponent", + }), + }, + } + + w := httptest.NewRecorder() + req, _ := http.NewRequest(apiCommandMethod, apiCommandPath, asBody(payload)) + r.ServeHTTP(w, req) + + assert.Equal(t, commandNoErrorsStatus, w.Code, w.Body) + + assert.Equal(t, 2, e.(*dummyExecutor).CommandsExecuted) +} diff --git a/internal/router/handler/handler.go b/internal/router/handler/handler.go index e8fd477..b29a84d 100644 --- a/internal/router/handler/handler.go +++ b/internal/router/handler/handler.go @@ -15,8 +15,8 @@ import ( type CommandExecutor interface { GenerateGame([]string) (uuid.UUID, error) - Execute(cmd ...Command) error GameState() (rest.StateResponse, error) + Execute(cmd ...Command) error } type Command func(controller.Ctrl) error @@ -39,10 +39,10 @@ func NewDefaultConfigExecutor(configurer controller.Configurer) CommandExecutor return &executor{cfg: configurer} } -func (e *executor) Execute(cmd ...Command) error { +func (e *executor) Execute(command ...Command) error { return controller.ExecuteCommand(e.cfg, func(c controller.Ctrl) error { - for i := range cmd { - if err := cmd[i](c); err != nil { + for i := range command { + if err := command[i](c); err != nil { return err } } diff --git a/internal/router/router_helper_test.go b/internal/router/router_helper_test.go index c1e0688..797743e 100644 --- a/internal/router/router_helper_test.go +++ b/internal/router/router_helper_test.go @@ -11,9 +11,11 @@ import ( ) type dummyExecutor struct { + CommandsExecuted int } -func (e *dummyExecutor) Execute(cmd ...handler.Command) error { +func (e *dummyExecutor) Execute(command ...handler.Command) error { + e.CommandsExecuted = len(command) return nil } @@ -26,8 +28,16 @@ func (e *dummyExecutor) GameState() (rest.StateResponse, error) { } func setupRouter() *gin.Engine { + return setupRouterExecutor(newExecutor()) +} + +func setupRouterExecutor(e handler.CommandExecutor) *gin.Engine { gin.SetMode(gin.TestMode) - return router.SetupRouter(&dummyExecutor{}) + return router.SetupRouter(e) +} + +func newExecutor() handler.CommandExecutor { + return &dummyExecutor{} } func encodeCommand(cmd any) json.RawMessage {