| package billing |
|
|
| import ( |
| "testing" |
| "time" |
|
|
| "github.com/samber/lo" |
| "github.com/stretchr/testify/require" |
|
|
| "github.com/openmeterio/openmeter/openmeter/billing/models/stddetailedline" |
| "github.com/openmeterio/openmeter/pkg/models" |
| "github.com/openmeterio/openmeter/pkg/timeutil" |
| ) |
|
|
| func TestSortLines(t *testing.T) { |
| lines := StandardLines{ |
| { |
| StandardLineBase: StandardLineBase{ |
| ManagedResource: models.NewManagedResource(models.ManagedResourceInput{ |
| Name: "usage-based-line", |
| Description: lo.ToPtr("index=1"), |
| }), |
| Period: timeutil.ClosedPeriod{ |
| From: time.Now().Add(time.Hour * 24), |
| }, |
| }, |
| DetailedLines: DetailedLines{ |
| { |
| DetailedLineBase: DetailedLineBase{ |
| Base: stddetailedline.Base{ |
| ManagedResource: models.NewManagedResource(models.ManagedResourceInput{ |
| Name: "child-2", |
| Description: lo.ToPtr("index=1.1"), |
| }), |
| Index: lo.ToPtr(1), |
| }, |
| }, |
| }, |
| { |
| DetailedLineBase: DetailedLineBase{ |
| Base: stddetailedline.Base{ |
| ManagedResource: models.NewManagedResource(models.ManagedResourceInput{ |
| Name: "child-1", |
| Description: lo.ToPtr("index=1.0"), |
| }), |
| Index: lo.ToPtr(0), |
| }, |
| }, |
| }, |
| }, |
| }, |
| { |
| StandardLineBase: StandardLineBase{ |
| ManagedResource: models.NewManagedResource(models.ManagedResourceInput{ |
| Name: "usage-based-line", |
| Description: lo.ToPtr("index=0"), |
| }), |
| Period: timeutil.ClosedPeriod{ |
| From: time.Now(), |
| }, |
| }, |
| }, |
| } |
|
|
| lines.Sort() |
|
|
| require.Equal(t, *lines[0].Description, "index=0") |
| require.Equal(t, *lines[1].Description, "index=1") |
| children := lines[1].DetailedLines |
| require.Equal(t, *children[0].Description, "index=1.0") |
| require.Equal(t, *children[1].Description, "index=1.1") |
| } |
|
|