This commit is contained in:
Lunny Xiao
2026-04-02 20:24:39 -07:00
committed by beardev-in
parent 6827575af8
commit 478d068497
3 changed files with 27 additions and 13 deletions

View File

@@ -12,7 +12,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
func TestCountColumns(t *testing.T) { func TestCountProjectColumns(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase()) assert.NoError(t, unittest.PrepareTestDatabase())
project, err := GetProjectByID(t.Context(), 1) project, err := GetProjectByID(t.Context(), 1)
@@ -23,7 +23,7 @@ func TestCountColumns(t *testing.T) {
assert.EqualValues(t, 3, count) assert.EqualValues(t, 3, count)
} }
func TestGetColumnsPaginated(t *testing.T) { func TestGetProjectColumns(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase()) assert.NoError(t, unittest.PrepareTestDatabase())
project, err := GetProjectByID(t.Context(), 1) project, err := GetProjectByID(t.Context(), 1)
@@ -47,3 +47,19 @@ func TestGetColumnsPaginated(t *testing.T) {
} }
assert.Len(t, allIDs, 3) assert.Len(t, allIDs, 3)
} }
func TestGetColumnsByIDs(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
project, err := GetProjectByID(t.Context(), 1)
assert.NoError(t, err)
columns, err := GetColumnsByIDs(t.Context(), project.ID, []int64{1, 3, 4})
assert.NoError(t, err)
assert.Len(t, columns, 2)
assert.ElementsMatch(t, []int64{1, 3}, []int64{columns[0].ID, columns[1].ID})
empty, err := GetColumnsByIDs(t.Context(), project.ID, nil)
assert.NoError(t, err)
assert.Empty(t, empty)
}

View File

@@ -1580,15 +1580,15 @@ func Routes() *web.Router {
Post(reqToken(), reqRepoWriter(unit.TypeProjects), mustNotBeArchived, bind(api.CreateProjectOption{}), repo.CreateProject) Post(reqToken(), reqRepoWriter(unit.TypeProjects), mustNotBeArchived, bind(api.CreateProjectOption{}), repo.CreateProject)
m.Group("/{id}", func() { m.Group("/{id}", func() {
m.Combo("").Get(repo.GetProject). m.Combo("").Get(repo.GetProject).
Patch(reqToken(), reqRepoWriter(unit.TypeProjects), bind(api.EditProjectOption{}), repo.EditProject). Patch(reqToken(), reqRepoWriter(unit.TypeProjects), mustNotBeArchived, bind(api.EditProjectOption{}), repo.EditProject).
Delete(reqToken(), reqRepoWriter(unit.TypeProjects), repo.DeleteProject) Delete(reqToken(), reqRepoWriter(unit.TypeProjects), mustNotBeArchived, repo.DeleteProject)
m.Combo("/columns").Get(repo.ListProjectColumns). m.Combo("/columns").Get(repo.ListProjectColumns).
Post(reqToken(), reqRepoWriter(unit.TypeProjects), mustNotBeArchived, bind(api.CreateProjectColumnOption{}), repo.CreateProjectColumn) Post(reqToken(), reqRepoWriter(unit.TypeProjects), mustNotBeArchived, bind(api.CreateProjectColumnOption{}), repo.CreateProjectColumn)
}) })
m.Group("/columns/{id}", func() { m.Group("/columns/{id}", func() {
m.Combo(""). m.Combo("").
Patch(reqToken(), reqRepoWriter(unit.TypeProjects), bind(api.EditProjectColumnOption{}), repo.EditProjectColumn). Patch(reqToken(), reqRepoWriter(unit.TypeProjects), mustNotBeArchived, bind(api.EditProjectColumnOption{}), repo.EditProjectColumn).
Delete(reqToken(), reqRepoWriter(unit.TypeProjects), repo.DeleteProjectColumn) Delete(reqToken(), reqRepoWriter(unit.TypeProjects), mustNotBeArchived, repo.DeleteProjectColumn)
m.Post("/issues", reqToken(), reqRepoWriter(unit.TypeProjects), mustNotBeArchived, bind(api.AddIssueToProjectColumnOption{}), repo.AddIssueToProjectColumn) m.Post("/issues", reqToken(), reqRepoWriter(unit.TypeProjects), mustNotBeArchived, bind(api.AddIssueToProjectColumnOption{}), repo.AddIssueToProjectColumn)
}) })
}, reqRepoReader(unit.TypeProjects)) }, reqRepoReader(unit.TypeProjects))

View File

@@ -12,9 +12,6 @@ import (
// ToProject converts a project_model.Project to api.Project // ToProject converts a project_model.Project to api.Project
func ToProject(ctx context.Context, p *project_model.Project) *api.Project { func ToProject(ctx context.Context, p *project_model.Project) *api.Project {
if p == nil {
return nil
}
project := &api.Project{ project := &api.Project{
ID: p.ID, ID: p.ID,
Title: p.Title, Title: p.Title,
@@ -32,10 +29,13 @@ func ToProject(ctx context.Context, p *project_model.Project) *api.Project {
Created: p.CreatedUnix.AsTime(), Created: p.CreatedUnix.AsTime(),
Updated: p.UpdatedUnix.AsTime(), Updated: p.UpdatedUnix.AsTime(),
} }
if p.ClosedDateUnix > 0 { if p.ClosedDateUnix > 0 {
t := p.ClosedDateUnix.AsTime() t := p.ClosedDateUnix.AsTime()
project.ClosedDate = &t project.ClosedDate = &t
} }
// Generate project URL
if p.Type == project_model.TypeRepository && p.RepoID > 0 { if p.Type == project_model.TypeRepository && p.RepoID > 0 {
if err := p.LoadRepo(ctx); err == nil && p.Repo != nil { if err := p.LoadRepo(ctx); err == nil && p.Repo != nil {
project.URL = project_model.ProjectLinkForRepo(p.Repo, p.ID) project.URL = project_model.ProjectLinkForRepo(p.Repo, p.ID)
@@ -45,14 +45,12 @@ func ToProject(ctx context.Context, p *project_model.Project) *api.Project {
project.URL = project_model.ProjectLinkForOrg(p.Owner, p.ID) project.URL = project_model.ProjectLinkForOrg(p.Owner, p.ID)
} }
} }
return project return project
} }
// ToProjectColumn converts a project_model.Column to api.ProjectColumn // ToProjectColumn converts a project_model.Column to api.ProjectColumn
func ToProjectColumn(ctx context.Context, column *project_model.Column) *api.ProjectColumn { func ToProjectColumn(ctx context.Context, column *project_model.Column) *api.ProjectColumn {
if column == nil {
return nil
}
return &api.ProjectColumn{ return &api.ProjectColumn{
ID: column.ID, ID: column.ID,
Title: column.Title, Title: column.Title,