diff --git a/coderd/database/querier_test.go b/coderd/database/querier_test.go index 0f96dcc172..1afda66b78 100644 --- a/coderd/database/querier_test.go +++ b/coderd/database/querier_test.go @@ -2188,6 +2188,41 @@ func TestInsertUserServiceAccountConstraints(t *testing.T) { }) } +func TestGetActiveUserCount(t *testing.T) { + t.Parallel() + if testing.Short() { + t.SkipNow() + } + + db, _ := dbtestutil.NewDB(t) + ctx := testutil.Context(t, testutil.WaitLong) + + // Seed users: 2 active humans, 1 active service account, + // 1 dormant, 1 deleted. Only the 2 active humans should + // be counted for license seat purposes. + _ = dbgen.User(t, db, database.User{ + Status: database.UserStatusActive, + }) + _ = dbgen.User(t, db, database.User{ + Status: database.UserStatusActive, + }) + _ = dbgen.User(t, db, database.User{ + Status: database.UserStatusActive, + IsServiceAccount: true, + }) + _ = dbgen.User(t, db, database.User{ + Status: database.UserStatusDormant, + }) + _ = dbgen.User(t, db, database.User{ + Status: database.UserStatusActive, + Deleted: true, + }) + + count, err := db.GetActiveUserCount(ctx, false) + require.NoError(t, err) + require.Equal(t, int64(2), count) +} + func TestUserChangeLoginType(t *testing.T) { t.Parallel() if testing.Short() { diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 729be29c1d..9c9125ea72 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -25168,6 +25168,7 @@ FROM users WHERE status = 'active'::user_status AND deleted = false + AND is_service_account = false AND CASE WHEN $1::bool THEN TRUE ELSE is_system = false END ` diff --git a/coderd/database/queries/users.sql b/coderd/database/queries/users.sql index 80e4b36f6d..5fde237b3a 100644 --- a/coderd/database/queries/users.sql +++ b/coderd/database/queries/users.sql @@ -78,6 +78,7 @@ FROM users WHERE status = 'active'::user_status AND deleted = false + AND is_service_account = false AND CASE WHEN @include_system::bool THEN TRUE ELSE is_system = false END; -- name: InsertUser :one