diff --git a/internal/server/api/v1/repos/deployment_rollback.go b/internal/server/api/v1/repos/deployment_rollback.go index 153ae71d..57382a62 100644 --- a/internal/server/api/v1/repos/deployment_rollback.go +++ b/internal/server/api/v1/repos/deployment_rollback.go @@ -56,14 +56,15 @@ func (s *DeploymentAPI) Rollback(c *gin.Context) { d, err = s.i.Deploy(ctx, u, re, &ent.Deployment{ - Type: d.Type, - Env: d.Env, - Ref: d.Ref, - IsRollback: true, + Type: d.Type, + Env: d.Env, + Ref: d.Ref, + DynamicPayload: d.DynamicPayload, + IsRollback: true, }, env) if err != nil { - s.log.Check(gb.GetZapLogLevel(err), "Failed to deploy.").Write(zap.Error(err)) + s.log.Check(gb.GetZapLogLevel(err), "Failed to rollback.").Write(zap.Error(err)) gb.ResponseWithError(c, err) return } diff --git a/internal/server/api/v1/repos/deployment_rollback_test.go b/internal/server/api/v1/repos/deployment_rollback_test.go new file mode 100644 index 00000000..d6ede3ad --- /dev/null +++ b/internal/server/api/v1/repos/deployment_rollback_test.go @@ -0,0 +1,71 @@ +package repos + +import ( + "net/http" + "net/http/httptest" + "testing" + + "github.com/gin-gonic/gin" + "github.com/golang/mock/gomock" + "go.uber.org/zap" + + "github.com/gitploy-io/gitploy/internal/server/api/v1/repos/mock" + "github.com/gitploy-io/gitploy/internal/server/global" + "github.com/gitploy-io/gitploy/model/ent" + "github.com/gitploy-io/gitploy/model/extent" +) + +func init() { + gin.SetMode(gin.ReleaseMode) +} + +func TestDeploymentAPI_Rollback(t *testing.T) { + t.Run("Create a new roll-back.", func(t *testing.T) { + t.Log("Start mocking:") + ctrl := gomock.NewController(t) + m := mock.NewMockInteractor(ctrl) + + t.Log("\tFind the deployment by the number.") + m. + EXPECT(). + FindDeploymentOfRepoByNumber(gomock.Any(), gomock.AssignableToTypeOf(&ent.Repo{}), gomock.AssignableToTypeOf(1)). + Return(&ent.Deployment{Env: "prod"}, nil) + + t.Log("\tGet the evaludated config.") + m. + EXPECT(). + GetEvaluatedConfig(gomock.Any(), gomock.AssignableToTypeOf(&ent.User{}), gomock.AssignableToTypeOf(&ent.Repo{}), gomock.AssignableToTypeOf(&extent.EvalValues{})). + Return(&extent.Config{Envs: []*extent.Env{{Name: "prod"}}}, nil) + + t.Log("\tCreate a new deployment, and dispatch a event.") + m. + EXPECT(). + Deploy(gomock.Any(), + gomock.AssignableToTypeOf(&ent.User{}), + gomock.AssignableToTypeOf(&ent.Repo{}), + gomock.AssignableToTypeOf(&ent.Deployment{}), + gomock.AssignableToTypeOf(&extent.Env{})). + Return(&ent.Deployment{}, nil) + + m. + EXPECT(). + FindDeploymentByID(gomock.Any(), gomock.Any()). + Return(&ent.Deployment{}, nil) + + s := DeploymentAPI{i: m, log: zap.L()} + + router := gin.New() + router.POST("/deployments/:number/rollback", func(c *gin.Context) { + c.Set(global.KeyUser, &ent.User{}) + c.Set(KeyRepo, &ent.Repo{}) + }, s.Rollback) + + req, _ := http.NewRequest("POST", "/deployments/1/rollback", nil) + w := httptest.NewRecorder() + + router.ServeHTTP(w, req) + if w.Code != http.StatusCreated { + t.Fatalf("Code = %v, wanted %v. Body=%v", w.Code, http.StatusCreated, w.Body) + } + }) +}