@@ -261,7 +261,7 @@ func TestCreateStatus(t *testing.T) {
261261 },
262262 },
263263 {
264- name : "commit status fails on both projects but continues " ,
264+ name : "commit status fails on both projects with non-permission error skips MR comment " ,
265265 wantClient : true ,
266266 wantErr : false ,
267267 fields : fields {
@@ -273,10 +273,50 @@ func TestCreateStatus(t *testing.T) {
273273 },
274274 event : & info.Event {
275275 TriggerTarget : "pull_request" ,
276- SourceProjectID : 404 , // Will fail
277- TargetProjectID : 405 , // Will fail
276+ SourceProjectID : 400 , // Will fail with 400 (not permission error)
277+ TargetProjectID : 405 , // Will fail with 400 (not permission error)
278278 SHA : "abc123" ,
279279 },
280+ postStr : "" , // No MR comment expected for non-permission errors
281+ },
282+ },
283+ {
284+ name : "permission error 403 on source creates MR comment" ,
285+ wantClient : true ,
286+ wantErr : false ,
287+ fields : fields {
288+ targetProjectID : 100 ,
289+ },
290+ args : args {
291+ statusOpts : provider.StatusOpts {
292+ Conclusion : "success" ,
293+ },
294+ event : & info.Event {
295+ TriggerTarget : "pull_request" ,
296+ SourceProjectID : 403 , // Will fail with 403 Forbidden
297+ TargetProjectID : 400 , // Will fail with 400 (not permission error)
298+ SHA : "abc123def" ,
299+ },
300+ postStr : "has successfully" ,
301+ },
302+ },
303+ {
304+ name : "permission error 401 on source creates MR comment" ,
305+ wantClient : true ,
306+ wantErr : false ,
307+ fields : fields {
308+ targetProjectID : 100 ,
309+ },
310+ args : args {
311+ statusOpts : provider.StatusOpts {
312+ Conclusion : "success" ,
313+ },
314+ event : & info.Event {
315+ TriggerTarget : "pull_request" ,
316+ SourceProjectID : 401 , // Will fail with 401 Unauthorized
317+ TargetProjectID : 400 , // Will fail with 400 (not permission error)
318+ SHA : "abc123ghi" ,
319+ },
280320 postStr : "has successfully" ,
281321 },
282322 },
@@ -318,31 +358,47 @@ func TestCreateStatus(t *testing.T) {
318358 // Mock source project commit status endpoint
319359 sourceStatusPath := fmt .Sprintf ("/projects/%d/statuses/%s" , tt .args .event .SourceProjectID , tt .args .event .SHA )
320360 mux .HandleFunc (sourceStatusPath , func (rw http.ResponseWriter , _ * http.Request ) {
321- if tt .args .event .SourceProjectID == 404 {
322- // Simulate failure on source project
361+ switch tt .args .event .SourceProjectID {
362+ case 400 :
363+ rw .WriteHeader (http .StatusBadRequest )
364+ fmt .Fprint (rw , `{"message": "400 Bad Request"}` )
365+ case 401 :
366+ rw .WriteHeader (http .StatusUnauthorized )
367+ fmt .Fprint (rw , `{"message": "401 Unauthorized"}` )
368+ case 403 :
369+ rw .WriteHeader (http .StatusForbidden )
370+ fmt .Fprint (rw , `{"message": "403 Forbidden"}` )
371+ case 404 :
323372 rw .WriteHeader (http .StatusNotFound )
324373 fmt .Fprint (rw , `{"message": "404 Project Not Found"}` )
325- return
374+ default :
375+ rw .WriteHeader (http .StatusCreated )
376+ fmt .Fprint (rw , `{}` )
326377 }
327- // Success on source project
328- rw .WriteHeader (http .StatusCreated )
329- fmt .Fprint (rw , `{}` )
330378 })
331379 }
332380
333381 if tt .args .event .TargetProjectID != 0 {
334382 // Mock target project commit status endpoint
335383 targetStatusPath := fmt .Sprintf ("/projects/%d/statuses/%s" , tt .args .event .TargetProjectID , tt .args .event .SHA )
336384 mux .HandleFunc (targetStatusPath , func (rw http.ResponseWriter , _ * http.Request ) {
337- if tt .args .event .TargetProjectID == 404 {
338- // Simulate failure on target project
385+ switch tt .args .event .TargetProjectID {
386+ case 400 , 405 :
387+ rw .WriteHeader (http .StatusBadRequest )
388+ fmt .Fprint (rw , `{"message": "400 Bad Request"}` )
389+ case 401 :
390+ rw .WriteHeader (http .StatusUnauthorized )
391+ fmt .Fprint (rw , `{"message": "401 Unauthorized"}` )
392+ case 403 :
393+ rw .WriteHeader (http .StatusForbidden )
394+ fmt .Fprint (rw , `{"message": "403 Forbidden"}` )
395+ case 404 :
339396 rw .WriteHeader (http .StatusNotFound )
340397 fmt .Fprint (rw , `{"message": "404 Project Not Found"}` )
341- return
398+ default :
399+ rw .WriteHeader (http .StatusCreated )
400+ fmt .Fprint (rw , `{}` )
342401 }
343- // Success on target project
344- rw .WriteHeader (http .StatusCreated )
345- fmt .Fprint (rw , `{}` )
346402 })
347403 }
348404
0 commit comments