|
|
@@ -16,88 +16,59 @@ import (
|
|
|
"github.com/mk6i/open-oscar-server/wire"
|
|
|
)
|
|
|
|
|
|
-// MockMessageRelayer is a mock implementation of MessageRelayer
|
|
|
-type MockMessageRelayer struct {
|
|
|
+// MockICBMService is a mock implementation of ICBMService
|
|
|
+type MockICBMService struct {
|
|
|
mock.Mock
|
|
|
}
|
|
|
|
|
|
-func (m *MockMessageRelayer) RelayToScreenName(ctx context.Context, recipient state.IdentScreenName, msg wire.SNACMessage) {
|
|
|
- m.Called(ctx, recipient, msg)
|
|
|
-}
|
|
|
-
|
|
|
-// MockOfflineMessageManager is a mock implementation of OfflineMessageManager
|
|
|
-type MockOfflineMessageManager struct {
|
|
|
- mock.Mock
|
|
|
-}
|
|
|
-
|
|
|
-func (m *MockOfflineMessageManager) SaveMessage(ctx context.Context, msg state.OfflineMessage) (int, error) {
|
|
|
- args := m.Called(ctx, msg)
|
|
|
- return args.Int(0), args.Error(1)
|
|
|
-}
|
|
|
-
|
|
|
-// MockSessionRetriever is a mock implementation of SessionRetriever
|
|
|
-type MockSessionRetriever struct {
|
|
|
- mock.Mock
|
|
|
-}
|
|
|
-
|
|
|
-func (m *MockSessionRetriever) AllSessions() []*state.Session {
|
|
|
- args := m.Called()
|
|
|
- if sessions := args.Get(0); sessions != nil {
|
|
|
- return sessions.([]*state.Session)
|
|
|
- }
|
|
|
- return nil
|
|
|
-}
|
|
|
-
|
|
|
-func (m *MockSessionRetriever) RetrieveSession(screenName state.IdentScreenName) *state.Session {
|
|
|
- args := m.Called(screenName)
|
|
|
- if session := args.Get(0); session != nil {
|
|
|
- return session.(*state.Session)
|
|
|
+func (m *MockICBMService) ChannelMsgToHost(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x04_0x06_ICBMChannelMsgToHost) (*wire.SNACMessage, error) {
|
|
|
+ args := m.Called(ctx, instance, inFrame, inBody)
|
|
|
+ if msg := args.Get(0); msg != nil {
|
|
|
+ return msg.(*wire.SNACMessage), args.Error(1)
|
|
|
}
|
|
|
- return nil
|
|
|
-}
|
|
|
-
|
|
|
-// MockRelationshipFetcher is a mock implementation of RelationshipFetcher
|
|
|
-type MockRelationshipFetcher struct {
|
|
|
- mock.Mock
|
|
|
+ return nil, args.Error(1)
|
|
|
}
|
|
|
|
|
|
-func (m *MockRelationshipFetcher) Relationship(ctx context.Context, me state.IdentScreenName, them state.IdentScreenName) (state.Relationship, error) {
|
|
|
- args := m.Called(ctx, me, them)
|
|
|
- return args.Get(0).(state.Relationship), args.Error(1)
|
|
|
+func (m *MockICBMService) ClientEvent(ctx context.Context, instance *state.SessionInstance, inFrame wire.SNACFrame, inBody wire.SNAC_0x04_0x14_ICBMClientEvent) error {
|
|
|
+ args := m.Called(ctx, instance, inFrame, inBody)
|
|
|
+ return args.Error(0)
|
|
|
}
|
|
|
|
|
|
// createTestSessionManager creates a WebAPISessionManager with a pre-populated session.
|
|
|
func createTestSessionManager(screenName string) (*state.WebAPISessionManager, string) {
|
|
|
+ return createTestSessionManagerWithOSCAR(screenName, nil)
|
|
|
+}
|
|
|
+
|
|
|
+// createTestSessionManagerWithOSCAR creates a WebAPISessionManager with an OSCAR session instance set.
|
|
|
+func createTestSessionManagerWithOSCAR(screenName string, oscarSession *state.SessionInstance) (*state.WebAPISessionManager, string) {
|
|
|
mgr := state.NewWebAPISessionManager()
|
|
|
session, _ := mgr.CreateSession(
|
|
|
context.Background(),
|
|
|
state.DisplayScreenName(screenName),
|
|
|
"test-dev",
|
|
|
- []string{"im", "presence", "buddylist", "sentIM"},
|
|
|
- nil,
|
|
|
+ []string{"im", "presence", "buddylist", "sentIM", "typing"},
|
|
|
+ oscarSession,
|
|
|
slog.Default(),
|
|
|
)
|
|
|
return mgr, session.AimSID
|
|
|
}
|
|
|
|
|
|
func TestMessagingHandler_SendIM(t *testing.T) {
|
|
|
+ oscarInstance := state.NewSession().AddInstance()
|
|
|
+
|
|
|
tests := []struct {
|
|
|
name string
|
|
|
queryParams string
|
|
|
- setupMocks func(*MockMessageRelayer, *MockOfflineMessageManager, *MockSessionRetriever, *MockRelationshipFetcher)
|
|
|
+ setupMocks func(*MockICBMService)
|
|
|
expectedStatusCode int
|
|
|
checkResponse func(*testing.T, string)
|
|
|
}{
|
|
|
{
|
|
|
- name: "Success_OnlineRecipient",
|
|
|
+ name: "Success",
|
|
|
queryParams: "t=recipient&message=hello+world",
|
|
|
- setupMocks: func(mr *MockMessageRelayer, om *MockOfflineMessageManager, sr *MockSessionRetriever, rf *MockRelationshipFetcher) {
|
|
|
- rf.On("Relationship", mock.Anything, mock.Anything, state.NewIdentScreenName("recipient")).
|
|
|
- Return(state.Relationship{}, nil)
|
|
|
- sr.On("RetrieveSession", state.NewIdentScreenName("recipient")).
|
|
|
- Return(&state.Session{})
|
|
|
- mr.On("RelayToScreenName", mock.Anything, state.NewIdentScreenName("recipient"), mock.AnythingOfType("wire.SNACMessage")).
|
|
|
- Return()
|
|
|
+ setupMocks: func(is *MockICBMService) {
|
|
|
+ is.On("ChannelMsgToHost", mock.Anything, oscarInstance, mock.AnythingOfType("wire.SNACFrame"), mock.AnythingOfType("wire.SNAC_0x04_0x06_ICBMChannelMsgToHost")).
|
|
|
+ Return(nil, nil)
|
|
|
},
|
|
|
expectedStatusCode: http.StatusOK,
|
|
|
checkResponse: func(t *testing.T, body string) {
|
|
|
@@ -107,117 +78,38 @@ func TestMessagingHandler_SendIM(t *testing.T) {
|
|
|
},
|
|
|
},
|
|
|
{
|
|
|
- name: "Success_OfflineRecipient_OfflineIM",
|
|
|
- queryParams: "t=offlineuser&message=hello&offlineIM=1",
|
|
|
- setupMocks: func(mr *MockMessageRelayer, om *MockOfflineMessageManager, sr *MockSessionRetriever, rf *MockRelationshipFetcher) {
|
|
|
- rf.On("Relationship", mock.Anything, mock.Anything, state.NewIdentScreenName("offlineuser")).
|
|
|
- Return(state.Relationship{}, nil)
|
|
|
- sr.On("RetrieveSession", state.NewIdentScreenName("offlineuser")).
|
|
|
- Return(nil)
|
|
|
- om.On("SaveMessage", mock.Anything, mock.AnythingOfType("state.OfflineMessage")).
|
|
|
- Return(1, nil)
|
|
|
- },
|
|
|
- expectedStatusCode: http.StatusOK,
|
|
|
- checkResponse: func(t *testing.T, body string) {
|
|
|
- assert.Contains(t, body, `"statusCode":200`)
|
|
|
- assert.Contains(t, body, `"msgId"`)
|
|
|
- },
|
|
|
- },
|
|
|
- {
|
|
|
- name: "Error_MissingRecipient",
|
|
|
- queryParams: "message=hello",
|
|
|
- setupMocks: func(mr *MockMessageRelayer, om *MockOfflineMessageManager, sr *MockSessionRetriever, rf *MockRelationshipFetcher) {
|
|
|
- },
|
|
|
+ name: "Error_MissingRecipient",
|
|
|
+ queryParams: "message=hello",
|
|
|
+ setupMocks: func(is *MockICBMService) {},
|
|
|
expectedStatusCode: http.StatusBadRequest,
|
|
|
checkResponse: func(t *testing.T, body string) {
|
|
|
assert.Contains(t, body, "missing required parameter: t")
|
|
|
},
|
|
|
},
|
|
|
{
|
|
|
- name: "Error_MissingMessage",
|
|
|
- queryParams: "t=recipient",
|
|
|
- setupMocks: func(mr *MockMessageRelayer, om *MockOfflineMessageManager, sr *MockSessionRetriever, rf *MockRelationshipFetcher) {
|
|
|
- },
|
|
|
+ name: "Error_MissingMessage",
|
|
|
+ queryParams: "t=recipient",
|
|
|
+ setupMocks: func(is *MockICBMService) {},
|
|
|
expectedStatusCode: http.StatusBadRequest,
|
|
|
checkResponse: func(t *testing.T, body string) {
|
|
|
assert.Contains(t, body, "missing required parameter: message")
|
|
|
},
|
|
|
},
|
|
|
- {
|
|
|
- name: "Error_BlockedBySender",
|
|
|
- queryParams: "t=blockeduser&message=hello",
|
|
|
- setupMocks: func(mr *MockMessageRelayer, om *MockOfflineMessageManager, sr *MockSessionRetriever, rf *MockRelationshipFetcher) {
|
|
|
- rf.On("Relationship", mock.Anything, mock.Anything, state.NewIdentScreenName("blockeduser")).
|
|
|
- Return(state.Relationship{YouBlock: true}, nil)
|
|
|
- },
|
|
|
- expectedStatusCode: http.StatusForbidden,
|
|
|
- checkResponse: func(t *testing.T, body string) {
|
|
|
- assert.Contains(t, body, "cannot send message to blocked user")
|
|
|
- },
|
|
|
- },
|
|
|
- {
|
|
|
- name: "Error_BlockedByRecipient",
|
|
|
- queryParams: "t=blocker&message=hello",
|
|
|
- setupMocks: func(mr *MockMessageRelayer, om *MockOfflineMessageManager, sr *MockSessionRetriever, rf *MockRelationshipFetcher) {
|
|
|
- rf.On("Relationship", mock.Anything, mock.Anything, state.NewIdentScreenName("blocker")).
|
|
|
- Return(state.Relationship{BlocksYou: true}, nil)
|
|
|
- },
|
|
|
- expectedStatusCode: http.StatusNotFound,
|
|
|
- checkResponse: func(t *testing.T, body string) {
|
|
|
- assert.Contains(t, body, "recipient is not online")
|
|
|
- },
|
|
|
- },
|
|
|
- {
|
|
|
- name: "Error_OfflineInboxFull",
|
|
|
- queryParams: "t=offlineuser&message=hello&offlineIM=1",
|
|
|
- setupMocks: func(mr *MockMessageRelayer, om *MockOfflineMessageManager, sr *MockSessionRetriever, rf *MockRelationshipFetcher) {
|
|
|
- rf.On("Relationship", mock.Anything, mock.Anything, state.NewIdentScreenName("offlineuser")).
|
|
|
- Return(state.Relationship{}, nil)
|
|
|
- sr.On("RetrieveSession", state.NewIdentScreenName("offlineuser")).
|
|
|
- Return(nil)
|
|
|
- om.On("SaveMessage", mock.Anything, mock.AnythingOfType("state.OfflineMessage")).
|
|
|
- Return(0, state.ErrOfflineInboxFull)
|
|
|
- },
|
|
|
- expectedStatusCode: http.StatusConflict,
|
|
|
- checkResponse: func(t *testing.T, body string) {
|
|
|
- assert.Contains(t, body, "recipient inbox full")
|
|
|
- },
|
|
|
- },
|
|
|
- {
|
|
|
- name: "Error_OfflineRecipient_NoOfflineIM",
|
|
|
- queryParams: "t=offlineuser&message=hello&offlineIM=0",
|
|
|
- setupMocks: func(mr *MockMessageRelayer, om *MockOfflineMessageManager, sr *MockSessionRetriever, rf *MockRelationshipFetcher) {
|
|
|
- rf.On("Relationship", mock.Anything, mock.Anything, state.NewIdentScreenName("offlineuser")).
|
|
|
- Return(state.Relationship{}, nil)
|
|
|
- sr.On("RetrieveSession", state.NewIdentScreenName("offlineuser")).
|
|
|
- Return(nil)
|
|
|
- },
|
|
|
- expectedStatusCode: http.StatusNotFound,
|
|
|
- checkResponse: func(t *testing.T, body string) {
|
|
|
- assert.Contains(t, body, "recipient is not online")
|
|
|
- },
|
|
|
- },
|
|
|
}
|
|
|
|
|
|
for _, tt := range tests {
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
- messageRelayer := &MockMessageRelayer{}
|
|
|
- offlineMsgMgr := &MockOfflineMessageManager{}
|
|
|
- sessionRetriever := &MockSessionRetriever{}
|
|
|
- relFetcher := &MockRelationshipFetcher{}
|
|
|
+ icbmService := &MockICBMService{}
|
|
|
|
|
|
- sessionMgr, aimsid := createTestSessionManager("testuser")
|
|
|
+ sessionMgr, aimsid := createTestSessionManagerWithOSCAR("testuser", oscarInstance)
|
|
|
|
|
|
handler := &MessagingHandler{
|
|
|
- SessionManager: sessionMgr,
|
|
|
- MessageRelayer: messageRelayer,
|
|
|
- OfflineMessageManager: offlineMsgMgr,
|
|
|
- SessionRetriever: sessionRetriever,
|
|
|
- RelationshipFetcher: relFetcher,
|
|
|
- Logger: slog.Default(),
|
|
|
+ SessionManager: sessionMgr,
|
|
|
+ ICBMService: icbmService,
|
|
|
+ Logger: slog.Default(),
|
|
|
}
|
|
|
|
|
|
- tt.setupMocks(messageRelayer, offlineMsgMgr, sessionRetriever, relFetcher)
|
|
|
+ tt.setupMocks(icbmService)
|
|
|
|
|
|
reqURL := "/im/sendIM?aimsid=" + aimsid + "&" + tt.queryParams
|
|
|
req, err := http.NewRequest("GET", reqURL, nil)
|
|
|
@@ -234,34 +126,24 @@ func TestMessagingHandler_SendIM(t *testing.T) {
|
|
|
tt.checkResponse(t, responseBody)
|
|
|
}
|
|
|
|
|
|
- messageRelayer.AssertExpectations(t)
|
|
|
- offlineMsgMgr.AssertExpectations(t)
|
|
|
- sessionRetriever.AssertExpectations(t)
|
|
|
- relFetcher.AssertExpectations(t)
|
|
|
+ icbmService.AssertExpectations(t)
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
func TestMessagingHandler_SendIM_POST(t *testing.T) {
|
|
|
- messageRelayer := &MockMessageRelayer{}
|
|
|
- sessionRetriever := &MockSessionRetriever{}
|
|
|
- relFetcher := &MockRelationshipFetcher{}
|
|
|
+ oscarInstance := state.NewSession().AddInstance()
|
|
|
+ icbmService := &MockICBMService{}
|
|
|
|
|
|
- sessionMgr, aimsid := createTestSessionManager("testuser")
|
|
|
+ sessionMgr, aimsid := createTestSessionManagerWithOSCAR("testuser", oscarInstance)
|
|
|
|
|
|
- relFetcher.On("Relationship", mock.Anything, mock.Anything, state.NewIdentScreenName("recipient")).
|
|
|
- Return(state.Relationship{}, nil)
|
|
|
- sessionRetriever.On("RetrieveSession", state.NewIdentScreenName("recipient")).
|
|
|
- Return(&state.Session{})
|
|
|
- messageRelayer.On("RelayToScreenName", mock.Anything, state.NewIdentScreenName("recipient"), mock.AnythingOfType("wire.SNACMessage")).
|
|
|
- Return()
|
|
|
+ icbmService.On("ChannelMsgToHost", mock.Anything, oscarInstance, mock.AnythingOfType("wire.SNACFrame"), mock.AnythingOfType("wire.SNAC_0x04_0x06_ICBMChannelMsgToHost")).
|
|
|
+ Return(nil, nil)
|
|
|
|
|
|
handler := &MessagingHandler{
|
|
|
- SessionManager: sessionMgr,
|
|
|
- MessageRelayer: messageRelayer,
|
|
|
- SessionRetriever: sessionRetriever,
|
|
|
- RelationshipFetcher: relFetcher,
|
|
|
- Logger: slog.Default(),
|
|
|
+ SessionManager: sessionMgr,
|
|
|
+ ICBMService: icbmService,
|
|
|
+ Logger: slog.Default(),
|
|
|
}
|
|
|
|
|
|
body := strings.NewReader("message=" + url.QueryEscape("hello from post"))
|
|
|
@@ -274,9 +156,7 @@ func TestMessagingHandler_SendIM_POST(t *testing.T) {
|
|
|
|
|
|
assert.Equal(t, http.StatusOK, rr.Code)
|
|
|
assert.Contains(t, rr.Body.String(), `"msgId"`)
|
|
|
- messageRelayer.AssertExpectations(t)
|
|
|
- sessionRetriever.AssertExpectations(t)
|
|
|
- relFetcher.AssertExpectations(t)
|
|
|
+ icbmService.AssertExpectations(t)
|
|
|
}
|
|
|
|
|
|
func TestMessagingHandler_SendIM_MissingAimsid(t *testing.T) {
|
|
|
@@ -312,23 +192,24 @@ func TestMessagingHandler_SendIM_InvalidSession(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestMessagingHandler_SetTyping(t *testing.T) {
|
|
|
+ oscarInstance := state.NewSession().AddInstance()
|
|
|
+
|
|
|
tests := []struct {
|
|
|
name string
|
|
|
queryParams string
|
|
|
- setupMocks func(*MockMessageRelayer, *MockSessionRetriever, *MockRelationshipFetcher)
|
|
|
+ setupMocks func(*MockICBMService)
|
|
|
expectedStatusCode int
|
|
|
checkResponse func(*testing.T, string)
|
|
|
}{
|
|
|
{
|
|
|
name: "Success_TypingStarted",
|
|
|
- queryParams: "t=recipient&typing=true",
|
|
|
- setupMocks: func(mr *MockMessageRelayer, sr *MockSessionRetriever, rf *MockRelationshipFetcher) {
|
|
|
- rf.On("Relationship", mock.Anything, mock.Anything, state.NewIdentScreenName("recipient")).
|
|
|
- Return(state.Relationship{}, nil)
|
|
|
- sr.On("RetrieveSession", state.NewIdentScreenName("recipient")).
|
|
|
- Return(&state.Session{})
|
|
|
- mr.On("RelayToScreenName", mock.Anything, state.NewIdentScreenName("recipient"), mock.AnythingOfType("wire.SNACMessage")).
|
|
|
- Return()
|
|
|
+ queryParams: "t=recipient&typingStatus=typing",
|
|
|
+ setupMocks: func(is *MockICBMService) {
|
|
|
+ is.On("ClientEvent", mock.Anything, oscarInstance, wire.SNACFrame{}, wire.SNAC_0x04_0x14_ICBMClientEvent{
|
|
|
+ ChannelID: wire.ICBMChannelIM,
|
|
|
+ ScreenName: "recipient",
|
|
|
+ Event: 0x0002,
|
|
|
+ }).Return(nil)
|
|
|
},
|
|
|
expectedStatusCode: http.StatusOK,
|
|
|
checkResponse: func(t *testing.T, body string) {
|
|
|
@@ -336,50 +217,33 @@ func TestMessagingHandler_SetTyping(t *testing.T) {
|
|
|
},
|
|
|
},
|
|
|
{
|
|
|
- name: "Success_TypingStopped",
|
|
|
- queryParams: "t=recipient&typing=false",
|
|
|
- setupMocks: func(mr *MockMessageRelayer, sr *MockSessionRetriever, rf *MockRelationshipFetcher) {
|
|
|
- rf.On("Relationship", mock.Anything, mock.Anything, state.NewIdentScreenName("recipient")).
|
|
|
- Return(state.Relationship{}, nil)
|
|
|
- sr.On("RetrieveSession", state.NewIdentScreenName("recipient")).
|
|
|
- Return(&state.Session{})
|
|
|
- mr.On("RelayToScreenName", mock.Anything, state.NewIdentScreenName("recipient"), mock.AnythingOfType("wire.SNACMessage")).
|
|
|
- Return()
|
|
|
- },
|
|
|
- expectedStatusCode: http.StatusOK,
|
|
|
- },
|
|
|
- {
|
|
|
- name: "Success_BlockedSilent",
|
|
|
- queryParams: "t=blockeduser&typing=true",
|
|
|
- setupMocks: func(mr *MockMessageRelayer, sr *MockSessionRetriever, rf *MockRelationshipFetcher) {
|
|
|
- rf.On("Relationship", mock.Anything, mock.Anything, state.NewIdentScreenName("blockeduser")).
|
|
|
- Return(state.Relationship{YouBlock: true}, nil)
|
|
|
- // No relay should happen
|
|
|
+ name: "Success_TypingPaused",
|
|
|
+ queryParams: "t=recipient&typingStatus=typed",
|
|
|
+ setupMocks: func(is *MockICBMService) {
|
|
|
+ is.On("ClientEvent", mock.Anything, oscarInstance, wire.SNACFrame{}, wire.SNAC_0x04_0x14_ICBMClientEvent{
|
|
|
+ ChannelID: wire.ICBMChannelIM,
|
|
|
+ ScreenName: "recipient",
|
|
|
+ Event: 0x0001,
|
|
|
+ }).Return(nil)
|
|
|
},
|
|
|
expectedStatusCode: http.StatusOK,
|
|
|
- checkResponse: func(t *testing.T, body string) {
|
|
|
- assert.Contains(t, body, `"statusCode":200`)
|
|
|
- },
|
|
|
},
|
|
|
{
|
|
|
- name: "Success_OfflineRecipient",
|
|
|
- queryParams: "t=offlineuser&typing=true",
|
|
|
- setupMocks: func(mr *MockMessageRelayer, sr *MockSessionRetriever, rf *MockRelationshipFetcher) {
|
|
|
- rf.On("Relationship", mock.Anything, mock.Anything, state.NewIdentScreenName("offlineuser")).
|
|
|
- Return(state.Relationship{}, nil)
|
|
|
- sr.On("RetrieveSession", state.NewIdentScreenName("offlineuser")).
|
|
|
- Return(nil)
|
|
|
- // No relay should happen for offline users
|
|
|
+ name: "Success_TypingStopped",
|
|
|
+ queryParams: "t=recipient&typingStatus=none",
|
|
|
+ setupMocks: func(is *MockICBMService) {
|
|
|
+ is.On("ClientEvent", mock.Anything, oscarInstance, wire.SNACFrame{}, wire.SNAC_0x04_0x14_ICBMClientEvent{
|
|
|
+ ChannelID: wire.ICBMChannelIM,
|
|
|
+ ScreenName: "recipient",
|
|
|
+ Event: 0x0000,
|
|
|
+ }).Return(nil)
|
|
|
},
|
|
|
expectedStatusCode: http.StatusOK,
|
|
|
- checkResponse: func(t *testing.T, body string) {
|
|
|
- assert.Contains(t, body, `"statusCode":200`)
|
|
|
- },
|
|
|
},
|
|
|
{
|
|
|
name: "Error_MissingRecipient",
|
|
|
- queryParams: "typing=true",
|
|
|
- setupMocks: func(mr *MockMessageRelayer, sr *MockSessionRetriever, rf *MockRelationshipFetcher) {},
|
|
|
+ queryParams: "typingStatus=typing",
|
|
|
+ setupMocks: func(is *MockICBMService) {},
|
|
|
expectedStatusCode: http.StatusBadRequest,
|
|
|
checkResponse: func(t *testing.T, body string) {
|
|
|
assert.Contains(t, body, "missing required parameter: t")
|
|
|
@@ -389,21 +253,17 @@ func TestMessagingHandler_SetTyping(t *testing.T) {
|
|
|
|
|
|
for _, tt := range tests {
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
- messageRelayer := &MockMessageRelayer{}
|
|
|
- sessionRetriever := &MockSessionRetriever{}
|
|
|
- relFetcher := &MockRelationshipFetcher{}
|
|
|
+ icbmService := &MockICBMService{}
|
|
|
|
|
|
- sessionMgr, aimsid := createTestSessionManager("testuser")
|
|
|
+ sessionMgr, aimsid := createTestSessionManagerWithOSCAR("testuser", oscarInstance)
|
|
|
|
|
|
handler := &MessagingHandler{
|
|
|
- SessionManager: sessionMgr,
|
|
|
- MessageRelayer: messageRelayer,
|
|
|
- SessionRetriever: sessionRetriever,
|
|
|
- RelationshipFetcher: relFetcher,
|
|
|
- Logger: slog.Default(),
|
|
|
+ SessionManager: sessionMgr,
|
|
|
+ ICBMService: icbmService,
|
|
|
+ Logger: slog.Default(),
|
|
|
}
|
|
|
|
|
|
- tt.setupMocks(messageRelayer, sessionRetriever, relFetcher)
|
|
|
+ tt.setupMocks(icbmService)
|
|
|
|
|
|
reqURL := "/im/setTyping?aimsid=" + aimsid + "&" + tt.queryParams
|
|
|
req, err := http.NewRequest("GET", reqURL, nil)
|
|
|
@@ -420,9 +280,7 @@ func TestMessagingHandler_SetTyping(t *testing.T) {
|
|
|
tt.checkResponse(t, responseBody)
|
|
|
}
|
|
|
|
|
|
- messageRelayer.AssertExpectations(t)
|
|
|
- sessionRetriever.AssertExpectations(t)
|
|
|
- relFetcher.AssertExpectations(t)
|
|
|
+ icbmService.AssertExpectations(t)
|
|
|
})
|
|
|
}
|
|
|
}
|