93 lines
2.9 KiB
Go
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)
|
|
} |