Files
next.orly.dev/pkg/database/subscriptions_test.go

122 lines
2.4 KiB
Go

package database
import (
"testing"
"github.com/dgraph-io/badger/v4"
)
func TestSubscriptionLifecycle(t *testing.T) {
db, err := badger.Open(badger.DefaultOptions("").WithInMemory(true))
if err != nil {
t.Fatal(err)
}
defer db.Close()
d := &D{DB: db}
pubkey := []byte("test_pubkey_32_bytes_long_enough")
// First check should create trial
active, err := d.IsSubscriptionActive(pubkey)
if err != nil {
t.Fatal(err)
}
if !active {
t.Error("expected trial to be active")
}
// Verify trial was created
sub, err := d.GetSubscription(pubkey)
if err != nil {
t.Fatal(err)
}
if sub == nil {
t.Fatal("expected subscription to exist")
}
if sub.TrialEnd.IsZero() {
t.Error("expected trial end to be set")
}
if !sub.PaidUntil.IsZero() {
t.Error("expected paid until to be zero")
}
// Extend subscription
err = d.ExtendSubscription(pubkey, 30)
if err != nil {
t.Fatal(err)
}
// Check subscription is still active
active, err = d.IsSubscriptionActive(pubkey)
if err != nil {
t.Fatal(err)
}
if !active {
t.Error("expected subscription to be active after extension")
}
// Verify paid until was set
sub, err = d.GetSubscription(pubkey)
if err != nil {
t.Fatal(err)
}
if sub.PaidUntil.IsZero() {
t.Error("expected paid until to be set after extension")
}
}
func TestExtendSubscriptionEdgeCases(t *testing.T) {
db, err := badger.Open(badger.DefaultOptions("").WithInMemory(true))
if err != nil {
t.Fatal(err)
}
defer db.Close()
d := &D{DB: db}
pubkey := []byte("test_pubkey_32_bytes_long_enough")
// Test extending non-existent subscription
err = d.ExtendSubscription(pubkey, 30)
if err != nil {
t.Fatal(err)
}
sub, err := d.GetSubscription(pubkey)
if err != nil {
t.Fatal(err)
}
if sub.PaidUntil.IsZero() {
t.Error("expected paid until to be set")
}
// Test invalid days
err = d.ExtendSubscription(pubkey, 0)
if err == nil {
t.Error("expected error for 0 days")
}
err = d.ExtendSubscription(pubkey, -1)
if err == nil {
t.Error("expected error for negative days")
}
}
func TestGetNonExistentSubscription(t *testing.T) {
db, err := badger.Open(badger.DefaultOptions("").WithInMemory(true))
if err != nil {
t.Fatal(err)
}
defer db.Close()
d := &D{DB: db}
pubkey := []byte("non_existent_pubkey_32_bytes_long")
sub, err := d.GetSubscription(pubkey)
if err != nil {
t.Fatal(err)
}
if sub != nil {
t.Error("expected nil for non-existent subscription")
}
}