package produce import ( "query-service/internal/adapters/brokeradapter" mockbrokerdriver "query-service/internal/drivers/brokerdriver/mock" mockkeyvaluedriver "query-service/internal/drivers/keyvaluedriver/mock" "testing" "github.com/stretchr/testify/assert" ) // Make sure a correct message gets published func TestPublishCorrectMessage(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 service and start it service := NewService(mockBroker, keyValueStore) service.Start() // 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 // Assert that there have not been any messages sent yet assert.Empty(t, mockBroker.Messages) // Publish the message mockMessage := []byte("Test message") service.PublishMessage(&mockMessage, &mockSession) // Assert that there is now 1 message assert.Len(t, mockBroker.Messages[mockQueue], 1) // Assert that this message contains the mockMessage assert.Equal(t, mockBroker.Messages[mockQueue][0].Body, mockMessage) } // Test publishing message without setting routing in key value store func TestPublishMessageNoRouting(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 service and start it service := NewService(mockBroker, keyValueStore) service.Start() // Create mock session and mock queue mockSession := "mock-session" // Create headers containing a sessionID headers := make(map[string]interface{}) headers["sessionID"] = mockSession // Assert that there have not been any messages sent yet assert.Empty(t, mockBroker.Messages) // Publish the message mockMessage := []byte("Test message") service.PublishMessage(&mockMessage, &mockSession) // Assert that there are still 0 messages assert.Empty(t, mockBroker.Messages) }