Skip to content

Conversation

@DSingh0304
Copy link
Contributor

Why submit this pull request?

  • Bugfix
  • New feature provided
  • Improve performance
  • Backport patches

What changes will this PR take into?

This PR adds comprehensive E2E tests for the Services resource, covering all CRUD operations and list page functionality.

Test Coverage (5 tests, all passing ✅):

  • List page tests (services.list.spec.ts) - 3 tests

    • Navigation to services page
    • Pagination using table controls
    • Pagination using URL search parameters
  • CRUD with required fields (services.crud-required-fields.spec.ts) - 1 test

    • Uses minimal fields (name only)
    • Tests create, read, update, and delete operations
    • Verifies label addition during edit
  • CRUD with all fields (services.crud-all-fields.spec.ts) - 1 test

    • Uses all available fields (name, description, labels, upstream nodes, hosts, WebSocket)
    • Tests complete create and delete operations with complex configurations

Files Added:

  • e2e/utils/ui/services.ts - UI helper functions for form filling and verification with proper selector disambiguation
  • e2e/tests/services.list.spec.ts - List page and pagination tests
  • e2e/tests/services.crud-required-fields.spec.ts - Minimal fields CRUD tests
  • e2e/tests/services.crud-all-fields.spec.ts - All fields CRUD tests

Implementation Details:

  • Proper selector disambiguation using .first() to avoid conflicts between service and upstream fields (name, description, labels)
  • Handles hidden WebSocket switch using JavaScript evaluation
  • Upstream node configuration (host, port, weight) properly filled and verified
  • Follows test patterns from upstreams and routes
  • Proper cleanup with deleteAllServices helper
  • Auto-generated ID capture and verification

Related issues

resolve #3085

Checklist:

  • Did you explain what problem does this PR solve? Or what new features have been added?
  • Have you added corresponding test cases?
  • Have you modified the corresponding document? (N/A - E2E tests don't require documentation updates)
  • Is this PR backward compatible? If it is not backward compatible, please discuss on the mailing list first (Yes, only adds tests, no breaking changes)

@DSingh0304
Copy link
Contributor Author

@Baoyuantop i had to delete that PR because of some of git issues but I recovered the commits and raised the new PR the changes are same as they were in the previous PR the CI issue has also been resolved. I think it should pass the e2e test as it does locally.

@DSingh0304 DSingh0304 requested a review from SkyeYoung November 21, 2025 05:12
- Wrapped deletion calls in retry logic to handle transient 500 errors
- Added 404 error suppression to handle potential race conditions/idempotency
- Increase uiHasToastMsg default timeout to 30s (from 5s) for all toast messages
- Increase services.crud-required-fields timeout to 30s for backend responses
- Increase stream_routes.show-disabled-error timeout to 30s after Docker restart
- Add comments explaining CI-specific timeout requirements

These generous timeouts ensure tests pass reliably in slower CI environments
while still failing fast enough locally to catch real issues.

All 76 E2E tests pass successfully with these changes.
@DSingh0304
Copy link
Contributor Author

Fixed CI timing issues by increasing timeouts to 30s across all toast message assertions and critical backend operations. All 76 E2E tests now pass successfully. The changes ensure reliable test execution in slower CI environments while maintaining the principle that API calls are only used for setup/teardown all CRUD operations use UI interactions as required.

import { deleteAllServices, postServiceReq } from '@/apis/services';
import { deleteAllStreamRoutes } from '@/apis/stream_routes';

test.describe.configure({ mode: 'serial' });
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is it necessary to add this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This configuration is necessary to ensure test stability and isolation. Since the global Playwright config enables fullyParallel: true, adding mode: 'serial' is critical to prevent race conditions in this file, where tests share a single Service resource created in the beforeAll hook. Without it, concurrent test execution could lead to conflicts when reading or modifying that shared state.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why could CI be run through before, but not now? Please confirm the reason.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CI likely passed before due to a "lucky" execution order where the environment was clean. The failures now are caused by strict Foreign Key constraints in the backend.

If a previous test (or a parallel run) leaves "zombie" Routes or Stream Routes attached to a Service, the old deleteAllServices would fail to clean up, causing the beforeAll hook to crash. The updated deleteAllServices fixes this by explicitly removing dependencies first.

The mode: 'serial' is added as a safeguard. Since fullyParallel: true is enabled globally, this ensures that if more tests are added to this file in the future, they won't race against each other for the shared testServiceId.

import { deleteAllServices, postServiceReq } from '@/apis/services';
import { deleteAllStreamRoutes } from '@/apis/stream_routes';

test.describe.configure({ mode: 'serial' });
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why could CI be run through before, but not now? Please confirm the reason.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Test(resource): services

3 participants