Select Git revision
zap_test.go 2.31 KiB
package zap
import (
"context"
"reflect"
"slices"
"testing"
"git.perx.ru/perxis/perxis-go/pkg/log"
logmocks "git.perx.ru/perxis/perxis-go/pkg/log/mocks"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
func TestExample(t *testing.T) {
wantEntries := []*log.Entry{
{
LogLevel: log.Level(zapcore.InfoLevel),
Message: "создан элемент коллекции",
Category: "create",
Component: "Items.Service",
Event: "Items.Create",
Object: "/spaces/WPNN/envs/9VGP/cols/GxNv/items/W0fl",
Caller: "/users/PHVz",
Attr: "any",
Tags: []string{"tag1", "tag2", "tag3"},
},
{
LogLevel: log.Level(zapcore.WarnLevel),
Message: "изменен элемент коллекции",
Category: "update",
Component: "Items.Service",
Event: "Items.Update",
Object: "/spaces/WPNN/envs/9VGP/cols/GxNv/items/W0fl/revs/cmV2cw",
Caller: "/users/PHVz",
},
}
service := &logmocks.Service{}
service.On("Log", mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
entries := args.Get(1).([]*log.Entry)
assert.True(t, slices.EqualFunc(wantEntries, entries, func(wantEntry, gotEntry *log.Entry) bool {
assert.NotEmpty(t, gotEntry.ID)
assert.NotEmpty(t, gotEntry.Timestamp)
gotEntry.ID = wantEntry.ID // игнорируем ID
gotEntry.Timestamp = wantEntry.Timestamp // игнорируем Timestamp
return reflect.DeepEqual(wantEntry, gotEntry)
}))
}).
Once()
ws := NewBufferedWriteSyncer(service)
logger := WithLogService(zap.NewNop(), ws)
logger.Info("создан элемент коллекции",
Category("create"),
Component("Items.Service"),
Event("Items.Create"),
Object("/spaces/WPNN/envs/9VGP/cols/GxNv/items/W0fl"),
CallerFromContext(ContextWithCaller(context.Background(), "/users/PHVz")),
Attr("any"),
Tags("tag1", "tag2", "tag3"),
)
logger.Warn("изменен элемент коллекции",
Category("update"),
Component("Items.Service"),