@@ -281,6 +281,83 @@ void main() {
281281 expect (find.textContaining ('Status: Failed' ), findsOneWidget);
282282 });
283283
284+ testWidgets ('PreSubmitView displays default job details when summary is empty' , (
285+ WidgetTester tester,
286+ ) async {
287+ tester.view.physicalSize = const Size (2000 , 1080 );
288+ tester.view.devicePixelRatio = 1.0 ;
289+ addTearDown (tester.view.resetPhysicalSize);
290+ addTearDown (tester.view.resetDevicePixelRatio);
291+
292+ const mockSha = 'decaf_3_real_sha' ;
293+ const guardResponse = PresubmitGuardResponse (
294+ prNum: 123 ,
295+ author: 'dash' ,
296+ guardStatus: GuardStatus .failed,
297+ checkRunId: 456 ,
298+ stages: [
299+ PresubmitGuardStage (
300+ name: 'Engine' ,
301+ createdAt: 0 ,
302+ builds: {'Mac mac_host_engine 1' : TaskStatus .failed},
303+ ),
304+ ],
305+ );
306+
307+ when (
308+ mockCocoonService.fetchPresubmitGuard (
309+ repo: anyNamed ('repo' ),
310+ sha: mockSha,
311+ ),
312+ ).thenAnswer ((_) async => const CocoonResponse .data (guardResponse));
313+
314+ when (
315+ mockCocoonService.fetchPresubmitJobDetails (
316+ checkRunId: anyNamed ('checkRunId' ),
317+ jobName: argThat (contains ('mac_host_engine' ), named: 'jobName' ),
318+ ),
319+ ).thenAnswer (
320+ (_) async => CocoonResponse .data ([
321+ PresubmitJobResponse (
322+ attemptNumber: 1 ,
323+ jobName: 'Mac mac_host_engine 1' ,
324+ creationTime: 0 ,
325+ status: TaskStatus .failed,
326+ summary: '' , // Empty summary
327+ ),
328+ ]),
329+ );
330+
331+ await tester.runAsync (() async {
332+ await tester.pumpWidget (
333+ createPreSubmitView ({'repo' : 'flutter' , 'pr' : '123' }),
334+ );
335+ for (var i = 0 ; i < 50 ; i++ ) {
336+ await tester.pump ();
337+ await Future <void >.delayed (const Duration (milliseconds: 50 ));
338+ if (find.textContaining ('by dash' ).evaluate ().isNotEmpty) break ;
339+ }
340+ });
341+ await tester.pumpAndSettle ();
342+
343+ expect (find.textContaining ('PR #123' ), findsOneWidget);
344+
345+ await tester.tap (find.textContaining ('mac_host_engine' ).first);
346+ await tester.runAsync (() async {
347+ for (var i = 0 ; i < 50 ; i++ ) {
348+ await tester.pump ();
349+ await Future <void >.delayed (const Duration (milliseconds: 50 ));
350+ if (find.textContaining ('Mac mac_host_engine 1 failed.' ).evaluate ().isNotEmpty) {
351+ break ;
352+ }
353+ }
354+ });
355+ await tester.pumpAndSettle ();
356+
357+ expect (find.textContaining ('Mac mac_host_engine 1 failed.' ), findsOneWidget);
358+ expect (find.textContaining ('Click "View more details on LUCI UI" button below for more details.' ), findsOneWidget);
359+ });
360+
284361 testWidgets (
285362 'PreSubmitView automatically selects latest SHA and updates sidebar when opened with PR only' ,
286363 (WidgetTester tester) async {
0 commit comments