File size: 3,622 Bytes
16cdcb7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | package subscription_test
import (
"testing"
"time"
"github.com/samber/lo"
"github.com/openmeterio/openmeter/openmeter/subscription"
"github.com/openmeterio/openmeter/openmeter/testutils"
"github.com/openmeterio/openmeter/pkg/models"
)
func TestSubscriptionStatus(t *testing.T) {
tt := []struct {
Name string
Sub subscription.Subscription
QueryTime time.Time
Expected subscription.SubscriptionStatus
}{
{
Name: "Should be inactive for zero sub",
Sub: subscription.Subscription{},
QueryTime: testutils.GetRFC3339Time(t, "2020-01-01T00:00:00Z"),
Expected: subscription.SubscriptionStatusInactive,
},
{
Name: "Should be active at start time",
Sub: subscription.Subscription{
CadencedModel: models.CadencedModel{
ActiveFrom: testutils.GetRFC3339Time(t, "2020-01-01T00:00:00Z"),
},
},
QueryTime: testutils.GetRFC3339Time(t, "2020-01-01T00:00:00Z"),
Expected: subscription.SubscriptionStatusActive,
},
{
Name: "Should be active after start time",
Sub: subscription.Subscription{
CadencedModel: models.CadencedModel{
ActiveFrom: testutils.GetRFC3339Time(t, "2020-01-01T00:00:00Z"),
},
},
QueryTime: testutils.GetRFC3339Time(t, "2020-01-01T00:00:01Z"),
Expected: subscription.SubscriptionStatusActive,
},
{
Name: "Should be canceled between start and end times",
Sub: subscription.Subscription{
CadencedModel: models.CadencedModel{
ActiveFrom: testutils.GetRFC3339Time(t, "2020-01-01T00:00:00Z"),
ActiveTo: lo.ToPtr(testutils.GetRFC3339Time(t, "2020-01-01T00:00:05Z")),
},
},
QueryTime: testutils.GetRFC3339Time(t, "2020-01-01T00:00:01Z"),
Expected: subscription.SubscriptionStatusCanceled,
},
{
Name: "Should be inactive at end time",
Sub: subscription.Subscription{
CadencedModel: models.CadencedModel{
ActiveFrom: testutils.GetRFC3339Time(t, "2020-01-01T00:00:00Z"),
ActiveTo: lo.ToPtr(testutils.GetRFC3339Time(t, "2020-01-01T00:00:05Z")),
},
},
QueryTime: testutils.GetRFC3339Time(t, "2020-01-01T00:00:05Z"),
Expected: subscription.SubscriptionStatusInactive,
},
{
Name: "Should be inactive after end time",
Sub: subscription.Subscription{
CadencedModel: models.CadencedModel{
ActiveFrom: testutils.GetRFC3339Time(t, "2020-01-01T00:00:00Z"),
ActiveTo: lo.ToPtr(testutils.GetRFC3339Time(t, "2020-01-01T00:00:05Z")),
},
},
QueryTime: testutils.GetRFC3339Time(t, "2020-01-01T00:00:06Z"),
Expected: subscription.SubscriptionStatusInactive,
},
{
Name: "Should be inactive after deletion",
Sub: subscription.Subscription{
ManagedModel: models.ManagedModel{
DeletedAt: lo.ToPtr(testutils.GetRFC3339Time(t, "2020-01-01T00:00:02Z")),
},
},
QueryTime: testutils.GetRFC3339Time(t, "2020-01-01T00:00:06Z"),
Expected: subscription.SubscriptionStatusInactive,
},
{
Name: "Should be inactive after deletion after being scheduled",
Sub: subscription.Subscription{
CadencedModel: models.CadencedModel{
ActiveFrom: testutils.GetRFC3339Time(t, "2020-01-01T00:00:00Z"),
},
ManagedModel: models.ManagedModel{
DeletedAt: lo.ToPtr(testutils.GetRFC3339Time(t, "2020-01-01T00:00:02Z")),
},
},
QueryTime: testutils.GetRFC3339Time(t, "2020-01-01T00:00:06Z"),
Expected: subscription.SubscriptionStatusInactive,
},
}
for _, tc := range tt {
t.Run(tc.Name, func(t *testing.T) {
actual := tc.Sub.GetStatusAt(tc.QueryTime)
if actual != tc.Expected {
t.Errorf("expected %v, got %v", tc.Expected, actual)
}
})
}
}
|