Tests for manager.go
This commit is contained in:
parent
8bf64d8723
commit
1f010acb30
2 changed files with 122 additions and 2 deletions
|
@ -41,7 +41,6 @@ import (
|
|||
- tokens
|
||||
- MEDIUM: Test for expiring messages after reservation removal
|
||||
- MEDIUM: Test new token endpoints & never-expiring token
|
||||
- MEDIUM: Tests for manager.go
|
||||
- LOW: UI: Flickering upgrade banner when logging in
|
||||
- LOW: get rid of reservation id, replace with DELETE X-Topic: ...
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package user
|
|||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"github.com/stretchr/testify/require"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"heckel.io/ntfy/util"
|
||||
|
@ -380,6 +381,13 @@ func TestManager_Reservations(t *testing.T) {
|
|||
|
||||
err = a.AllowReservation("phil", "not-reserved")
|
||||
require.Nil(t, err)
|
||||
|
||||
// Now remove them again
|
||||
require.Nil(t, a.RemoveReservations("ben", "ztopic", "readme"))
|
||||
|
||||
count, err = a.ReservationsCount("ben")
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, int64(0), count)
|
||||
}
|
||||
|
||||
func TestManager_ChangeRoleFromTierUserToAdmin(t *testing.T) {
|
||||
|
@ -740,10 +748,23 @@ func TestManager_ChangeSettings(t *testing.T) {
|
|||
require.Equal(t, util.String("My Topic"), u.Prefs.Subscriptions[0].DisplayName)
|
||||
}
|
||||
|
||||
func TestManager_Tier_Create(t *testing.T) {
|
||||
func TestManager_Tier_Create_Update_List_Delete(t *testing.T) {
|
||||
a := newTestManager(t, PermissionDenyAll)
|
||||
|
||||
// Create tier and user
|
||||
require.Nil(t, a.AddTier(&Tier{
|
||||
Code: "supporter",
|
||||
Name: "Supporter",
|
||||
MessageLimit: 1,
|
||||
MessageExpiryDuration: time.Second,
|
||||
EmailLimit: 1,
|
||||
ReservationLimit: 1,
|
||||
AttachmentFileSizeLimit: 1,
|
||||
AttachmentTotalSizeLimit: 1,
|
||||
AttachmentExpiryDuration: time.Second,
|
||||
AttachmentBandwidthLimit: 1,
|
||||
StripePriceID: "price_1",
|
||||
}))
|
||||
require.Nil(t, a.AddTier(&Tier{
|
||||
Code: "pro",
|
||||
Name: "Pro",
|
||||
|
@ -755,6 +776,7 @@ func TestManager_Tier_Create(t *testing.T) {
|
|||
AttachmentTotalSizeLimit: 123123,
|
||||
AttachmentExpiryDuration: 10800 * time.Second,
|
||||
AttachmentBandwidthLimit: 21474836480,
|
||||
StripePriceID: "price_2",
|
||||
}))
|
||||
require.Nil(t, a.AddUser("phil", "phil", RoleUser))
|
||||
require.Nil(t, a.ChangeTier("phil", "pro"))
|
||||
|
@ -780,6 +802,68 @@ func TestManager_Tier_Create(t *testing.T) {
|
|||
require.Equal(t, int64(123123), ti.AttachmentTotalSizeLimit)
|
||||
require.Equal(t, 10800*time.Second, ti.AttachmentExpiryDuration)
|
||||
require.Equal(t, int64(21474836480), ti.AttachmentBandwidthLimit)
|
||||
require.Equal(t, "price_2", ti.StripePriceID)
|
||||
|
||||
// Update tier
|
||||
ti.EmailLimit = 999999
|
||||
require.Nil(t, a.UpdateTier(ti))
|
||||
|
||||
// List tiers
|
||||
tiers, err := a.Tiers()
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, 2, len(tiers))
|
||||
|
||||
ti = tiers[0]
|
||||
require.Equal(t, "supporter", ti.Code)
|
||||
require.Equal(t, "Supporter", ti.Name)
|
||||
require.Equal(t, int64(1), ti.MessageLimit)
|
||||
require.Equal(t, time.Second, ti.MessageExpiryDuration)
|
||||
require.Equal(t, int64(1), ti.EmailLimit)
|
||||
require.Equal(t, int64(1), ti.ReservationLimit)
|
||||
require.Equal(t, int64(1), ti.AttachmentFileSizeLimit)
|
||||
require.Equal(t, int64(1), ti.AttachmentTotalSizeLimit)
|
||||
require.Equal(t, time.Second, ti.AttachmentExpiryDuration)
|
||||
require.Equal(t, int64(1), ti.AttachmentBandwidthLimit)
|
||||
require.Equal(t, "price_1", ti.StripePriceID)
|
||||
|
||||
ti = tiers[1]
|
||||
require.Equal(t, "pro", ti.Code)
|
||||
require.Equal(t, "Pro", ti.Name)
|
||||
require.Equal(t, int64(123), ti.MessageLimit)
|
||||
require.Equal(t, 86400*time.Second, ti.MessageExpiryDuration)
|
||||
require.Equal(t, int64(999999), ti.EmailLimit) // Updatedd!
|
||||
require.Equal(t, int64(2), ti.ReservationLimit)
|
||||
require.Equal(t, int64(1231231), ti.AttachmentFileSizeLimit)
|
||||
require.Equal(t, int64(123123), ti.AttachmentTotalSizeLimit)
|
||||
require.Equal(t, 10800*time.Second, ti.AttachmentExpiryDuration)
|
||||
require.Equal(t, int64(21474836480), ti.AttachmentBandwidthLimit)
|
||||
require.Equal(t, "price_2", ti.StripePriceID)
|
||||
|
||||
ti, err = a.TierByStripePrice("price_1")
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, "supporter", ti.Code)
|
||||
require.Equal(t, "Supporter", ti.Name)
|
||||
require.Equal(t, int64(1), ti.MessageLimit)
|
||||
require.Equal(t, time.Second, ti.MessageExpiryDuration)
|
||||
require.Equal(t, int64(1), ti.EmailLimit)
|
||||
require.Equal(t, int64(1), ti.ReservationLimit)
|
||||
require.Equal(t, int64(1), ti.AttachmentFileSizeLimit)
|
||||
require.Equal(t, int64(1), ti.AttachmentTotalSizeLimit)
|
||||
require.Equal(t, time.Second, ti.AttachmentExpiryDuration)
|
||||
require.Equal(t, int64(1), ti.AttachmentBandwidthLimit)
|
||||
require.Equal(t, "price_1", ti.StripePriceID)
|
||||
|
||||
// Cannot remove tier, since user has this tier
|
||||
require.Error(t, a.RemoveTier("pro"))
|
||||
|
||||
// CAN remove this tier
|
||||
require.Nil(t, a.RemoveTier("supporter"))
|
||||
|
||||
tiers, err = a.Tiers()
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, 1, len(tiers))
|
||||
require.Equal(t, "pro", tiers[0].Code)
|
||||
require.Equal(t, "pro", tiers[0].Code)
|
||||
}
|
||||
|
||||
func TestAccount_Tier_Create_With_ID(t *testing.T) {
|
||||
|
@ -795,6 +879,43 @@ func TestAccount_Tier_Create_With_ID(t *testing.T) {
|
|||
require.Equal(t, "ti_123", ti.ID)
|
||||
}
|
||||
|
||||
func TestManager_Tier_Change_And_Reset(t *testing.T) {
|
||||
a := newTestManager(t, PermissionDenyAll)
|
||||
|
||||
// Create tier and user
|
||||
require.Nil(t, a.AddTier(&Tier{
|
||||
Code: "supporter",
|
||||
Name: "Supporter",
|
||||
ReservationLimit: 3,
|
||||
}))
|
||||
require.Nil(t, a.AddTier(&Tier{
|
||||
Code: "pro",
|
||||
Name: "Pro",
|
||||
ReservationLimit: 4,
|
||||
}))
|
||||
require.Nil(t, a.AddUser("phil", "phil", RoleUser))
|
||||
require.Nil(t, a.ChangeTier("phil", "pro"))
|
||||
|
||||
// Add 10 reservations (pro tier allows that)
|
||||
for i := 0; i < 4; i++ {
|
||||
require.Nil(t, a.AddReservation("phil", fmt.Sprintf("topic%d", i), PermissionWrite))
|
||||
}
|
||||
|
||||
// Downgrading will not work (too many reservations)
|
||||
require.Equal(t, ErrTooManyReservations, a.ChangeTier("phil", "supporter"))
|
||||
|
||||
// Downgrade after removing a reservation
|
||||
require.Nil(t, a.RemoveReservations("phil", "topic0"))
|
||||
require.Nil(t, a.ChangeTier("phil", "supporter"))
|
||||
|
||||
// Resetting will not work (too many reservations)
|
||||
require.Equal(t, ErrTooManyReservations, a.ResetTier("phil"))
|
||||
|
||||
// Resetting after removing all reservations
|
||||
require.Nil(t, a.RemoveReservations("phil", "topic1", "topic2", "topic3"))
|
||||
require.Nil(t, a.ResetTier("phil"))
|
||||
}
|
||||
|
||||
func TestSqliteCache_Migration_From1(t *testing.T) {
|
||||
filename := filepath.Join(t.TempDir(), "user.db")
|
||||
db, err := sql.Open("sqlite3", filename)
|
||||
|
|
Loading…
Reference in a new issue