@@ -104,7 +104,7 @@ func TestGetBuildDefault(t *testing.T) {
104104 assert .Contains (textContent .Text , `"state":"running"` )
105105 assert .Contains (textContent .Text , `"total":0` )
106106 assert .Contains (textContent .Text , `"by_state":{}` )
107- assert .Contains (textContent .Text , `"jobs_total":0 ` )
107+ assert .NotContains (textContent .Text , `"jobs_total"` )
108108}
109109
110110func TestGetBuildWithJobSummary (t * testing.T ) {
@@ -204,7 +204,7 @@ func TestListBuilds(t *testing.T) {
204204 assert .Contains (textContent .Text , `"id":"123"` )
205205 assert .Contains (textContent .Text , `"number":1` )
206206 assert .Contains (textContent .Text , `"state":"running"` )
207- assert .Contains (textContent .Text , `"jobs_total":0 ` )
207+ assert .NotContains (textContent .Text , `"jobs_total"` )
208208
209209 // Verify default pagination parameters - new defaults
210210 assert .NotNil (capturedOptions )
@@ -554,18 +554,38 @@ func TestCreateBuild(t *testing.T) {
554554func TestGetBuildWithJobStateFilter (t * testing.T ) {
555555 assert := require .New (t )
556556
557+ // Mock returns jobs matching the requested states (simulating API-side filtering)
557558 client := & MockBuildsClient {
558559 GetFunc : func (ctx context.Context , org string , pipeline string , id string , opt * buildkite.BuildGetOptions ) (buildkite.Build , * buildkite.Response , error ) {
560+ // Simulate API-side job state filtering
561+ allJobs := []buildkite.Job {
562+ {ID : "job1" , Name : "Test 1" , State : "passed" , Agent : buildkite.Agent {ID : "agent1" , Name : "Agent 1" }},
563+ {ID : "job2" , Name : "Test 2" , State : "failed" , Agent : buildkite.Agent {ID : "agent2" , Name : "Agent 2" }},
564+ {ID : "job3" , Name : "Test 3" , State : "failed" , Agent : buildkite.Agent {ID : "agent3" , Name : "Agent 3" }},
565+ {ID : "job4" , Name : "Test 4" , State : "broken" , Agent : buildkite.Agent {ID : "agent4" , Name : "Agent 4" }},
566+ }
567+
568+ // Filter jobs based on requested states (simulating what the API does)
569+ var jobs []buildkite.Job
570+ if len (opt .JobStates ) > 0 {
571+ stateSet := make (map [string ]bool , len (opt .JobStates ))
572+ for _ , s := range opt .JobStates {
573+ stateSet [s ] = true
574+ }
575+ for _ , job := range allJobs {
576+ if stateSet [job .State ] {
577+ jobs = append (jobs , job )
578+ }
579+ }
580+ } else {
581+ jobs = allJobs
582+ }
583+
559584 return buildkite.Build {
560585 ID : "123" ,
561586 Number : 1 ,
562587 State : "failed" ,
563- Jobs : []buildkite.Job {
564- {ID : "job1" , Name : "Test 1" , State : "passed" , Agent : buildkite.Agent {ID : "agent1" , Name : "Agent 1" }},
565- {ID : "job2" , Name : "Test 2" , State : "failed" , Agent : buildkite.Agent {ID : "agent2" , Name : "Agent 2" }},
566- {ID : "job3" , Name : "Test 3" , State : "failed" , Agent : buildkite.Agent {ID : "agent3" , Name : "Agent 3" }},
567- {ID : "job4" , Name : "Test 4" , State : "broken" , Agent : buildkite.Agent {ID : "agent4" , Name : "Agent 4" }},
568- },
588+ Jobs : jobs ,
569589 }, & buildkite.Response {
570590 Response : & http.Response {StatusCode : 200 },
571591 }, nil
@@ -696,15 +716,16 @@ func TestGetBuildDetailedWithJobStateFilter(t *testing.T) {
696716
697717 client := & MockBuildsClient {
698718 GetFunc : func (ctx context.Context , org string , pipeline string , id string , opt * buildkite.BuildGetOptions ) (buildkite.Build , * buildkite.Response , error ) {
719+ assert .Equal ([]string {"failed" }, opt .JobStates , "JobStates should be passed to the API" )
720+
721+ // API returns only the filtered jobs
699722 return buildkite.Build {
700723 ID : "123" ,
701724 Number : 1 ,
702725 State : "failed" ,
703726 Jobs : []buildkite.Job {
704- {ID : "job1" , Name : "Test 1" , State : "passed" },
705727 {ID : "job2" , Name : "Test 2" , State : "failed" },
706728 {ID : "job3" , Name : "Test 3" , State : "failed" },
707- {ID : "job4" , Name : "Test 4" , State : "broken" },
708729 },
709730 }, & buildkite.Response {
710731 Response : & http.Response {StatusCode : 200 },
@@ -729,17 +750,14 @@ func TestGetBuildDetailedWithJobStateFilter(t *testing.T) {
729750 assert .NoError (err )
730751
731752 textContent := getTextResult (t , result )
732- // jobs_total should reflect ALL jobs (4)
733- assert .Contains (textContent .Text , `"jobs_total":4` )
753+ assert .NotContains (textContent .Text , `"jobs_total"` )
734754 // job_summary.total should reflect filtered jobs (2)
735755 assert .Contains (textContent .Text , `"total":2` )
736756 // job_summary.by_state should only show failed count
737757 assert .Contains (textContent .Text , `"failed":2` )
738758 // jobs array should contain only the filtered entries
739759 assert .Contains (textContent .Text , `{"id":"job2","name":"Test 2","state":"failed"}` )
740760 assert .Contains (textContent .Text , `{"id":"job3","name":"Test 3","state":"failed"}` )
741- assert .NotContains (textContent .Text , `{"id":"job1"` )
742- assert .NotContains (textContent .Text , `{"id":"job4"` )
743761}
744762
745763func TestGetBuildInvalidDetailLevel (t * testing.T ) {
0 commit comments