(t *testing.T)
| 114 | } |
| 115 | |
| 116 | func TestSyncOrganizations(t *testing.T) { |
| 117 | t.Parallel() |
| 118 | |
| 119 | // This test creates some deleted organizations and checks the behavior is |
| 120 | // correct. |
| 121 | t.Run("SyncUserToDeletedOrg", func(t *testing.T) { |
| 122 | t.Parallel() |
| 123 | |
| 124 | ctx := testutil.Context(t, testutil.WaitMedium) |
| 125 | db, _ := dbtestutil.NewDB(t) |
| 126 | user := dbgen.User(t, db, database.User{}) |
| 127 | |
| 128 | // Create orgs for: |
| 129 | // - stays = User is a member, and stays |
| 130 | // - leaves = User is a member, and leaves |
| 131 | // - joins = User is not a member, and joins |
| 132 | // For deleted orgs, the user **should not** be a member of afterwards. |
| 133 | // - deletedStays = User is a member of deleted org, and wants to stay |
| 134 | // - deletedLeaves = User is a member of deleted org, and wants to leave |
| 135 | // - deletedJoins = User is not a member of deleted org, and wants to join |
| 136 | stays := dbfake.Organization(t, db).Members(user).Do() |
| 137 | leaves := dbfake.Organization(t, db).Members(user).Do() |
| 138 | joins := dbfake.Organization(t, db).Do() |
| 139 | |
| 140 | deletedStays := dbfake.Organization(t, db).Members(user).Deleted(true).Do() |
| 141 | deletedLeaves := dbfake.Organization(t, db).Members(user).Deleted(true).Do() |
| 142 | deletedJoins := dbfake.Organization(t, db).Deleted(true).Do() |
| 143 | |
| 144 | // Now sync the user to the deleted organization |
| 145 | s := idpsync.NewAGPLSync( |
| 146 | slogtest.Make(t, &slogtest.Options{}), |
| 147 | runtimeconfig.NewManager(), |
| 148 | idpsync.DeploymentSyncSettings{ |
| 149 | OrganizationField: "orgs", |
| 150 | OrganizationMapping: map[string][]uuid.UUID{ |
| 151 | "stay": {stays.Org.ID, deletedStays.Org.ID}, |
| 152 | "leave": {leaves.Org.ID, deletedLeaves.Org.ID}, |
| 153 | "join": {joins.Org.ID, deletedJoins.Org.ID}, |
| 154 | }, |
| 155 | OrganizationAssignDefault: false, |
| 156 | }, |
| 157 | ) |
| 158 | |
| 159 | err := s.SyncOrganizations(ctx, db, user, idpsync.OrganizationParams{ |
| 160 | SyncEntitled: true, |
| 161 | MergedClaims: map[string]interface{}{ |
| 162 | "orgs": []string{"stay", "join"}, |
| 163 | }, |
| 164 | }) |
| 165 | require.NoError(t, err) |
| 166 | |
| 167 | orgs, err := db.GetOrganizationsByUserID(ctx, database.GetOrganizationsByUserIDParams{ |
| 168 | UserID: user.ID, |
| 169 | Deleted: sql.NullBool{}, |
| 170 | }) |
| 171 | require.NoError(t, err) |
| 172 | require.Len(t, orgs, 2) |
| 173 |
nothing calls this directly
no test coverage detected