1011241a67
Cherry-pick of upstream PR go-gitea/gitea#37518 onto feat/projects-api. The PR is itself a rebase of #36831 onto main, adapted for the multi-projects-per-issue model added in #36784. Endpoints (all under /repos/{owner}/{repo}/projects...): GET . list projects POST . create project GET /{id} get project PATCH /{id} update project DELETE /{id} delete project GET /{id}/columns list columns POST /{id}/columns create column PATCH /columns/{id} update column DELETE /columns/{id} delete column GET /columns/{id}/issues list issues in column POST /columns/{id}/issues/{issue_id} add/move issue to column DELETE /columns/{id}/issues/{issue_id} remove issue from column POST /columns/{id}/issues/{issue_id}/move move between columns Source: https://github.com/go-gitea/gitea/pull/37518
67 lines
1.9 KiB
Go
67 lines
1.9 KiB
Go
// Copyright 2026 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package project
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"code.gitea.io/gitea/models/db"
|
|
"code.gitea.io/gitea/models/unittest"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestProjectColumns(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
t.Run("CountProjectColumns", testCountProjectColumns)
|
|
t.Run("GetProjectColumns", testGetProjectColumns)
|
|
t.Run("GetColumnsByIDs", testGetColumnsByIDs)
|
|
}
|
|
|
|
func testCountProjectColumns(t *testing.T) {
|
|
project, err := GetProjectByID(t.Context(), 1)
|
|
assert.NoError(t, err)
|
|
|
|
count, err := CountProjectColumns(t.Context(), project.ID)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, 3, count)
|
|
}
|
|
|
|
func testGetProjectColumns(t *testing.T) {
|
|
project, err := GetProjectByID(t.Context(), 1)
|
|
assert.NoError(t, err)
|
|
|
|
// Page 1, limit 2 — returns first 2 columns
|
|
page1, err := GetProjectColumns(t.Context(), project.ID, db.ListOptions{Page: 1, PageSize: 2})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, page1, 2)
|
|
|
|
// Page 2, limit 2 — returns remaining column
|
|
page2, err := GetProjectColumns(t.Context(), project.ID, db.ListOptions{Page: 2, PageSize: 2})
|
|
assert.NoError(t, err)
|
|
assert.Len(t, page2, 1)
|
|
|
|
// Page 1 and page 2 together cover all columns with no overlap
|
|
allIDs := make(map[int64]bool)
|
|
for _, c := range append(page1, page2...) {
|
|
assert.False(t, allIDs[c.ID], "duplicate column ID %d across pages", c.ID)
|
|
allIDs[c.ID] = true
|
|
}
|
|
assert.Len(t, allIDs, 3)
|
|
}
|
|
|
|
func testGetColumnsByIDs(t *testing.T) {
|
|
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)
|
|
}
|