@@ -1194,76 +1194,91 @@ func (q *fakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
1194
1194
return nil , xerrors .Errorf ("get provisioner job: %w" , err )
1195
1195
}
1196
1196
1197
+ // How this works is you need to 'continue' if the status does
1198
+ // not match. I do 'if/else' so I can just match the postgres logic.
1197
1199
switch database .WorkspaceStatus (arg .Status ) {
1198
1200
case database .WorkspaceStatusPending :
1199
- if ! job .StartedAt .Valid {
1201
+ if isNull (job .StartedAt ) {
1202
+ } else {
1200
1203
continue
1201
1204
}
1202
1205
1203
1206
case database .WorkspaceStatusStarting :
1204
- if ! job .StartedAt .Valid &&
1205
- ! job .CanceledAt .Valid &&
1206
- job .CompletedAt .Valid &&
1207
- time .Since (job .UpdatedAt ) > 30 * time .Second ||
1208
- build .Transition != database .WorkspaceTransitionStart {
1207
+ if isNotNull (job .StartedAt ) &&
1208
+ isNull (job .CanceledAt ) &&
1209
+ isNull (job .CompletedAt ) &&
1210
+ time .Since (job .UpdatedAt ) < 30 * time .Second &&
1211
+ build .Transition == database .WorkspaceTransitionStart {
1212
+ } else {
1209
1213
continue
1210
1214
}
1211
1215
1212
1216
case database .WorkspaceStatusRunning :
1213
- if ! job .CompletedAt .Valid &&
1214
- job .CanceledAt .Valid &&
1215
- job .Error .Valid ||
1216
- build .Transition != database .WorkspaceTransitionStart {
1217
+ if isNotNull (job .CompletedAt ) &&
1218
+ isNull (job .CanceledAt ) &&
1219
+ isNull (job .Error ) &&
1220
+ build .Transition == database .WorkspaceTransitionStart {
1221
+ } else {
1217
1222
continue
1218
1223
}
1219
1224
1220
1225
case database .WorkspaceStatusStopping :
1221
- if ! job .StartedAt .Valid &&
1222
- ! job .CanceledAt .Valid &&
1223
- job .CompletedAt .Valid &&
1224
- time .Since (job .UpdatedAt ) > 30 * time .Second ||
1225
- build .Transition != database .WorkspaceTransitionStop {
1226
+ if isNotNull (job .StartedAt ) &&
1227
+ isNull (job .CanceledAt ) &&
1228
+ isNull (job .CompletedAt ) &&
1229
+ time .Since (job .UpdatedAt ) < 30 * time .Second &&
1230
+ build .Transition == database .WorkspaceTransitionStop {
1231
+ } else {
1226
1232
continue
1227
1233
}
1228
1234
1229
1235
case database .WorkspaceStatusStopped :
1230
- if ! job .CompletedAt .Valid &&
1231
- job .CanceledAt .Valid &&
1232
- job .Error .Valid ||
1233
- build .Transition != database .WorkspaceTransitionStop {
1236
+ if isNotNull (job .CompletedAt ) &&
1237
+ isNull (job .CanceledAt ) &&
1238
+ isNull (job .Error ) &&
1239
+ build .Transition == database .WorkspaceTransitionStop {
1240
+ } else {
1234
1241
continue
1235
1242
}
1236
1243
1237
1244
case database .WorkspaceStatusFailed :
1238
- if (! job .CanceledAt .Valid && ! job .Error .Valid ) ||
1239
- (! job .CompletedAt .Valid && ! job .Error .Valid ) {
1245
+ if (isNotNull (job .CanceledAt ) && isNotNull (job .Error )) ||
1246
+ (isNotNull (job .CompletedAt ) && isNotNull (job .Error )) {
1247
+ } else {
1240
1248
continue
1241
1249
}
1242
1250
1243
1251
case database .WorkspaceStatusCanceling :
1244
- if ! job .CanceledAt .Valid && job .CompletedAt .Valid {
1252
+ if isNotNull (job .CanceledAt ) &&
1253
+ isNull (job .CompletedAt ) {
1254
+ } else {
1245
1255
continue
1246
1256
}
1247
1257
1248
1258
case database .WorkspaceStatusCanceled :
1249
- if ! job .CanceledAt .Valid && ! job .CompletedAt .Valid {
1259
+ if isNotNull (job .CanceledAt ) &&
1260
+ isNotNull (job .CompletedAt ) {
1261
+ } else {
1250
1262
continue
1251
1263
}
1252
1264
1253
1265
case database .WorkspaceStatusDeleted :
1254
- if ! job .StartedAt .Valid &&
1255
- job .CanceledAt .Valid &&
1256
- ! job .CompletedAt .Valid &&
1257
- time .Since (job .UpdatedAt ) > 30 * time .Second ||
1258
- build .Transition != database .WorkspaceTransitionDelete {
1266
+ if isNotNull (job .StartedAt ) &&
1267
+ isNull (job .CanceledAt ) &&
1268
+ isNotNull (job .CompletedAt ) &&
1269
+ time .Since (job .UpdatedAt ) < 30 * time .Second &&
1270
+ build .Transition == database .WorkspaceTransitionDelete &&
1271
+ isNull (job .Error ) {
1272
+ } else {
1259
1273
continue
1260
1274
}
1261
1275
1262
1276
case database .WorkspaceStatusDeleting :
1263
- if ! job .CompletedAt .Valid &&
1264
- job .CanceledAt .Valid &&
1265
- job .Error .Valid &&
1266
- build .Transition != database .WorkspaceTransitionDelete {
1277
+ if isNull (job .CompletedAt ) &&
1278
+ isNull (job .CanceledAt ) &&
1279
+ isNull (job .Error ) &&
1280
+ build .Transition == database .WorkspaceTransitionDelete {
1281
+ } else {
1267
1282
continue
1268
1283
}
1269
1284
@@ -5331,3 +5346,13 @@ func (q *fakeQuerier) UpdateWorkspaceProxyDeleted(_ context.Context, arg databas
5331
5346
}
5332
5347
return sql .ErrNoRows
5333
5348
}
5349
+
5350
+ // isNull is only used in dbfake, so reflect is ok. Use this to make the logic
5351
+ // look more similar to the postgres.
5352
+ func isNull (v interface {}) bool {
5353
+ return ! isNotNull (v )
5354
+ }
5355
+
5356
+ func isNotNull (v interface {}) bool {
5357
+ return reflect .ValueOf (v ).FieldByName ("Valid" ).Bool ()
5358
+ }
0 commit comments