Select Git revision
example_test.go
example_test.go 2.89 KiB
package zap
import (
"context"
"reflect"
"slices"
"testing"
"git.perx.ru/perxis/perxis-go/id"
"git.perx.ru/perxis/perxis-go/log"
logmocks "git.perx.ru/perxis/perxis-go/log/mocks"
"git.perx.ru/perxis/perxis-go/pkg/auth"
"git.perx.ru/perxis/perxis-go/pkg/items"
"git.perx.ru/perxis/perxis-go/pkg/users"
usersmocks "git.perx.ru/perxis/perxis-go/pkg/users/mocks"
logzap "git.perx.ru/perxis/perxis-go/zap"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
func TestExample(t *testing.T) {
item := items.NewItem("WPNN", "9VGP", "GxNv", "W0fl", nil, nil)
user := &users.User{ID: "294de355"}
wantEntries := []*log.Entry{
{
LogLevel: log.Level(zapcore.InfoLevel),
Message: "Successfully created",
Component: "Items",
Event: items.EventItemCreate,
ObjectID: id.MustObjectId(item),
CallerID: id.MustObjectId(user),
Tags: []string{"tag1", "tag2", "tag3"},
},
{
LogLevel: log.Level(zapcore.WarnLevel),
Message: "Successfully updated",
Component: "Items",
Event: items.EventItemUpdate,
ObjectID: id.MustObjectId(item),
CallerID: id.MustObjectId(user),
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()
usersService := &usersmocks.Users{}
usersService.On("GetByIdentity", mock.Anything, "74d90aaf").Return(user, nil).Once()
factory := auth.PrincipalFactory{Users: usersService}
ws := &BufferedWriteSyncer{Service: service}
logger := zap.New(NewCore(ws))
// Пример отправки логов для сервиса Items
{
logger := logger.With(logzap.Component("Items"))
ctx := auth.WithPrincipal(context.Background(), factory.User("74d90aaf"))
// Отправка лога при создании item
logger.Info("Successfully created",
logzap.Event(items.EventItemCreate),
logzap.Object(item),
logzap.CallerFromContext(ctx),
logzap.Tags("tag1", "tag2", "tag3"),
)
// Отправка лога при обновлении item
logger.Warn("Successfully updated",
logzap.Event(items.EventItemUpdate),
logzap.Object(item),
logzap.CallerFromContext(ctx),
logzap.Attr(map[string]map[string]any{"title": {"old": "old title", "new": "new title"}}),
)
}
err := ws.Stop()
require.NoError(t, err)
service.AssertExpectations(t)
}