2017-10-28 01:11:49 -07:00
|
|
|
//go:generate mockgen -source=handler.go -destination=handler_mock_test.go -package=handler
|
2017-08-14 16:38:59 -07:00
|
|
|
|
2017-10-28 01:11:49 -07:00
|
|
|
package handler
|
2017-08-14 16:38:59 -07:00
|
|
|
|
|
|
|
import (
|
|
|
|
"io/ioutil"
|
|
|
|
"net/http"
|
|
|
|
"net/http/httptest"
|
|
|
|
"strings"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/golang/mock/gomock"
|
|
|
|
itunes "github.com/mxpv/podcast"
|
2018-12-10 21:35:50 -08:00
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
2017-08-19 16:58:23 -07:00
|
|
|
"github.com/mxpv/podsync/pkg/api"
|
2017-08-20 16:01:30 -07:00
|
|
|
"github.com/mxpv/podsync/pkg/config"
|
2017-08-14 16:38:59 -07:00
|
|
|
)
|
|
|
|
|
2017-08-20 16:01:30 -07:00
|
|
|
var cfg = &config.AppConfig{}
|
|
|
|
|
2017-08-14 16:38:59 -07:00
|
|
|
func TestCreateFeed(t *testing.T) {
|
|
|
|
ctrl := gomock.NewController(t)
|
|
|
|
defer ctrl.Finish()
|
|
|
|
|
|
|
|
req := &api.CreateFeedRequest{
|
|
|
|
URL: "https://youtube.com/channel/123",
|
|
|
|
PageSize: 55,
|
2017-11-03 15:04:33 -07:00
|
|
|
Quality: api.QualityLow,
|
|
|
|
Format: api.FormatAudio,
|
2017-08-14 16:38:59 -07:00
|
|
|
}
|
|
|
|
|
2017-11-02 18:01:35 -07:00
|
|
|
feed := NewMockfeedService(ctrl)
|
2017-08-20 18:35:47 -07:00
|
|
|
feed.EXPECT().CreateFeed(gomock.Eq(req), gomock.Any()).Times(1).Return("456", nil)
|
2017-08-14 16:38:59 -07:00
|
|
|
|
2017-11-02 18:01:35 -07:00
|
|
|
patreon := NewMockpatreonService(ctrl)
|
2017-11-10 17:22:12 -08:00
|
|
|
patreon.EXPECT().GetFeatureLevelByID(gomock.Any()).Return(api.DefaultFeatures)
|
2017-11-02 18:01:35 -07:00
|
|
|
|
|
|
|
srv := httptest.NewServer(New(feed, patreon, cfg))
|
2017-08-14 16:38:59 -07:00
|
|
|
defer srv.Close()
|
|
|
|
|
|
|
|
query := `{"url": "https://youtube.com/channel/123", "page_size": 55, "quality": "low", "format": "audio"}`
|
2017-08-20 16:01:30 -07:00
|
|
|
resp, err := http.Post(srv.URL+"/api/create", "application/json", strings.NewReader(query))
|
2017-08-14 16:38:59 -07:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, http.StatusOK, resp.StatusCode)
|
|
|
|
|
|
|
|
require.JSONEq(t, `{"id": "456"}`, readBody(t, resp))
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCreateInvalidFeed(t *testing.T) {
|
|
|
|
ctrl := gomock.NewController(t)
|
|
|
|
defer ctrl.Finish()
|
|
|
|
|
2017-11-02 18:01:35 -07:00
|
|
|
srv := httptest.NewServer(New(NewMockfeedService(ctrl), nil, cfg))
|
2017-08-14 16:38:59 -07:00
|
|
|
defer srv.Close()
|
|
|
|
|
|
|
|
query := `{}`
|
2017-08-20 16:01:30 -07:00
|
|
|
resp, err := http.Post(srv.URL+"/api/create", "application/json", strings.NewReader(query))
|
2017-08-14 16:38:59 -07:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
|
|
|
|
|
|
|
query = `{"url": "not a url", "page_size": 55, "quality": "low", "format": "audio"}`
|
2017-08-20 16:01:30 -07:00
|
|
|
resp, err = http.Post(srv.URL+"/api/create", "application/json", strings.NewReader(query))
|
2017-08-14 16:38:59 -07:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
|
|
|
|
|
|
|
query = `{"url": "https://youtube.com/channel/123", "page_size": 1, "quality": "low", "format": "audio"}`
|
2017-08-20 16:01:30 -07:00
|
|
|
resp, err = http.Post(srv.URL+"/api/create", "application/json", strings.NewReader(query))
|
2017-08-14 16:38:59 -07:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
|
|
|
|
2017-11-10 17:13:01 -08:00
|
|
|
query = `{"url": "https://youtube.com/channel/123", "page_size": 1001, "quality": "low", "format": "audio"}`
|
2017-08-20 16:01:30 -07:00
|
|
|
resp, err = http.Post(srv.URL+"/api/create", "application/json", strings.NewReader(query))
|
2017-08-14 16:38:59 -07:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
|
|
|
|
|
|
|
query = `{"url": "https://youtube.com/channel/123", "page_size": 50, "quality": "xyz", "format": "audio"}`
|
2017-08-20 16:01:30 -07:00
|
|
|
resp, err = http.Post(srv.URL+"/api/create", "application/json", strings.NewReader(query))
|
2017-08-14 16:38:59 -07:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
|
|
|
|
|
|
|
query = `{"url": "https://youtube.com/channel/123", "page_size": 50, "quality": "low", "format": "xyz"}`
|
2017-08-20 16:01:30 -07:00
|
|
|
resp, err = http.Post(srv.URL+"/api/create", "application/json", strings.NewReader(query))
|
2017-08-14 16:38:59 -07:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
|
|
|
|
|
|
|
query = `{"url": "https://youtube.com/channel/123", "page_size": 50, "quality": "low", "format": ""}`
|
2017-08-20 16:01:30 -07:00
|
|
|
resp, err = http.Post(srv.URL+"/api/create", "application/json", strings.NewReader(query))
|
2017-08-14 16:38:59 -07:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
|
|
|
|
|
|
|
query = `{"url": "https://youtube.com/channel/123", "page_size": 50, "quality": "", "format": "audio"}`
|
2017-08-20 16:01:30 -07:00
|
|
|
resp, err = http.Post(srv.URL+"/api/create", "application/json", strings.NewReader(query))
|
2017-08-14 16:38:59 -07:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetFeed(t *testing.T) {
|
|
|
|
ctrl := gomock.NewController(t)
|
|
|
|
defer ctrl.Finish()
|
|
|
|
|
|
|
|
podcast := itunes.New("", "", "", nil, nil)
|
|
|
|
|
2017-11-02 18:01:35 -07:00
|
|
|
feed := NewMockfeedService(ctrl)
|
2017-11-03 19:16:15 -07:00
|
|
|
feed.EXPECT().BuildFeed("123").Return(&podcast, nil)
|
2017-08-14 16:38:59 -07:00
|
|
|
|
2017-10-30 18:29:33 -07:00
|
|
|
srv := httptest.NewServer(New(feed, nil, cfg))
|
2017-08-14 16:38:59 -07:00
|
|
|
defer srv.Close()
|
|
|
|
|
2017-08-22 16:22:13 -07:00
|
|
|
resp, err := http.Get(srv.URL + "/123")
|
2017-08-14 16:38:59 -07:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, http.StatusOK, resp.StatusCode)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetMetadata(t *testing.T) {
|
|
|
|
ctrl := gomock.NewController(t)
|
|
|
|
defer ctrl.Finish()
|
|
|
|
|
2017-11-02 18:01:35 -07:00
|
|
|
feed := NewMockfeedService(ctrl)
|
2017-11-03 16:04:33 -07:00
|
|
|
feed.EXPECT().GetMetadata("123").Times(1).Return(&api.Metadata{}, nil)
|
2017-08-14 16:38:59 -07:00
|
|
|
|
2017-10-30 18:29:33 -07:00
|
|
|
srv := httptest.NewServer(New(feed, nil, cfg))
|
2017-08-14 16:38:59 -07:00
|
|
|
defer srv.Close()
|
|
|
|
|
2017-08-20 16:01:30 -07:00
|
|
|
resp, err := http.Get(srv.URL + "/api/metadata/123")
|
2017-08-14 16:38:59 -07:00
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, http.StatusOK, resp.StatusCode)
|
|
|
|
}
|
|
|
|
|
|
|
|
func readBody(t *testing.T, resp *http.Response) string {
|
|
|
|
buf, err := ioutil.ReadAll(resp.Body)
|
|
|
|
defer resp.Body.Close()
|
|
|
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
return string(buf)
|
|
|
|
}
|