package service import ( "context" "testing" "github.com/stretchr/testify/require" "gorm.io/driver/sqlite" "gorm.io/gorm" "gorm.io/gorm/logger" "github.com/gochat/gochat/internal/model" "github.com/gochat/gochat/internal/repository" ) func TestWorkingHourService_IsOutOfOffice(t *testing.T) { db, err := gorm.Open(sqlite.Open("file:working_hour_service?mode=memory&cache=shared"), &gorm.Config{ Logger: logger.Default.LogMode(logger.Silent), }) require.NoError(t, err) t.Cleanup(func() { sqlDB, dbErr := db.DB() if dbErr == nil { _ = sqlDB.Close() } }) require.NoError(t, db.AutoMigrate(&model.Account{}, &model.Inbox{}, &model.WorkingHour{})) account := &model.Account{Name: "Working Hours", Locale: "en", Active: true} require.NoError(t, db.Create(account).Error) inbox := &model.Inbox{AccountID: account.ID, Name: "Website", ChannelType: "web_widget", ChannelID: 1, Enabled: true, WorkingHoursEnabled: true, Timezone: "UTC"} require.NoError(t, db.Create(inbox).Error) whRepo := repository.NewWorkingHourRepo(db) require.NoError(t, whRepo.CreateDefaultWorkingHours(context.Background(), inbox.ID, account.ID)) svc := NewWorkingHourService(whRepo, repository.NewInboxRepo(db), repository.NewAccountRepo(db)) closedWeek := make([]repository.WorkingHourUpdateParam, 0, 7) for day := 0; day < 7; day++ { closedWeek = append(closedWeek, repository.WorkingHourUpdateParam{DayOfWeek: day, ClosedAllDay: true}) } _, err = svc.UpdateWeeklySchedule(context.Background(), inbox.ID, closedWeek) require.NoError(t, err) outOfOffice, err := svc.IsOutOfOffice(context.Background(), inbox.ID) require.NoError(t, err) require.True(t, outOfOffice) require.NoError(t, db.Model(inbox).Update("working_hours_enabled", false).Error) outOfOffice, err = svc.IsOutOfOffice(context.Background(), inbox.ID) require.NoError(t, err) require.False(t, outOfOffice) }