File size: 1,836 Bytes
1c4c66b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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")
}