github.com/angryronald/go-kit@v0.0.0-20240505173814-ff2bd9c79dbf/publisher/rabbitmq/publisher.service_test.go (about)

     1  package rabbitmq
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"gocloud.dev/pubsub"
     8  	"gocloud.dev/pubsub/rabbitpubsub"
     9  
    10  	"github.com/golang/mock/gomock"
    11  	"github.com/google/uuid"
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  var pubsubTopics map[string]*pubsub.Topic
    16  var subscription map[string]*pubsub.Subscription
    17  
    18  func init() {
    19  	pubsubTopics = map[string]*pubsub.Topic{}
    20  	subscription = map[string]*pubsub.Subscription{}
    21  }
    22  
    23  func TestRabbitmqPublisher_Publish(t *testing.T) {
    24  	pubsubTopics[topicName] = rabbitpubsub.OpenTopic(rabbitmqClientPublisher, topicName, nil)
    25  	subscription[topicName] = rabbitpubsub.OpenSubscription(rabbitmqClientConsumer, topicName, nil)
    26  
    27  	// Create a testing context.
    28  	ctx := context.Background()
    29  
    30  	// Create a mock controller.
    31  	ctrl := gomock.NewController(t)
    32  	defer ctrl.Finish()
    33  
    34  	publisher := NewPublisher(pubsubTopics)
    35  
    36  	if err := publisher.Publish(ctx, topicName, uuid.NewString(), []byte(`{"ID":"123456"}`)); err != nil {
    37  		t.Errorf("error when publishing event: %v", err)
    38  	}
    39  
    40  	// Call the function to test.
    41  	for {
    42  		msg, err := subscription[topicName].Receive(ctx)
    43  		if err != nil {
    44  			t.Errorf("error when consuming event: %v", err)
    45  		}
    46  
    47  		msg.Ack()
    48  		ctx.Done()
    49  		break
    50  	}
    51  
    52  	// Assert that the expectations were met.
    53  	assert.Nil(t, ctx.Err())
    54  }