github.com/goravel/framework@v1.13.9/event/task_test.go (about)

     1  package event
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  
     9  	"github.com/goravel/framework/contracts/event"
    10  	queuecontract "github.com/goravel/framework/contracts/queue"
    11  	queuemock "github.com/goravel/framework/contracts/queue/mocks"
    12  )
    13  
    14  func TestDispatch(t *testing.T) {
    15  	var (
    16  		mockQueue *queuemock.Queue
    17  		task      *Task
    18  	)
    19  
    20  	beforeEach := func() {
    21  		mockQueue = &queuemock.Queue{}
    22  	}
    23  
    24  	tests := []struct {
    25  		name      string
    26  		setup     func()
    27  		expectErr bool
    28  	}{
    29  		{
    30  			name: "dispatch sync success",
    31  			setup: func() {
    32  				listener := &TestListener{}
    33  				mockTask := &queuemock.Task{}
    34  
    35  				mockQueue.On("Job", listener, []queuecontract.Arg{
    36  					{Type: "string", Value: "test"},
    37  				}).Return(mockTask).Once()
    38  				mockTask.On("DispatchSync").Return(nil).Once()
    39  
    40  				task = NewTask(mockQueue, []event.Arg{
    41  					{Type: "string", Value: "test"},
    42  				}, &TestEvent{}, []event.Listener{
    43  					listener,
    44  				})
    45  			},
    46  			expectErr: false,
    47  		},
    48  		{
    49  			name: "dispatch sync error",
    50  			setup: func() {
    51  				listener := &TestListenerHandleError{}
    52  				mockTask := &queuemock.Task{}
    53  
    54  				mockQueue.On("Job", listener, []queuecontract.Arg{
    55  					{Type: "string", Value: "test"},
    56  				}).Return(mockTask).Once()
    57  				mockTask.On("DispatchSync").Return(errors.New("error")).Once()
    58  
    59  				task = NewTask(mockQueue, []event.Arg{
    60  					{Type: "string", Value: "test"},
    61  				}, &TestEvent{}, []event.Listener{
    62  					&TestListenerHandleError{},
    63  				})
    64  			},
    65  			expectErr: true,
    66  		},
    67  		{
    68  			name: "no listeners",
    69  			setup: func() {
    70  				task = NewTask(mockQueue, []event.Arg{
    71  					{Type: "string", Value: "test"},
    72  				}, &TestEventNoRegister{}, nil)
    73  			},
    74  			expectErr: true,
    75  		},
    76  		{
    77  			name: "event handle return error",
    78  			setup: func() {
    79  				task = NewTask(mockQueue, []event.Arg{
    80  					{Type: "string", Value: "test"},
    81  				}, &TestEventHandleError{}, []event.Listener{
    82  					&TestListener{},
    83  				})
    84  			},
    85  			expectErr: true,
    86  		},
    87  	}
    88  
    89  	for _, test := range tests {
    90  		t.Run(test.name, func(t *testing.T) {
    91  			beforeEach()
    92  			test.setup()
    93  			err := task.Dispatch()
    94  			assert.Equal(t, test.expectErr, err != nil, test.name)
    95  			mockQueue.AssertExpectations(t)
    96  		})
    97  	}
    98  }