Skip to content

Commit fc65bb4

Browse files
authored
stronger test coverage around JobDeleteMany (#1030)
Ensure that jobs we expect to _not_ be deleted are in fact not deleted.
1 parent 9451ded commit fc65bb4

2 files changed

Lines changed: 56 additions & 2 deletions

File tree

client_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2145,15 +2145,27 @@ func Test_Client_JobDeleteMany(t *testing.T) {
21452145
job1 = testfactory.Job(ctx, t, bundle.exec, &testfactory.JobOpts{Schema: bundle.schema})
21462146
job2 = testfactory.Job(ctx, t, bundle.exec, &testfactory.JobOpts{Schema: bundle.schema})
21472147
job3 = testfactory.Job(ctx, t, bundle.exec, &testfactory.JobOpts{Schema: bundle.schema})
2148+
job4 = testfactory.Job(ctx, t, bundle.exec, &testfactory.JobOpts{Schema: bundle.schema})
21482149
)
21492150

21502151
deleteRes, err := client.JobDeleteMany(ctx, NewJobDeleteManyParams().IDs(job1.ID))
21512152
require.NoError(t, err)
21522153
require.Equal(t, []int64{job1.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
21532154

2155+
_, err = bundle.exec.JobGetByID(ctx, &riverdriver.JobGetByIDParams{ID: job1.ID, Schema: bundle.schema})
2156+
require.ErrorIs(t, rivertype.ErrNotFound, err)
2157+
_, err = client.JobGet(ctx, job2.ID)
2158+
require.NoError(t, err)
2159+
_, err = client.JobGet(ctx, job3.ID)
2160+
require.NoError(t, err)
2161+
21542162
deleteRes, err = client.JobDeleteMany(ctx, NewJobDeleteManyParams().IDs(job2.ID, job3.ID))
21552163
require.NoError(t, err)
21562164
require.Equal(t, []int64{job2.ID, job3.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
2165+
2166+
// job4 should still be present
2167+
_, err = client.JobGet(ctx, job4.ID)
2168+
require.NoError(t, err)
21572169
})
21582170

21592171
t.Run("FiltersByIDAndPriorityAndKind", func(t *testing.T) {
@@ -2170,6 +2182,9 @@ func Test_Client_JobDeleteMany(t *testing.T) {
21702182
deleteRes, err := client.JobDeleteMany(ctx, NewJobDeleteManyParams().IDs(job1.ID, job2.ID, job3.ID).Priorities(1, 2).Kinds("special_kind"))
21712183
require.NoError(t, err)
21722184
require.Equal(t, []int64{job1.ID, job2.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
2185+
2186+
_, err = client.JobGet(ctx, job3.ID)
2187+
require.NoError(t, err)
21732188
})
21742189

21752190
t.Run("FiltersByPriority", func(t *testing.T) {
@@ -2187,6 +2202,11 @@ func Test_Client_JobDeleteMany(t *testing.T) {
21872202
require.NoError(t, err)
21882203
require.Equal(t, []int64{job1.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
21892204

2205+
_, err = client.JobGet(ctx, job2.ID)
2206+
require.NoError(t, err)
2207+
_, err = client.JobGet(ctx, job3.ID)
2208+
require.NoError(t, err)
2209+
21902210
deleteRes, err = client.JobDeleteMany(ctx, NewJobDeleteManyParams().Priorities(2, 3))
21912211
require.NoError(t, err)
21922212
require.Equal(t, []int64{job2.ID, job3.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
@@ -2208,6 +2228,9 @@ func Test_Client_JobDeleteMany(t *testing.T) {
22082228
// jobs ordered by ScheduledAt ASC by default
22092229
require.Equal(t, []int64{job1.ID, job2.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
22102230

2231+
_, err = client.JobGet(ctx, job3.ID)
2232+
require.NoError(t, err)
2233+
22112234
deleteRes, err = client.JobDeleteMany(ctx, NewJobDeleteManyParams().Kinds("test_kind_2"))
22122235
require.NoError(t, err)
22132236
require.Equal(t, []int64{job3.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
@@ -2229,6 +2252,9 @@ func Test_Client_JobDeleteMany(t *testing.T) {
22292252
// jobs ordered by ScheduledAt ASC by default
22302253
require.Equal(t, []int64{job1.ID, job2.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
22312254

2255+
_, err = client.JobGet(ctx, job3.ID)
2256+
require.NoError(t, err)
2257+
22322258
deleteRes, err = client.JobDeleteMany(ctx, NewJobDeleteManyParams().Queues("queue_2"))
22332259
require.NoError(t, err)
22342260
require.Equal(t, []int64{job3.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
@@ -2250,10 +2276,18 @@ func Test_Client_JobDeleteMany(t *testing.T) {
22502276
require.NoError(t, err)
22512277
require.Equal(t, []int64{job1.ID, job2.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
22522278

2279+
_, err = client.JobGet(ctx, job3.ID)
2280+
require.NoError(t, err)
2281+
_, err = client.JobGet(ctx, job4.ID)
2282+
require.NoError(t, err)
2283+
22532284
deleteRes, err = client.JobDeleteMany(ctx, NewJobDeleteManyParams().States(rivertype.JobStateCompleted))
22542285
require.NoError(t, err)
22552286
require.Equal(t, []int64{job3.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
22562287

2288+
_, err = client.JobGet(ctx, job4.ID)
2289+
require.NoError(t, err)
2290+
22572291
// All by default:
22582292
deleteRes, err = client.JobDeleteMany(ctx, NewJobDeleteManyParams())
22592293
require.NoError(t, err)
@@ -2291,6 +2325,9 @@ func Test_Client_JobDeleteMany(t *testing.T) {
22912325
deleteRes, err := client.JobDeleteMany(ctx, NewJobDeleteManyParams().IDs(job1.ID, job2.ID))
22922326
require.NoError(t, err)
22932327
require.Equal(t, []int64{job1.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
2328+
2329+
_, err = client.JobGet(ctx, job2.ID)
2330+
require.NoError(t, err)
22942331
})
22952332

22962333
t.Run("WithCancelledContext", func(t *testing.T) {
@@ -2357,6 +2394,13 @@ func Test_Client_JobDeleteManyTx(t *testing.T) {
23572394
require.NoError(t, err)
23582395
require.Equal(t, []int64{job1.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
23592396

2397+
_, err = bundle.execTx.JobGetByID(ctx, &riverdriver.JobGetByIDParams{ID: job1.ID, Schema: bundle.schema})
2398+
require.ErrorIs(t, rivertype.ErrNotFound, err)
2399+
_, err = bundle.execTx.JobGetByID(ctx, &riverdriver.JobGetByIDParams{ID: job2.ID, Schema: bundle.schema})
2400+
require.NoError(t, err)
2401+
_, err = bundle.execTx.JobGetByID(ctx, &riverdriver.JobGetByIDParams{ID: job3.ID, Schema: bundle.schema})
2402+
require.NoError(t, err)
2403+
23602404
deleteRes, err = client.JobDeleteManyTx(ctx, bundle.tx, NewJobDeleteManyParams().IDs(job2.ID, job3.ID))
23612405
require.NoError(t, err)
23622406
require.Equal(t, []int64{job2.ID, job3.ID}, sliceutil.Map(deleteRes.Jobs, func(job *rivertype.JobRow) int64 { return job.ID }))
@@ -2365,6 +2409,8 @@ func Test_Client_JobDeleteManyTx(t *testing.T) {
23652409
require.ErrorIs(t, rivertype.ErrNotFound, err)
23662410
_, err = bundle.execTx.JobGetByID(ctx, &riverdriver.JobGetByIDParams{ID: job2.ID, Schema: bundle.schema})
23672411
require.ErrorIs(t, rivertype.ErrNotFound, err)
2412+
_, err = bundle.execTx.JobGetByID(ctx, &riverdriver.JobGetByIDParams{ID: job3.ID, Schema: bundle.schema})
2413+
require.ErrorIs(t, rivertype.ErrNotFound, err)
23682414

23692415
// Jobs present because other transaction doesn't see the deletion.
23702416
_, err = bundle.exec.JobGetByID(ctx, &riverdriver.JobGetByIDParams{ID: job1.ID, Schema: bundle.schema})

riverdriver/riverdrivertest/riverdrivertest.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,7 +1128,7 @@ func Exercise[TTx any](ctx context.Context, t *testing.T,
11281128
})
11291129

11301130
// Does not match predicate (makes sure where clause is working).
1131-
_ = testfactory.Job(ctx, t, exec, &testfactory.JobOpts{})
1131+
otherJob := testfactory.Job(ctx, t, exec, &testfactory.JobOpts{})
11321132

11331133
deletedJobs, err := exec.JobDeleteMany(ctx, &riverdriver.JobDeleteManyParams{
11341134
Max: 100,
@@ -1160,6 +1160,10 @@ func Exercise[TTx any](ctx context.Context, t *testing.T,
11601160

11611161
_, err = exec.JobGetByID(ctx, &riverdriver.JobGetByIDParams{ID: job.ID})
11621162
require.ErrorIs(t, err, rivertype.ErrNotFound)
1163+
1164+
// Non-matching job should remain
1165+
_, err = exec.JobGetByID(ctx, &riverdriver.JobGetByIDParams{ID: otherJob.ID})
1166+
require.NoError(t, err)
11631167
})
11641168

11651169
t.Run("IgnoresRunningJobs", func(t *testing.T) {
@@ -1190,7 +1194,7 @@ func Exercise[TTx any](ctx context.Context, t *testing.T,
11901194
{
11911195
var (
11921196
job1 = testfactory.Job(ctx, t, exec, &testfactory.JobOpts{Kind: ptrutil.Ptr("test_kind1")})
1193-
_ = testfactory.Job(ctx, t, exec, &testfactory.JobOpts{Kind: ptrutil.Ptr("test_kind2")})
1197+
job2 = testfactory.Job(ctx, t, exec, &testfactory.JobOpts{Kind: ptrutil.Ptr("test_kind2")})
11941198
)
11951199

11961200
deletedJobs, err := exec.JobDeleteMany(ctx, &riverdriver.JobDeleteManyParams{
@@ -1201,6 +1205,10 @@ func Exercise[TTx any](ctx context.Context, t *testing.T,
12011205
})
12021206
require.NoError(t, err)
12031207
require.Len(t, deletedJobs, 1)
1208+
1209+
// Non-matching job should remain
1210+
_, err = exec.JobGetByID(ctx, &riverdriver.JobGetByIDParams{ID: job2.ID})
1211+
require.NoError(t, err)
12041212
}
12051213

12061214
{

0 commit comments

Comments
 (0)