Skip to content

Commit 4fa58c0

Browse files
committed
Add GetJob pagination
1 parent e079db9 commit 4fa58c0

File tree

2 files changed

+279
-0
lines changed

2 files changed

+279
-0
lines changed

service/jobs/ext_api.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,27 @@ func (a *JobsAPI) GetRun(ctx context.Context, request GetRunRequest) (*Run, erro
3232

3333
return run, nil
3434
}
35+
36+
func (a *JobsAPI) Get(ctx context.Context, request GetJobRequest) (*Job, error) {
37+
job, err := a.jobsImpl.Get(ctx, request)
38+
if err != nil {
39+
return nil, err
40+
}
41+
42+
pageToken := job.NextPageToken
43+
for pageToken != "" {
44+
request.PageToken = pageToken
45+
nextJob, err := a.jobsImpl.Get(ctx, request)
46+
if err != nil {
47+
return nil, err
48+
}
49+
50+
job.Settings.Tasks = append(job.Settings.Tasks, nextJob.Settings.Tasks...)
51+
job.Settings.JobClusters = append(job.Settings.JobClusters, nextJob.Settings.JobClusters...)
52+
job.Settings.Parameters = append(job.Settings.Parameters, nextJob.Settings.Parameters...)
53+
job.Settings.Environments = append(job.Settings.Environments, nextJob.Settings.Environments...)
54+
pageToken = nextJob.NextPageToken
55+
}
56+
57+
return job, nil
58+
}

service/jobs/ext_api_test.go

Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,3 +369,258 @@ func TestGetRun(t *testing.T) {
369369
assert.EqualValues(t, 999, run.Tasks[0].RunId)
370370
})
371371
}
372+
373+
func TestGetJob(t *testing.T) {
374+
ctx := context.Background()
375+
376+
t.Run("job with no pagination", func(t *testing.T) {
377+
var requestMocks qa.HTTPFixtures = []qa.HTTPFixture{
378+
{
379+
Method: "GET",
380+
Resource: "/api/2.2/jobs/get?job_id=514594995218126",
381+
Response: Job{
382+
Settings: &JobSettings{
383+
Tasks: []Task{
384+
{
385+
TaskKey: "task1",
386+
},
387+
{
388+
TaskKey: "task2",
389+
},
390+
{
391+
TaskKey: "task3",
392+
},
393+
{
394+
TaskKey: "task4",
395+
},
396+
},
397+
},
398+
},
399+
},
400+
{
401+
Method: "GET",
402+
ReuseRequest: true,
403+
Resource: "/api/2.1/jobs/get?run_id=514594995218126",
404+
Response: Job{
405+
Settings: &JobSettings{
406+
Tasks: []Task{
407+
{
408+
TaskKey: "task1",
409+
},
410+
{
411+
TaskKey: "task2",
412+
},
413+
{
414+
TaskKey: "task3",
415+
},
416+
{
417+
TaskKey: "task4",
418+
},
419+
},
420+
},
421+
},
422+
},
423+
}
424+
client, server := requestMocks.Client(t)
425+
defer server.Close()
426+
427+
mockJobsImpl := &jobsImpl{
428+
client: client,
429+
}
430+
api := &JobsAPI{jobsImpl: *mockJobsImpl}
431+
432+
request := GetJobRequest{JobId: 514594995218126}
433+
job, err := api.Get(ctx, request)
434+
435+
assert.NoError(t, err)
436+
assert.Equal(t, 4, len(job.Settings.Tasks))
437+
assert.EqualValues(t, "task1", job.Settings.Tasks[0].TaskKey)
438+
assert.EqualValues(t, "task4", job.Settings.Tasks[3].TaskKey)
439+
})
440+
441+
t.Run("job with multiple pages", func(t *testing.T) {
442+
var requestMocks qa.HTTPFixtures = []qa.HTTPFixture{
443+
{
444+
Method: "GET",
445+
Resource: "/api/2.2/jobs/get?job_id=514594995218126",
446+
Response: Job{
447+
Settings: &JobSettings{
448+
Tasks: []Task{
449+
{
450+
TaskKey: "task1",
451+
},
452+
{
453+
TaskKey: "task2",
454+
},
455+
},
456+
JobClusters: []JobCluster{
457+
{
458+
JobClusterKey: "cluster1",
459+
},
460+
{
461+
JobClusterKey: "cluster2",
462+
},
463+
},
464+
Parameters: []JobParameterDefinition{
465+
{
466+
Name: "param1",
467+
Default: "default1",
468+
},
469+
{
470+
Name: "param2",
471+
Default: "default2",
472+
},
473+
},
474+
Environments: []JobEnvironment{
475+
{
476+
EnvironmentKey: "env1",
477+
},
478+
},
479+
},
480+
NextPageToken: "token1",
481+
},
482+
},
483+
{
484+
Method: "GET",
485+
Resource: "/api/2.2/jobs/get?job_id=514594995218126&page_token=token1",
486+
Response: Job{
487+
Settings: &JobSettings{
488+
Tasks: []Task{
489+
{
490+
TaskKey: "task3",
491+
},
492+
{
493+
TaskKey: "task4",
494+
},
495+
},
496+
JobClusters: []JobCluster{
497+
{
498+
JobClusterKey: "cluster3",
499+
},
500+
{
501+
JobClusterKey: "cluster4",
502+
},
503+
},
504+
Parameters: []JobParameterDefinition{
505+
{
506+
Name: "param3",
507+
Default: "default3",
508+
},
509+
},
510+
Environments: []JobEnvironment{
511+
{
512+
EnvironmentKey: "env2",
513+
},
514+
},
515+
},
516+
NextPageToken: "token2",
517+
},
518+
},
519+
{
520+
Method: "GET",
521+
Resource: "/api/2.2/jobs/get?job_id=514594995218126&page_token=token2",
522+
Response: Job{
523+
Settings: &JobSettings{
524+
Tasks: []Task{
525+
{
526+
TaskKey: "task5",
527+
},
528+
},
529+
Environments: []JobEnvironment{
530+
{
531+
EnvironmentKey: "env3",
532+
},
533+
},
534+
},
535+
},
536+
},
537+
{
538+
Method: "GET",
539+
ReuseRequest: true,
540+
Resource: "/api/2.1/jobs/get?run_id=514594995218126",
541+
Response: Job{
542+
Settings: &JobSettings{
543+
Tasks: []Task{
544+
{
545+
TaskKey: "task1",
546+
},
547+
{
548+
TaskKey: "task2",
549+
},
550+
{
551+
TaskKey: "task3",
552+
},
553+
{
554+
TaskKey: "task4",
555+
},
556+
{
557+
TaskKey: "task5",
558+
},
559+
},
560+
JobClusters: []JobCluster{
561+
{
562+
JobClusterKey: "cluster1",
563+
},
564+
{
565+
JobClusterKey: "cluster2",
566+
},
567+
{
568+
JobClusterKey: "cluster3",
569+
},
570+
{
571+
JobClusterKey: "cluster4",
572+
},
573+
},
574+
Parameters: []JobParameterDefinition{
575+
{
576+
Name: "param1",
577+
Default: "default1",
578+
},
579+
{
580+
Name: "param2",
581+
Default: "default2",
582+
},
583+
{
584+
Name: "param3",
585+
Default: "default3",
586+
},
587+
},
588+
Environments: []JobEnvironment{
589+
{
590+
EnvironmentKey: "env1",
591+
},
592+
{
593+
EnvironmentKey: "env2",
594+
},
595+
{
596+
EnvironmentKey: "env3",
597+
},
598+
},
599+
},
600+
},
601+
},
602+
}
603+
client, server := requestMocks.Client(t)
604+
defer server.Close()
605+
606+
mockJobsImpl := &jobsImpl{
607+
client: client,
608+
}
609+
api := &JobsAPI{jobsImpl: *mockJobsImpl}
610+
611+
request := GetJobRequest{JobId: 514594995218126}
612+
job, err := api.Get(ctx, request)
613+
614+
assert.NoError(t, err)
615+
assert.Equal(t, 5, len(job.Settings.Tasks))
616+
assert.Equal(t, 4, len(job.Settings.JobClusters))
617+
assert.Equal(t, 3, len(job.Settings.Parameters))
618+
assert.Equal(t, 3, len(job.Settings.Environments))
619+
assert.EqualValues(t, "task1", job.Settings.Tasks[0].TaskKey)
620+
assert.EqualValues(t, "task4", job.Settings.Tasks[3].TaskKey)
621+
assert.EqualValues(t, "task5", job.Settings.Tasks[4].TaskKey)
622+
assert.EqualValues(t, "cluster3", job.Settings.JobClusters[2].JobClusterKey)
623+
assert.EqualValues(t, "param3", job.Settings.Parameters[2].Name)
624+
assert.EqualValues(t, "env3", job.Settings.Environments[2].EnvironmentKey)
625+
})
626+
}

0 commit comments

Comments
 (0)