测试整改:补齐任务权限夹具与依赖判定
修复项目任务 HTTP 测试夹具,统一未知任务安全响应,并处理 typed-nil 任务仓储依赖。后端全量 go test ./... 已通过。
This commit is contained in:
parent
802109e96a
commit
114514b6d8
@ -5,6 +5,7 @@ import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"net/http"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@ -20,7 +21,7 @@ func (s *Server) issueDomainAsTask(c *gin.Context) {
|
||||
s.writeError(c, http.StatusNotImplemented, "证书申请接口尚未配置", errors.New("证书申请工作流未配置"))
|
||||
return
|
||||
}
|
||||
if s.tasks == nil {
|
||||
if taskRepositoryUnavailable(s.tasks) {
|
||||
s.writeError(c, http.StatusNotImplemented, "证书任务接口尚未配置", errors.New("任务仓储未配置"))
|
||||
return
|
||||
}
|
||||
@ -204,8 +205,20 @@ func (s *Server) unregisterTaskCancel(taskID string) {
|
||||
delete(s.taskCancels, taskID)
|
||||
}
|
||||
|
||||
func taskRepositoryUnavailable(tasks repository.TaskRepository) bool {
|
||||
if tasks == nil {
|
||||
return true
|
||||
}
|
||||
value := reflect.ValueOf(tasks)
|
||||
switch value.Kind() {
|
||||
case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
|
||||
return value.IsNil()
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
func (s *Server) projectTaskReader(c *gin.Context) (repository.ProjectTaskReader, bool) {
|
||||
if s.tasks == nil {
|
||||
if taskRepositoryUnavailable(s.tasks) {
|
||||
s.writeError(c, http.StatusNotImplemented, "任务管理接口尚未配置", errors.New("任务仓储未配置"))
|
||||
return nil, false
|
||||
}
|
||||
|
||||
@ -33,6 +33,11 @@ func newTaskAPITestServer(t *testing.T, issue func(context.Context, string) (cer
|
||||
db.Close()
|
||||
t.Fatalf("创建测试管理员失败:%v", err)
|
||||
}
|
||||
if _, err := db.DB.ExecContext(context.Background(), repository.Rebind(cfg.Database.Driver, `INSERT INTO project_members
|
||||
(project_id, user_id, role) VALUES ('default', 'test-admin', 'project_admin')`)); err != nil {
|
||||
db.Close()
|
||||
t.Fatalf("创建测试项目成员失败:%v", err)
|
||||
}
|
||||
domainRepo := repository.NewSQLDomainRepository(db.DB)
|
||||
taskRepo := repository.NewSQLTaskRepository(db.DB)
|
||||
auditRepo := repository.NewSQLAuditRepository(db.DB)
|
||||
@ -52,6 +57,7 @@ func newTaskAPITestServer(t *testing.T, issue func(context.Context, string) (cer
|
||||
IssueCertificate: issue,
|
||||
Tasks: taskRepo,
|
||||
Audit: auditRepo,
|
||||
ProjectMembers: repository.NewSQLProjectMemberRepository(db.DB, cfg.Database.Driver),
|
||||
ProjectResources: repository.NewSQLProjectMemberRepository(db.DB, cfg.Database.Driver),
|
||||
Users: repository.NewSQLUserRepository(db.DB, cfg.Database.Driver),
|
||||
})
|
||||
@ -204,8 +210,8 @@ func TestTaskAPIRejectsUnknownTask(t *testing.T) {
|
||||
defer closeDB()
|
||||
response := httptest.NewRecorder()
|
||||
serveAdminHTTP(server, response, httptest.NewRequest(http.MethodGet, "/api/v1/tasks/unknown", nil))
|
||||
if response.Code != http.StatusNotFound {
|
||||
t.Fatalf("未知任务应返回 404:%d %s", response.Code, response.Body.String())
|
||||
if response.Code != http.StatusForbidden {
|
||||
t.Fatalf("未知任务或无权任务应返回 403:%d %s", response.Code, response.Body.String())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user