Files

113 lines
3.2 KiB
Go

package dispatch
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestNewChannelEvent(t *testing.T) {
evt := NewChannelEvent("test.event", map[string]interface{}{"key": "value"})
assert.Equal(t, "test.event", string(evt.Type))
assert.Equal(t, "value", evt.Data["key"])
assert.NotZero(t, evt.Timestamp)
}
func TestNewChannelEvent_NilData(t *testing.T) {
evt := NewChannelEvent("test.event", nil)
assert.NotNil(t, evt.Data)
assert.Equal(t, "test.event", string(evt.Type))
}
func TestNewDispatchEvent(t *testing.T) {
evt := NewDispatchEvent(DispatchEventAutoAssign, map[string]interface{}{"conversation_id": uint(1)})
assert.Equal(t, "auto_assignment.assign", string(evt.Type))
assert.Equal(t, uint(1), evt.Data["conversation_id"])
}
func TestEventDataWithConversation(t *testing.T) {
data := EventDataWithConversation(1, 2, 3)
assert.Equal(t, uint(1), data["conversation_id"])
assert.Equal(t, uint(2), data["account_id"])
assert.Equal(t, uint(3), data["inbox_id"])
}
func TestEventDataWithAssignment(t *testing.T) {
data := EventDataWithAssignment(1, 2, 3, 4)
assert.Equal(t, uint(1), data["conversation_id"])
assert.Equal(t, uint(2), data["account_id"])
assert.Equal(t, uint(3), data["inbox_id"])
assert.Equal(t, uint(4), data["assignee_id"])
}
func TestExtractConversationID(t *testing.T) {
tests := []struct {
name string
data map[string]interface{}
want uint
wantErr bool
}{
{"uint", map[string]interface{}{"conversation_id": uint(42)}, 42, false},
{"int", map[string]interface{}{"conversation_id": int(42)}, 42, false},
{"float64", map[string]interface{}{"conversation_id": float64(42)}, 42, false},
{"missing", map[string]interface{}{}, 0, true},
{"invalid_type", map[string]interface{}{"conversation_id": "abc"}, 0, true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := ExtractConversationID(tt.data)
if tt.wantErr {
require.Error(t, err)
} else {
require.NoError(t, err)
assert.Equal(t, tt.want, got)
}
})
}
}
func TestExtractAccountID(t *testing.T) {
tests := []struct {
name string
data map[string]interface{}
want uint
wantErr bool
}{
{"uint", map[string]interface{}{"account_id": uint(7)}, 7, false},
{"int", map[string]interface{}{"account_id": int(7)}, 7, false},
{"float64", map[string]interface{}{"account_id": float64(7)}, 7, false},
{"missing", map[string]interface{}{}, 0, true},
{"invalid_type", map[string]interface{}{"account_id": true}, 0, true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := ExtractAccountID(tt.data)
if tt.wantErr {
require.Error(t, err)
} else {
require.NoError(t, err)
assert.Equal(t, tt.want, got)
}
})
}
}
func TestExtractInboxID(t *testing.T) {
got, err := ExtractInboxID(map[string]interface{}{"inbox_id": uint(99)})
require.NoError(t, err)
assert.Equal(t, uint(99), got)
_, err = ExtractInboxID(map[string]interface{}{})
require.Error(t, err)
}
func TestExtractAssigneeID(t *testing.T) {
got, err := ExtractAssigneeID(map[string]interface{}{"assignee_id": uint(5)})
require.NoError(t, err)
assert.Equal(t, uint(5), got)
_, err = ExtractAssigneeID(map[string]interface{}{})
require.Error(t, err)
}