Skip to content

Commit

Permalink
refactor(spx-backend): inherit properties from remixSource in remix…
Browse files Browse the repository at this point in the history
…ed project creation

Signed-off-by: Aofei Sheng <aofei@aofeisheng.com>
  • Loading branch information
aofei committed Oct 18, 2024
1 parent ae82b14 commit 67b0f93
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 9 deletions.
12 changes: 12 additions & 0 deletions spx-backend/internal/controller/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
25 changes: 16 additions & 9 deletions spx-backend/internal/controller/project_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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}).
Expand Down Expand Up @@ -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},
})...))

Expand Down Expand Up @@ -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())
Expand Down

0 comments on commit 67b0f93

Please sign in to comment.