| 116 | } |
| 117 | |
| 118 | func TestUsers(t *testing.T) { |
| 119 | t.Parallel() |
| 120 | |
| 121 | for _, tc := range []struct { |
| 122 | Name string |
| 123 | Database func(t *testing.T) database.Store |
| 124 | Count map[database.UserStatus]int |
| 125 | }{{ |
| 126 | Name: "None", |
| 127 | Database: func(t *testing.T) database.Store { |
| 128 | db, _ := dbtestutil.NewDB(t) |
| 129 | return db |
| 130 | }, |
| 131 | Count: map[database.UserStatus]int{}, |
| 132 | }, { |
| 133 | Name: "One", |
| 134 | Database: func(t *testing.T) database.Store { |
| 135 | db, _ := dbtestutil.NewDB(t) |
| 136 | dbgen.User(t, db, database.User{Status: database.UserStatusActive}) |
| 137 | return db |
| 138 | }, |
| 139 | Count: map[database.UserStatus]int{database.UserStatusActive: 1}, |
| 140 | }, { |
| 141 | Name: "MultipleStatuses", |
| 142 | Database: func(t *testing.T) database.Store { |
| 143 | db, _ := dbtestutil.NewDB(t) |
| 144 | |
| 145 | dbgen.User(t, db, database.User{Status: database.UserStatusActive}) |
| 146 | dbgen.User(t, db, database.User{Status: database.UserStatusDormant}) |
| 147 | |
| 148 | return db |
| 149 | }, |
| 150 | Count: map[database.UserStatus]int{database.UserStatusActive: 1, database.UserStatusDormant: 1}, |
| 151 | }, { |
| 152 | Name: "MultipleActive", |
| 153 | Database: func(t *testing.T) database.Store { |
| 154 | db, _ := dbtestutil.NewDB(t) |
| 155 | dbgen.User(t, db, database.User{Status: database.UserStatusActive}) |
| 156 | dbgen.User(t, db, database.User{Status: database.UserStatusActive}) |
| 157 | dbgen.User(t, db, database.User{Status: database.UserStatusActive}) |
| 158 | return db |
| 159 | }, |
| 160 | Count: map[database.UserStatus]int{database.UserStatusActive: 3}, |
| 161 | }} { |
| 162 | t.Run(tc.Name, func(t *testing.T) { |
| 163 | t.Parallel() |
| 164 | ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort) |
| 165 | defer cancel() |
| 166 | |
| 167 | registry := prometheus.NewRegistry() |
| 168 | mClock := quartz.NewMock(t) |
| 169 | db := tc.Database(t) |
| 170 | closeFunc, err := prometheusmetrics.Users(context.Background(), testutil.Logger(t), mClock, registry, db, time.Millisecond) |
| 171 | require.NoError(t, err) |
| 172 | t.Cleanup(closeFunc) |
| 173 | |
| 174 | _, w := mClock.AdvanceNext() |
| 175 | w.MustWait(ctx) |