@@ -545,6 +545,84 @@ func TestAuditLogDefaultLimit(t *testing.T) {
545545require .Len (t ,rows ,100 )
546546}
547547
548+ func TestWorkspaceQuotas (t * testing.T ) {
549+ t .Parallel ()
550+ orgMemberIDs := func (o database.OrganizationMember ) uuid.UUID {
551+ return o .UserID
552+ }
553+ groupMemberIDs := func (m database.GroupMember ) uuid.UUID {
554+ return m .UserID
555+ }
556+
557+ t .Run ("CorruptedEveryone" ,func (t * testing.T ) {
558+ t .Parallel ()
559+
560+ ctx := testutil .Context (t ,testutil .WaitLong )
561+
562+ db ,_ := dbtestutil .NewDB (t )
563+ // Create an extra org as a distraction
564+ distract := dbgen .Organization (t ,db , database.Organization {})
565+ _ ,err := db .InsertAllUsersGroup (ctx ,distract .ID )
566+ require .NoError (t ,err )
567+
568+ _ ,err = db .UpdateGroupByID (ctx , database.UpdateGroupByIDParams {
569+ QuotaAllowance :15 ,
570+ ID :distract .ID ,
571+ })
572+ require .NoError (t ,err )
573+
574+ // Create an org with 2 users
575+ org := dbgen .Organization (t ,db , database.Organization {})
576+
577+ everyoneGroup ,err := db .InsertAllUsersGroup (ctx ,org .ID )
578+ require .NoError (t ,err )
579+
580+ // Add a quota to the everyone group
581+ _ ,err = db .UpdateGroupByID (ctx , database.UpdateGroupByIDParams {
582+ QuotaAllowance :50 ,
583+ ID :everyoneGroup .ID ,
584+ })
585+ require .NoError (t ,err )
586+
587+ // Add people to the org
588+ one := dbgen .User (t ,db , database.User {})
589+ two := dbgen .User (t ,db , database.User {})
590+ memOne := dbgen .OrganizationMember (t ,db , database.OrganizationMember {
591+ OrganizationID :org .ID ,
592+ UserID :one .ID ,
593+ })
594+ memTwo := dbgen .OrganizationMember (t ,db , database.OrganizationMember {
595+ OrganizationID :org .ID ,
596+ UserID :two .ID ,
597+ })
598+
599+ // Fetch the 'Everyone' group members
600+ everyoneMembers ,err := db .GetGroupMembersByGroupID (ctx ,org .ID )
601+ require .NoError (t ,err )
602+
603+ require .ElementsMatch (t ,db2sdk .List (everyoneMembers ,groupMemberIDs ),
604+ db2sdk .List ([]database.OrganizationMember {memOne ,memTwo },orgMemberIDs ))
605+
606+ // Check the quota is correct.
607+ allowance ,err := db .GetQuotaAllowanceForUser (ctx ,one .ID )
608+ require .NoError (t ,err )
609+ require .Equal (t ,int64 (50 ),allowance )
610+
611+ // Now try to corrupt the DB
612+ // Insert rows into the everyone group
613+ err = db .InsertGroupMember (ctx , database.InsertGroupMemberParams {
614+ UserID :memOne .UserID ,
615+ GroupID :org .ID ,
616+ })
617+ require .NoError (t ,err )
618+
619+ // Ensure allowance remains the same
620+ allowance ,err = db .GetQuotaAllowanceForUser (ctx ,one .ID )
621+ require .NoError (t ,err )
622+ require .Equal (t ,int64 (50 ),allowance )
623+ })
624+ }
625+
548626// TestReadCustomRoles tests the input params returns the correct set of roles.
549627func TestReadCustomRoles (t * testing.T ) {
550628t .Parallel ()