Skip to content

Commit 4df9c3e

Browse files
easyCZroboquat
authored andcommitted
[usage] Ensure billed usage results are ordered
1 parent 993c05e commit 4df9c3e

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

components/usage/pkg/db/workspace_instance_usage.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func ListUsage(ctx context.Context, conn *gorm.DB, attributionId AttributionID)
5353
db := conn.WithContext(ctx)
5454

5555
var usageRecords []WorkspaceInstanceUsage
56-
result := db.Find(&usageRecords, "attributionId = ?", attributionId)
56+
result := db.Order("startedAt").Find(&usageRecords, "attributionId = ?", attributionId)
5757
if result.Error != nil {
5858
return nil, fmt.Errorf("failed to get usage records: %s", result.Error)
5959
}

components/usage/pkg/db/workspace_instance_usage_test.go

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ func TestNoErrorOnCreatingDuplicateRecords(t *testing.T) {
9898
}
9999

100100
func TestCreateUsageRecords_Updates(t *testing.T) {
101-
conn := dbtest.ConnectForTests(t).Debug()
101+
conn := dbtest.ConnectForTests(t)
102102

103103
instanceID := uuid.New()
104104
teamID := uuid.New().String()
@@ -149,3 +149,43 @@ func TestCreateUsageRecords_Updates(t *testing.T) {
149149
require.Len(t, list, 1)
150150
require.Equal(t, update, list[0])
151151
}
152+
153+
func TestListUsage_Ordering(t *testing.T) {
154+
conn := dbtest.ConnectForTests(t)
155+
teamAttributionID := db.NewTeamAttributionID(uuid.New().String())
156+
newest := db.WorkspaceInstanceUsage{
157+
InstanceID: uuid.New(),
158+
AttributionID: teamAttributionID,
159+
UserID: uuid.New(),
160+
WorkspaceID: dbtest.GenerateWorkspaceID(),
161+
ProjectID: uuid.New().String(),
162+
WorkspaceType: db.WorkspaceType_Prebuild,
163+
WorkspaceClass: db.WorkspaceClass_Default,
164+
CreditsUsed: 4.505,
165+
StartedAt: time.Date(2022, 7, 15, 10, 30, 30, 5000, time.UTC),
166+
// not stopped
167+
}
168+
169+
oldest := db.WorkspaceInstanceUsage{
170+
InstanceID: uuid.New(),
171+
AttributionID: teamAttributionID,
172+
UserID: uuid.New(),
173+
WorkspaceID: dbtest.GenerateWorkspaceID(),
174+
ProjectID: uuid.New().String(),
175+
WorkspaceType: db.WorkspaceType_Prebuild,
176+
WorkspaceClass: db.WorkspaceClass_Default,
177+
CreditsUsed: 4.505,
178+
StartedAt: time.Date(2022, 7, 14, 10, 30, 30, 5000, time.UTC),
179+
StoppedAt: sql.NullTime{
180+
Time: time.Date(2022, 7, 15, 15, 30, 30, 5000, time.UTC),
181+
Valid: true,
182+
},
183+
}
184+
185+
require.NoError(t, db.CreateUsageRecords(context.Background(), conn, []db.WorkspaceInstanceUsage{newest, oldest}))
186+
187+
listed, err := db.ListUsage(context.Background(), conn, teamAttributionID)
188+
require.NoError(t, err)
189+
190+
require.Equal(t, []db.WorkspaceInstanceUsage{oldest, newest}, listed)
191+
}

0 commit comments

Comments
 (0)