Select Git revision
extension_test.go
caching_middleware_test.go 7.65 KiB
package middleware
import (
"context"
"testing"
"time"
"git.perx.ru/perxis/perxis-go/pkg/cache"
"git.perx.ru/perxis/perxis-go/pkg/errors"
"git.perx.ru/perxis/perxis-go/pkg/roles"
rsmocks "git.perx.ru/perxis/perxis-go/pkg/roles/mocks"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
)
func TestRolesCache(t *testing.T) {
const (
roleID = "roleID"
spaceID = "spaceID"
size = 5
ttl = 20 * time.Millisecond
)
errNotFound := errors.NotFound(errors.New("not found"))
ctx := context.Background()
t.Run("Get from cache", func(t *testing.T) {
rl := &rsmocks.Roles{}
svc := CachingMiddleware(cache.NewCache(size, ttl))(rl)
rl.On("Get", mock.Anything, spaceID, roleID).Return(&roles.Role{ID: roleID, SpaceID: spaceID, Description: "Role"}, nil).Once()
v1, err := svc.Get(ctx, spaceID, roleID)
require.NoError(t, err)
v2, err := svc.Get(ctx, spaceID, roleID)
require.NoError(t, err)
assert.Same(t, v1, v2, "Ожидается при повторном запросе получение объекта из кэша.")
rl.AssertExpectations(t)
})
t.Run("List from cache", func(t *testing.T) {
rl := &rsmocks.Roles{}
svc := CachingMiddleware(cache.NewCache(size, ttl))(rl)
rl.On("List", mock.Anything, spaceID).Return([]*roles.Role{{ID: roleID, SpaceID: spaceID, Description: "Role"}}, nil).Once()
vl1, err := svc.List(ctx, spaceID)
require.NoError(t, err)
vl2, err := svc.List(ctx, spaceID)
require.NoError(t, err)
assert.Same(t, vl1[0], vl2[0], "Ожидается при повторном запросе получение объектов из кэша.")
rl.AssertExpectations(t)
})
t.Run("Invalidate cache", func(t *testing.T) {
t.Run("After Update", func(t *testing.T) {
rl := &rsmocks.Roles{}
svc := CachingMiddleware(cache.NewCache(size, ttl))(rl)
rl.On("Get", mock.Anything, spaceID, roleID).Return(&roles.Role{ID: roleID, SpaceID: spaceID, Description: "Role"}, nil).Once()