@@ -87,7 +87,7 @@ func TestGetBuildDefault(t *testing.T) {
8787 assert .Contains (textContent .Text , `"state":"running"` )
8888 assert .Contains (textContent .Text , `"total":0` )
8989 assert .Contains (textContent .Text , `"by_state":{}` )
90- assert .Contains (textContent .Text , `"jobs_total":0 ` )
90+ assert .NotContains (textContent .Text , `"jobs_total"` )
9191}
9292
9393func TestGetBuildWithJobSummary (t * testing.T ) {
@@ -187,7 +187,7 @@ func TestListBuilds(t *testing.T) {
187187 assert .Contains (textContent .Text , `"id":"123"` )
188188 assert .Contains (textContent .Text , `"number":1` )
189189 assert .Contains (textContent .Text , `"state":"running"` )
190- assert .Contains (textContent .Text , `"jobs_total":0 ` )
190+ assert .NotContains (textContent .Text , `"jobs_total"` )
191191
192192 // Verify default pagination parameters - new defaults
193193 assert .NotNil (capturedOptions )
@@ -537,18 +537,38 @@ func TestCreateBuild(t *testing.T) {
537537func TestGetBuildWithJobStateFilter (t * testing.T ) {
538538 assert := require .New (t )
539539
540+ // Mock returns jobs matching the requested states (simulating API-side filtering)
540541 client := & MockBuildsClient {
541542 GetFunc : func (ctx context.Context , org string , pipeline string , id string , opt * buildkite.BuildGetOptions ) (buildkite.Build , * buildkite.Response , error ) {
543+ // Simulate API-side job state filtering
544+ allJobs := []buildkite.Job {
545+ {ID : "job1" , Name : "Test 1" , State : "passed" , Agent : buildkite.Agent {ID : "agent1" , Name : "Agent 1" }},
546+ {ID : "job2" , Name : "Test 2" , State : "failed" , Agent : buildkite.Agent {ID : "agent2" , Name : "Agent 2" }},
547+ {ID : "job3" , Name : "Test 3" , State : "failed" , Agent : buildkite.Agent {ID : "agent3" , Name : "Agent 3" }},
548+ {ID : "job4" , Name : "Test 4" , State : "broken" , Agent : buildkite.Agent {ID : "agent4" , Name : "Agent 4" }},
549+ }
550+
551+ // Filter jobs based on requested states (simulating what the API does)
552+ var jobs []buildkite.Job
553+ if len (opt .JobStates ) > 0 {
554+ stateSet := make (map [string ]bool , len (opt .JobStates ))
555+ for _ , s := range opt .JobStates {
556+ stateSet [s ] = true
557+ }
558+ for _ , job := range allJobs {
559+ if stateSet [job .State ] {
560+ jobs = append (jobs , job )
561+ }
562+ }
563+ } else {
564+ jobs = allJobs
565+ }
566+
542567 return buildkite.Build {
543568 ID : "123" ,
544569 Number : 1 ,
545570 State : "failed" ,
546- Jobs : []buildkite.Job {
547- {ID : "job1" , Name : "Test 1" , State : "passed" , Agent : buildkite.Agent {ID : "agent1" , Name : "Agent 1" }},
548- {ID : "job2" , Name : "Test 2" , State : "failed" , Agent : buildkite.Agent {ID : "agent2" , Name : "Agent 2" }},
549- {ID : "job3" , Name : "Test 3" , State : "failed" , Agent : buildkite.Agent {ID : "agent3" , Name : "Agent 3" }},
550- {ID : "job4" , Name : "Test 4" , State : "broken" , Agent : buildkite.Agent {ID : "agent4" , Name : "Agent 4" }},
551- },
571+ Jobs : jobs ,
552572 }, & buildkite.Response {
553573 Response : & http.Response {StatusCode : 200 },
554574 }, nil
@@ -679,15 +699,16 @@ func TestGetBuildDetailedWithJobStateFilter(t *testing.T) {
679699
680700 client := & MockBuildsClient {
681701 GetFunc : func (ctx context.Context , org string , pipeline string , id string , opt * buildkite.BuildGetOptions ) (buildkite.Build , * buildkite.Response , error ) {
702+ assert .Equal ([]string {"failed" }, opt .JobStates , "JobStates should be passed to the API" )
703+
704+ // API returns only the filtered jobs
682705 return buildkite.Build {
683706 ID : "123" ,
684707 Number : 1 ,
685708 State : "failed" ,
686709 Jobs : []buildkite.Job {
687- {ID : "job1" , Name : "Test 1" , State : "passed" },
688710 {ID : "job2" , Name : "Test 2" , State : "failed" },
689711 {ID : "job3" , Name : "Test 3" , State : "failed" },
690- {ID : "job4" , Name : "Test 4" , State : "broken" },
691712 },
692713 }, & buildkite.Response {
693714 Response : & http.Response {StatusCode : 200 },
@@ -712,17 +733,14 @@ func TestGetBuildDetailedWithJobStateFilter(t *testing.T) {
712733 assert .NoError (err )
713734
714735 textContent := getTextResult (t , result )
715- // jobs_total should reflect ALL jobs (4)
716- assert .Contains (textContent .Text , `"jobs_total":4` )
736+ assert .NotContains (textContent .Text , `"jobs_total"` )
717737 // job_summary.total should reflect filtered jobs (2)
718738 assert .Contains (textContent .Text , `"total":2` )
719739 // job_summary.by_state should only show failed count
720740 assert .Contains (textContent .Text , `"failed":2` )
721741 // jobs array should contain only the filtered entries
722742 assert .Contains (textContent .Text , `{"id":"job2","name":"Test 2","state":"failed"}` )
723743 assert .Contains (textContent .Text , `{"id":"job3","name":"Test 3","state":"failed"}` )
724- assert .NotContains (textContent .Text , `{"id":"job1"` )
725- assert .NotContains (textContent .Text , `{"id":"job4"` )
726744}
727745
728746func TestGetBuildInvalidDetailLevel (t * testing.T ) {
0 commit comments