-
thijsheijden authored
Mainly testing the handlemessage method with different input messages.
thijsheijden authoredMainly testing the handlemessage method with different input messages.
consume_test.go 7.64 KiB
package consume
import (
"encoding/json"
"query-service/internal/adapters/brokeradapter"
mockbrokerdriver "query-service/internal/drivers/brokerdriver/mock"
mockkeyvaluedriver "query-service/internal/drivers/keyvaluedriver/mock"
mockconvertquery "query-service/internal/usecases/convertquery/mock"
"query-service/internal/usecases/produce"
mockrequest "query-service/internal/usecases/request/mock"
"testing"
"github.com/stretchr/testify/assert"
)
func TestStart(t *testing.T) {
// // Create broker adapter
// brokerAdapter := brokeradapter.CreateGateway()
// // Create a mock broker
// mockBroker := mockbrokerdriver.CreateBroker(brokerAdapter)
// // Create mock key value store
// keyValueStore := mockkeyvaluedriver.CreateKeyValueStore()
// // Create new producer service
// producerService := produce.NewService(mockBroker, keyValueStore)
// // Create new convert query service
// convertQueryService := convertquery.NewService()
// // Create new request sender service
// requestSenderService := request.NewService()
// // Create new service
// service := NewService(mockBroker, producerService, convertQueryService, requestSenderService)
}
func TestHandleCorrectMessage(t *testing.T) {
// Create broker adapter
brokerAdapter := brokeradapter.CreateGateway()
// Create a mock broker
mockBroker := mockbrokerdriver.CreateBroker(brokerAdapter)
// Create mock key value store
keyValueStore := mockkeyvaluedriver.CreateKeyValueStore()
// Create new producer service
producerService := produce.NewService(mockBroker, keyValueStore)
producerService.Start()
// Create new convert query service
convertQueryService := mockconvertquery.NewService()
// Create new request sender service
requestSenderService := mockrequest.NewService()
// Create new service
service := NewService(mockBroker, producerService, convertQueryService, requestSenderService)
// Create mock session and mock queue
mockSession := "mock-session"
mockQueue := "mock-queue"
// Set the test-session sessionID queue to mock-queue in key value store
keyValueStore.Set(&mockSession, &mockQueue)
// Create headers containing a sessionID
headers := make(map[string]interface{})
headers["sessionID"] = mockSession
mockMessage := brokeradapter.Message{
Headers: headers,
Body: []byte("test message"),
}
// Assert that there have not been any messages sent yet
assert.Empty(t, mockBroker.Messages)
// Send the mock message
service.HandleMessage(&mockMessage)
// Assert that there now are two messages that have been sent with routing key mock-queue
assert.Len(t, mockBroker.Messages[mockQueue], 2)
// Assert that the first message is of type 'query_translation_result' and has 'Query converted' as value
var translationMessage map[string]interface{}
json.Unmarshal(mockBroker.Messages[mockQueue][0].Body, &translationMessage)
assert.Equal(t, "query_translation_result", translationMessage["type"])
assert.Equal(t, "Query converted", translationMessage["values"])
// Assert that the second message is of type 'query_result' and contains no values
var resultMessage map[string]interface{}
json.Unmarshal(mockBroker.Messages[mockQueue][1].Body, &resultMessage)
assert.Equal(t, "query_result", resultMessage["type"])
assert.Empty(t, resultMessage["values"])
}
// Unit test message received with no session ID
func TestHandleMessageNoSessionID(t *testing.T) {
// Create broker adapter
brokerAdapter := brokeradapter.CreateGateway()
// Create a mock broker
mockBroker := mockbrokerdriver.CreateBroker(brokerAdapter)
// Create mock key value store
keyValueStore := mockkeyvaluedriver.CreateKeyValueStore()
// Create new producer service
producerService := produce.NewService(mockBroker, keyValueStore)
// Create new convert query service
convertQueryService := mockconvertquery.NewService()
// Create new request sender service
requestSenderService := mockrequest.NewService()
// Create new service
service := NewService(mockBroker, producerService, convertQueryService, requestSenderService)
// Create headers containing a sessionID
headers := make(map[string]interface{})
mockMessage := brokeradapter.Message{
Headers: headers,
Body: []byte("test message"),
}
// Assert that there have not been any messages sent yet
assert.Empty(t, mockBroker.Messages)
// Send the mock message
service.HandleMessage(&mockMessage)
// Assert that there was no message published
assert.Empty(t, mockBroker.Messages)
}
// Unit test receival of message and not being able to parse it
func TestFailToConvertQuery(t *testing.T) {
// Create broker adapter
brokerAdapter := brokeradapter.CreateGateway()
// Create a mock broker
mockBroker := mockbrokerdriver.CreateBroker(brokerAdapter)
// Create mock key value store
keyValueStore := mockkeyvaluedriver.CreateKeyValueStore()
// Create new producer service
producerService := produce.NewService(mockBroker, keyValueStore)
producerService.Start()
// Create new convert query service
convertQueryService := mockconvertquery.NewService()
// Create new request sender service
requestSenderService := mockrequest.NewService()
// Create new service
service := NewService(mockBroker, producerService, convertQueryService, requestSenderService)
// Create mock session and mock queue
mockSession := "mock-session"
mockQueue := "mock-queue"
// Set the test-session sessionID queue to mock-queue in key value store
keyValueStore.Set(&mockSession, &mockQueue)
// Create headers containing a sessionID
headers := make(map[string]interface{})
headers["sessionID"] = mockSession
mockMessage := brokeradapter.Message{
Headers: headers,
Body: []byte("test message"),
}
// Make it so that the conversion service throws an error
convertQueryService.ToggleError()
// Assert that there have not been any messages sent yet
assert.Empty(t, mockBroker.Messages)
// Send the mock message
service.HandleMessage(&mockMessage)
// Assert that there was an error message published
var errorMsg map[string]interface{}
json.Unmarshal(mockBroker.Messages[mockQueue][0].Body, &errorMsg)
assert.Equal(t, "query_translation_error", errorMsg["type"])
}
// Test AQL querying error handling
func TestArangoError(t *testing.T) {
// Create broker adapter
brokerAdapter := brokeradapter.CreateGateway()
// Create a mock broker
mockBroker := mockbrokerdriver.CreateBroker(brokerAdapter)
// Create mock key value store
keyValueStore := mockkeyvaluedriver.CreateKeyValueStore()
// Create new producer service
producerService := produce.NewService(mockBroker, keyValueStore)
producerService.Start()
// Create new convert query service
convertQueryService := mockconvertquery.NewService()
// Create new request sender service
requestSenderService := mockrequest.NewService()
// Create new service
service := NewService(mockBroker, producerService, convertQueryService, requestSenderService)
// Create mock session and mock queue
mockSession := "mock-session"
mockQueue := "mock-queue"
// Set the test-session sessionID queue to mock-queue in key value store
keyValueStore.Set(&mockSession, &mockQueue)
// Create headers containing a sessionID
headers := make(map[string]interface{})
headers["sessionID"] = mockSession
mockMessage := brokeradapter.Message{
Headers: headers,
Body: []byte("test message"),
}
// Make it so that the request sender service throws an error
requestSenderService.ToggleError()
// Assert that there have not been any messages sent yet
assert.Empty(t, mockBroker.Messages)
// Send the mock message
service.HandleMessage(&mockMessage)
// Assert that there was an error message published
var errorMsg map[string]interface{}
json.Unmarshal(mockBroker.Messages[mockQueue][1].Body, &errorMsg)
assert.Equal(t, "query_database_error", errorMsg["type"])
}