0
0
mirror of https://github.com/go-gitea/gitea.git synced 2026-06-30 20:26:14 +02:00
gitea/models/issues/comment_meta_test.go
Lunny Xiao 71cb6e0f19
update
2026-05-16 13:43:45 -07:00

75 lines
2.8 KiB
Go

// Copyright 2025 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package issues
import (
"testing"
project_model "code.gitea.io/gitea/models/project"
user_model "code.gitea.io/gitea/models/user"
"github.com/stretchr/testify/assert"
)
func TestBuildCreateCommentMetaData(t *testing.T) {
// No special data: nil must be returned (zero-value metadata is avoided on purpose).
meta := buildCreateCommentMetaData(&CreateCommentOptions{
Doer: &user_model.User{ID: 1},
})
assert.Nil(t, meta)
// ProjectColumnTitle triggers the column metadata branch.
meta = buildCreateCommentMetaData(&CreateCommentOptions{
Doer: &user_model.User{ID: 1},
ProjectColumnID: 5,
ProjectColumnTitle: "In Progress",
ProjectTitle: "My Project",
})
assert.NotNil(t, meta)
assert.Equal(t, int64(5), meta.ProjectColumnID)
assert.Equal(t, "In Progress", meta.ProjectColumnTitle)
assert.Equal(t, "My Project", meta.ProjectTitle)
// SpecialDoerName (e.g. CODEOWNERS) stores only the name.
meta = buildCreateCommentMetaData(&CreateCommentOptions{
Doer: &user_model.User{ID: 1},
SpecialDoerName: SpecialDoerNameCodeOwners,
})
assert.NotNil(t, meta)
assert.Equal(t, SpecialDoerNameCodeOwners, meta.SpecialDoerName)
assert.Zero(t, meta.ProjectWorkflowID)
// NewProjectWorkflowDoer correctly populates workflow metadata.
// This is the primary regression guard: the type assertion at
// buildCreateCommentMetaData line 870 must be *projectWorkflowDoer (pointer).
// If it were changed to projectWorkflowDoer (value), opts.Doer.ExtDoerData
// (which is *projectWorkflowDoer) would not match, ok==false, and all
// workflow fields would silently remain zero — caught here.
const (
wfID = int64(42)
wfEvent = project_model.WorkflowEventItemOpened
projTitle = "Kanban"
)
workflowDoer := NewProjectWorkflowDoer(projTitle, wfID, wfEvent)
meta = buildCreateCommentMetaData(&CreateCommentOptions{Doer: workflowDoer})
assert.NotNil(t, meta)
assert.Equal(t, SpecialDoerNameProjectWorkflow, meta.SpecialDoerName)
assert.Equal(t, wfID, meta.ProjectWorkflowID)
assert.Equal(t, wfEvent, meta.ProjectWorkflowEvent)
assert.Equal(t, projTitle, meta.ProjectTitle)
// Passing a value-type projectWorkflowDoer (not pointer) must NOT match
// the *projectWorkflowDoer assertion, so metadata must remain nil.
nilMetaDoer := &user_model.User{
ID: 1,
ExtDoerData: projectWorkflowDoer{ // value, not *projectWorkflowDoer
projectTitle: "WrongTitle",
projectWorkflowID: 99,
projectWorkflowEvent: project_model.WorkflowEventItemClosed,
},
}
meta = buildCreateCommentMetaData(&CreateCommentOptions{Doer: nilMetaDoer})
assert.Nil(t, meta, "value-type projectWorkflowDoer must not match *projectWorkflowDoer type assertion")
}