feat(billing): Add cli subcommand for monthly active user counts

This commit is contained in:
Michael Milton authored and Timothy Messier committed 2024-02-23 15:44:10 +00:00
1 parent 111dc87ead
commit 2e69d59dd2
24 files changed
+791 -73

No files matched your search

+1 -1
View File
@@ -11,5 +11,5 @@ import "time"
type ActiveUsers struct {
StartTime time.Time
EndTime time.Time
ActiveUsersCount uint64
ActiveUsersCount uint32
}
+1 -2
View File
@@ -89,7 +89,7 @@ func (r *Repository) MonthlyActiveUsers(ctx context.Context, opt ...Option) ([]A
for rows.Next() {
var startTime time.Time
var endTime time.Time
var count uint64
var count uint32
if err := rows.Scan(&startTime, &endTime, &count); err != nil {
return nil, err
}
@@ -101,7 +101,6 @@ func (r *Repository) MonthlyActiveUsers(ctx context.Context, opt ...Option) ([]A
EndTime: endTime.UTC(),
}
activeUsers = append(activeUsers, auUTC)
}
return activeUsers, nil
+6 -6
View File
@@ -84,8 +84,8 @@ func TestRepository_MonthlyActiveUsers(t *testing.T) {
assert.NoError(t, err)
require.Len(t, activeUsers, 2)
// check counts for the last two months
require.Equal(t, uint64(0), activeUsers[0].ActiveUsersCount)
require.Equal(t, uint64(6), activeUsers[1].ActiveUsersCount)
require.Equal(t, uint32(0), activeUsers[0].ActiveUsersCount)
require.Equal(t, uint32(6), activeUsers[1].ActiveUsersCount)
// assert start and end times are correct
// the current month (contains the hour)
assert.Equal(t, time.Date(today.Year(), today.Month(), 1, 0, 0, 0, 0, time.UTC), activeUsers[0].StartTime)
@@ -103,7 +103,7 @@ func TestRepository_MonthlyActiveUsers(t *testing.T) {
for i := 0; i < 4; i++ {
// check counts for the last four months
if i == 0 {
assert.Equal(t, uint64(0), activeUsers[i].ActiveUsersCount)
assert.Equal(t, uint32(0), activeUsers[i].ActiveUsersCount)
// the current month (contains the hour)
assert.Equal(t, time.Date(today.Year(), today.Month(), 1, 0, 0, 0, 0, time.UTC), activeUsers[i].StartTime)
assert.Equal(t, time.Date(today.Year(), today.Month(), today.Day(), today.Hour(), 0, 0, 0, time.UTC), activeUsers[i].EndTime)
@@ -111,7 +111,7 @@ func TestRepository_MonthlyActiveUsers(t *testing.T) {
// create a sliding window of dates to assert start and end times are correct
expectedStartTime := time.Date(today.AddDate(0, -i, 0).Year(), today.AddDate(0, -i, 0).Month(), 1, 0, 0, 0, 0, time.UTC)
expectedEndTime := time.Date(today.AddDate(0, -i+1, 0).Year(), today.AddDate(0, -i+1, 0).Month(), 1, 0, 0, 0, 0, time.UTC)
assert.Equal(t, uint64(6), activeUsers[i].ActiveUsersCount)
assert.Equal(t, uint32(6), activeUsers[i].ActiveUsersCount)
assert.Equal(t, expectedStartTime, activeUsers[i].StartTime)
assert.Equal(t, expectedEndTime, activeUsers[i].EndTime)
}
@@ -125,13 +125,13 @@ func TestRepository_MonthlyActiveUsers(t *testing.T) {
require.Len(t, activeUsers, 2)
expectedStartTime := time.Date(today.AddDate(0, -2, 0).Year(), today.AddDate(0, -2, 0).Month(), 1, 0, 0, 0, 0, time.UTC)
expectedEndTime := time.Date(today.AddDate(0, -1, 0).Year(), today.AddDate(0, -1, 0).Month(), 1, 0, 0, 0, 0, time.UTC)
require.Equal(t, uint64(6), activeUsers[0].ActiveUsersCount)
require.Equal(t, uint32(6), activeUsers[0].ActiveUsersCount)
assert.Equal(t, expectedStartTime, activeUsers[0].StartTime)
assert.Equal(t, expectedEndTime, activeUsers[0].EndTime)
expectedStartTime = time.Date(today.AddDate(0, -3, 0).Year(), today.AddDate(0, -3, 0).Month(), 1, 0, 0, 0, 0, time.UTC)
expectedEndTime = time.Date(today.AddDate(0, -2, 0).Year(), today.AddDate(0, -2, 0).Month(), 1, 0, 0, 0, 0, time.UTC)
require.Equal(t, uint64(6), activeUsers[1].ActiveUsersCount)
require.Equal(t, uint32(6), activeUsers[1].ActiveUsersCount)
assert.Equal(t, expectedStartTime, activeUsers[1].StartTime)
assert.Equal(t, expectedEndTime, activeUsers[1].EndTime)
})