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 }