mirror of
https://github.com/mxpv/podsync.git
synced 2024-05-11 05:55:04 +00:00
171 lines
4.2 KiB
Go
171 lines
4.2 KiB
Go
//go:generate mockgen -source=feeds.go -destination=feeds_mock_test.go -package=feeds
|
|
|
|
package feeds
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/golang/mock/gomock"
|
|
"github.com/pkg/errors"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/mxpv/podsync/pkg/api"
|
|
"github.com/mxpv/podsync/pkg/model"
|
|
)
|
|
|
|
var feed = &model.Feed{
|
|
HashID: "123",
|
|
ItemID: "xyz",
|
|
Provider: api.ProviderVimeo,
|
|
LinkType: api.LinkTypeChannel,
|
|
PageSize: 50,
|
|
Quality: api.QualityHigh,
|
|
Format: api.FormatVideo,
|
|
Episodes: []*model.Item{
|
|
{ID: "1", Title: "Title", Description: "Description"},
|
|
},
|
|
}
|
|
|
|
func TestService_CreateFeed(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
defer ctrl.Finish()
|
|
|
|
db := NewMockstorage(ctrl)
|
|
db.EXPECT().SaveFeed(gomock.Any()).Times(1).Return(nil)
|
|
|
|
gen, _ := NewIDGen()
|
|
|
|
s := Service{
|
|
generator: gen,
|
|
storage: db,
|
|
builders: map[api.Provider]Builder{api.ProviderYoutube: nil},
|
|
}
|
|
|
|
req := &api.CreateFeedRequest{
|
|
URL: "youtube.com/channel/123",
|
|
PageSize: 50,
|
|
Quality: api.QualityHigh,
|
|
Format: api.FormatVideo,
|
|
}
|
|
|
|
hashID, err := s.CreateFeed(req, &api.Identity{})
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, hashID)
|
|
}
|
|
|
|
func TestService_makeFeed(t *testing.T) {
|
|
req := &api.CreateFeedRequest{
|
|
URL: "youtube.com/channel/123",
|
|
PageSize: 1000,
|
|
Quality: api.QualityLow,
|
|
Format: api.FormatAudio,
|
|
}
|
|
|
|
gen, _ := NewIDGen()
|
|
|
|
s := Service{
|
|
generator: gen,
|
|
}
|
|
|
|
feed, err := s.makeFeed(req, &api.Identity{})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 50, feed.PageSize)
|
|
require.Equal(t, api.QualityHigh, feed.Quality)
|
|
require.Equal(t, api.FormatVideo, feed.Format)
|
|
|
|
feed, err = s.makeFeed(req, &api.Identity{FeatureLevel: api.ExtendedFeatures})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 150, feed.PageSize)
|
|
require.Equal(t, api.QualityLow, feed.Quality)
|
|
require.Equal(t, api.FormatAudio, feed.Format)
|
|
|
|
feed, err = s.makeFeed(req, &api.Identity{FeatureLevel: api.ExtendedPagination})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 600, feed.PageSize)
|
|
require.Equal(t, api.QualityLow, feed.Quality)
|
|
require.Equal(t, api.FormatAudio, feed.Format)
|
|
}
|
|
|
|
func TestService_QueryFeed(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
defer ctrl.Finish()
|
|
|
|
db := NewMockstorage(ctrl)
|
|
db.EXPECT().GetFeed("123").Times(1).Return(nil, nil)
|
|
|
|
s := Service{storage: db}
|
|
_, err := s.QueryFeed("123")
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestService_GetFromCache(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
defer ctrl.Finish()
|
|
|
|
cache := NewMockcacheService(ctrl)
|
|
cache.EXPECT().Get("123").Return("test", nil)
|
|
|
|
s := &Service{cache: cache}
|
|
|
|
data, err := s.BuildFeed("123")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []byte("test"), data)
|
|
}
|
|
|
|
func TestService_BuildFeed(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
defer ctrl.Finish()
|
|
|
|
stor := NewMockstorage(ctrl)
|
|
stor.EXPECT().GetFeed(feed.HashID).Times(1).Return(feed, nil)
|
|
stor.EXPECT().UpdateFeed(feed).Return(nil)
|
|
|
|
cache := NewMockcacheService(ctrl)
|
|
cache.EXPECT().Get(feed.HashID).Return("", errors.New("not found"))
|
|
cache.EXPECT().Set(feed.HashID, gomock.Any(), 1*time.Hour).Return(nil)
|
|
|
|
builder := NewMockBuilder(ctrl)
|
|
builder.EXPECT().Build(feed).Return(nil).Do(func(feed *model.Feed) {
|
|
feed.Episodes = append(feed.Episodes, feed.Episodes[0])
|
|
})
|
|
|
|
s := Service{storage: stor, cache: cache, builders: map[api.Provider]Builder{
|
|
api.ProviderVimeo: builder,
|
|
}}
|
|
|
|
_, err := s.BuildFeed(feed.HashID)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestService_WrongID(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
defer ctrl.Finish()
|
|
|
|
cache := NewMockcacheService(ctrl)
|
|
cache.EXPECT().Get(gomock.Any()).Return("", errors.New("not found"))
|
|
|
|
stor := NewMockstorage(ctrl)
|
|
stor.EXPECT().GetFeed(gomock.Any()).Times(1).Return(nil, errors.New("not found"))
|
|
|
|
s := &Service{storage: stor, cache: cache}
|
|
|
|
_, err := s.BuildFeed("invalid_feed_id")
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestService_GetMetadata(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
defer ctrl.Finish()
|
|
|
|
stor := NewMockstorage(ctrl)
|
|
stor.EXPECT().GetMetadata(feed.HashID).Times(1).Return(feed, nil)
|
|
|
|
s := &Service{storage: stor}
|
|
|
|
m, err := s.GetMetadata(feed.HashID)
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, 0, m.Downloads)
|
|
}
|