feat: complete project workspace tags and notes UI
This commit is contained in:
@@ -30,6 +30,33 @@ func TestProjectTagsAreScopedToProject(t *testing.T) {
|
||||
require.Equal(t, first.ID, firstTags[0].ProjectID)
|
||||
}
|
||||
|
||||
func TestCreateProjectPersistsWorkspaceMetadata(t *testing.T) {
|
||||
newTestDB(t)
|
||||
service := NewService()
|
||||
|
||||
project, err := service.CreateProjectWithInput(1, CreateProjectInput{
|
||||
Name: "探索项目",
|
||||
Identifier: "EXP",
|
||||
Icon: "compass",
|
||||
Background: "#165DFF",
|
||||
Description: "RSS 采集和线索沉淀",
|
||||
})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "探索项目", project.Name)
|
||||
require.Equal(t, "EXP", project.Identifier)
|
||||
require.Equal(t, "compass", project.Icon)
|
||||
require.Equal(t, "#165DFF", project.Background)
|
||||
require.Equal(t, "RSS 采集和线索沉淀", project.Description)
|
||||
|
||||
workspace, err := service.Workspace(1, project.ID)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "EXP", workspace.Project.Identifier)
|
||||
require.Equal(t, "compass", workspace.Project.Icon)
|
||||
require.Equal(t, "#165DFF", workspace.Project.Background)
|
||||
require.Equal(t, "RSS 采集和线索沉淀", workspace.Project.Description)
|
||||
}
|
||||
|
||||
func TestDashboardCountsOnlyRequestedProject(t *testing.T) {
|
||||
database := newTestDB(t)
|
||||
service := NewService()
|
||||
@@ -140,6 +167,7 @@ func TestCreateTaskAddsTaskToOwnedProject(t *testing.T) {
|
||||
Description: "整理客户反馈并形成行动项",
|
||||
Status: "",
|
||||
DueAt: &dueAt,
|
||||
Tag: "客户反馈",
|
||||
})
|
||||
|
||||
require.NoError(t, err)
|
||||
@@ -148,10 +176,13 @@ func TestCreateTaskAddsTaskToOwnedProject(t *testing.T) {
|
||||
require.Equal(t, "Follow up with client", task.Title)
|
||||
require.Equal(t, "open", task.Status)
|
||||
require.NotNil(t, task.DueAt)
|
||||
require.NotNil(t, task.TagID)
|
||||
workspace, err := service.Workspace(1, project.ID)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, workspace.Tasks, 1)
|
||||
require.Equal(t, "Follow up with client", workspace.Tasks[0].Title)
|
||||
require.Equal(t, "客户反馈", workspace.Tasks[0].Tag)
|
||||
require.Equal(t, []string{"all", "客户反馈"}, workspace.Tags)
|
||||
}
|
||||
|
||||
func TestCreateTaskRejectsProjectOwnedByAnotherUser(t *testing.T) {
|
||||
@@ -165,6 +196,58 @@ func TestCreateTaskRejectsProjectOwnedByAnotherUser(t *testing.T) {
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
||||
func TestUpdateTaskPersistsTagAndCompletion(t *testing.T) {
|
||||
newTestDB(t)
|
||||
service := NewService()
|
||||
require.NoError(t, models.DBService.Create(&models.SenlinAgentUser{Email: "david@example.com", DisplayName: "David", PasswordHash: "hash"}).Error)
|
||||
project, err := service.CreateProject(1, "Alpha", "")
|
||||
require.NoError(t, err)
|
||||
task, err := service.CreateTask(1, project.ID, CreateTaskInput{Title: "Draft proposal", Tag: "客户"})
|
||||
require.NoError(t, err)
|
||||
|
||||
updated, err := service.UpdateTask(1, project.ID, task.ID, UpdateTaskInput{
|
||||
Title: "Draft proposal v2",
|
||||
Description: "Updated scope",
|
||||
Completed: true,
|
||||
Tag: "重要",
|
||||
})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "Draft proposal v2", updated.Title)
|
||||
require.Equal(t, "done", updated.Status)
|
||||
workspace, err := service.Workspace(1, project.ID)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "重要", workspace.Tasks[0].Tag)
|
||||
require.Equal(t, []string{"all", "客户", "重要"}, workspace.Tags)
|
||||
}
|
||||
|
||||
func TestCreateProjectTagAddsTagToOwnedProject(t *testing.T) {
|
||||
newTestDB(t)
|
||||
service := NewService()
|
||||
project, err := service.CreateProject(1, "Alpha", "")
|
||||
require.NoError(t, err)
|
||||
|
||||
tag, err := service.CreateProjectTag(1, project.ID, "Design")
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, project.ID, tag.ProjectID)
|
||||
require.Equal(t, "Design", tag.Name)
|
||||
workspace, err := service.Workspace(1, project.ID)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, []string{"all", "Design"}, workspace.Tags)
|
||||
}
|
||||
|
||||
func TestCreateProjectTagRejectsProjectOwnedByAnotherUser(t *testing.T) {
|
||||
newTestDB(t)
|
||||
service := NewService()
|
||||
project, err := service.CreateProject(2, "Beta", "")
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = service.CreateProjectTag(1, project.ID, "Hidden")
|
||||
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
||||
func TestCreateFileSourceAddsSourceToOwnedProject(t *testing.T) {
|
||||
database := newTestDB(t)
|
||||
service := NewService()
|
||||
|
||||
Reference in New Issue
Block a user