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

125 lines
3.0 KiB
Go
Raw Normal View History

2018-11-24 11:58:08 -08:00
//go:generate mockgen -source=patreon.go -destination=patreon_mock_test.go -package=support
2017-11-02 17:43:08 -07:00
package support
2017-10-26 14:36:52 -07:00
import (
"testing"
"time"
2018-11-24 11:58:08 -08:00
"github.com/golang/mock/gomock"
2017-10-26 14:36:52 -07:00
"github.com/mxpv/patreon-go"
2018-11-24 11:58:08 -08:00
"github.com/pkg/errors"
"github.com/stretchr/testify/require"
2017-11-02 17:43:08 -07:00
"github.com/mxpv/podsync/pkg/api"
2017-11-02 21:50:12 -07:00
"github.com/mxpv/podsync/pkg/model"
2017-10-26 14:36:52 -07:00
)
2018-11-24 11:58:08 -08:00
func TestToModel(t *testing.T) {
2017-10-26 14:36:52 -07:00
pledge := createPledge()
2018-11-24 11:58:08 -08:00
modelPledge, err := ToModel(pledge)
2017-10-26 14:36:52 -07:00
require.NoError(t, err)
2018-11-24 11:58:08 -08:00
require.Equal(t, modelPledge.PledgeID, int64(12345))
require.Equal(t, modelPledge.AmountCents, 400)
require.Equal(t, modelPledge.PatronID, int64(67890))
require.NotNil(t, modelPledge.CreatedAt)
2017-10-26 14:36:52 -07:00
}
2018-11-24 11:58:08 -08:00
func TestCreate(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
2017-10-26 14:36:52 -07:00
pledge := createPledge()
2018-11-24 11:58:08 -08:00
expected, _ := ToModel(pledge)
storage := NewMockstorage(ctrl)
storage.EXPECT().AddPledge(gomock.Eq(expected)).Times(1).Return(nil)
hook := Patreon{db: storage}
2017-10-26 14:36:52 -07:00
2017-11-02 17:43:08 -07:00
err := hook.Hook(pledge, patreon.EventCreatePledge)
2017-10-26 14:36:52 -07:00
require.NoError(t, err)
2018-11-24 11:58:08 -08:00
}
2017-10-26 14:36:52 -07:00
2018-11-24 11:58:08 -08:00
func TestUpdate(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
2017-10-26 14:36:52 -07:00
2018-11-24 11:58:08 -08:00
pledge := createPledge()
expected, _ := ToModel(pledge)
2017-10-26 14:36:52 -07:00
2018-11-24 11:58:08 -08:00
storage := NewMockstorage(ctrl)
storage.EXPECT().UpdatePledge("67890", gomock.Eq(expected))
hook := Patreon{db: storage}
err := hook.Hook(pledge, patreon.EventUpdatePledge)
2017-10-26 14:36:52 -07:00
require.NoError(t, err)
}
func TestDelete(t *testing.T) {
2018-11-24 11:58:08 -08:00
ctrl := gomock.NewController(t)
defer ctrl.Finish()
2017-10-26 14:36:52 -07:00
pledge := createPledge()
2018-11-24 11:58:08 -08:00
expected, _ := ToModel(pledge)
2017-10-26 14:36:52 -07:00
2018-11-24 11:58:08 -08:00
storage := NewMockstorage(ctrl)
storage.EXPECT().DeletePledge(expected)
2017-10-26 14:36:52 -07:00
2018-11-24 11:58:08 -08:00
hook := Patreon{db: storage}
err := hook.Hook(pledge, patreon.EventDeletePledge)
2017-10-26 14:36:52 -07:00
require.NoError(t, err)
}
2017-11-02 17:13:01 -07:00
func TestFindPledge(t *testing.T) {
2018-11-24 11:58:08 -08:00
ctrl := gomock.NewController(t)
defer ctrl.Finish()
2017-11-02 17:13:01 -07:00
2018-11-24 11:58:08 -08:00
expected := &model.Pledge{}
2017-11-02 17:13:01 -07:00
2018-11-24 11:58:08 -08:00
storage := NewMockstorage(ctrl)
storage.EXPECT().GetPledge("123").Times(1).Return(expected, nil)
hook := Patreon{db: storage}
res, err := hook.FindPledge("123")
2017-11-02 17:13:01 -07:00
require.NoError(t, err)
2018-11-24 11:58:08 -08:00
require.Equal(t, expected, res)
2017-11-02 17:13:01 -07:00
}
2017-11-02 17:43:08 -07:00
func TestGetFeatureLevel(t *testing.T) {
2018-11-24 11:58:08 -08:00
ctrl := gomock.NewController(t)
defer ctrl.Finish()
2017-11-02 17:43:08 -07:00
pledge := createPledge()
2018-11-24 11:58:08 -08:00
storage := NewMockstorage(ctrl)
2017-11-02 17:43:08 -07:00
2018-11-24 11:58:08 -08:00
ret, err := ToModel(pledge)
2017-11-02 17:43:08 -07:00
require.NoError(t, err)
2018-11-24 11:58:08 -08:00
storage.EXPECT().GetPledge(pledge.Relationships.Patron.Data.ID).Return(ret, nil)
storage.EXPECT().GetPledge("xyz").Return(nil, errors.New("not found"))
hook := Patreon{db: storage}
2017-11-10 17:22:12 -08:00
require.Equal(t, api.PodcasterFeature, hook.GetFeatureLevelByID(creatorID))
require.Equal(t, api.DefaultFeatures, hook.GetFeatureLevelByID("xyz"))
require.Equal(t, api.ExtendedPagination, hook.GetFeatureLevelByID(pledge.Relationships.Patron.Data.ID))
2017-11-02 17:43:08 -07:00
}
2017-10-26 14:36:52 -07:00
func createPledge() *patreon.Pledge {
pledge := &patreon.Pledge{
2017-10-30 17:26:46 -07:00
ID: "12345",
2017-10-26 14:36:52 -07:00
Type: "pledge",
}
pledge.Attributes.AmountCents = 400
pledge.Attributes.CreatedAt = patreon.NullTime{Valid: true, Time: time.Now().UTC()}
pledge.Relationships.Patron = &patreon.PatronRelationship{}
2017-10-30 17:26:46 -07:00
pledge.Relationships.Patron.Data.ID = "67890"
2017-10-26 14:36:52 -07:00
return pledge
}