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:
@@ -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")
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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)
|
||||
}
|
||||
|
@@ -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))
|
||||
|
Reference in New Issue
Block a user