feat(documents): rebuild project document workbench

This commit is contained in:
2026-07-24 12:16:02 +08:00
parent 366136cee9
commit 77beaebb30
73 changed files with 5867 additions and 1264 deletions

View File

@@ -24,11 +24,11 @@ func TestUpdateLocksTaskBeforeProjectValidation(t *testing.T) {
func TestShareObjectLocksTaskBeforeObjectValidation(t *testing.T) {
database, _, project, task := newTaskLockFixture(t)
note := models.SaNote{ProjectID: project.ID, CreatedBy: task.CreatedBy, Title: "Context", Markdown: "Private"}
require.NoError(t, database.Create(&note).Error)
document := models.SaDocument{ProjectID: project.ID, CreatedBy: task.CreatedBy, Kind: models.DocumentKindFile, Name: "Context.md", NormalizedName: "context.md", Extension: ".md", Revision: 1}
require.NoError(t, database.Create(&document).Error)
queries := captureTaskQueryOrder(t, database)
err := NewService(database).ShareObject(task.ID, "note", note.ID)
err := NewService(database).ShareObject(task.ID, "document", document.ID)
require.NoError(t, err)
require.NotEmpty(t, *queries)
@@ -39,21 +39,21 @@ func TestAssigneeOnlySeesExplicitlySharedObjects(t *testing.T) {
database := newTestDB(t)
assigneeID := uint(2)
task := models.SaTask{ProjectID: 1, CreatedBy: 1, AssigneeID: &assigneeID, Title: "处理合同"}
note := models.SaNote{ProjectID: 1, CreatedBy: 1, Title: "合同背景", Markdown: "只在共享后可见"}
document := models.SaDocument{ProjectID: 1, CreatedBy: 1, Kind: models.DocumentKindFile, Name: "合同背景.md", NormalizedName: "合同背景.md", Extension: ".md", Revision: 1}
require.NoError(t, database.Create(&task).Error)
require.NoError(t, database.Create(&note).Error)
require.NoError(t, database.Create(&document).Error)
service := NewService()
before, err := service.VisibleLinkedObjects(task.ID, assigneeID)
require.NoError(t, err)
require.Empty(t, before)
require.NoError(t, service.ShareObject(task.ID, "note", note.ID))
require.NoError(t, service.ShareObject(task.ID, "document", document.ID))
after, err := service.VisibleLinkedObjects(task.ID, assigneeID)
require.NoError(t, err)
require.Len(t, after, 1)
require.Equal(t, "note", after[0].ObjectType)
require.Equal(t, note.Identity, after[0].ObjectID)
require.Equal(t, "document", after[0].ObjectType)
require.Equal(t, document.Identity, after[0].ObjectID)
}
func TestShareObjectRejectsUnsupportedType(t *testing.T) {
@@ -68,12 +68,12 @@ func TestShareObjectRejectsUnsupportedType(t *testing.T) {
func TestShareObjectRejectsObjectFromAnotherProject(t *testing.T) {
database := newTestDB(t)
task := models.SaTask{ProjectID: 1, CreatedBy: 1, Title: "Review"}
note := models.SaNote{ProjectID: 2, CreatedBy: 1, Title: "Other project", Markdown: "Private context"}
document := models.SaDocument{ProjectID: 2, CreatedBy: 1, Kind: models.DocumentKindFile, Name: "Other project.md", NormalizedName: "other project.md", Extension: ".md", Revision: 1}
require.NoError(t, database.Create(&task).Error)
require.NoError(t, database.Create(&note).Error)
require.NoError(t, database.Create(&document).Error)
service := NewService()
err := service.ShareObject(task.ID, "note", note.ID)
err := service.ShareObject(task.ID, "document", document.ID)
require.ErrorContains(t, err, "shared object not found in task project")
}