69 lines
2.2 KiB
Go
69 lines
2.2 KiB
Go
package projects
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/glebarez/sqlite"
|
|
"github.com/stretchr/testify/require"
|
|
"gorm.io/gorm"
|
|
"senlinai-agent/backend/internal/domain"
|
|
)
|
|
|
|
func TestProjectTagsAreScopedToProject(t *testing.T) {
|
|
database := newTestDB(t)
|
|
service := NewService(database)
|
|
first, err := service.CreateProject(1, "Alpha", "")
|
|
require.NoError(t, err)
|
|
second, err := service.CreateProject(1, "Beta", "")
|
|
require.NoError(t, err)
|
|
|
|
_, err = service.CreateTag(first.ID, "重要")
|
|
require.NoError(t, err)
|
|
_, err = service.CreateTag(second.ID, "重要")
|
|
require.NoError(t, err)
|
|
|
|
firstTags, err := service.ListTags(first.ID)
|
|
require.NoError(t, err)
|
|
require.Len(t, firstTags, 1)
|
|
require.Equal(t, first.ID, firstTags[0].ProjectID)
|
|
}
|
|
|
|
func TestDashboardCountsOnlyRequestedProject(t *testing.T) {
|
|
database := newTestDB(t)
|
|
service := NewService(database)
|
|
first, err := service.CreateProject(1, "Alpha", "")
|
|
require.NoError(t, err)
|
|
second, err := service.CreateProject(1, "Beta", "")
|
|
require.NoError(t, err)
|
|
require.NoError(t, database.Create(&domain.InboxItem{ProjectID: first.ID, CreatedBy: 1, SourceType: "text", Status: "open"}).Error)
|
|
require.NoError(t, database.Create(&domain.InboxItem{ProjectID: second.ID, CreatedBy: 1, SourceType: "text", Status: "open"}).Error)
|
|
require.NoError(t, database.Create(&domain.Task{ProjectID: first.ID, CreatedBy: 1, Title: "A", Status: "open"}).Error)
|
|
require.NoError(t, database.Create(&domain.Task{ProjectID: second.ID, CreatedBy: 1, Title: "B", Status: "open"}).Error)
|
|
|
|
dashboard, err := service.Dashboard(1, first.ID)
|
|
|
|
require.NoError(t, err)
|
|
require.Equal(t, int64(1), dashboard.PendingInboxCount)
|
|
require.Equal(t, int64(1), dashboard.OpenTaskCount)
|
|
}
|
|
|
|
func TestDashboardRejectsProjectOwnedByAnotherUser(t *testing.T) {
|
|
database := newTestDB(t)
|
|
service := NewService(database)
|
|
project, err := service.CreateProject(2, "Beta", "")
|
|
require.NoError(t, err)
|
|
|
|
_, err = service.Dashboard(1, project.ID)
|
|
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func newTestDB(t *testing.T) *gorm.DB {
|
|
t.Helper()
|
|
database, err := gorm.Open(sqlite.Open(fmt.Sprintf("file:%s?mode=memory&cache=shared", t.Name())), &gorm.Config{})
|
|
require.NoError(t, err)
|
|
require.NoError(t, domain.AutoMigrate(database))
|
|
return database
|
|
}
|