@@ -39,9 +39,20 @@ func TestReconcileAll(t *testing.T) {
39
39
}{
40
40
// The StoreMembershipReconciler acts based on the provided agplprebuilds.GlobalSnapshot.
41
41
// These test cases must therefore trust any valid snapshot, so the only relevant functional test cases are:
42
+
43
+ // No presets to act on and the prebuilds user does not belong to any organizations.
44
+ // Reconciliation should be a no-op
42
45
{name : "no presets, no memberships" , includePreset : false , preExistingMembership : false },
46
+ // If we have a preset that requires prebuilds, but the prebuilds user is not a member of
47
+ // that organization, then we should add the membership.
43
48
{name : "preset, but no membership" , includePreset : true , preExistingMembership : false },
49
+ // If the prebuilds system user is already a member of the organization to which a preset belongs,
50
+ // then reconciliation should be a no-op:
44
51
{name : "preset, but already a member" , includePreset : true , preExistingMembership : true },
52
+ // If the prebuilds system user is a member of an organization that doesn't have need any prebuilds,
53
+ // then it must have required prebuilds in the past. The membership is not currently necessary, but
54
+ // the reconciler won't remove it, because there's little cost to keeping it and prebuilds might be
55
+ // enabled again.
45
56
{name : "member, but no presets" , includePreset : false , preExistingMembership : true },
46
57
}
47
58
@@ -54,7 +65,9 @@ func TestReconcileAll(t *testing.T) {
54
65
55
66
defaultOrg , err := db .GetDefaultOrganization (ctx )
56
67
require .NoError (t , err )
57
- backgroundOrg := dbgen .Organization (t , db , database.Organization {})
68
+
69
+ // introduce an unrelated organization to ensure that the membership reconciler don't interfere with it.
70
+ unrelatedOrg := dbgen .Organization (t , db , database.Organization {})
58
71
targetOrg := dbgen .Organization (t , db , database.Organization {})
59
72
60
73
if ! dbtestutil .WillUsePostgres () {
@@ -65,13 +78,13 @@ func TestReconcileAll(t *testing.T) {
65
78
})
66
79
}
67
80
68
- dbgen .OrganizationMember (t , db , database.OrganizationMember {OrganizationID : backgroundOrg .ID , UserID : agplprebuilds .SystemUserID })
81
+ dbgen .OrganizationMember (t , db , database.OrganizationMember {OrganizationID : unrelatedOrg .ID , UserID : agplprebuilds .SystemUserID })
69
82
if tc .preExistingMembership {
70
83
// System user already a member of both orgs.
71
84
dbgen .OrganizationMember (t , db , database.OrganizationMember {OrganizationID : targetOrg .ID , UserID : agplprebuilds .SystemUserID })
72
85
}
73
86
74
- presets := []database.GetTemplatePresetsWithPrebuildsRow {newPresetRow (backgroundOrg .ID )}
87
+ presets := []database.GetTemplatePresetsWithPrebuildsRow {newPresetRow (unrelatedOrg .ID )}
75
88
if tc .includePreset {
76
89
presets = append (presets , newPresetRow (targetOrg .ID ))
77
90
}
@@ -81,11 +94,11 @@ func TestReconcileAll(t *testing.T) {
81
94
UserID : agplprebuilds .SystemUserID ,
82
95
})
83
96
require .NoError (t , err )
84
- expected := []uuid.UUID {defaultOrg .ID , backgroundOrg .ID }
97
+ expectedMembershipsBefore := []uuid.UUID {defaultOrg .ID , unrelatedOrg .ID }
85
98
if tc .preExistingMembership {
86
- expected = append (expected , targetOrg .ID )
99
+ expectedMembershipsBefore = append (expectedMembershipsBefore , targetOrg .ID )
87
100
}
88
- require .ElementsMatch (t , expected , extractOrgIDs (preReconcileMemberships ))
101
+ require .ElementsMatch (t , expectedMembershipsBefore , extractOrgIDs (preReconcileMemberships ))
89
102
90
103
// Reconcile
91
104
reconciler := prebuilds .NewStoreMembershipReconciler (db , clock )
@@ -96,10 +109,11 @@ func TestReconcileAll(t *testing.T) {
96
109
UserID : agplprebuilds .SystemUserID ,
97
110
})
98
111
require .NoError (t , err )
112
+ expectedMembershipsAfter := expectedMembershipsBefore
99
113
if ! tc .preExistingMembership && tc .includePreset {
100
- expected = append (expected , targetOrg .ID )
114
+ expectedMembershipsAfter = append (expectedMembershipsAfter , targetOrg .ID )
101
115
}
102
- require .ElementsMatch (t , expected , extractOrgIDs (postReconcileMemberships ))
116
+ require .ElementsMatch (t , expectedMembershipsAfter , extractOrgIDs (postReconcileMemberships ))
103
117
})
104
118
}
105
119
}
0 commit comments