From 67b0f93dc1e25198bc885c861f7e16f57973270e Mon Sep 17 00:00:00 2001 From: Aofei Sheng Date: Fri, 18 Oct 2024 14:57:04 +0800 Subject: [PATCH] refactor(spx-backend): inherit properties from `remixSource` in remixed project creation Signed-off-by: Aofei Sheng --- spx-backend/internal/controller/project.go | 12 +++++++++ .../internal/controller/project_test.go | 25 ++++++++++++------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/spx-backend/internal/controller/project.go b/spx-backend/internal/controller/project.go index c1982396..cedfec3a 100644 --- a/spx-backend/internal/controller/project.go +++ b/spx-backend/internal/controller/project.go @@ -178,6 +178,18 @@ func (ctrl *Controller) CreateProject(ctx context.Context, params *CreateProject Int64: mRemixSourceProjectRelease.ID, Valid: true, } + if len(mProject.Files) == 0 { + mProject.Files = mRemixSourceProjectRelease.Files + } + if mProject.Description == "" { + mProject.Description = mRemixSourceProject.Description + } + if mProject.Instructions == "" { + mProject.Instructions = mRemixSourceProject.Instructions + } + if mProject.Thumbnail == "" { + mProject.Thumbnail = mRemixSourceProject.Thumbnail + } } if err := ctrl.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { if err := tx.Create(&mProject).Error; err != nil { diff --git a/spx-backend/internal/controller/project_test.go b/spx-backend/internal/controller/project_test.go index f075cf48..92d07c73 100644 --- a/spx-backend/internal/controller/project_test.go +++ b/spx-backend/internal/controller/project_test.go @@ -363,24 +363,26 @@ func TestControllerCreateProject(t *testing.T) { mSourceProjectOwnerUsername := "otheruser" mSourceProject := model.Project{ - Model: model.Model{ID: 2}, - OwnerID: mUser.ID + 1, - Name: "sourceproject", - Visibility: model.VisibilityPublic, + Model: model.Model{ID: 2}, + OwnerID: mUser.ID + 1, + Name: "sourceproject", + Visibility: model.VisibilityPublic, + Description: "Source project description", + Instructions: "Source project instructions", + Thumbnail: "http://example.com/source_thumbnail.jpg", } mSourceProjectRelease := model.ProjectRelease{ Model: model.Model{ID: 1}, ProjectID: mSourceProject.ID, Name: "v1.0.0", + Files: model.FileCollection{"source_main.go": "http://example.com/source_main.go"}, } params := &CreateProjectParams{ RemixSource: fmt.Sprintf("%s/%s", mSourceProjectOwnerUsername, mSourceProject.Name), Name: "remixproject", - Files: model.FileCollection{"main.go": "http://example.com/main.go"}, Visibility: "public", - Description: "Remixed project description", } dbMockStmt := ctrl.db.Session(&gorm.Session{DryRun: true}). @@ -462,9 +464,11 @@ func TestControllerCreateProject(t *testing.T) { Model: model.Model{ID: 3}, OwnerID: mUser.ID, Name: params.Name, - Files: params.Files, + Files: mSourceProjectRelease.Files, Visibility: model.ParseVisibility(params.Visibility), - Description: params.Description, + Description: mSourceProject.Description, + Instructions: mSourceProject.Instructions, + Thumbnail: mSourceProject.Thumbnail, RemixedFromReleaseID: sql.NullInt64{Int64: mSourceProjectRelease.ID, Valid: true}, })...)) @@ -511,7 +515,10 @@ func TestControllerCreateProject(t *testing.T) { require.NoError(t, err) assert.Equal(t, params.Name, projectDTO.Name) assert.Equal(t, params.Visibility, projectDTO.Visibility) - assert.Equal(t, params.Description, projectDTO.Description) + assert.Equal(t, mSourceProject.Description, projectDTO.Description) + assert.Equal(t, mSourceProject.Instructions, projectDTO.Instructions) + assert.Equal(t, mSourceProject.Thumbnail, projectDTO.Thumbnail) + assert.Equal(t, mSourceProjectRelease.Files, projectDTO.Files) assert.Equal(t, fmt.Sprintf("%s/%s/%s", mSourceProjectOwnerUsername, mSourceProject.Name, mSourceProjectRelease.Name), projectDTO.RemixedFrom) require.NoError(t, dbMock.ExpectationsWereMet())