Skip to content

Commit 784a98f

Browse files
committed
refactor tests
1 parent 9ccd0b2 commit 784a98f

File tree

5 files changed

+693
-348
lines changed

5 files changed

+693
-348
lines changed

coderd/database/db.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ func (q *sqlQuerier) InTx(function func(Store) error, txOpts *TxOptions) error {
144144
// We do not want to duplicate those retries.
145145
if !inTx && sqlOpts.Isolation == sql.LevelSerializable {
146146
// This is an arbitrarily chosen number.
147-
const retryAmount = 3
147+
const retryAmount = 1
148148
var err error
149149
attempts := 0
150150
for attempts = 0; attempts < retryAmount; attempts++ {

coderd/database/dbfake/builder.go

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package dbfake
2+
3+
import (
4+
"testing"
5+
6+
"github.com/google/uuid"
7+
"github.com/stretchr/testify/require"
8+
9+
"github.com/coder/coder/v2/coderd/database"
10+
"github.com/coder/coder/v2/coderd/database/dbauthz"
11+
"github.com/coder/coder/v2/coderd/database/dbgen"
12+
"github.com/coder/coder/v2/coderd/database/dbtime"
13+
"github.com/coder/coder/v2/testutil"
14+
)
15+
16+
type OrganizationBuilder struct {
17+
t *testing.T
18+
db database.Store
19+
seed database.Organization
20+
allUsersAllowance int32
21+
members []uuid.UUID
22+
groups map[database.Group][]uuid.UUID
23+
}
24+
25+
func Organization(t *testing.T, db database.Store) OrganizationBuilder {
26+
return OrganizationBuilder{
27+
t: t,
28+
db: db,
29+
members: []uuid.UUID{},
30+
groups: make(map[database.Group][]uuid.UUID),
31+
}
32+
}
33+
34+
type OrganizationResponse struct {
35+
Org database.Organization
36+
AllUsersGroup database.Group
37+
Members []database.OrganizationMember
38+
Groups []database.Group
39+
}
40+
41+
func (b OrganizationBuilder) EveryoneAllowance(allowance int) OrganizationBuilder {
42+
b.allUsersAllowance = int32(allowance)
43+
return b
44+
}
45+
46+
func (b OrganizationBuilder) Seed(seed database.Organization) OrganizationBuilder {
47+
b.seed = seed
48+
return b
49+
}
50+
51+
func (b OrganizationBuilder) Members(users ...database.User) OrganizationBuilder {
52+
for _, u := range users {
53+
b.members = append(b.members, u.ID)
54+
}
55+
return b
56+
}
57+
58+
func (b OrganizationBuilder) Group(seed database.Group, members ...database.User) OrganizationBuilder {
59+
b.groups[seed] = []uuid.UUID{}
60+
for _, u := range members {
61+
b.groups[seed] = append(b.groups[seed], u.ID)
62+
}
63+
return b
64+
}
65+
66+
func (b OrganizationBuilder) Do() OrganizationResponse {
67+
org := dbgen.Organization(b.t, b.db, b.seed)
68+
69+
ctx := testutil.Context(b.t, testutil.WaitShort)
70+
ctx = dbauthz.AsSystemRestricted(ctx)
71+
everyone, err := b.db.InsertAllUsersGroup(ctx, org.ID)
72+
require.NoError(b.t, err)
73+
74+
if b.allUsersAllowance > 0 {
75+
everyone, err = b.db.UpdateGroupByID(ctx, database.UpdateGroupByIDParams{
76+
Name: everyone.Name,
77+
DisplayName: everyone.DisplayName,
78+
AvatarURL: everyone.AvatarURL,
79+
QuotaAllowance: b.allUsersAllowance,
80+
ID: everyone.ID,
81+
})
82+
require.NoError(b.t, err)
83+
}
84+
85+
members := make([]database.OrganizationMember, 0)
86+
if len(b.members) > 0 {
87+
for _, u := range b.members {
88+
newMem := dbgen.OrganizationMember(b.t, b.db, database.OrganizationMember{
89+
UserID: u,
90+
OrganizationID: org.ID,
91+
CreatedAt: dbtime.Now(),
92+
UpdatedAt: dbtime.Now(),
93+
Roles: nil,
94+
})
95+
members = append(members, newMem)
96+
}
97+
}
98+
99+
groups := make([]database.Group, 0)
100+
if len(b.groups) > 0 {
101+
for g, users := range b.groups {
102+
g.OrganizationID = org.ID
103+
group := dbgen.Group(b.t, b.db, g)
104+
groups = append(groups, group)
105+
106+
for _, u := range users {
107+
dbgen.GroupMember(b.t, b.db, database.GroupMemberTable{
108+
UserID: u,
109+
GroupID: group.ID,
110+
})
111+
}
112+
}
113+
}
114+
115+
return OrganizationResponse{
116+
Org: org,
117+
AllUsersGroup: everyone,
118+
Members: members,
119+
Groups: groups,
120+
}
121+
}

coderd/database/dbgen/dbgen.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,8 @@ func OrganizationMember(t testing.TB, db database.Store, orig database.Organizat
407407
}
408408

409409
func Group(t testing.TB, db database.Store, orig database.Group) database.Group {
410+
t.Helper()
411+
410412
name := takeFirst(orig.Name, testutil.GetRandomName(t))
411413
group, err := db.InsertGroup(genCtx, database.InsertGroupParams{
412414
ID: takeFirst(orig.ID, uuid.New()),

coderd/database/dbtestutil/tx.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package dbtestutil
22

33
import (
4-
"database/sql"
54
"sync"
65
"testing"
76

@@ -18,7 +17,7 @@ type DBTx struct {
1817

1918
// StartTx starts a transaction and returns a DBTx object. This allows running
2019
// 2 transactions concurrently in a test more easily.
21-
func StartTx(t *testing.T, db database.Store, opts *sql.TxOptions) *DBTx {
20+
func StartTx(t *testing.T, db database.Store, opts *database.TxOptions) *DBTx {
2221
errC := make(chan error)
2322
finalErr := make(chan error)
2423
txC := make(chan database.Store)

0 commit comments

Comments
 (0)