@@ -100,4 +100,150 @@ test.describe('Events Viewing', () => {
100100 await mockServer . stop ( ) ;
101101 }
102102 } ) ;
103+
104+ test ( 'should filter events by endpoint' , async ( { page, request } ) => {
105+ const baseUrl = getBaseUrl ( ) ;
106+ const mockServer = new MockTargetServer ( ) ;
107+ await mockServer . start ( ) ;
108+
109+ try {
110+ // Create two endpoints
111+ const endpoint1Name = generateTestName ( 'Endpoint 1' ) ;
112+ const endpoint2Name = generateTestName ( 'Endpoint 2' ) ;
113+ const endpoint1 = await apiCreateEndpoint ( request , baseUrl , endpoint1Name ) ;
114+ const endpoint2 = await apiCreateEndpoint ( request , baseUrl , endpoint2Name ) ;
115+
116+ // Create targets for both
117+ await apiCreateTarget ( request , baseUrl , endpoint1 . id , {
118+ name : 'Target 1' ,
119+ kind : 'http' ,
120+ url : `${ mockServer . url } /ok` ,
121+ } ) ;
122+ await apiCreateTarget ( request , baseUrl , endpoint2 . id , {
123+ name : 'Target 2' ,
124+ kind : 'http' ,
125+ url : `${ mockServer . url } /ok` ,
126+ } ) ;
127+
128+ // Send events to both endpoints
129+ const event1Title = generateTestName ( 'Event 1' ) ;
130+ const event2Title = generateTestName ( 'Event 2' ) ;
131+
132+ await sendWebhookToIngress ( baseUrl , endpoint1 . id , 'http' , WebhookSimulator . http ( 'Body 1' , event1Title ) ) ;
133+ await sendWebhookToIngress ( baseUrl , endpoint2 . id , 'http' , WebhookSimulator . http ( 'Body 2' , event2Title ) ) ;
134+
135+ // Wait for events to be created
136+ await waitFor ( async ( ) => {
137+ const events = await apiListEvents ( request , baseUrl ) ;
138+ return events . some ( ( e : any ) => e . title === event1Title ) &&
139+ events . some ( ( e : any ) => e . title === event2Title ) ;
140+ } , 10000 , 200 ) ;
141+
142+ await page . goto ( '/console#/events' ) ;
143+
144+ // Initially both events should be visible
145+ await expect ( page . locator ( 'tr' , { hasText : event1Title } ) ) . toBeVisible ( ) ;
146+ await expect ( page . locator ( 'tr' , { hasText : event2Title } ) ) . toBeVisible ( ) ;
147+
148+ // Filter by endpoint 1
149+ await page . locator ( 'button[role="combobox"]' ) . click ( ) ;
150+ await page . locator ( `div[role="option"]:has-text("${ endpoint1Name } ")` ) . click ( ) ;
151+
152+ // Wait for filter to apply
153+ await page . waitForTimeout ( 1000 ) ;
154+
155+ // Only event 1 should be visible
156+ await expect ( page . locator ( 'tr' , { hasText : event1Title } ) ) . toBeVisible ( ) ;
157+ await expect ( page . locator ( 'tr' , { hasText : event2Title } ) ) . not . toBeVisible ( ) ;
158+
159+ // Switch to endpoint 2
160+ await page . locator ( 'button[role="combobox"]' ) . click ( ) ;
161+ await page . locator ( `div[role="option"]:has-text("${ endpoint2Name } ")` ) . click ( ) ;
162+
163+ // Wait for filter to apply
164+ await page . waitForTimeout ( 1000 ) ;
165+
166+ // Only event 2 should be visible
167+ await expect ( page . locator ( 'tr' , { hasText : event2Title } ) ) . toBeVisible ( ) ;
168+ await expect ( page . locator ( 'tr' , { hasText : event1Title } ) ) . not . toBeVisible ( ) ;
169+
170+ // Reset filter
171+ await page . locator ( 'button[role="combobox"]' ) . click ( ) ;
172+ await page . locator ( 'div[role="option"]:has-text("All Endpoints")' ) . click ( ) ;
173+
174+ // Wait for filter to apply
175+ await page . waitForTimeout ( 1000 ) ;
176+
177+ // Both events should be visible again
178+ await expect ( page . locator ( 'tr' , { hasText : event1Title } ) ) . toBeVisible ( ) ;
179+ await expect ( page . locator ( 'tr' , { hasText : event2Title } ) ) . toBeVisible ( ) ;
180+ } finally {
181+ await mockServer . stop ( ) ;
182+ }
183+ } ) ;
184+
185+ test ( 'should paginate events' , async ( { page, request } ) => {
186+ const baseUrl = getBaseUrl ( ) ;
187+ const mockServer = new MockTargetServer ( ) ;
188+ await mockServer . start ( ) ;
189+
190+ try {
191+ const endpointName = generateTestName ( 'Pagination Test' ) ;
192+ const endpoint = await apiCreateEndpoint ( request , baseUrl , endpointName ) ;
193+
194+ await apiCreateTarget ( request , baseUrl , endpoint . id , {
195+ name : 'Test Target' ,
196+ kind : 'http' ,
197+ url : `${ mockServer . url } /ok` ,
198+ } ) ;
199+
200+ // Create 25 events (more than one page with page_size=20)
201+ const eventTitles : string [ ] = [ ] ;
202+ for ( let i = 0 ; i < 25 ; i ++ ) {
203+ const title = generateTestName ( `Event ${ i } ` ) ;
204+ eventTitles . push ( title ) ;
205+ await sendWebhookToIngress ( baseUrl , endpoint . id , 'http' , WebhookSimulator . http ( `Body ${ i } ` , title ) ) ;
206+ // Small delay to ensure different timestamps
207+ await new Promise ( resolve => setTimeout ( resolve , 50 ) ) ;
208+ }
209+
210+ // Wait for all events to be created
211+ await waitFor ( async ( ) => {
212+ const events = await apiListEvents ( request , baseUrl ) ;
213+ return events . length >= 25 ;
214+ } , 15000 , 500 ) ;
215+
216+ await page . goto ( '/console#/events' ) ;
217+
218+ // Check that pagination controls are visible
219+ await expect ( page . locator ( 'button:has-text("Previous")' ) ) . toBeVisible ( ) ;
220+ await expect ( page . locator ( 'button:has-text("Next")' ) ) . toBeVisible ( ) ;
221+
222+ // Previous should be disabled on first page
223+ await expect ( page . locator ( 'button:has-text("Previous")' ) ) . toBeDisabled ( ) ;
224+
225+ // Next should be enabled
226+ await expect ( page . locator ( 'button:has-text("Next")' ) ) . toBeEnabled ( ) ;
227+
228+ // Click next to go to page 2
229+ await page . locator ( 'button:has-text("Next")' ) . click ( ) ;
230+ await page . waitForTimeout ( 1000 ) ;
231+
232+ // Now previous should be enabled
233+ await expect ( page . locator ( 'button:has-text("Previous")' ) ) . toBeEnabled ( ) ;
234+
235+ // Page indicator should show page 2
236+ await expect ( page . locator ( 'text=Page 2' ) ) . toBeVisible ( ) ;
237+
238+ // Click previous to go back to page 1
239+ await page . locator ( 'button:has-text("Previous")' ) . click ( ) ;
240+ await page . waitForTimeout ( 1000 ) ;
241+
242+ // Should be back on page 1
243+ await expect ( page . locator ( 'text=Page 1' ) ) . toBeVisible ( ) ;
244+ await expect ( page . locator ( 'button:has-text("Previous")' ) ) . toBeDisabled ( ) ;
245+ } finally {
246+ await mockServer . stop ( ) ;
247+ }
248+ } ) ;
103249} ) ;
0 commit comments