| package subscriptionaddon_test |
|
|
| import ( |
| "context" |
| "encoding/json" |
| "testing" |
| "time" |
|
|
| "github.com/samber/lo" |
| "github.com/stretchr/testify/assert" |
| "github.com/stretchr/testify/require" |
|
|
| "github.com/openmeterio/openmeter/openmeter/customer" |
| "github.com/openmeterio/openmeter/openmeter/productcatalog" |
| "github.com/openmeterio/openmeter/openmeter/productcatalog/addon" |
| "github.com/openmeterio/openmeter/openmeter/session" |
| subscriptionaddon "github.com/openmeterio/openmeter/openmeter/subscription/addon" |
| "github.com/openmeterio/openmeter/pkg/models" |
| ) |
|
|
| func TestEvents(t *testing.T) { |
| |
| now := time.Now().UTC() |
| customer := customer.Customer{ |
| ManagedResource: models.ManagedResource{ |
| NamespacedModel: models.NamespacedModel{ |
| Namespace: "test-namespace", |
| }, |
| ManagedModel: models.ManagedModel{ |
| CreatedAt: now, |
| UpdatedAt: now, |
| }, |
| ID: "test-customer-id", |
| Name: "Test Customer", |
| }, |
| UsageAttribution: &customer.CustomerUsageAttribution{ |
| SubjectKeys: []string{"test-subject-key"}, |
| }, |
| PrimaryEmail: lo.ToPtr("test@example.com"), |
| } |
|
|
| addonMeta := productcatalog.AddonMeta{ |
| Key: "test-key", |
| Version: 1, |
| Name: "Test Addon", |
| Description: lo.ToPtr("Test Description"), |
| InstanceType: productcatalog.AddonInstanceTypeSingle, |
| } |
|
|
| addon := addon.Addon{ |
| NamespacedID: models.NamespacedID{ |
| Namespace: "test-namespace", |
| ID: "test-addon-id", |
| }, |
| ManagedModel: models.ManagedModel{ |
| CreatedAt: now, |
| UpdatedAt: now, |
| }, |
| AddonMeta: addonMeta, |
| } |
|
|
| subscriptionAddon := subscriptionaddon.SubscriptionAddon{ |
| NamespacedID: models.NamespacedID{ |
| Namespace: "test-namespace", |
| ID: "test-subscription-addon-id", |
| }, |
| ManagedModel: models.ManagedModel{ |
| CreatedAt: now, |
| UpdatedAt: now, |
| }, |
| Name: "Test Subscription Addon", |
| Description: lo.ToPtr("Test Description"), |
| Addon: addon, |
| SubscriptionID: "test-subscription-id", |
| } |
|
|
| userID := "test-user-id" |
|
|
| t.Run("CreatedEvent", func(t *testing.T) { |
| |
| ctx := context.WithValue( |
| context.Background(), |
| session.AuthenticationSessionKey, &session.AuthenticationSession{ |
| UserID: userID, |
| }, |
| ) |
|
|
| |
| event := subscriptionaddon.NewCreatedEvent(ctx, customer, subscriptionAddon) |
| event.UserID = &userID |
|
|
| |
| assert.Equal(t, "io.openmeter.subscriptionaddon.v1.subscriptionaddon.created", event.EventName()) |
|
|
| |
| metadata := event.EventMetadata() |
| assert.Equal(t, "//openmeter.io/namespace/test-namespace/subscriptionAddon/test-subscription-addon-id", metadata.Source) |
| assert.Equal(t, "//openmeter.io/namespace/test-namespace/customer/test-customer-id", metadata.Subject) |
|
|
| |
| data, err := json.Marshal(event) |
| require.NoError(t, err) |
|
|
| |
| var decodedEvent subscriptionaddon.CreatedEvent |
| err = json.Unmarshal(data, &decodedEvent) |
| require.NoError(t, err) |
|
|
| |
| assert.Equal(t, event.Customer, decodedEvent.Customer) |
| assert.Equal(t, event.SubscriptionAddon, decodedEvent.SubscriptionAddon) |
| assert.Equal(t, event.UserID, decodedEvent.UserID) |
| }) |
|
|
| t.Run("ChangeQuantityEvent", func(t *testing.T) { |
| |
| ctx := context.WithValue( |
| context.Background(), |
| session.AuthenticationSessionKey, &session.AuthenticationSession{ |
| UserID: userID, |
| }, |
| ) |
|
|
| |
| event := subscriptionaddon.NewChangeQuantityEvent(ctx, customer, subscriptionAddon) |
| event.UserID = &userID |
|
|
| |
| assert.Equal(t, "io.openmeter.subscriptionaddon.v1.subscriptionaddon.changequantity", event.EventName()) |
|
|
| |
| metadata := event.EventMetadata() |
| assert.Equal(t, "//openmeter.io/namespace/test-namespace/subscriptionAddon/test-subscription-addon-id", metadata.Source) |
| assert.Equal(t, "//openmeter.io/namespace/test-namespace/customer/test-customer-id", metadata.Subject) |
|
|
| |
| data, err := json.Marshal(event) |
| require.NoError(t, err) |
|
|
| |
| var decodedEvent subscriptionaddon.ChangeQuantityEvent |
| err = json.Unmarshal(data, &decodedEvent) |
| require.NoError(t, err) |
|
|
| |
| assert.Equal(t, event.Customer, decodedEvent.Customer) |
| assert.Equal(t, event.SubscriptionAddon, decodedEvent.SubscriptionAddon) |
| assert.Equal(t, event.UserID, decodedEvent.UserID) |
| }) |
| } |
|
|