@@ -16,12 +16,29 @@ import { type HistoryEvent } from '@/__generated__/proto-ts/uber/cadence/api/v1/
1616import * as usePageFiltersModule from '@/components/page-filters/hooks/use-page-filters' ;
1717import { type PageQueryParamValues } from '@/hooks/use-page-query-params/use-page-query-params.types' ;
1818import { type GetWorkflowHistoryResponse } from '@/route-handlers/get-workflow-history/get-workflow-history.types' ;
19+ import {
20+ type PendingActivityTaskStartEvent ,
21+ type PendingDecisionTaskStartEvent ,
22+ } from '@/views/workflow-history/workflow-history.types' ;
1923import { mockDescribeWorkflowResponse } from '@/views/workflow-page/__fixtures__/describe-workflow-response' ;
2024import type workflowPageQueryParamsConfig from '@/views/workflow-page/config/workflow-page-query-params.config' ;
2125
22- import { completedActivityTaskEvents } from '../../workflow-history/__fixtures__/workflow-history-activity-events' ;
23- import { completedDecisionTaskEvents } from '../../workflow-history/__fixtures__/workflow-history-decision-events' ;
26+ import {
27+ completedActivityTaskEvents ,
28+ failedActivityTaskEvents ,
29+ scheduleActivityTaskEvent ,
30+ } from '../../workflow-history/__fixtures__/workflow-history-activity-events' ;
31+ import {
32+ completedDecisionTaskEvents ,
33+ failedDecisionTaskEvents ,
34+ scheduleDecisionTaskEvent ,
35+ } from '../../workflow-history/__fixtures__/workflow-history-decision-events' ;
36+ import {
37+ pendingActivityTaskStartEvent ,
38+ pendingDecisionTaskStartEvent ,
39+ } from '../../workflow-history/__fixtures__/workflow-history-pending-events' ;
2440import { WorkflowHistoryContext } from '../../workflow-history/workflow-history-context-provider/workflow-history-context-provider' ;
41+ import { type Props as NavbarProps } from '../workflow-history-navigation-bar/workflow-history-navigation-bar.types' ;
2542import WorkflowHistoryV2 from '../workflow-history-v2' ;
2643
2744jest . mock ( '@/hooks/use-page-query-params/use-page-query-params' , ( ) =>
@@ -111,9 +128,22 @@ jest.mock(
111128jest . mock (
112129 '../workflow-history-navigation-bar/workflow-history-navigation-bar' ,
113130 ( ) =>
114- jest . fn ( ( ) => (
115- < div data-testid = "workflow-history-navigation-bar" > Navigation Bar</ div >
116- ) )
131+ jest . fn (
132+ ( { failedEventsMenuItems, pendingEventsMenuItems } : NavbarProps ) => (
133+ < div data-testid = "workflow-history-navigation-bar" >
134+ { failedEventsMenuItems && failedEventsMenuItems . length > 0 && (
135+ < div data-testid = "failed-events-menu-items-count" >
136+ { failedEventsMenuItems . length } failed events
137+ </ div >
138+ ) }
139+ { pendingEventsMenuItems && pendingEventsMenuItems . length > 0 && (
140+ < div data-testid = "pending-events-menu-items-count" >
141+ { pendingEventsMenuItems . length } pending events
142+ </ div >
143+ ) }
144+ </ div >
145+ )
146+ )
117147) ;
118148
119149jest . mock ( '@/utils/decode-url-params' , ( ) => jest . fn ( ( params ) => params ) ) ;
@@ -408,6 +438,30 @@ describe(WorkflowHistoryV2.name, () => {
408438 await screen . findByTestId ( 'ungrouped-selected-event-id' )
409439 ) . toHaveTextContent ( 'test-event-id' ) ;
410440 } ) ;
441+
442+ it ( 'passes failed events menu items to navigation bar when failed events exist' , async ( ) => {
443+ await setup ( {
444+ historyEvents : [ ...failedActivityTaskEvents , ...failedDecisionTaskEvents ] ,
445+ } ) ;
446+
447+ const failedItemsCounter = await screen . findByTestId (
448+ 'failed-events-menu-items-count'
449+ ) ;
450+ expect ( failedItemsCounter ) . toHaveTextContent ( '2 failed events' ) ;
451+ } ) ;
452+
453+ it ( 'passes pending events menu items to navigation bar when pending events exist' , async ( ) => {
454+ await setup ( {
455+ historyEvents : [ scheduleActivityTaskEvent , scheduleDecisionTaskEvent ] ,
456+ pendingActivities : [ pendingActivityTaskStartEvent ] ,
457+ pendingDecision : pendingDecisionTaskStartEvent ,
458+ } ) ;
459+
460+ const pendingItemsCounter = await screen . findByTestId (
461+ 'pending-events-menu-items-count'
462+ ) ;
463+ expect ( pendingItemsCounter ) . toHaveTextContent ( '2 pending events' ) ;
464+ } ) ;
411465} ) ;
412466
413467async function setup ( {
@@ -417,6 +471,9 @@ async function setup({
417471 pageQueryParamsValues = { } ,
418472 hasNextPage,
419473 ungroupedViewPreference,
474+ historyEvents = completedActivityTaskEvents ,
475+ pendingActivities,
476+ pendingDecision,
420477} : {
421478 error ?: boolean ;
422479 summaryError ?: boolean ;
@@ -426,7 +483,10 @@ async function setup({
426483 > ;
427484 hasNextPage ?: boolean ;
428485 ungroupedViewPreference ?: boolean | null ;
429- } ) {
486+ historyEvents ?: Array < HistoryEvent > ;
487+ pendingActivities ?: Array < PendingActivityTaskStartEvent > ;
488+ pendingDecision ?: PendingDecisionTaskStartEvent | null ;
489+ } = { } ) {
430490 const user = userEvent . setup ( ) ;
431491
432492 const mockSetQueryParams = jest . fn ( ) ;
@@ -497,12 +557,10 @@ async function setup({
497557 ) ;
498558 }
499559
500- const events : Array < HistoryEvent > = completedActivityTaskEvents ;
501-
502560 return HttpResponse . json (
503561 {
504562 history : {
505- events,
563+ events : historyEvents ,
506564 } ,
507565 archived : false ,
508566 nextPageToken : hasNextPage ? 'mock-next-page-token' : '' ,
@@ -526,7 +584,18 @@ async function setup({
526584 } ,
527585 }
528586 : {
529- jsonResponse : mockDescribeWorkflowResponse ,
587+ httpResolver : ( ) => {
588+ const describeResponse = {
589+ ...mockDescribeWorkflowResponse ,
590+ ...( pendingActivities && pendingActivities . length > 0
591+ ? {
592+ pendingActivities,
593+ }
594+ : { } ) ,
595+ ...( pendingDecision ? { pendingDecision } : { } ) ,
596+ } ;
597+ return HttpResponse . json ( describeResponse , { status : 200 } ) ;
598+ } ,
530599 } ) ,
531600 } ,
532601 ] ,
0 commit comments