Select Git revision
zap_test.go 2.33 KiB
package zap
import (
"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/mock"
"github.com/stretchr/testify/require"
"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",
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",
Attr: map[string]map[string]any{"title": {"old": "old title", "new": "new title"}},
},
}
service := &logmocks.Service{}
service.On("Log", mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
entries := args.Get(1).([]*log.Entry)
require.True(t, slices.EqualFunc(wantEntries, entries, func(wantEntry, gotEntry *log.Entry) bool {
require.NotEmpty(t, gotEntry.ID)
require.NotEmpty(t, gotEntry.Timestamp)
gotEntry.ID = wantEntry.ID // игнорируем ID
gotEntry.Timestamp = wantEntry.Timestamp // игнорируем Timestamp
return reflect.DeepEqual(wantEntry, gotEntry)
}))
}).
Once()
ws := NewBufferedWriteSyncer(service)
logger := zap.New(NewCore(ws))
logger.Info("создан элемент коллекции",
Category("create"),
Component("Items.Service"),
Event("Items.Create"),
Object("/spaces/WPNN/envs/9VGP/cols/GxNv/items/W0fl"),
Caller("/users/PHVz"),
Tags("tag1", "tag2", "tag3"),
)
logger.Warn("изменен элемент коллекции",
Category("update"),
Component("Items.Service"),
Event("Items.Update"),
Object("/spaces/WPNN/envs/9VGP/cols/GxNv/items/W0fl/revs/cmV2cw"),
Caller("/users/PHVz"),
Attr(map[string]map[string]any{"title": {"old": "old title", "new": "new title"}}),
)
err := ws.Stop()
require.NoError(t, err)
service.AssertExpectations(t)
}