Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 349cec2

Browse files
committed
update test with more cases
1 parent a9a9cfa commit 349cec2

File tree

3 files changed

+57
-28
lines changed

3 files changed

+57
-28
lines changed

coderd/database/dbfake/builder.go

+18
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ type OrganizationBuilder struct {
1717
t *testing.T
1818
db database.Store
1919
seed database.Organization
20+
delete bool
2021
allUsersAllowance int32
2122
members []uuid.UUID
2223
groups map[database.Group][]uuid.UUID
@@ -45,6 +46,12 @@ func (b OrganizationBuilder) EveryoneAllowance(allowance int) OrganizationBuilde
4546
return b
4647
}
4748

49+
func (b OrganizationBuilder) Deleted(deleted bool) OrganizationBuilder {
50+
//nolint: revive // returns modified struct
51+
b.delete = deleted
52+
return b
53+
}
54+
4855
func (b OrganizationBuilder) Seed(seed database.Organization) OrganizationBuilder {
4956
//nolint: revive // returns modified struct
5057
b.seed = seed
@@ -119,6 +126,17 @@ func (b OrganizationBuilder) Do() OrganizationResponse {
119126
}
120127
}
121128

129+
if b.delete {
130+
now := dbtime.Now()
131+
err = b.db.UpdateOrganizationDeletedByID(ctx, database.UpdateOrganizationDeletedByIDParams{
132+
UpdatedAt: now,
133+
ID: org.ID,
134+
})
135+
require.NoError(b.t, err)
136+
org.Deleted = true
137+
org.UpdatedAt = now
138+
}
139+
122140
return OrganizationResponse{
123141
Org: org,
124142
AllUsersGroup: everyone,

coderd/database/dbmem/dbmem.go

+3
Original file line numberDiff line numberDiff line change
@@ -4156,6 +4156,9 @@ func (q *FakeQuerier) GetOrganizations(_ context.Context, args database.GetOrgan
41564156
if args.Name != "" && !strings.EqualFold(org.Name, args.Name) {
41574157
continue
41584158
}
4159+
if args.Deleted != org.Deleted {
4160+
continue
4161+
}
41594162
tmp = append(tmp, org)
41604163
}
41614164

coderd/idpsync/organizations_test.go

+36-28
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package idpsync_test
22

33
import (
4+
"database/sql"
45
"testing"
56

67
"github.com/golang-jwt/jwt/v4"
@@ -9,9 +10,10 @@ import (
910

1011
"cdr.dev/slog/sloggers/slogtest"
1112
"github.com/coder/coder/v2/coderd/database"
13+
"github.com/coder/coder/v2/coderd/database/db2sdk"
14+
"github.com/coder/coder/v2/coderd/database/dbfake"
1215
"github.com/coder/coder/v2/coderd/database/dbgen"
1316
"github.com/coder/coder/v2/coderd/database/dbtestutil"
14-
"github.com/coder/coder/v2/coderd/database/dbtime"
1517
"github.com/coder/coder/v2/coderd/idpsync"
1618
"github.com/coder/coder/v2/coderd/runtimeconfig"
1719
"github.com/coder/coder/v2/testutil"
@@ -46,29 +48,28 @@ func TestParseOrganizationClaims(t *testing.T) {
4648
func TestSyncOrganizations(t *testing.T) {
4749
t.Parallel()
4850

51+
// This test creates some deleted organizations and checks the behavior is
52+
// correct.
4953
t.Run("SyncUserToDeletedOrg", func(t *testing.T) {
5054
ctx := testutil.Context(t, testutil.WaitMedium)
5155
db, _ := dbtestutil.NewDB(t)
5256
user := dbgen.User(t, db, database.User{})
53-
extra := dbgen.Organization(t, db, database.Organization{})
54-
dbgen.OrganizationMember(t, db, database.OrganizationMember{
55-
UserID: user.ID,
56-
OrganizationID: extra.ID,
57-
})
5857

59-
// Create a new organization, add in the user as a member, then delete
60-
// the org.
61-
org := dbgen.Organization(t, db, database.Organization{})
62-
dbgen.OrganizationMember(t, db, database.OrganizationMember{
63-
UserID: user.ID,
64-
OrganizationID: org.ID,
65-
})
66-
67-
err := db.UpdateOrganizationDeletedByID(ctx, database.UpdateOrganizationDeletedByIDParams{
68-
UpdatedAt: dbtime.Now(),
69-
ID: org.ID,
70-
})
71-
require.NoError(t, err)
58+
// Create orgs for:
59+
// - stays = User is a member, and stays
60+
// - leaves = User is a member, and leaves
61+
// - joins = User is not a member, and joins
62+
// For deleted orgs, the user **should not** be a member of afterwards.
63+
// - deletedStays = User is a member of deleted org, and wants to stay
64+
// - deletedLeaves = User is a member of deleted org, and wants to leave
65+
// - deletedJoins = User is not a member of deleted org, and wants to join
66+
stays := dbfake.Organization(t, db).Members(user).Do()
67+
leaves := dbfake.Organization(t, db).Members(user).Do()
68+
joins := dbfake.Organization(t, db).Do()
69+
70+
deletedStays := dbfake.Organization(t, db).Members(user).Deleted(true).Do()
71+
deletedLeaves := dbfake.Organization(t, db).Members(user).Deleted(true).Do()
72+
deletedJoins := dbfake.Organization(t, db).Deleted(true).Do()
7273

7374
// Now sync the user to the deleted organization
7475
s := idpsync.NewAGPLSync(
@@ -77,27 +78,34 @@ func TestSyncOrganizations(t *testing.T) {
7778
idpsync.DeploymentSyncSettings{
7879
OrganizationField: "orgs",
7980
OrganizationMapping: map[string][]uuid.UUID{
80-
"random": {org.ID},
81-
"noise": {uuid.New()},
81+
"stay": {stays.Org.ID, deletedStays.Org.ID},
82+
"leave": {leaves.Org.ID, deletedLeaves.Org.ID},
83+
"join": {joins.Org.ID, deletedJoins.Org.ID},
8284
},
8385
OrganizationAssignDefault: false,
8486
},
8587
)
8688

87-
err = s.SyncOrganizations(ctx, db, user, idpsync.OrganizationParams{
89+
err := s.SyncOrganizations(ctx, db, user, idpsync.OrganizationParams{
8890
SyncEntitled: true,
8991
MergedClaims: map[string]interface{}{
90-
"orgs": []string{"random", "noise"},
92+
"orgs": []string{"stay", "join"},
9193
},
9294
})
9395
require.NoError(t, err)
9496

95-
mems, err := db.OrganizationMembers(ctx, database.OrganizationMembersParams{
96-
OrganizationID: org.ID,
97-
UserID: user.ID,
98-
IncludeSystem: false,
97+
orgs, err := db.GetOrganizationsByUserID(ctx, database.GetOrganizationsByUserIDParams{
98+
UserID: user.ID,
99+
Deleted: sql.NullBool{},
99100
})
100101
require.NoError(t, err)
101-
require.Len(t, mems, 1)
102+
require.Len(t, orgs, 2)
103+
104+
// Verify the user only exists in 2 orgs. The one they stayed, and the one they
105+
// joined.
106+
inIDs := db2sdk.List(orgs, func(org database.Organization) uuid.UUID {
107+
return org.ID
108+
})
109+
require.ElementsMatch(t, []uuid.UUID{stays.Org.ID, joins.Org.ID}, inIDs)
102110
})
103111
}

0 commit comments

Comments
 (0)