UsersFilter creates a set of users to run various filters against for testing. It can be used to test filtering both users and group members.
( setupCtx context.Context, t *testing.T, client *codersdk.Client, db database.Store, options *UsersFilterOptions, setup func(users []codersdk.User), fetch func(ctx context.Context, req codersdk.UsersRequest) []codersdk.ReducedUser, )
| 130 | // UsersFilter creates a set of users to run various filters against for |
| 131 | // testing. It can be used to test filtering both users and group members. |
| 132 | func UsersFilter( |
| 133 | setupCtx context.Context, |
| 134 | t *testing.T, |
| 135 | client *codersdk.Client, |
| 136 | db database.Store, |
| 137 | options *UsersFilterOptions, |
| 138 | setup func(users []codersdk.User), |
| 139 | fetch func(ctx context.Context, req codersdk.UsersRequest) []codersdk.ReducedUser, |
| 140 | ) { |
| 141 | t.Helper() |
| 142 | |
| 143 | if options == nil { |
| 144 | options = &UsersFilterOptions{} |
| 145 | } |
| 146 | |
| 147 | firstUser, err := client.User(setupCtx, codersdk.Me) |
| 148 | require.NoError(t, err, "fetch me") |
| 149 | |
| 150 | // Noon on Jan 18 is the "now" for this test for last_seen timestamps. |
| 151 | // All these values are equal |
| 152 | // 2023-01-18T12:00:00Z (UTC) |
| 153 | // 2023-01-18T07:00:00-05:00 (America/New_York) |
| 154 | // 2023-01-18T13:00:00+01:00 (Europe/Madrid) |
| 155 | // 2023-01-16T00:00:00+12:00 (Asia/Anadyr) |
| 156 | lastSeenNow := time.Date(2023, 1, 18, 12, 0, 0, 0, time.UTC) |
| 157 | users := make([]codersdk.User, 0) |
| 158 | users = append(users, firstUser) |
| 159 | orgID := firstUser.OrganizationIDs[0] |
| 160 | githubIDs := make(map[int]uuid.UUID) |
| 161 | for i := range 15 { |
| 162 | roles := []rbac.RoleIdentifier{} |
| 163 | if i%2 == 0 { |
| 164 | roles = append(roles, rbac.RoleTemplateAdmin(), rbac.RoleUserAdmin()) |
| 165 | } |
| 166 | if i%3 == 0 { |
| 167 | roles = append(roles, rbac.RoleAuditor()) |
| 168 | } |
| 169 | userClient, userData := CreateAnotherUserMutators(t, client, orgID, roles, func(r *codersdk.CreateUserRequestWithOrgs) { |
| 170 | switch { |
| 171 | case i%7 == 0: |
| 172 | r.UserLoginType = codersdk.LoginTypeGithub |
| 173 | r.Password = "" |
| 174 | case i%6 == 0: |
| 175 | r.UserLoginType = codersdk.LoginTypeOIDC |
| 176 | r.Password = "" |
| 177 | default: |
| 178 | r.UserLoginType = codersdk.LoginTypePassword |
| 179 | } |
| 180 | }) |
| 181 | |
| 182 | // Set the last seen for each user to a unique day |
| 183 | // nolint:gocritic // Setting up unit test data. |
| 184 | _, err := db.UpdateUserLastSeenAt(dbauthz.AsSystemRestricted(setupCtx), database.UpdateUserLastSeenAtParams{ |
| 185 | ID: userData.ID, |
| 186 | LastSeenAt: lastSeenNow.Add(-1 * time.Hour * 24 * time.Duration(i)), |
| 187 | UpdatedAt: time.Now(), |
| 188 | }) |
| 189 | require.NoError(t, err, "set a last seen") |