1
0
mirror of https://github.com/mxpv/podsync.git synced 2024-05-11 05:55:04 +00:00

Refactor dependencies, fix unit test

This commit is contained in:
Maksym Pavlenko
2017-11-02 18:01:35 -07:00
parent 14307ddd80
commit e403bd5c20
4 changed files with 94 additions and 33 deletions

View File

@@ -12,6 +12,7 @@ import (
"syscall"
"github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/proxy"
"github.com/coreos/etcd/pkg/srv"
"github.com/go-pg/pg"
"github.com/mxpv/podsync/pkg/api"
"github.com/mxpv/podsync/pkg/builders"
@@ -20,6 +21,7 @@ import (
"github.com/mxpv/podsync/pkg/handler"
"github.com/mxpv/podsync/pkg/id"
"github.com/mxpv/podsync/pkg/storage"
"github.com/mxpv/podsync/pkg/support"
"github.com/pkg/errors"
)
@@ -71,9 +73,11 @@ func main() {
feeds.WithBuilder(api.Vimeo, vimeo),
)
patreon := support.NewPatreon(pg)
srv := http.Server{
Addr: fmt.Sprintf(":%d", 5001),
Handler: handler.New(feed, pg, cfg),
Handler: handler.New(feed, patreon, cfg),
}
go func() {
@@ -88,6 +92,7 @@ func main() {
log.Printf("shutting down server")
srv.Shutdown(ctx)
pg.Close()
log.Printf("server gracefully stopped")
}

View File

@@ -10,13 +10,11 @@ import (
"github.com/gin-contrib/sessions"
"github.com/gin-gonic/gin"
"github.com/go-pg/pg"
"github.com/mxpv/patreon-go"
itunes "github.com/mxpv/podcast"
"github.com/mxpv/podsync/pkg/api"
"github.com/mxpv/podsync/pkg/config"
"github.com/mxpv/podsync/pkg/session"
"github.com/mxpv/podsync/pkg/support"
"golang.org/x/oauth2"
)
@@ -24,17 +22,25 @@ const (
maxHashIDLength = 16
)
type feed interface {
type feedService interface {
CreateFeed(req *api.CreateFeedRequest, identity *api.Identity) (string, error)
GetFeed(hashId string) (*itunes.Podcast, error)
GetMetadata(hashId string) (*api.Feed, error)
}
// HACK: mockgen fails to import patreon.Pledge type
type P *patreon.Pledge
type patreonService interface {
Hook(pledge P, event string) error
GetFeatureLevel(patronID string) int
}
type handler struct {
feed feed
feed feedService
cfg *config.AppConfig
oauth2 oauth2.Config
patreon *support.Patreon
patreon patreonService
}
func (h handler) index(c *gin.Context) {
@@ -230,7 +236,7 @@ func (h handler) webhook(c *gin.Context) {
log.Printf("sucessfully processed patreon event %s (%s)", pledge.Data.ID, eventName)
}
func New(feed feed, db *pg.DB, cfg *config.AppConfig) http.Handler {
func New(feed feedService, support patreonService, cfg *config.AppConfig) http.Handler {
r := gin.New()
r.Use(gin.Recovery())
@@ -251,8 +257,8 @@ func New(feed feed, db *pg.DB, cfg *config.AppConfig) http.Handler {
h := handler{
feed: feed,
patreon: support,
cfg: cfg,
patreon: support.NewPatreon(db),
}
// OAuth 2 configuration

View File

@@ -10,31 +10,31 @@ import (
reflect "reflect"
)
// Mockfeed is a mock of feed interface
type Mockfeed struct {
// MockfeedService is a mock of feedService interface
type MockfeedService struct {
ctrl *gomock.Controller
recorder *MockfeedMockRecorder
recorder *MockfeedServiceMockRecorder
}
// MockfeedMockRecorder is the mock recorder for Mockfeed
type MockfeedMockRecorder struct {
mock *Mockfeed
// MockfeedServiceMockRecorder is the mock recorder for MockfeedService
type MockfeedServiceMockRecorder struct {
mock *MockfeedService
}
// NewMockfeed creates a new mock instance
func NewMockfeed(ctrl *gomock.Controller) *Mockfeed {
mock := &Mockfeed{ctrl: ctrl}
mock.recorder = &MockfeedMockRecorder{mock}
// NewMockfeedService creates a new mock instance
func NewMockfeedService(ctrl *gomock.Controller) *MockfeedService {
mock := &MockfeedService{ctrl: ctrl}
mock.recorder = &MockfeedServiceMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use
func (_m *Mockfeed) EXPECT() *MockfeedMockRecorder {
func (_m *MockfeedService) EXPECT() *MockfeedServiceMockRecorder {
return _m.recorder
}
// CreateFeed mocks base method
func (_m *Mockfeed) CreateFeed(req *api.CreateFeedRequest, identity *api.Identity) (string, error) {
func (_m *MockfeedService) CreateFeed(req *api.CreateFeedRequest, identity *api.Identity) (string, error) {
ret := _m.ctrl.Call(_m, "CreateFeed", req, identity)
ret0, _ := ret[0].(string)
ret1, _ := ret[1].(error)
@@ -42,12 +42,12 @@ func (_m *Mockfeed) CreateFeed(req *api.CreateFeedRequest, identity *api.Identit
}
// CreateFeed indicates an expected call of CreateFeed
func (_mr *MockfeedMockRecorder) CreateFeed(arg0, arg1 interface{}) *gomock.Call {
return _mr.mock.ctrl.RecordCallWithMethodType(_mr.mock, "CreateFeed", reflect.TypeOf((*Mockfeed)(nil).CreateFeed), arg0, arg1)
func (_mr *MockfeedServiceMockRecorder) CreateFeed(arg0, arg1 interface{}) *gomock.Call {
return _mr.mock.ctrl.RecordCallWithMethodType(_mr.mock, "CreateFeed", reflect.TypeOf((*MockfeedService)(nil).CreateFeed), arg0, arg1)
}
// GetFeed mocks base method
func (_m *Mockfeed) GetFeed(hashId string) (*podcast.Podcast, error) {
func (_m *MockfeedService) GetFeed(hashId string) (*podcast.Podcast, error) {
ret := _m.ctrl.Call(_m, "GetFeed", hashId)
ret0, _ := ret[0].(*podcast.Podcast)
ret1, _ := ret[1].(error)
@@ -55,12 +55,12 @@ func (_m *Mockfeed) GetFeed(hashId string) (*podcast.Podcast, error) {
}
// GetFeed indicates an expected call of GetFeed
func (_mr *MockfeedMockRecorder) GetFeed(arg0 interface{}) *gomock.Call {
return _mr.mock.ctrl.RecordCallWithMethodType(_mr.mock, "GetFeed", reflect.TypeOf((*Mockfeed)(nil).GetFeed), arg0)
func (_mr *MockfeedServiceMockRecorder) GetFeed(arg0 interface{}) *gomock.Call {
return _mr.mock.ctrl.RecordCallWithMethodType(_mr.mock, "GetFeed", reflect.TypeOf((*MockfeedService)(nil).GetFeed), arg0)
}
// GetMetadata mocks base method
func (_m *Mockfeed) GetMetadata(hashId string) (*api.Feed, error) {
func (_m *MockfeedService) GetMetadata(hashId string) (*api.Feed, error) {
ret := _m.ctrl.Call(_m, "GetMetadata", hashId)
ret0, _ := ret[0].(*api.Feed)
ret1, _ := ret[1].(error)
@@ -68,6 +68,53 @@ func (_m *Mockfeed) GetMetadata(hashId string) (*api.Feed, error) {
}
// GetMetadata indicates an expected call of GetMetadata
func (_mr *MockfeedMockRecorder) GetMetadata(arg0 interface{}) *gomock.Call {
return _mr.mock.ctrl.RecordCallWithMethodType(_mr.mock, "GetMetadata", reflect.TypeOf((*Mockfeed)(nil).GetMetadata), arg0)
func (_mr *MockfeedServiceMockRecorder) GetMetadata(arg0 interface{}) *gomock.Call {
return _mr.mock.ctrl.RecordCallWithMethodType(_mr.mock, "GetMetadata", reflect.TypeOf((*MockfeedService)(nil).GetMetadata), arg0)
}
// MockpatreonService is a mock of patreonService interface
type MockpatreonService struct {
ctrl *gomock.Controller
recorder *MockpatreonServiceMockRecorder
}
// MockpatreonServiceMockRecorder is the mock recorder for MockpatreonService
type MockpatreonServiceMockRecorder struct {
mock *MockpatreonService
}
// NewMockpatreonService creates a new mock instance
func NewMockpatreonService(ctrl *gomock.Controller) *MockpatreonService {
mock := &MockpatreonService{ctrl: ctrl}
mock.recorder = &MockpatreonServiceMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use
func (_m *MockpatreonService) EXPECT() *MockpatreonServiceMockRecorder {
return _m.recorder
}
// Hook mocks base method
func (_m *MockpatreonService) Hook(pledge P, event string) error {
ret := _m.ctrl.Call(_m, "Hook", pledge, event)
ret0, _ := ret[0].(error)
return ret0
}
// Hook indicates an expected call of Hook
func (_mr *MockpatreonServiceMockRecorder) Hook(arg0, arg1 interface{}) *gomock.Call {
return _mr.mock.ctrl.RecordCallWithMethodType(_mr.mock, "Hook", reflect.TypeOf((*MockpatreonService)(nil).Hook), arg0, arg1)
}
// GetFeatureLevel mocks base method
func (_m *MockpatreonService) GetFeatureLevel(patronID string) int {
ret := _m.ctrl.Call(_m, "GetFeatureLevel", patronID)
ret0, _ := ret[0].(int)
return ret0
}
// GetFeatureLevel indicates an expected call of GetFeatureLevel
func (_mr *MockpatreonServiceMockRecorder) GetFeatureLevel(arg0 interface{}) *gomock.Call {
return _mr.mock.ctrl.RecordCallWithMethodType(_mr.mock, "GetFeatureLevel", reflect.TypeOf((*MockpatreonService)(nil).GetFeatureLevel), arg0)
}

View File

@@ -29,10 +29,13 @@ func TestCreateFeed(t *testing.T) {
Format: api.AudioFormat,
}
feed := NewMockfeed(ctrl)
feed := NewMockfeedService(ctrl)
feed.EXPECT().CreateFeed(gomock.Eq(req), gomock.Any()).Times(1).Return("456", nil)
srv := httptest.NewServer(New(feed, nil, cfg))
patreon := NewMockpatreonService(ctrl)
patreon.EXPECT().GetFeatureLevel(gomock.Any()).Return(api.DefaultFeatures)
srv := httptest.NewServer(New(feed, patreon, cfg))
defer srv.Close()
query := `{"url": "https://youtube.com/channel/123", "page_size": 55, "quality": "low", "format": "audio"}`
@@ -47,7 +50,7 @@ func TestCreateInvalidFeed(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
srv := httptest.NewServer(New(NewMockfeed(ctrl), nil, cfg))
srv := httptest.NewServer(New(NewMockfeedService(ctrl), nil, cfg))
defer srv.Close()
query := `{}`
@@ -97,7 +100,7 @@ func TestGetFeed(t *testing.T) {
podcast := itunes.New("", "", "", nil, nil)
feed := NewMockfeed(ctrl)
feed := NewMockfeedService(ctrl)
feed.EXPECT().GetFeed("123").Return(&podcast, nil)
srv := httptest.NewServer(New(feed, nil, cfg))
@@ -112,7 +115,7 @@ func TestGetMetadata(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
feed := NewMockfeed(ctrl)
feed := NewMockfeedService(ctrl)
feed.EXPECT().GetMetadata("123").Times(1).Return(&api.Feed{}, nil)
srv := httptest.NewServer(New(feed, nil, cfg))