mirror of
https://github.com/binwiederhier/ntfy.git
synced 2025-06-16 17:43:13 +02:00
Add password confirmation to account delete dialog, v1/tiers test
This commit is contained in:
parent
954d919361
commit
e82a2e518c
14 changed files with 242 additions and 93 deletions
server
|
@ -14,6 +14,108 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
func TestPayments_Tiers(t *testing.T) {
|
||||
stripeMock := &testStripeAPI{}
|
||||
defer stripeMock.AssertExpectations(t)
|
||||
|
||||
c := newTestConfigWithAuthFile(t)
|
||||
c.StripeSecretKey = "secret key"
|
||||
c.StripeWebhookKey = "webhook key"
|
||||
c.VisitorRequestLimitReplenish = 12 * time.Hour
|
||||
c.CacheDuration = 13 * time.Hour
|
||||
c.AttachmentFileSizeLimit = 111
|
||||
c.VisitorAttachmentTotalSizeLimit = 222
|
||||
c.AttachmentExpiryDuration = 123 * time.Second
|
||||
s := newTestServer(t, c)
|
||||
s.stripe = stripeMock
|
||||
|
||||
// Define how the mock should react
|
||||
stripeMock.
|
||||
On("ListPrices", mock.Anything).
|
||||
Return([]*stripe.Price{
|
||||
{ID: "price_123", UnitAmount: 500},
|
||||
{ID: "price_456", UnitAmount: 1000},
|
||||
{ID: "price_999", UnitAmount: 9999},
|
||||
}, nil)
|
||||
|
||||
// Create tiers
|
||||
require.Nil(t, s.userManager.CreateTier(&user.Tier{
|
||||
ID: "ti_1",
|
||||
Code: "admin",
|
||||
Name: "Admin",
|
||||
}))
|
||||
require.Nil(t, s.userManager.CreateTier(&user.Tier{
|
||||
ID: "ti_123",
|
||||
Code: "pro",
|
||||
Name: "Pro",
|
||||
MessagesLimit: 1000,
|
||||
MessagesExpiryDuration: time.Hour,
|
||||
EmailsLimit: 123,
|
||||
ReservationsLimit: 777,
|
||||
AttachmentFileSizeLimit: 999,
|
||||
AttachmentTotalSizeLimit: 888,
|
||||
AttachmentExpiryDuration: time.Minute,
|
||||
StripePriceID: "price_123",
|
||||
}))
|
||||
require.Nil(t, s.userManager.CreateTier(&user.Tier{
|
||||
ID: "ti_444",
|
||||
Code: "business",
|
||||
Name: "Business",
|
||||
MessagesLimit: 2000,
|
||||
MessagesExpiryDuration: 10 * time.Hour,
|
||||
EmailsLimit: 123123,
|
||||
ReservationsLimit: 777333,
|
||||
AttachmentFileSizeLimit: 999111,
|
||||
AttachmentTotalSizeLimit: 888111,
|
||||
AttachmentExpiryDuration: time.Hour,
|
||||
StripePriceID: "price_456",
|
||||
}))
|
||||
response := request(t, s, "GET", "/v1/tiers", "", nil)
|
||||
require.Equal(t, 200, response.Code)
|
||||
var tiers []apiAccountBillingTier
|
||||
require.Nil(t, json.NewDecoder(response.Body).Decode(&tiers))
|
||||
require.Equal(t, 3, len(tiers))
|
||||
|
||||
// Free tier
|
||||
tier := tiers[0]
|
||||
require.Equal(t, "", tier.Code)
|
||||
require.Equal(t, "", tier.Name)
|
||||
require.Equal(t, "ip", tier.Limits.Basis)
|
||||
require.Equal(t, int64(0), tier.Limits.Reservations)
|
||||
require.Equal(t, int64(2), tier.Limits.Messages) // :-(
|
||||
require.Equal(t, int64(13*3600), tier.Limits.MessagesExpiryDuration)
|
||||
require.Equal(t, int64(24), tier.Limits.Emails)
|
||||
require.Equal(t, int64(111), tier.Limits.AttachmentFileSize)
|
||||
require.Equal(t, int64(222), tier.Limits.AttachmentTotalSize)
|
||||
require.Equal(t, int64(123), tier.Limits.AttachmentExpiryDuration)
|
||||
|
||||
// Admin tier is not included, because it is not paid!
|
||||
|
||||
tier = tiers[1]
|
||||
require.Equal(t, "pro", tier.Code)
|
||||
require.Equal(t, "Pro", tier.Name)
|
||||
require.Equal(t, "tier", tier.Limits.Basis)
|
||||
require.Equal(t, int64(777), tier.Limits.Reservations)
|
||||
require.Equal(t, int64(1000), tier.Limits.Messages)
|
||||
require.Equal(t, int64(3600), tier.Limits.MessagesExpiryDuration)
|
||||
require.Equal(t, int64(123), tier.Limits.Emails)
|
||||
require.Equal(t, int64(999), tier.Limits.AttachmentFileSize)
|
||||
require.Equal(t, int64(888), tier.Limits.AttachmentTotalSize)
|
||||
require.Equal(t, int64(60), tier.Limits.AttachmentExpiryDuration)
|
||||
|
||||
tier = tiers[2]
|
||||
require.Equal(t, "business", tier.Code)
|
||||
require.Equal(t, "Business", tier.Name)
|
||||
require.Equal(t, "tier", tier.Limits.Basis)
|
||||
require.Equal(t, int64(777333), tier.Limits.Reservations)
|
||||
require.Equal(t, int64(2000), tier.Limits.Messages)
|
||||
require.Equal(t, int64(36000), tier.Limits.MessagesExpiryDuration)
|
||||
require.Equal(t, int64(123123), tier.Limits.Emails)
|
||||
require.Equal(t, int64(999111), tier.Limits.AttachmentFileSize)
|
||||
require.Equal(t, int64(888111), tier.Limits.AttachmentTotalSize)
|
||||
require.Equal(t, int64(3600), tier.Limits.AttachmentExpiryDuration)
|
||||
}
|
||||
|
||||
func TestPayments_SubscriptionCreate_NotAStripeCustomer_Success(t *testing.T) {
|
||||
stripeMock := &testStripeAPI{}
|
||||
defer stripeMock.AssertExpectations(t)
|
||||
|
@ -122,7 +224,7 @@ func TestPayments_AccountDelete_Cancels_Subscription(t *testing.T) {
|
|||
require.Nil(t, s.userManager.ChangeBilling(u.Name, billing))
|
||||
|
||||
// Delete account
|
||||
rr := request(t, s, "DELETE", "/v1/account", "", map[string]string{
|
||||
rr := request(t, s, "DELETE", "/v1/account", `{"password": "phil"}`, map[string]string{
|
||||
"Authorization": util.BasicAuth("phil", "phil"),
|
||||
})
|
||||
require.Equal(t, 200, rr.Code)
|
||||
|
@ -258,6 +360,8 @@ type testStripeAPI struct {
|
|||
mock.Mock
|
||||
}
|
||||
|
||||
var _ stripeAPI = (*testStripeAPI)(nil)
|
||||
|
||||
func (s *testStripeAPI) NewCheckoutSession(params *stripe.CheckoutSessionParams) (*stripe.CheckoutSession, error) {
|
||||
args := s.Called(params)
|
||||
return args.Get(0).(*stripe.CheckoutSession), args.Error(1)
|
||||
|
@ -288,6 +392,11 @@ func (s *testStripeAPI) GetSubscription(id string) (*stripe.Subscription, error)
|
|||
return args.Get(0).(*stripe.Subscription), args.Error(1)
|
||||
}
|
||||
|
||||
func (s *testStripeAPI) UpdateCustomer(id string, params *stripe.CustomerParams) (*stripe.Customer, error) {
|
||||
args := s.Called(id)
|
||||
return args.Get(0).(*stripe.Customer), args.Error(1)
|
||||
}
|
||||
|
||||
func (s *testStripeAPI) UpdateSubscription(id string, params *stripe.SubscriptionParams) (*stripe.Subscription, error) {
|
||||
args := s.Called(id)
|
||||
return args.Get(0).(*stripe.Subscription), args.Error(1)
|
||||
|
@ -303,8 +412,6 @@ func (s *testStripeAPI) ConstructWebhookEvent(payload []byte, header string, sec
|
|||
return args.Get(0).(stripe.Event), args.Error(1)
|
||||
}
|
||||
|
||||
var _ stripeAPI = (*testStripeAPI)(nil)
|
||||
|
||||
func jsonToStripeEvent(t *testing.T, v string) stripe.Event {
|
||||
var e stripe.Event
|
||||
if err := json.Unmarshal([]byte(v), &e); err != nil {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue