Select Git revision
caching_middleware_test.go 38.92 KiB
package middleware
import (
"context"
"testing"
"time"
"git.perx.ru/perxis/perxis-go/pkg/cache"
"git.perx.ru/perxis/perxis-go/pkg/environments"
envmocks "git.perx.ru/perxis/perxis-go/pkg/environments/mocks"
"git.perx.ru/perxis/perxis-go/pkg/errors"
"git.perx.ru/perxis/perxis-go/pkg/items"
itmsmocks "git.perx.ru/perxis/perxis-go/pkg/items/mocks"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
)
func TestItemsCache(t *testing.T) {
const (
colID = "colID"
spaceID = "spaceID"
envID = "envID"
envAlias = "envAlias"
itemID = "itemID"
locID = "locID"
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) {
itms := &itmsmocks.Items{}
env := &envmocks.Environments{}
svc := CachingMiddleware(cache.NewMemoryCache(size, ttl), cache.NewMemoryCache(size, ttl), env)(itms)
env.On("Get", mock.Anything, spaceID, envID).Return(&environments.Environment{ID: envID, SpaceID: spaceID, Aliases: []string{envAlias}}, nil).Once()
itms.On("Get", mock.Anything, spaceID, envID, colID, itemID).Return(&items.Item{ID: itemID, SpaceID: spaceID, EnvID: envID, CollectionID: colID, State: items.StateDraft}, nil).Once()
v1, err := svc.Get(ctx, spaceID, envID, colID, itemID)
require.NoError(t, err)
v2, err := svc.Get(ctx, spaceID, envID, colID, itemID)
require.NoError(t, err)
assert.Same(t, v1, v2, "Ожидается получение объекта из кеша, при повторном запросе.")
v3, err := svc.Get(ctx, spaceID, envAlias, colID, itemID)
assert.Same(t, v3, v2, "Ожидается получение объекта из кеша, при запросе того же объекта по alias окружения.")
require.NoError(t, err)
env.AssertExpectations(t)
itms.AssertExpectations(t)
})
t.Run("Get from cache(by Alias)", func(t *testing.T) {
itms := &itmsmocks.Items{}
env := &envmocks.Environments{}
svc := CachingMiddleware(cache.NewMemoryCache(size, ttl), cache.NewMemoryCache(size, ttl), env)(itms)
env.On("Get", mock.Anything, spaceID, envID).Return(&environments.Environment{ID: envID, SpaceID: spaceID, Aliases: []string{envAlias}}, nil).Once()
itms.On("Get", mock.Anything, spaceID, envAlias, colID, itemID).Return(&items.Item{ID: itemID, SpaceID: spaceID, EnvID: envID, CollectionID: colID, State: items.StateDraft}, nil).Once()
v1, err := svc.Get(ctx, spaceID, envAlias, colID, itemID)
require.NoError(t, err)