github.com/ngicks/gokugen@v0.0.5/middleware/log/log_test.go (about)

     1  package log_test
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/golang/mock/gomock"
    10  	"github.com/ngicks/gokugen"
    11  	mock_gokugen "github.com/ngicks/gokugen/__mock"
    12  	logmw "github.com/ngicks/gokugen/middleware/log"
    13  	mock_log "github.com/ngicks/gokugen/middleware/log/__mock"
    14  )
    15  
    16  func TestLog(t *testing.T) {
    17  	ctrl := gomock.NewController(t)
    18  	mockLogger := mock_log.NewMockLogger(ctrl)
    19  
    20  	mockErr := errors.New("mock error")
    21  	mockLogger.
    22  		EXPECT().
    23  		Info(
    24  			gomock.Any(), // value
    25  			gomock.Any(), // "scheduled_at" label
    26  			gomock.Any(), // "scheduled_at" value
    27  			gomock.Any(), // "task_id" label
    28  			gomock.Any(), // "task_id" value
    29  			gomock.Any(), // "work_id" label
    30  			gomock.Any(), // "work_id" value
    31  			gomock.Any(), // "timing" label
    32  			gomock.Any(), // "timing" value
    33  		).
    34  		// 2 if successful, 1 if error
    35  		Times(3)
    36  	mockLogger.
    37  		EXPECT().
    38  		Error(
    39  			gomock.Any(),
    40  			gomock.Any(),
    41  			gomock.Any(),
    42  			gomock.Any(),
    43  			gomock.Any(),
    44  			gomock.Any(),
    45  			gomock.Any(),
    46  			gomock.Any(),
    47  			gomock.Any(),
    48  		).
    49  		Times(1)
    50  
    51  	_,
    52  		mockSched, getTrappedTask := mock_gokugen.BuildMockScheduler(t)
    53  
    54  	ma := gokugen.NewMiddlewareApplicator(mockSched)
    55  
    56  	inputCtx := gokugen.BuildContext(
    57  		time.Now(),
    58  		func(taskCtx context.Context, scheduled time.Time) (any, error) {
    59  			return "baz", nil
    60  		},
    61  		nil,
    62  		gokugen.WithTaskId("foo"),
    63  		gokugen.WithWorkId("bar"),
    64  	)
    65  	inputError := gokugen.BuildContext(
    66  		time.Now(),
    67  		func(taskCtx context.Context, scheduled time.Time) (any, error) {
    68  			return "", mockErr
    69  		},
    70  		nil,
    71  		gokugen.WithTaskId("qux"),
    72  		gokugen.WithWorkId("quux"),
    73  	)
    74  
    75  	ma.Use(
    76  		logmw.New(mockLogger).Middleware,
    77  	)
    78  
    79  	ma.Schedule(inputCtx)
    80  	getTrappedTask().Do(context.TODO())
    81  	ma.Schedule(inputError)
    82  	getTrappedTask().Do(context.TODO())
    83  }