113 lines
3.2 KiB
Go
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)
|
|
}
|