@@ -87,6 +87,84 @@ describe("BackendPostgres", () => {
8787 } ) ;
8888 } ) ;
8989
90+ describe ( "listWorkflowRuns()" , ( ) => {
91+ test ( "lists workflow runs ordered by creation time" , async ( ) => {
92+ const backend = await BackendPostgres . connect ( DEFAULT_DATABASE_URL , {
93+ namespaceId : randomUUID ( ) ,
94+ } ) ;
95+ const first = await createPendingWorkflowRun ( backend ) ;
96+ await sleep ( 10 ) ; // ensure timestamp difference
97+ const second = await createPendingWorkflowRun ( backend ) ;
98+
99+ const listed = await backend . listWorkflowRuns ( { } ) ;
100+ expect ( listed . data . map ( ( run ) => run . id ) ) . toEqual ( [ first . id , second . id ] ) ;
101+ await backend . stop ( ) ;
102+ } ) ;
103+
104+ test ( "paginates workflow runs" , async ( ) => {
105+ const backend = await BackendPostgres . connect ( DEFAULT_DATABASE_URL , {
106+ namespaceId : randomUUID ( ) ,
107+ } ) ;
108+ const runs : WorkflowRun [ ] = [ ] ;
109+ for ( let i = 0 ; i < 5 ; i ++ ) {
110+ runs . push ( await createPendingWorkflowRun ( backend ) ) ;
111+ await sleep ( 10 ) ;
112+ }
113+
114+ // p1
115+ const page1 = await backend . listWorkflowRuns ( { limit : 2 } ) ;
116+ expect ( page1 . data ) . toHaveLength ( 2 ) ;
117+ expect ( page1 . data [ 0 ] ?. id ) . toBe ( runs [ 0 ] ?. id ) ;
118+ expect ( page1 . data [ 1 ] ?. id ) . toBe ( runs [ 1 ] ?. id ) ;
119+ expect ( page1 . pagination . next ) . not . toBeNull ( ) ;
120+ expect ( page1 . pagination . prev ) . toBeNull ( ) ;
121+
122+ // p2
123+ const page2 = await backend . listWorkflowRuns ( {
124+ limit : 2 ,
125+ after : page1 . pagination . next ! , // eslint-disable-line @typescript-eslint/no-non-null-assertion
126+ } ) ;
127+ expect ( page2 . data ) . toHaveLength ( 2 ) ;
128+ expect ( page2 . data [ 0 ] ?. id ) . toBe ( runs [ 2 ] ?. id ) ;
129+ expect ( page2 . data [ 1 ] ?. id ) . toBe ( runs [ 3 ] ?. id ) ;
130+ expect ( page2 . pagination . next ) . not . toBeNull ( ) ;
131+ expect ( page2 . pagination . prev ) . not . toBeNull ( ) ;
132+
133+ // p3
134+ const page3 = await backend . listWorkflowRuns ( {
135+ limit : 2 ,
136+ after : page2 . pagination . next ! , // eslint-disable-line @typescript-eslint/no-non-null-assertion
137+ } ) ;
138+ expect ( page3 . data ) . toHaveLength ( 1 ) ;
139+ expect ( page3 . data [ 0 ] ?. id ) . toBe ( runs [ 4 ] ?. id ) ;
140+ expect ( page3 . pagination . next ) . toBeNull ( ) ;
141+ expect ( page3 . pagination . prev ) . not . toBeNull ( ) ;
142+
143+ // p2 again
144+ const page2Back = await backend . listWorkflowRuns ( {
145+ limit : 2 ,
146+ before : page3 . pagination . prev ! , // eslint-disable-line @typescript-eslint/no-non-null-assertion
147+ } ) ;
148+ expect ( page2Back . data ) . toHaveLength ( 2 ) ;
149+ expect ( page2Back . data [ 0 ] ?. id ) . toBe ( runs [ 2 ] ?. id ) ;
150+ expect ( page2Back . data [ 1 ] ?. id ) . toBe ( runs [ 3 ] ?. id ) ;
151+ expect ( page2Back . pagination . next ) . toEqual ( page2 . pagination . next ) ;
152+ expect ( page2Back . pagination . prev ) . toEqual ( page2 . pagination . prev ) ;
153+ await backend . stop ( ) ;
154+ } ) ;
155+
156+ test ( "handles empty results" , async ( ) => {
157+ const backend = await BackendPostgres . connect ( DEFAULT_DATABASE_URL , {
158+ namespaceId : randomUUID ( ) ,
159+ } ) ;
160+ const listed = await backend . listWorkflowRuns ( { } ) ;
161+ expect ( listed . data ) . toHaveLength ( 0 ) ;
162+ expect ( listed . pagination . next ) . toBeNull ( ) ;
163+ expect ( listed . pagination . prev ) . toBeNull ( ) ;
164+ await backend . stop ( ) ;
165+ } ) ;
166+ } ) ;
167+
90168 describe ( "claimWorkflowRun()" , ( ) => {
91169 // because claims involve timing and leases, we create and teardown a new
92170 // namespaced backend instance for each test
0 commit comments