2017-11-02 18:03:44 -07:00
|
|
|
//go:generate mockgen -source=feeds.go -destination=feeds_mock_test.go -package=feeds
|
2017-08-13 19:28:43 -07:00
|
|
|
|
|
|
|
package feeds
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/golang/mock/gomock"
|
2018-11-24 11:58:08 -08:00
|
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
2017-08-19 16:58:23 -07:00
|
|
|
"github.com/mxpv/podsync/pkg/api"
|
2017-11-03 16:04:33 -07:00
|
|
|
"github.com/mxpv/podsync/pkg/model"
|
2017-08-13 19:28:43 -07:00
|
|
|
)
|
|
|
|
|
2017-11-03 19:16:15 -07:00
|
|
|
var feed = &model.Feed{
|
|
|
|
HashID: "123",
|
|
|
|
ItemID: "xyz",
|
|
|
|
Provider: api.ProviderVimeo,
|
|
|
|
LinkType: api.LinkTypeChannel,
|
|
|
|
PageSize: 50,
|
|
|
|
Quality: api.QualityHigh,
|
|
|
|
Format: api.FormatVideo,
|
|
|
|
}
|
|
|
|
|
2017-08-13 19:28:43 -07:00
|
|
|
func TestService_CreateFeed(t *testing.T) {
|
|
|
|
ctrl := gomock.NewController(t)
|
|
|
|
defer ctrl.Finish()
|
|
|
|
|
2018-11-24 11:58:08 -08:00
|
|
|
db := NewMockstorage(ctrl)
|
|
|
|
db.EXPECT().SaveFeed(gomock.Any()).Times(1).Return(nil)
|
|
|
|
|
|
|
|
gen, _ := NewIDGen()
|
|
|
|
|
2017-11-03 17:19:44 -07:00
|
|
|
s := Service{
|
2018-11-24 11:58:08 -08:00
|
|
|
generator: gen,
|
|
|
|
db: db,
|
|
|
|
builders: map[api.Provider]builder{api.ProviderYoutube: nil},
|
2017-08-13 19:28:43 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
req := &api.CreateFeedRequest{
|
|
|
|
URL: "youtube.com/channel/123",
|
|
|
|
PageSize: 50,
|
2017-11-03 15:04:33 -07:00
|
|
|
Quality: api.QualityHigh,
|
|
|
|
Format: api.FormatVideo,
|
2017-08-13 19:28:43 -07:00
|
|
|
}
|
|
|
|
|
2019-01-06 21:36:42 -08:00
|
|
|
hashID, err := s.CreateFeed(req, &api.Identity{})
|
2017-08-13 19:28:43 -07:00
|
|
|
require.NoError(t, err)
|
2019-01-06 21:36:42 -08:00
|
|
|
require.NotEmpty(t, hashID)
|
2017-08-13 19:28:43 -07:00
|
|
|
}
|
|
|
|
|
2017-11-10 17:13:01 -08:00
|
|
|
func TestService_makeFeed(t *testing.T) {
|
|
|
|
req := &api.CreateFeedRequest{
|
|
|
|
URL: "youtube.com/channel/123",
|
|
|
|
PageSize: 1000,
|
|
|
|
Quality: api.QualityLow,
|
|
|
|
Format: api.FormatAudio,
|
|
|
|
}
|
|
|
|
|
2018-11-24 11:58:08 -08:00
|
|
|
gen, _ := NewIDGen()
|
|
|
|
|
2017-11-10 17:13:01 -08:00
|
|
|
s := Service{
|
2018-11-24 11:58:08 -08:00
|
|
|
generator: gen,
|
2017-11-10 17:13:01 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
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)
|
|
|
|
}
|
|
|
|
|
2018-11-24 11:58:08 -08:00
|
|
|
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{db: db}
|
|
|
|
_, err := s.QueryFeed("123")
|
|
|
|
require.NoError(t, err)
|
|
|
|
}
|
|
|
|
|
2017-08-13 19:28:43 -07:00
|
|
|
func TestService_GetFeed(t *testing.T) {
|
2017-11-10 17:13:01 -08:00
|
|
|
ctrl := gomock.NewController(t)
|
|
|
|
defer ctrl.Finish()
|
|
|
|
|
|
|
|
stats := NewMockstats(ctrl)
|
|
|
|
stats.EXPECT().Inc(MetricQueries, feed.HashID).Return(int64(10), nil)
|
|
|
|
|
2018-11-24 11:58:08 -08:00
|
|
|
stor := NewMockstorage(ctrl)
|
|
|
|
stor.EXPECT().GetFeed(feed.HashID).Times(1).Return(feed, nil)
|
|
|
|
|
|
|
|
s := Service{db: stor, stats: stats}
|
2017-08-13 19:28:43 -07:00
|
|
|
|
2017-11-03 19:16:15 -07:00
|
|
|
_, err := s.BuildFeed(feed.HashID)
|
|
|
|
require.NoError(t, err)
|
|
|
|
}
|
2017-08-13 19:28:43 -07:00
|
|
|
|
2017-11-10 17:13:01 -08:00
|
|
|
func TestService_BuildFeedQuotaCheck(t *testing.T) {
|
|
|
|
ctrl := gomock.NewController(t)
|
|
|
|
defer ctrl.Finish()
|
|
|
|
|
|
|
|
f := &model.Feed{
|
|
|
|
HashID: "321",
|
|
|
|
ItemID: "xyz",
|
|
|
|
Provider: api.ProviderVimeo,
|
|
|
|
LinkType: api.LinkTypeChannel,
|
|
|
|
PageSize: 600,
|
|
|
|
Quality: api.QualityHigh,
|
|
|
|
Format: api.FormatVideo,
|
|
|
|
}
|
|
|
|
|
|
|
|
stats := NewMockstats(ctrl)
|
|
|
|
stats.EXPECT().Inc(MetricQueries, f.HashID).Return(int64(api.ExtendedPaginationQueryLimit)+1, nil)
|
|
|
|
|
2018-11-24 11:58:08 -08:00
|
|
|
stor := NewMockstorage(ctrl)
|
|
|
|
stor.EXPECT().GetFeed(f.HashID).Times(1).Return(f, nil)
|
2017-11-10 17:13:01 -08:00
|
|
|
|
2018-11-24 11:58:08 -08:00
|
|
|
s := Service{db: stor, stats: stats}
|
2017-11-10 17:13:01 -08:00
|
|
|
|
2018-11-24 11:58:08 -08:00
|
|
|
_, err := s.BuildFeed(f.HashID)
|
2017-11-10 17:13:01 -08:00
|
|
|
require.Equal(t, api.ErrQuotaExceeded, err)
|
|
|
|
}
|
|
|
|
|
2017-11-03 19:16:15 -07:00
|
|
|
func TestService_WrongID(t *testing.T) {
|
2018-11-24 11:58:08 -08:00
|
|
|
ctrl := gomock.NewController(t)
|
|
|
|
defer ctrl.Finish()
|
2017-11-03 19:16:15 -07:00
|
|
|
|
2018-11-24 11:58:08 -08:00
|
|
|
stor := NewMockstorage(ctrl)
|
|
|
|
stor.EXPECT().GetFeed(gomock.Any()).Times(1).Return(nil, errors.New("not found"))
|
2017-08-13 19:28:43 -07:00
|
|
|
|
2018-11-24 11:58:08 -08:00
|
|
|
s := Service{db: stor}
|
2017-11-03 19:16:15 -07:00
|
|
|
|
2018-11-24 11:58:08 -08:00
|
|
|
_, err := s.BuildFeed("invalid_feed_id")
|
|
|
|
require.Error(t, err)
|
2017-08-13 19:28:43 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestService_GetMetadata(t *testing.T) {
|
2017-11-04 17:27:01 -07:00
|
|
|
ctrl := gomock.NewController(t)
|
|
|
|
defer ctrl.Finish()
|
|
|
|
|
2018-11-24 11:58:08 -08:00
|
|
|
stor := NewMockstorage(ctrl)
|
|
|
|
stor.EXPECT().GetMetadata(feed.HashID).Times(1).Return(feed, nil)
|
|
|
|
|
2017-11-04 17:27:01 -07:00
|
|
|
stats := NewMockstats(ctrl)
|
|
|
|
stats.EXPECT().Inc(MetricDownloads, feed.HashID).Return(int64(10), nil)
|
|
|
|
|
2018-11-24 11:58:08 -08:00
|
|
|
s := Service{db: stor, stats: stats}
|
2017-11-04 17:27:01 -07:00
|
|
|
|
|
|
|
m, err := s.GetMetadata(feed.HashID)
|
2017-11-03 19:16:15 -07:00
|
|
|
require.NoError(t, err)
|
2017-11-04 17:27:01 -07:00
|
|
|
require.Equal(t, int64(10), m.Downloads)
|
2017-11-03 19:16:15 -07:00
|
|
|
}
|