Add feed service tests

This commit is contained in:
Maksym Pavlenko
2017-08-13 19:28:43 -07:00
parent 563f7deb17
commit fe0b282096
5 changed files with 220 additions and 9 deletions
+73
View File
@@ -0,0 +1,73 @@
//go:generate mockgen -source=interfaces.go -destination=interfaces_mock_test.go -package=feeds
package feeds
import (
"context"
"testing"
"github.com/golang/mock/gomock"
"github.com/mxpv/podsync/web/pkg/api"
"github.com/stretchr/testify/require"
)
func TestService_CreateFeed(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
id := NewMockid(ctrl)
id.EXPECT().Generate(gomock.Any()).Times(1).Return("123", nil)
storage := NewMockstorage(ctrl)
storage.EXPECT().CreateFeed(gomock.Any()).Times(1).Return(nil)
s := service{
id: id,
storage: storage,
builders: map[api.Provider]builder{api.Youtube: nil},
}
req := &api.CreateFeedRequest{
URL: "youtube.com/channel/123",
PageSize: 50,
Quality: api.HighQuality,
Format: api.VideoFormat,
}
hashId, err := s.CreateFeed(context.Background(), req)
require.NoError(t, err)
require.Equal(t, "123", hashId)
}
func TestService_GetFeed(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
feed := &api.Feed{Provider: api.Youtube}
storage := NewMockstorage(ctrl)
storage.EXPECT().GetFeed("123").Times(1).Return(feed, nil)
bld := NewMockbuilder(ctrl)
bld.EXPECT().Build(feed).Return(nil, nil)
s := service{
storage: storage,
builders: map[api.Provider]builder{api.Youtube: bld},
}
_, err := s.GetFeed("123")
require.NoError(t, err)
}
func TestService_GetMetadata(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
storage := NewMockstorage(ctrl)
storage.EXPECT().GetFeed("123").Times(1).Return(&api.Feed{}, nil)
s := service{storage: storage}
_, err := s.GetMetadata("123")
require.NoError(t, err)
}
+131
View File
@@ -0,0 +1,131 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: interfaces.go
package feeds
import (
gomock "github.com/golang/mock/gomock"
podcast "github.com/mxpv/podcast"
api "github.com/mxpv/podsync/web/pkg/api"
reflect "reflect"
)
// Mockid is a mock of id interface
type Mockid struct {
ctrl *gomock.Controller
recorder *MockidMockRecorder
}
// MockidMockRecorder is the mock recorder for Mockid
type MockidMockRecorder struct {
mock *Mockid
}
// NewMockid creates a new mock instance
func NewMockid(ctrl *gomock.Controller) *Mockid {
mock := &Mockid{ctrl: ctrl}
mock.recorder = &MockidMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use
func (_m *Mockid) EXPECT() *MockidMockRecorder {
return _m.recorder
}
// Generate mocks base method
func (_m *Mockid) Generate(feed *api.Feed) (string, error) {
ret := _m.ctrl.Call(_m, "Generate", feed)
ret0, _ := ret[0].(string)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Generate indicates an expected call of Generate
func (_mr *MockidMockRecorder) Generate(arg0 interface{}) *gomock.Call {
return _mr.mock.ctrl.RecordCallWithMethodType(_mr.mock, "Generate", reflect.TypeOf((*Mockid)(nil).Generate), arg0)
}
// Mockstorage is a mock of storage interface
type Mockstorage struct {
ctrl *gomock.Controller
recorder *MockstorageMockRecorder
}
// MockstorageMockRecorder is the mock recorder for Mockstorage
type MockstorageMockRecorder struct {
mock *Mockstorage
}
// NewMockstorage creates a new mock instance
func NewMockstorage(ctrl *gomock.Controller) *Mockstorage {
mock := &Mockstorage{ctrl: ctrl}
mock.recorder = &MockstorageMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use
func (_m *Mockstorage) EXPECT() *MockstorageMockRecorder {
return _m.recorder
}
// CreateFeed mocks base method
func (_m *Mockstorage) CreateFeed(feed *api.Feed) error {
ret := _m.ctrl.Call(_m, "CreateFeed", feed)
ret0, _ := ret[0].(error)
return ret0
}
// CreateFeed indicates an expected call of CreateFeed
func (_mr *MockstorageMockRecorder) CreateFeed(arg0 interface{}) *gomock.Call {
return _mr.mock.ctrl.RecordCallWithMethodType(_mr.mock, "CreateFeed", reflect.TypeOf((*Mockstorage)(nil).CreateFeed), arg0)
}
// GetFeed mocks base method
func (_m *Mockstorage) GetFeed(hashId string) (*api.Feed, error) {
ret := _m.ctrl.Call(_m, "GetFeed", hashId)
ret0, _ := ret[0].(*api.Feed)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetFeed indicates an expected call of GetFeed
func (_mr *MockstorageMockRecorder) GetFeed(arg0 interface{}) *gomock.Call {
return _mr.mock.ctrl.RecordCallWithMethodType(_mr.mock, "GetFeed", reflect.TypeOf((*Mockstorage)(nil).GetFeed), arg0)
}
// Mockbuilder is a mock of builder interface
type Mockbuilder struct {
ctrl *gomock.Controller
recorder *MockbuilderMockRecorder
}
// MockbuilderMockRecorder is the mock recorder for Mockbuilder
type MockbuilderMockRecorder struct {
mock *Mockbuilder
}
// NewMockbuilder creates a new mock instance
func NewMockbuilder(ctrl *gomock.Controller) *Mockbuilder {
mock := &Mockbuilder{ctrl: ctrl}
mock.recorder = &MockbuilderMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use
func (_m *Mockbuilder) EXPECT() *MockbuilderMockRecorder {
return _m.recorder
}
// Build mocks base method
func (_m *Mockbuilder) Build(feed *api.Feed) (*podcast.Podcast, error) {
ret := _m.ctrl.Call(_m, "Build", feed)
ret0, _ := ret[0].(*podcast.Podcast)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Build indicates an expected call of Build
func (_mr *MockbuilderMockRecorder) Build(arg0 interface{}) *gomock.Call {
return _mr.mock.ctrl.RecordCallWithMethodType(_mr.mock, "Build", reflect.TypeOf((*Mockbuilder)(nil).Build), arg0)
}
+4
View File
@@ -9,6 +9,10 @@ import (
)
func parseURL(link string) (*api.Feed, error) {
if !strings.HasPrefix(link, "http") {
link = "https://" + link
}
parsed, err := url.Parse(link)
if err != nil {
err = errors.Wrapf(err, "failed to parse url: %s", link)
+8 -8
View File
@@ -8,7 +8,7 @@ import (
"github.com/stretchr/testify/require"
)
func TestParseYTPlaylist(t *testing.T) {
func TestParseYoutubeURL_Playlist(t *testing.T) {
link, _ := url.ParseRequestURI("https://www.youtube.com/playlist?list=PLCB9F975ECF01953C")
kind, id, err := parseYoutubeURL(link)
require.NoError(t, err)
@@ -16,7 +16,7 @@ func TestParseYTPlaylist(t *testing.T) {
require.Equal(t, "PLCB9F975ECF01953C", id)
}
func TestParseYTChannel(t *testing.T) {
func TestParseYoutubeURL_Channel(t *testing.T) {
link, _ := url.ParseRequestURI("https://www.youtube.com/channel/UC5XPnUk8Vvv_pWslhwom6Og")
kind, id, err := parseYoutubeURL(link)
require.NoError(t, err)
@@ -30,7 +30,7 @@ func TestParseYTChannel(t *testing.T) {
require.Equal(t, "UCrlakW-ewUT8sOod6Wmzyow", id)
}
func TestParseYTUser(t *testing.T) {
func TestParseYoutubeURL_User(t *testing.T) {
link, _ := url.ParseRequestURI("https://youtube.com/user/fxigr1")
kind, id, err := parseYoutubeURL(link)
require.NoError(t, err)
@@ -38,7 +38,7 @@ func TestParseYTUser(t *testing.T) {
require.Equal(t, "fxigr1", id)
}
func TestHandleInvalidYTLink(t *testing.T) {
func TestParseYoutubeURL_InvalidLink(t *testing.T) {
link, _ := url.ParseRequestURI("https://www.youtube.com/user///")
_, _, err := parseYoutubeURL(link)
require.Error(t, err)
@@ -48,7 +48,7 @@ func TestHandleInvalidYTLink(t *testing.T) {
require.Error(t, err)
}
func TestParseVimeoGroupLink(t *testing.T) {
func TestParseVimeoURL_Group(t *testing.T) {
link, _ := url.ParseRequestURI("https://vimeo.com/groups/109")
kind, id, err := parseVimeoURL(link)
require.NoError(t, err)
@@ -74,7 +74,7 @@ func TestParseVimeoGroupLink(t *testing.T) {
require.Equal(t, "109", id)
}
func TestParseVimeoChannelLink(t *testing.T) {
func TestParseVimeoURL_Channel(t *testing.T) {
link, _ := url.ParseRequestURI("https://vimeo.com/channels/staffpicks")
kind, id, err := parseVimeoURL(link)
require.NoError(t, err)
@@ -88,7 +88,7 @@ func TestParseVimeoChannelLink(t *testing.T) {
require.Equal(t, "staffpicks", id)
}
func TestParseVimeoUserLink(t *testing.T) {
func TestParseVimeoURL_User(t *testing.T) {
link, _ := url.ParseRequestURI("https://vimeo.com/awhitelabelproduct")
kind, id, err := parseVimeoURL(link)
require.NoError(t, err)
@@ -96,7 +96,7 @@ func TestParseVimeoUserLink(t *testing.T) {
require.Equal(t, "awhitelabelproduct", id)
}
func TestParseInvalidVimeoLink(t *testing.T) {
func TestParseVimeoURL_InvalidLink(t *testing.T) {
link, _ := url.ParseRequestURI("http://www.apple.com")
_, _, err := parseVimeoURL(link)
require.Error(t, err)
+4 -1
View File
@@ -45,6 +45,9 @@ func NewIdGenerator() (*hashId, error) {
data.MinLength = minLength
data.Salt = salt
data.Alphabet = alphabet
hid := hd.NewWithData(data)
hid, err := hd.NewWithData(data)
if err != nil {
return nil, err
}
return &hashId{hid}, nil
}