mirror of
https://github.com/mxpv/podsync.git
synced 2024-05-11 05:55:04 +00:00
Code style fixes
This commit is contained in:
@@ -1,9 +1,14 @@
|
||||
linters:
|
||||
disable-all: true
|
||||
presets:
|
||||
- bugs
|
||||
- unused
|
||||
- format
|
||||
- style
|
||||
- complexity
|
||||
- performance
|
||||
- performance
|
||||
disable:
|
||||
- megacheck
|
||||
- typecheck
|
||||
issues:
|
||||
exclude:
|
||||
- if block ends with a return statement, so drop this else and outdent its block
|
||||
@@ -65,12 +65,12 @@ func main() {
|
||||
|
||||
// Builders
|
||||
|
||||
youtube, err := builders.NewYouTubeBuilder(cfg.YouTubeApiKey)
|
||||
youtube, err := builders.NewYouTubeBuilder(cfg.YouTubeAPIKey)
|
||||
if err != nil {
|
||||
log.WithError(err).Fatal("failed to create YouTube builder")
|
||||
}
|
||||
|
||||
vimeo, err := builders.NewVimeoBuilder(ctx, cfg.VimeoApiKey)
|
||||
vimeo, err := builders.NewVimeoBuilder(ctx, cfg.VimeoAPIKey)
|
||||
if err != nil {
|
||||
log.WithError(err).Fatal("failed to create Vimeo builder")
|
||||
}
|
||||
|
||||
@@ -54,23 +54,26 @@ type Metadata struct {
|
||||
}
|
||||
|
||||
const (
|
||||
// DefaultFeatures represent features for Anonymous user
|
||||
// Page size: 50
|
||||
// Format: video
|
||||
// Quality: high
|
||||
DefaultFeatures = iota
|
||||
|
||||
// ExtendedFeatures represent features for 1$ pledges
|
||||
// Max page size: 150
|
||||
// Format: any
|
||||
// Quality: any
|
||||
ExtendedFeatures
|
||||
|
||||
// ExtendedPagination represent extended pagination feature set
|
||||
// Max page size: 600
|
||||
// Format: any
|
||||
// Quality: any
|
||||
ExtendedPagination
|
||||
|
||||
// Unlimited
|
||||
PodcasterFeature
|
||||
// PodcasterFeatures reserved for future
|
||||
PodcasterFeatures
|
||||
)
|
||||
|
||||
type CreateFeedRequest struct {
|
||||
@@ -81,7 +84,7 @@ type CreateFeedRequest struct {
|
||||
}
|
||||
|
||||
type Identity struct {
|
||||
UserId string `json:"user_id"`
|
||||
UserID string `json:"user_id"`
|
||||
FullName string `json:"full_name"`
|
||||
Email string `json:"email"`
|
||||
ProfileURL string `json:"profile_url"`
|
||||
|
||||
@@ -5,12 +5,13 @@ import (
|
||||
"strconv"
|
||||
|
||||
itunes "github.com/mxpv/podcast"
|
||||
"github.com/mxpv/podsync/pkg/api"
|
||||
"github.com/mxpv/podsync/pkg/model"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/silentsokolov/go-vimeo"
|
||||
vimeo "github.com/silentsokolov/go-vimeo"
|
||||
"golang.org/x/net/context"
|
||||
"golang.org/x/oauth2"
|
||||
|
||||
"github.com/mxpv/podsync/pkg/api"
|
||||
"github.com/mxpv/podsync/pkg/model"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -34,15 +35,15 @@ func (v *VimeoBuilder) selectImage(p *vimeo.Pictures, q api.Quality) string {
|
||||
}
|
||||
|
||||
func (v *VimeoBuilder) queryChannel(feed *model.Feed) (*itunes.Podcast, error) {
|
||||
channelId := feed.ItemID
|
||||
channelID := feed.ItemID
|
||||
|
||||
ch, resp, err := v.client.Channels.Get(channelId)
|
||||
ch, resp, err := v.client.Channels.Get(channelID)
|
||||
if err != nil {
|
||||
if resp.StatusCode == http.StatusNotFound {
|
||||
return nil, api.ErrNotFound
|
||||
}
|
||||
|
||||
return nil, errors.Wrapf(err, "failed to query channel with channelId %s", channelId)
|
||||
return nil, errors.Wrapf(err, "failed to query channel with id %q", channelID)
|
||||
}
|
||||
|
||||
podcast := itunes.New(ch.Name, ch.Link, ch.Description, &ch.CreatedTime, nil)
|
||||
@@ -56,15 +57,15 @@ func (v *VimeoBuilder) queryChannel(feed *model.Feed) (*itunes.Podcast, error) {
|
||||
}
|
||||
|
||||
func (v *VimeoBuilder) queryGroup(feed *model.Feed) (*itunes.Podcast, error) {
|
||||
groupId := feed.ItemID
|
||||
groupID := feed.ItemID
|
||||
|
||||
gr, resp, err := v.client.Groups.Get(groupId)
|
||||
gr, resp, err := v.client.Groups.Get(groupID)
|
||||
if err != nil {
|
||||
if resp.StatusCode == http.StatusNotFound {
|
||||
return nil, api.ErrNotFound
|
||||
}
|
||||
|
||||
return nil, errors.Wrapf(err, "failed to query group with id %s", groupId)
|
||||
return nil, errors.Wrapf(err, "failed to query group with id %q", groupID)
|
||||
}
|
||||
|
||||
podcast := itunes.New(gr.Name, gr.Link, gr.Description, &gr.CreatedTime, nil)
|
||||
@@ -78,15 +79,15 @@ func (v *VimeoBuilder) queryGroup(feed *model.Feed) (*itunes.Podcast, error) {
|
||||
}
|
||||
|
||||
func (v *VimeoBuilder) queryUser(feed *model.Feed) (*itunes.Podcast, error) {
|
||||
userId := feed.ItemID
|
||||
userID := feed.ItemID
|
||||
|
||||
user, resp, err := v.client.Users.Get(userId)
|
||||
user, resp, err := v.client.Users.Get(userID)
|
||||
if err != nil {
|
||||
if resp.StatusCode == http.StatusNotFound {
|
||||
return nil, api.ErrNotFound
|
||||
}
|
||||
|
||||
return nil, errors.Wrapf(err, "failed to query user with id %s", userId)
|
||||
return nil, errors.Wrapf(err, "failed to query user with id %q", userID)
|
||||
}
|
||||
|
||||
podcast := itunes.New(user.Name, user.Link, user.Bio, &user.CreatedTime, nil)
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
"github.com/BrianHicks/finch/duration"
|
||||
itunes "github.com/mxpv/podcast"
|
||||
"github.com/pkg/errors"
|
||||
"google.golang.org/api/youtube/v3"
|
||||
youtube "google.golang.org/api/youtube/v3"
|
||||
|
||||
"github.com/mxpv/podsync/pkg/api"
|
||||
"github.com/mxpv/podsync/pkg/model"
|
||||
@@ -64,13 +64,13 @@ func (yt *YouTubeBuilder) listChannels(linkType api.LinkType, id string) (*youtu
|
||||
|
||||
// Cost: 3 units (call method: 1, snippet: 2)
|
||||
// See https://developers.google.com/youtube/v3/docs/playlists/list#part
|
||||
func (yt *YouTubeBuilder) listPlaylists(id, channelId string) (*youtube.Playlist, error) {
|
||||
func (yt *YouTubeBuilder) listPlaylists(id, channelID string) (*youtube.Playlist, error) {
|
||||
req := yt.client.Playlists.List("id,snippet")
|
||||
|
||||
if id != "" {
|
||||
req = req.Id(id)
|
||||
} else {
|
||||
req = req.ChannelId(channelId)
|
||||
req = req.ChannelId(channelID)
|
||||
}
|
||||
|
||||
resp, err := req.Do(yt.key)
|
||||
@@ -88,8 +88,8 @@ func (yt *YouTubeBuilder) listPlaylists(id, channelId string) (*youtube.Playlist
|
||||
|
||||
// Cost: 3 units (call: 1, snippet: 2)
|
||||
// See https://developers.google.com/youtube/v3/docs/playlistItems/list#part
|
||||
func (yt *YouTubeBuilder) listPlaylistItems(itemId string, pageToken string) ([]*youtube.PlaylistItem, string, error) {
|
||||
req := yt.client.PlaylistItems.List("id,snippet").MaxResults(maxYoutubeResults).PlaylistId(itemId)
|
||||
func (yt *YouTubeBuilder) listPlaylistItems(itemID string, pageToken string) ([]*youtube.PlaylistItem, string, error) {
|
||||
req := yt.client.PlaylistItems.List("id,snippet").MaxResults(maxYoutubeResults).PlaylistId(itemID)
|
||||
if pageToken != "" {
|
||||
req = req.PageToken(pageToken)
|
||||
}
|
||||
@@ -331,14 +331,14 @@ func (yt *YouTubeBuilder) queryVideoDescriptions(playlistItems map[string]*youtu
|
||||
}
|
||||
|
||||
// Cost: (3 units + 5 units) * X pages = 8 units per page
|
||||
func (yt *YouTubeBuilder) queryItems(itemId string, feed *model.Feed, podcast *itunes.Podcast) error {
|
||||
func (yt *YouTubeBuilder) queryItems(itemID string, feed *model.Feed, podcast *itunes.Podcast) error {
|
||||
var (
|
||||
token string
|
||||
count int
|
||||
)
|
||||
|
||||
for {
|
||||
items, pageToken, err := yt.listPlaylistItems(itemId, token)
|
||||
items, pageToken, err := yt.listPlaylistItems(itemID, token)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -370,7 +370,7 @@ func (yt *YouTubeBuilder) queryItems(itemId string, feed *model.Feed, podcast *i
|
||||
func (yt *YouTubeBuilder) Build(feed *model.Feed) (*itunes.Podcast, error) {
|
||||
|
||||
// Query general information about feed (title, description, lang, etc)
|
||||
podcast, itemId, err := yt.queryFeed(feed)
|
||||
podcast, itemID, err := yt.queryFeed(feed)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -380,7 +380,7 @@ func (yt *YouTubeBuilder) Build(feed *model.Feed) (*itunes.Podcast, error) {
|
||||
feed.PageSize = maxYoutubeResults
|
||||
}
|
||||
|
||||
if err := yt.queryItems(itemId, feed, podcast); err != nil {
|
||||
if err := yt.queryItems(itemID, feed, podcast); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
@@ -9,9 +9,9 @@ import (
|
||||
const FileName = "podsync"
|
||||
|
||||
type AppConfig struct {
|
||||
YouTubeApiKey string `yaml:"youtubeApiKey"`
|
||||
VimeoApiKey string `yaml:"vimeoApiKey"`
|
||||
PatreonClientId string `yaml:"patreonClientId"`
|
||||
YouTubeAPIKey string `yaml:"youtubeApiKey"`
|
||||
VimeoAPIKey string `yaml:"vimeoApiKey"`
|
||||
PatreonClientID string `yaml:"patreonClientId"`
|
||||
PatreonSecret string `yaml:"patreonSecret"`
|
||||
PatreonRedirectURL string `yaml:"patreonRedirectUrl"`
|
||||
PatreonWebhooksSecret string `json:"patreonWebhooksSecret"`
|
||||
|
||||
@@ -34,9 +34,9 @@ func TestReadYaml(t *testing.T) {
|
||||
cfg, err := ReadConfiguration()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, "1", cfg.YouTubeApiKey)
|
||||
require.Equal(t, "2", cfg.VimeoApiKey)
|
||||
require.Equal(t, "3", cfg.PatreonClientId)
|
||||
require.Equal(t, "1", cfg.YouTubeAPIKey)
|
||||
require.Equal(t, "2", cfg.VimeoAPIKey)
|
||||
require.Equal(t, "3", cfg.PatreonClientID)
|
||||
require.Equal(t, "4", cfg.PatreonSecret)
|
||||
require.Equal(t, "5", cfg.PostgresConnectionURL)
|
||||
require.Equal(t, "6", cfg.CookieSecret)
|
||||
@@ -68,9 +68,9 @@ func TestReadEnv(t *testing.T) {
|
||||
cfg, err := ReadConfiguration()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, "11", cfg.YouTubeApiKey)
|
||||
require.Equal(t, "22", cfg.VimeoApiKey)
|
||||
require.Equal(t, "33", cfg.PatreonClientId)
|
||||
require.Equal(t, "11", cfg.YouTubeAPIKey)
|
||||
require.Equal(t, "22", cfg.VimeoAPIKey)
|
||||
require.Equal(t, "33", cfg.PatreonClientID)
|
||||
require.Equal(t, "44", cfg.PatreonSecret)
|
||||
require.Equal(t, "55", cfg.PostgresConnectionURL)
|
||||
require.Equal(t, "66", cfg.CookieSecret)
|
||||
|
||||
@@ -48,7 +48,7 @@ func (s Service) makeFeed(req *api.CreateFeedRequest, identity *api.Identity) (*
|
||||
|
||||
now := time.Now().UTC()
|
||||
|
||||
feed.UserID = identity.UserId
|
||||
feed.UserID = identity.UserID
|
||||
feed.FeatureLevel = identity.FeatureLevel
|
||||
feed.Quality = req.Quality
|
||||
feed.Format = req.Format
|
||||
@@ -71,12 +71,12 @@ func (s Service) makeFeed(req *api.CreateFeedRequest, identity *api.Identity) (*
|
||||
}
|
||||
|
||||
// Generate short id
|
||||
hashId, err := s.generator.Generate()
|
||||
hashID, err := s.generator.Generate()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to generate id for feed")
|
||||
}
|
||||
|
||||
feed.HashID = hashId
|
||||
feed.HashID = hashID
|
||||
|
||||
return feed, nil
|
||||
}
|
||||
@@ -163,30 +163,30 @@ func (s Service) Downgrade(patronID string, featureLevel int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
type feedOption func(*Service)
|
||||
type FeedOption func(*Service)
|
||||
|
||||
//noinspection GoExportedFuncWithUnexportedType
|
||||
func WithStorage(db storage) feedOption {
|
||||
func WithStorage(db storage) FeedOption {
|
||||
return func(service *Service) {
|
||||
service.db = db
|
||||
}
|
||||
}
|
||||
|
||||
//noinspection GoExportedFuncWithUnexportedType
|
||||
func WithBuilder(provider api.Provider, builder builder) feedOption {
|
||||
func WithBuilder(provider api.Provider, builder builder) FeedOption {
|
||||
return func(service *Service) {
|
||||
service.builders[provider] = builder
|
||||
}
|
||||
}
|
||||
|
||||
//noinspection GoExportedFuncWithUnexportedType
|
||||
func WithStats(m stats) feedOption {
|
||||
func WithStats(m stats) FeedOption {
|
||||
return func(service *Service) {
|
||||
service.stats = m
|
||||
}
|
||||
}
|
||||
|
||||
func NewFeedService(opts ...feedOption) (*Service, error) {
|
||||
func NewFeedService(opts ...FeedOption) (*Service, error) {
|
||||
idGen, err := NewIDGen()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -45,9 +45,9 @@ func TestService_CreateFeed(t *testing.T) {
|
||||
Format: api.FormatVideo,
|
||||
}
|
||||
|
||||
hashId, err := s.CreateFeed(req, &api.Identity{})
|
||||
hashID, err := s.CreateFeed(req, &api.Identity{})
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, hashId)
|
||||
require.NotEmpty(t, hashID)
|
||||
}
|
||||
|
||||
func TestService_makeFeed(t *testing.T) {
|
||||
|
||||
@@ -3,7 +3,7 @@ package feeds
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/ventu-io/go-shortid"
|
||||
shortid "github.com/ventu-io/go-shortid"
|
||||
)
|
||||
|
||||
type IDGen struct {
|
||||
@@ -21,4 +21,4 @@ func NewIDGen() (IDGen, error) {
|
||||
|
||||
func (id IDGen) Generate() (string, error) {
|
||||
return id.sid.Generate()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ const (
|
||||
type feedService interface {
|
||||
CreateFeed(req *api.CreateFeedRequest, identity *api.Identity) (string, error)
|
||||
BuildFeed(hashID string) (*itunes.Podcast, error)
|
||||
GetMetadata(hashId string) (*api.Metadata, error)
|
||||
GetMetadata(hashID string) (*api.Metadata, error)
|
||||
Downgrade(patronID string, featureLevel int) error
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ func New(feed feedService, support patreonService, cfg *config.AppConfig) http.H
|
||||
// OAuth 2 configuration
|
||||
|
||||
h.oauth2 = oauth2.Config{
|
||||
ClientID: cfg.PatreonClientId,
|
||||
ClientID: cfg.PatreonClientID,
|
||||
ClientSecret: cfg.PatreonSecret,
|
||||
RedirectURL: cfg.PatreonRedirectURL,
|
||||
Scopes: []string{"users", "pledges-to-me", "my-campaign"},
|
||||
@@ -132,7 +132,7 @@ func (h handler) patreonCallback(c *gin.Context) {
|
||||
level := h.patreon.GetFeatureLevelByID(user.Data.ID)
|
||||
|
||||
identity := &api.Identity{
|
||||
UserId: user.Data.ID,
|
||||
UserID: user.Data.ID,
|
||||
FullName: user.Data.Attributes.FullName,
|
||||
Email: user.Data.Attributes.Email,
|
||||
ProfileURL: user.Data.Attributes.URL,
|
||||
@@ -154,7 +154,7 @@ func (h handler) user(c *gin.Context) {
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"user_id": identity.UserId,
|
||||
"user_id": identity.UserID,
|
||||
"feature_level": identity.FeatureLevel,
|
||||
"full_name": identity.FullName,
|
||||
})
|
||||
@@ -179,23 +179,23 @@ func (h handler) create(c *gin.Context) {
|
||||
}
|
||||
|
||||
// Check feature level again if user deleted pledge by still logged in
|
||||
identity.FeatureLevel = h.patreon.GetFeatureLevelByID(identity.UserId)
|
||||
identity.FeatureLevel = h.patreon.GetFeatureLevelByID(identity.UserID)
|
||||
|
||||
createEventLog = createEventLog.WithFields(log.Fields{
|
||||
"user_id": identity.UserId,
|
||||
"user_id": identity.UserID,
|
||||
"feature_level": identity.FeatureLevel,
|
||||
})
|
||||
|
||||
createEventLog.Info("creating feed")
|
||||
|
||||
hashId, err := h.feed.CreateFeed(req, identity)
|
||||
hashID, err := h.feed.CreateFeed(req, identity)
|
||||
if err != nil {
|
||||
createEventLog.WithError(err).Error("failed to create new feed")
|
||||
c.JSON(internalError(err))
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"id": hashId})
|
||||
c.JSON(http.StatusOK, gin.H{"id": hashID})
|
||||
}
|
||||
|
||||
func (h handler) getFeed(c *gin.Context) {
|
||||
|
||||
@@ -79,8 +79,8 @@ func (r RedisStats) Close() error {
|
||||
return r.client.Close()
|
||||
}
|
||||
|
||||
func NewRedisStats(redisUrl string) (*RedisStats, error) {
|
||||
opts, err := redis.ParseURL(redisUrl)
|
||||
func NewRedisStats(redisURL string) (*RedisStats, error) {
|
||||
opts, err := redis.ParseURL(redisURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
package stats
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
const metric = "downloads"
|
||||
|
||||
@@ -276,7 +276,7 @@ func (d Dynamo) Downgrade(userID string, featureLevel int) error {
|
||||
KeyConditionExpression: keyConditionExpression.KeyCondition(),
|
||||
ExpressionAttributeNames: keyConditionExpression.Names(),
|
||||
ExpressionAttributeValues: keyConditionExpression.Values(),
|
||||
Select: aws.String(dynamodb.SelectAllProjectedAttributes),
|
||||
Select: aws.String(dynamodb.SelectAllProjectedAttributes),
|
||||
}
|
||||
|
||||
var keys []map[string]*dynamodb.AttributeValue
|
||||
|
||||
@@ -61,4 +61,4 @@ CREATE INDEX IF NOT EXISTS feeds_user_id_idx ON feeds(user_id);
|
||||
|
||||
COMMIT;
|
||||
END;
|
||||
`
|
||||
`
|
||||
|
||||
@@ -51,6 +51,18 @@ var (
|
||||
CreatedAt: time.Now().UTC(),
|
||||
LastAccess: time.Now().UTC(),
|
||||
}
|
||||
|
||||
testDowngradePledge = &model.Feed{
|
||||
HashID: "123456",
|
||||
UserID: "123456",
|
||||
ItemID: "123456",
|
||||
Provider: api.ProviderVimeo,
|
||||
LinkType: api.LinkTypeGroup,
|
||||
PageSize: 200,
|
||||
Quality: api.QualityLow,
|
||||
Format: api.FormatAudio,
|
||||
FeatureLevel: api.ExtendedFeatures,
|
||||
}
|
||||
)
|
||||
|
||||
func runStorageTests(t *testing.T, createFn func(t *testing.T) storage) {
|
||||
@@ -118,25 +130,13 @@ func testGetMetadata(t *testing.T, storage storage) {
|
||||
}
|
||||
|
||||
func testDowngradeToDefaultFeatures(t *testing.T, storage storage) {
|
||||
feed := &model.Feed{
|
||||
HashID: "123456",
|
||||
UserID: "123456",
|
||||
ItemID: "123456",
|
||||
Provider: api.ProviderVimeo,
|
||||
LinkType: api.LinkTypeGroup,
|
||||
PageSize: 200,
|
||||
Quality: api.QualityLow,
|
||||
Format: api.FormatAudio,
|
||||
FeatureLevel: api.ExtendedFeatures,
|
||||
}
|
||||
|
||||
err := storage.SaveFeed(feed)
|
||||
err := storage.SaveFeed(testDowngradePledge)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = storage.Downgrade(feed.UserID, api.DefaultFeatures)
|
||||
err = storage.Downgrade(testDowngradePledge.UserID, api.DefaultFeatures)
|
||||
require.NoError(t, err)
|
||||
|
||||
downgraded, err := storage.GetFeed(feed.HashID)
|
||||
downgraded, err := storage.GetFeed(testDowngradePledge.HashID)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 50, downgraded.PageSize)
|
||||
@@ -146,30 +146,18 @@ func testDowngradeToDefaultFeatures(t *testing.T, storage storage) {
|
||||
}
|
||||
|
||||
func testDowngradeToExtendedFeatures(t *testing.T, storage storage) {
|
||||
feed := &model.Feed{
|
||||
HashID: "123456",
|
||||
UserID: "123456",
|
||||
ItemID: "123456",
|
||||
Provider: api.ProviderVimeo,
|
||||
LinkType: api.LinkTypeGroup,
|
||||
PageSize: 500,
|
||||
Quality: api.QualityLow,
|
||||
Format: api.FormatAudio,
|
||||
FeatureLevel: api.ExtendedFeatures,
|
||||
}
|
||||
|
||||
err := storage.SaveFeed(feed)
|
||||
err := storage.SaveFeed(testDowngradePledge)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = storage.Downgrade(feed.UserID, api.ExtendedFeatures)
|
||||
err = storage.Downgrade(testDowngradePledge.UserID, api.ExtendedFeatures)
|
||||
require.NoError(t, err)
|
||||
|
||||
downgraded, err := storage.GetFeed(feed.HashID)
|
||||
downgraded, err := storage.GetFeed(testDowngradePledge.HashID)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 150, downgraded.PageSize)
|
||||
require.Equal(t, feed.Quality, downgraded.Quality)
|
||||
require.Equal(t, feed.Format, downgraded.Format)
|
||||
require.Equal(t, testDowngradePledge.Quality, downgraded.Quality)
|
||||
require.Equal(t, testDowngradePledge.Format, downgraded.Format)
|
||||
require.Equal(t, api.ExtendedFeatures, downgraded.FeatureLevel)
|
||||
}
|
||||
|
||||
@@ -207,14 +195,7 @@ func testAddPledge(t *testing.T, storage storage) {
|
||||
pledge, err := storage.GetPledge(strconv.FormatInt(testPledge.PatronID, 10))
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, testPledge.PledgeID, pledge.PledgeID)
|
||||
require.Equal(t, testPledge.PatronID, pledge.PatronID)
|
||||
require.Equal(t, testPledge.CreatedAt.Unix(), pledge.CreatedAt.Unix())
|
||||
require.Equal(t, testPledge.DeclinedSince.Unix(), pledge.DeclinedSince.Unix())
|
||||
require.Equal(t, testPledge.AmountCents, pledge.AmountCents)
|
||||
require.Equal(t, testPledge.TotalHistoricalAmountCents, pledge.TotalHistoricalAmountCents)
|
||||
require.Equal(t, testPledge.OutstandingPaymentAmountCents, pledge.OutstandingPaymentAmountCents)
|
||||
require.Equal(t, testPledge.IsPaused, pledge.IsPaused)
|
||||
compareWithTestPledge(t, pledge)
|
||||
}
|
||||
|
||||
func testGetPledge(t *testing.T, storage storage) {
|
||||
@@ -224,6 +205,10 @@ func testGetPledge(t *testing.T, storage storage) {
|
||||
pledge, err := storage.GetPledge(strconv.FormatInt(testPledge.PatronID, 10))
|
||||
require.NoError(t, err)
|
||||
|
||||
compareWithTestPledge(t, pledge)
|
||||
}
|
||||
|
||||
func compareWithTestPledge(t *testing.T, pledge *model.Pledge) {
|
||||
require.Equal(t, testPledge.PledgeID, pledge.PledgeID)
|
||||
require.Equal(t, testPledge.PatronID, pledge.PatronID)
|
||||
require.Equal(t, testPledge.CreatedAt.Unix(), pledge.CreatedAt.Unix())
|
||||
|
||||
@@ -113,7 +113,7 @@ func (h Patreon) GetFeatureLevelByID(patronID string) (level int) {
|
||||
}
|
||||
|
||||
if patronID == creatorID {
|
||||
level = api.PodcasterFeature
|
||||
level = api.PodcasterFeatures
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ func TestGetFeatureLevel(t *testing.T) {
|
||||
|
||||
hook := Patreon{db: storage}
|
||||
|
||||
require.Equal(t, api.PodcasterFeature, hook.GetFeatureLevelByID(creatorID))
|
||||
require.Equal(t, api.PodcasterFeatures, hook.GetFeatureLevelByID(creatorID))
|
||||
require.Equal(t, api.DefaultFeatures, hook.GetFeatureLevelByID("xyz"))
|
||||
require.Equal(t, api.ExtendedPagination, hook.GetFeatureLevelByID(pledge.Relationships.Patron.Data.ID))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user