github.com/aavshr/aws-sdk-go@v1.41.3/example/service/sqs/mockingClientsForTests/ifaceExample_test.go (about)

     1  //go:build example
     2  // +build example
     3  
     4  package main
     5  
     6  import (
     7  	"fmt"
     8  	"testing"
     9  
    10  	"github.com/aavshr/aws-sdk-go/aws"
    11  	"github.com/aavshr/aws-sdk-go/service/sqs"
    12  	"github.com/aavshr/aws-sdk-go/service/sqs/sqsiface"
    13  )
    14  
    15  type mockedReceiveMsgs struct {
    16  	sqsiface.SQSAPI
    17  	Resp sqs.ReceiveMessageOutput
    18  }
    19  
    20  func (m mockedReceiveMsgs) ReceiveMessage(in *sqs.ReceiveMessageInput) (*sqs.ReceiveMessageOutput, error) {
    21  	// Only need to return mocked response output
    22  	return &m.Resp, nil
    23  }
    24  
    25  func TestQueueGetMessage(t *testing.T) {
    26  	cases := []struct {
    27  		Resp     sqs.ReceiveMessageOutput
    28  		Expected []Message
    29  	}{
    30  		{ // Case 1, expect parsed responses
    31  			Resp: sqs.ReceiveMessageOutput{
    32  				Messages: []*sqs.Message{
    33  					{Body: aws.String(`{"from":"user_1","to":"room_1","msg":"Hello!"}`)},
    34  					{Body: aws.String(`{"from":"user_2","to":"room_1","msg":"Hi user_1 :)"}`)},
    35  				},
    36  			},
    37  			Expected: []Message{
    38  				{From: "user_1", To: "room_1", Msg: "Hello!"},
    39  				{From: "user_2", To: "room_1", Msg: "Hi user_1 :)"},
    40  			},
    41  		},
    42  		{ // Case 2, not messages returned
    43  			Resp:     sqs.ReceiveMessageOutput{},
    44  			Expected: []Message{},
    45  		},
    46  	}
    47  
    48  	for i, c := range cases {
    49  		q := Queue{
    50  			Client: mockedReceiveMsgs{Resp: c.Resp},
    51  			URL:    fmt.Sprintf("mockURL_%d", i),
    52  		}
    53  		msgs, err := q.GetMessages(20)
    54  		if err != nil {
    55  			t.Fatalf("%d, unexpected error, %v", i, err)
    56  		}
    57  		if a, e := len(msgs), len(c.Expected); a != e {
    58  			t.Fatalf("%d, expected %d messages, got %d", i, e, a)
    59  		}
    60  		for j, msg := range msgs {
    61  			if a, e := msg, c.Expected[j]; a != e {
    62  				t.Errorf("%d, expected %v message, got %v", i, e, a)
    63  			}
    64  		}
    65  	}
    66  }