diff --git a/packages/core/package.json b/packages/core/package.json index 497a2e81..8503909b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@viamrobotics/prime-core", - "version": "0.0.168", + "version": "0.0.169", "repository": { "type": "git", "url": "https://github.com/viamrobotics/prime.git", diff --git a/packages/core/src/lib/__tests__/modal.spec.ts b/packages/core/src/lib/__tests__/modal.spec.ts index 580f4d83..d694544b 100644 --- a/packages/core/src/lib/__tests__/modal.spec.ts +++ b/packages/core/src/lib/__tests__/modal.spec.ts @@ -1,5 +1,5 @@ import { describe, it, expect, vi } from 'vitest'; -import { render, screen, within } from '@testing-library/svelte'; +import { act, render, screen, within } from '@testing-library/svelte'; import userEvent from '@testing-library/user-event'; import type { ComponentProps } from 'svelte'; import Modal from '../modal.svelte'; @@ -8,8 +8,9 @@ describe('Modal', () => { const onClose = vi.fn(); const renderSubject = (props: ComponentProps) => { - const { component } = render(Modal, props); - component.$on('close', onClose); + const result = render(Modal, props); + result.component.$on('close', onClose); + return result; }; it('should be visible if open is true', () => { @@ -77,4 +78,18 @@ describe('Modal', () => { expect(modal).toBeInTheDocument(); }); + + it('should prevent body scroll', () => { + renderSubject({ isOpen: true, role: 'alertdialog' }); + + expect(document.body).toHaveClass('overflow-hidden'); + }); + + it('should allow body to scroll on component unmount', async () => { + const { unmount } = renderSubject({ isOpen: true, role: 'alertdialog' }); + + await act(() => unmount()); + + expect(document.body).not.toHaveClass('overflow-hidden'); + }); }); diff --git a/packages/core/src/lib/modal.svelte b/packages/core/src/lib/modal.svelte index 77f70831..c3aefbde 100644 --- a/packages/core/src/lib/modal.svelte +++ b/packages/core/src/lib/modal.svelte @@ -42,7 +42,7 @@ Creates a modal overlay.