Files
gochat/internal/service/notification_setting_service_test.go
T
2026-06-04 15:44:48 +08:00

93 lines
2.9 KiB
Go

package service
import (
"context"
"testing"
"github.com/gochat/gochat/internal/model"
"github.com/gochat/gochat/internal/repository"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type NotificationSettingServiceTestSuite struct {
suite.Suite
db *gorm.DB
svc *NotificationSettingService
repo *repository.NotificationSettingRepo
}
func (s *NotificationSettingServiceTestSuite) SetupTest() {
db, err := gorm.Open(sqlite.Open("file:ns_test?mode=memory&_busy_timeout=5000"), &gorm.Config{})
assert.NoError(s.T(), err)
s.db = db
s.db.AutoMigrate(&model.NotificationSetting{})
s.repo = repository.NewNotificationSettingRepo(db)
s.svc = NewNotificationSettingService(s.repo)
}
func (s *NotificationSettingServiceTestSuite) TearDownTest() {
if s.db != nil {
sqlDB, _ := s.db.DB()
sqlDB.Close()
}
}
func TestNotificationSettingServiceSuite(t *testing.T) {
suite.Run(t, new(NotificationSettingServiceTestSuite))
}
func (s *NotificationSettingServiceTestSuite) TestGet_Default() {
ns, err := s.svc.Get(context.Background(), 1, 1)
assert.NoError(s.T(), err)
assert.Equal(s.T(), uint(1), ns.AccountID)
assert.Equal(s.T(), uint(1), ns.UserID)
// Default: all flags enabled
assert.Equal(s.T(), model.AllEmailFlags(), ns.EmailFlags)
assert.Equal(s.T(), model.AllPushFlags(), ns.PushFlags)
}
func (s *NotificationSettingServiceTestSuite) TestGet_Existing() {
s.repo.Create(&model.NotificationSetting{
AccountID: 1,
UserID: 1,
EmailFlags: model.EmailFlagConversationCreation,
PushFlags: 0,
})
ns, err := s.svc.Get(context.Background(), 1, 1)
assert.NoError(s.T(), err)
assert.Equal(s.T(), model.EmailFlagConversationCreation, ns.EmailFlags)
assert.Equal(s.T(), 0, ns.PushFlags)
}
func (s *NotificationSettingServiceTestSuite) TestUpdate_CreateNew() {
req := UpdateNotificationSettingRequest{
SelectedEmailFlags: []string{"email_conversation_creation", "email_conversation_mention"},
SelectedPushFlags: []string{"push_conversation_assignment"},
}
ns, err := s.svc.Update(context.Background(), 1, 1, req)
assert.NoError(s.T(), err)
expectedEmail := model.EmailFlagConversationCreation | model.EmailFlagConversationMention
expectedPush := model.PushFlagConversationAssignment
assert.Equal(s.T(), expectedEmail, ns.EmailFlags)
assert.Equal(s.T(), expectedPush, ns.PushFlags)
}
func (s *NotificationSettingServiceTestSuite) TestUpdate_ModifyExisting() {
s.repo.Create(&model.NotificationSetting{
AccountID: 1,
UserID: 1,
EmailFlags: model.AllEmailFlags(),
PushFlags: model.AllPushFlags(),
})
req := UpdateNotificationSettingRequest{
SelectedEmailFlags: []string{"email_conversation_assignment"},
SelectedPushFlags: []string{},
}
ns, err := s.svc.Update(context.Background(), 1, 1, req)
assert.NoError(s.T(), err)
assert.Equal(s.T(), model.EmailFlagConversationAssignment, ns.EmailFlags)
assert.Equal(s.T(), 0, ns.PushFlags)
}