diff --git a/apps/web/src/components/tasks/ModelSelect.search.client.test.tsx b/apps/web/src/components/tasks/ModelSelect.search.client.test.tsx
index 9f5df57d13..4459bd2cf4 100644
--- a/apps/web/src/components/tasks/ModelSelect.search.client.test.tsx
+++ b/apps/web/src/components/tasks/ModelSelect.search.client.test.tsx
@@ -1,5 +1,7 @@
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
+import { Dialog, DialogContent, DialogTitle } from '@/components/system';
+
const launchModels = vi.hoisted(() => ({
data: undefined as
| {
@@ -150,6 +152,34 @@ describe('ModelSelect real controls', () => {
expect(screen.queryByRole('listbox')).not.toBeInTheDocument();
});
+ it('allows wheel scrolling when portaled from a modal dialog', async () => {
+ render(
+ ,
+ );
+ fireEvent.click(screen.getByRole('combobox'));
+
+ const list = screen.getByRole('listbox');
+ Object.defineProperties(list, {
+ clientHeight: { configurable: true, value: 300 },
+ scrollHeight: { configurable: true, value: 600 },
+ });
+ const wheelEvent = new WheelEvent('wheel', {
+ bubbles: true,
+ cancelable: true,
+ deltaY: 100,
+ });
+
+ await waitFor(() => {
+ screen.getAllByRole('option')[0]?.dispatchEvent(wheelEvent);
+ expect(wheelEvent.defaultPrevented).toBe(false);
+ });
+ });
+
it('preserves the trigger label, selected default label and empty label', () => {
const { rerender } = render(
model.id === value);
return (
-
+