155 lines
5.0 KiB
Go
155 lines
5.0 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/gochat/gochat/internal/model"
|
|
)
|
|
|
|
func TestWorkingHourRepo_CreateDefaultWorkingHours(t *testing.T) {
|
|
db := setupTestDB(t, &model.WorkingHour{})
|
|
repo := NewWorkingHourRepo(db)
|
|
|
|
account := &model.Account{Name: "WHOrg", Locale: "en", Active: true}
|
|
require.NoError(t, db.Create(account).Error)
|
|
inbox := &model.Inbox{AccountID: account.ID, Name: "Inbox", ChannelType: "web_widget"}
|
|
require.NoError(t, db.Create(inbox).Error)
|
|
|
|
err := repo.CreateDefaultWorkingHours(context.Background(), inbox.ID, account.ID)
|
|
assert.NoError(t, err)
|
|
|
|
hours, err := repo.FindByInbox(context.Background(), inbox.ID)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, hours, 7)
|
|
}
|
|
|
|
func TestWorkingHourRepo_FindByInbox(t *testing.T) {
|
|
db := setupTestDB(t, &model.WorkingHour{})
|
|
repo := NewWorkingHourRepo(db)
|
|
|
|
account := &model.Account{Name: "WHFindOrg", Locale: "en", Active: true}
|
|
require.NoError(t, db.Create(account).Error)
|
|
inbox := &model.Inbox{AccountID: account.ID, Name: "Inbox", ChannelType: "web_widget"}
|
|
require.NoError(t, db.Create(inbox).Error)
|
|
require.NoError(t, repo.CreateDefaultWorkingHours(context.Background(), inbox.ID, account.ID))
|
|
|
|
hours, err := repo.FindByInbox(context.Background(), inbox.ID)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, hours, 7)
|
|
// Check ordering by day_of_week
|
|
for i := 1; i < len(hours); i++ {
|
|
assert.GreaterOrEqual(t, hours[i].DayOfWeek, hours[i-1].DayOfWeek)
|
|
}
|
|
}
|
|
|
|
func TestWorkingHourRepo_FindByInboxAndDay(t *testing.T) {
|
|
db := setupTestDB(t, &model.WorkingHour{})
|
|
repo := NewWorkingHourRepo(db)
|
|
|
|
account := &model.Account{Name: "WHDayOrg", Locale: "en", Active: true}
|
|
require.NoError(t, db.Create(account).Error)
|
|
inbox := &model.Inbox{AccountID: account.ID, Name: "Inbox", ChannelType: "web_widget"}
|
|
require.NoError(t, db.Create(inbox).Error)
|
|
require.NoError(t, repo.CreateDefaultWorkingHours(context.Background(), inbox.ID, account.ID))
|
|
|
|
wh, err := repo.FindByInboxAndDay(context.Background(), inbox.ID, 1)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 1, wh.DayOfWeek)
|
|
assert.False(t, wh.ClosedAllDay)
|
|
}
|
|
|
|
func TestWorkingHourRepo_FindByInboxAndDay_NotFound(t *testing.T) {
|
|
db := setupTestDB(t, &model.WorkingHour{})
|
|
repo := NewWorkingHourRepo(db)
|
|
|
|
_, err := repo.FindByInboxAndDay(context.Background(), 9999, 1)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestWorkingHourRepo_UpdateWorkingHours(t *testing.T) {
|
|
db := setupTestDB(t, &model.WorkingHour{})
|
|
repo := NewWorkingHourRepo(db)
|
|
|
|
account := &model.Account{Name: "WHUpdOrg", Locale: "en", Active: true}
|
|
require.NoError(t, db.Create(account).Error)
|
|
inbox := &model.Inbox{AccountID: account.ID, Name: "Inbox", ChannelType: "web_widget"}
|
|
require.NoError(t, db.Create(inbox).Error)
|
|
require.NoError(t, repo.CreateDefaultWorkingHours(context.Background(), inbox.ID, account.ID))
|
|
|
|
openHr := 10
|
|
closeHr := 18
|
|
zero := 0
|
|
params := []WorkingHourUpdateParam{
|
|
{DayOfWeek: 0, ClosedAllDay: true},
|
|
{DayOfWeek: 1, OpenAllDay: false, OpenHour: &openHr, OpenMinutes: &zero, CloseHour: &closeHr, CloseMinutes: &zero},
|
|
}
|
|
|
|
err := repo.UpdateWorkingHours(context.Background(), inbox.ID, params)
|
|
assert.NoError(t, err)
|
|
|
|
wh, err := repo.FindByInboxAndDay(context.Background(), inbox.ID, 1)
|
|
assert.NoError(t, err)
|
|
require.NotNil(t, wh.OpenHour)
|
|
assert.Equal(t, 10, *wh.OpenHour)
|
|
require.NotNil(t, wh.CloseHour)
|
|
assert.Equal(t, 18, *wh.CloseHour)
|
|
}
|
|
|
|
func TestWorkingHourRepo_UpdateWorkingHours_NotFound(t *testing.T) {
|
|
db := setupTestDB(t, &model.WorkingHour{})
|
|
repo := NewWorkingHourRepo(db)
|
|
|
|
openHr := 10
|
|
params := []WorkingHourUpdateParam{
|
|
{DayOfWeek: 0, OpenHour: &openHr},
|
|
}
|
|
|
|
err := repo.UpdateWorkingHours(context.Background(), 9999, params)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestWorkingHourUpdateParam_UnmarshalJSON(t *testing.T) {
|
|
var p WorkingHourUpdateParam
|
|
err := p.UnmarshalJSON([]byte(`{"day_of_week":1,"closed_all_day":false,"open_all_day":true,"open_hour":"9","open_minutes":"0","close_hour":"17","close_minutes":"0"}`))
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 1, p.DayOfWeek)
|
|
assert.True(t, p.OpenAllDay)
|
|
require.NotNil(t, p.OpenHour)
|
|
assert.Equal(t, 9, *p.OpenHour)
|
|
}
|
|
|
|
func TestWorkingHourUpdateParam_UnmarshalJSON_Empty(t *testing.T) {
|
|
var p WorkingHourUpdateParam
|
|
err := p.UnmarshalJSON([]byte(`{"day_of_week":"null","open_hour":"","close_hour":"null"}`))
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 0, p.DayOfWeek)
|
|
assert.Nil(t, p.OpenHour)
|
|
assert.Nil(t, p.CloseHour)
|
|
}
|
|
|
|
func TestWorkingHourUpdateParam_UnmarshalJSON_Invalid(t *testing.T) {
|
|
var p WorkingHourUpdateParam
|
|
err := p.UnmarshalJSON([]byte(`invalid json`))
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestIntFromAny(t *testing.T) {
|
|
assert.Equal(t, 5, intFromAny(float64(5)))
|
|
assert.Equal(t, 0, intFromAny(nil))
|
|
assert.Equal(t, 0, intFromAny("abc"))
|
|
assert.Equal(t, 42, intFromAny("42"))
|
|
}
|
|
|
|
func TestBoolFromAny(t *testing.T) {
|
|
assert.True(t, boolFromAny(true))
|
|
assert.False(t, boolFromAny(false))
|
|
assert.True(t, boolFromAny("true"))
|
|
assert.False(t, boolFromAny("false"))
|
|
assert.False(t, boolFromAny(nil))
|
|
assert.False(t, boolFromAny(123))
|
|
}
|