cml04-eventer/publisher_test.go

90 lines
2.5 KiB
Go

package cml04eventer
import (
"encoding/json"
"testing"
"git.espin.casa/albert/logger"
"github.com/nsqio/go-nsq"
"github.com/stretchr/testify/assert"
)
// MockLoggerAdapter is an implementation of LoggerAdapter for testing
type MockLoggerAdapter struct{}
type LoggerFields map[string]interface{}
func (m *MockLoggerAdapter) Info(msg string, fields logger.LogFields) {}
func (m *MockLoggerAdapter) Error(msg string, err error, fields logger.LogFields) {}
func (m *MockLoggerAdapter) Debug(msg string, fields logger.LogFields) {}
func (m *MockLoggerAdapter) Warn(msg string, fields logger.LogFields) {}
func (m *MockLoggerAdapter) Trace(msg string, fields logger.LogFields) {}
func (m *MockLoggerAdapter) Fatal(msg string, err error, fields logger.LogFields) {}
func (m *MockLoggerAdapter) Panic(msg string, err error, fields logger.LogFields) {}
// MockMarshaler is an implementation of Marshaler for testing
type MockMarshaler struct{}
func (m MockMarshaler) Marshal(topic string, msg *Event) ([]byte, error) {
// Simply convert the event to JSON for testing
return json.Marshal(msg)
}
func (m MockMarshaler) Unmarshal(nsqMsg *nsq.Message) (*Event, error) {
// Simply decode the JSON message for testing
var event Event
err := json.Unmarshal(nsqMsg.Body, &event)
return &event, err
}
func TestPublisherImpl_PublishEvent(t *testing.T) {
// Create an instance of MockLoggerAdapter
mockLogger := &MockLoggerAdapter{}
// Test configuration for the Publisher
config := &PublisherImplConfig{
NSQAddress: "localhost",
NSQPort: 4150,
Marshaler: MockMarshaler{},
}
// Create an instance of PublisherImpl for testing
publisher, err := NewPublisher(config, mockLogger)
assert.NoError(t, err)
// Create a test event
event := &Event{
EventID: "123",
EventSender: "test-sender",
EventTopic: "test-topic",
EventData: []byte("test-data"),
}
// Publish the event
err = publisher.PublishEvent(event)
assert.NoError(t, err)
// Close the publisher
err = publisher.Close()
assert.NoError(t, err)
}
func TestPublisherImpl_Close(t *testing.T) {
// Create an instance of MockLoggerAdapter
mockLogger := &MockLoggerAdapter{}
// Test configuration for the Publisher
config := &PublisherImplConfig{
NSQAddress: "localhost",
NSQPort: 4150,
Marshaler: MockMarshaler{},
}
// Create an instance of PublisherImpl for testing
publisher, err := NewPublisher(config, mockLogger)
assert.NoError(t, err)
// Close the publisher
err = publisher.Close()
assert.NoError(t, err)
}