Leon4gr45's picture
Upload folder using huggingface_hub (part 6)
d6f631f verified
Raw
History Blame Contribute Delete
6.12 kB
package plan
import (
"testing"
"github.com/samber/lo"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/openmeterio/openmeter/openmeter/productcatalog"
)
func AssertPlanCreateInputEqual(t *testing.T, i CreatePlanInput, p Plan) {
t.Helper()
assert.Equalf(t, i.Namespace, p.Namespace, "create input: namespace mismatch")
assert.Equalf(t, i.Key, p.Key, "create input: key mismatch")
assert.Equalf(t, i.Name, p.Name, "create input: name mismatch")
assert.Equalf(t, i.Description, p.Description, "create input: description mismatch")
assert.Equalf(t, i.Currency, p.Currency, "create input: currency mismatch")
assert.Equalf(t, i.Metadata, p.Metadata, "metadata mismatch")
assert.Equalf(t, i.SettlementMode, p.SettlementMode, "create input: settlement mode mismatch")
AssertPlanPhasesEqual(t, i.Phases, p.Phases)
}
func AssertPlanUpdateInputEqual(t *testing.T, i UpdatePlanInput, p Plan) {
t.Helper()
assert.Equalf(t, i.Namespace, p.Namespace, "update input: namespace mismatch")
if i.Name != nil {
assert.Equalf(t, *i.Name, p.Name, "update input: name mismatch")
}
if i.Description != nil {
assert.Equalf(t, lo.FromPtr(i.Description), lo.FromPtr(p.Description), "update input: description mismatch")
}
if i.Metadata != nil {
assert.Equalf(t, *i.Metadata, p.Metadata, "metadata mismatch")
}
if i.SettlementMode != nil {
assert.Equalf(t, *i.SettlementMode, p.SettlementMode, "update input: settlement mode mismatch")
}
if i.Phases != nil {
AssertPlanPhasesEqual(t, *i.Phases, p.Phases)
}
}
func AssertPlanEqual(t *testing.T, expected, actual Plan) {
t.Helper()
assert.Equal(t, expected.Key, actual.Key)
assert.Equal(t, expected.Name, actual.Name)
assert.Equal(t, expected.Description, actual.Description)
assert.Equal(t, expected.Currency, actual.Currency)
assert.Equal(t, expected.SettlementMode, actual.SettlementMode)
AssertPlanPhasesEqual(t, expected.Phases, actual.Phases)
}
func AssertPlanPhasesEqual[E interface{ productcatalog.Phase | Phase }](t *testing.T, expected []E, actual []Phase) {
t.Helper()
assert.Equalf(t, len(expected), len(actual), "number of PlanPhases mismatch")
expectedMap := func() map[string]E {
m := make(map[string]E, len(expected))
for _, v := range expected {
var meta productcatalog.PhaseMeta
switch vv := any(v).(type) {
case productcatalog.Phase:
meta = vv.PhaseMeta
case Phase:
meta = vv.PhaseMeta
}
require.NotEmptyf(t, meta.Key, "Phase key must not be empty")
m[meta.Key] = v
}
return m
}()
actualMap := func() map[string]Phase {
m := make(map[string]Phase, len(actual))
for _, v := range actual {
m[v.Key] = v
}
return m
}()
actualVisited := make(map[string]struct{})
for key, expectedPhase := range expectedMap {
actualPhase, ok := actualMap[key]
require.Truef(t, ok, "missing PlanPhase key")
AssertPlanPhaseEqual(t, expectedPhase, actualPhase)
actualVisited[key] = struct{}{}
}
for key := range actualMap {
_, ok := actualVisited[key]
require.Truef(t, ok, "missing PlanPhase key")
}
}
func AssertPlanPhaseEqual[E interface{ productcatalog.Phase | Phase }](t *testing.T, in E, actual Phase) {
t.Helper()
if managed, ok := any(in).(ManagedPhase); ok {
expectedManagedFields := managed.ManagedFields()
assert.Equalf(t, expectedManagedFields.PlanID, actual.PlanID, "planId mismatch")
assert.Equalf(t, expectedManagedFields.ID, actual.ID, "id mismatch")
assert.Equalf(t, expectedManagedFields.Namespace, actual.Namespace, "namespace mismatch")
}
var expected productcatalog.Phase
switch v := any(in).(type) {
case productcatalog.Phase:
expected = v
case Phase:
expected = v.Phase
}
assert.Equalf(t, expected.Key, actual.Key, "key mismatch")
assert.Equalf(t, expected.Name, actual.Name, "name mismatch")
assert.Equalf(t, expected.Description, actual.Description, "description mismatch")
assert.Equalf(t, expected.Metadata, actual.Metadata, "metadata mismatch")
assert.Equalf(t, expected.Duration, actual.Duration, "duration mismatch")
AssertPlanRateCardsEqual(t, expected.RateCards, actual.RateCards)
}
func AssertPlanRateCardsEqual(t *testing.T, r1, r2 productcatalog.RateCards) {
t.Helper()
assert.Equalf(t, len(r1), len(r2), "number of RateCards mismatch")
r1Map := func() map[string]productcatalog.RateCard {
m := make(map[string]productcatalog.RateCard, len(r1))
for _, v := range r1 {
m[v.Key()] = v
}
return m
}()
r2Map := func() map[string]productcatalog.RateCard {
m := make(map[string]productcatalog.RateCard, len(r2))
for _, v := range r2 {
m[v.Key()] = v
}
return m
}()
visited := make(map[string]struct{})
for phase1Key, rateCard1 := range r1Map {
rateCard2, ok := r2Map[phase1Key]
require.Truef(t, ok, "missing RateCard key")
AssertRateCardEqual(t, rateCard1, rateCard2)
visited[phase1Key] = struct{}{}
}
for phase2Key := range r2Map {
_, ok := visited[phase2Key]
require.Truef(t, ok, "missing RateCard key")
}
}
func AssertRateCardEqual(t *testing.T, r1, r2 productcatalog.RateCard) {
t.Helper()
assert.Equalf(t, r1.Type(), r2.Type(), "type mismatch")
m1 := r1.AsMeta()
m2 := r2.AsMeta()
assert.Equalf(t, m1.Key, m2.Key, "key mismatch")
assert.Equalf(t, m1.Name, m2.Name, "name mismatch")
assert.Equalf(t, lo.FromPtr(m1.Description), lo.FromPtr(m2.Description), "description mismatch")
assert.Truef(t, m1.Metadata.Equal(m2.Metadata), "metadata mismatch")
assert.Equalf(t, m1.FeatureKey, m2.FeatureKey, "feature key mismatch")
assert.Equalf(t, m1.FeatureID, m2.FeatureID, "feature id mismatch")
assert.Truef(t, m1.EntitlementTemplate.Equal(m2.EntitlementTemplate), "entitlement template mismatch")
assert.Truef(t, m1.TaxConfig.Equal(m2.TaxConfig), "tax config mismatch")
assert.Truef(t, m1.Price.Equal(m2.Price), "price mismatch")
assert.Truef(t, m1.UnitConfig.Equal(m2.UnitConfig), "unit config mismatch")
billingCadence1 := r1.GetBillingCadence().ISOStringPtrOrNil()
billingCadence2 := r2.GetBillingCadence().ISOStringPtrOrNil()
assert.Equal(t, billingCadence1, billingCadence2)
}