-
Notifications
You must be signed in to change notification settings - Fork 93
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add Modal tests. * fix type * apply review feedback * lint * remove act
- Loading branch information
Showing
4 changed files
with
158 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/* | ||
Copyright 2024 New Vector Ltd. | ||
SPDX-License-Identifier: AGPL-3.0-only | ||
Please see LICENSE in the repository root for full details. | ||
*/ | ||
|
||
import { expect, test } from "vitest"; | ||
import { render } from "@testing-library/react"; | ||
import { ReactNode, useState } from "react"; | ||
import { afterEach } from "node:test"; | ||
import userEvent from "@testing-library/user-event"; | ||
|
||
import { Modal } from "./Modal"; | ||
|
||
const originalMatchMedia = window.matchMedia; | ||
afterEach(() => { | ||
window.matchMedia = originalMatchMedia; | ||
}); | ||
|
||
test("that nothing is rendered when the modal is closed", () => { | ||
const { queryByRole } = render( | ||
<Modal title="My modal" open={false}> | ||
<p>This is the content.</p> | ||
</Modal>, | ||
); | ||
expect(queryByRole("dialog")).toBeNull(); | ||
}); | ||
|
||
test("the content is rendered when the modal is open", () => { | ||
const { queryByRole } = render( | ||
<Modal title="My modal" open={true}> | ||
<p>This is the content.</p> | ||
</Modal>, | ||
); | ||
expect(queryByRole("dialog")).toMatchSnapshot(); | ||
}); | ||
|
||
test("the modal can be closed by clicking the close button", async () => { | ||
function ModalFn(): ReactNode { | ||
const [isOpen, setOpen] = useState(true); | ||
return ( | ||
<Modal title="My modal" open={isOpen} onDismiss={() => setOpen(false)}> | ||
<p>This is the content.</p> | ||
</Modal> | ||
); | ||
} | ||
const user = userEvent.setup(); | ||
const { queryByRole, getByRole } = render(<ModalFn />); | ||
await user.click(getByRole("button", { name: "action.close" })); | ||
expect(queryByRole("dialog")).toBeNull(); | ||
}); | ||
|
||
test("the modal renders as a drawer in mobile viewports", () => { | ||
window.matchMedia = function (query): MediaQueryList { | ||
return { | ||
matches: query.includes("hover: none"), | ||
addEventListener(): MediaQueryList { | ||
return this as MediaQueryList; | ||
}, | ||
removeEventListener(): MediaQueryList { | ||
return this as MediaQueryList; | ||
}, | ||
} as unknown as MediaQueryList; | ||
}; | ||
|
||
const { queryByRole } = render( | ||
<Modal title="My modal" open={true}> | ||
<p>This is the content.</p> | ||
</Modal>, | ||
); | ||
expect(queryByRole("dialog")).toMatchSnapshot(); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html | ||
|
||
exports[`the content is rendered when the modal is open 1`] = ` | ||
<div | ||
aria-labelledby="radix-:r4:" | ||
class="overlay animate modal dialog _glass_1x9g9_17" | ||
data-state="open" | ||
id="radix-:r3:" | ||
role="dialog" | ||
style="pointer-events: auto;" | ||
tabindex="-1" | ||
> | ||
<div | ||
class="content" | ||
> | ||
<div | ||
class="header" | ||
> | ||
<h2 | ||
class="_typography_yh5dq_162 _font-heading-md-semibold_yh5dq_121" | ||
id="radix-:r4:" | ||
> | ||
My modal | ||
</h2> | ||
</div> | ||
<div | ||
class="body" | ||
> | ||
<p> | ||
This is the content. | ||
</p> | ||
</div> | ||
</div> | ||
</div> | ||
`; | ||
|
||
exports[`the modal renders as a drawer in mobile viewports 1`] = ` | ||
<div | ||
aria-labelledby="radix-:ra:" | ||
class="overlay modal drawer" | ||
data-state="open" | ||
id="radix-:r9:" | ||
role="dialog" | ||
style="pointer-events: auto;" | ||
tabindex="-1" | ||
vaul-drawer="" | ||
vaul-drawer-direction="bottom" | ||
vaul-drawer-visible="true" | ||
> | ||
<div | ||
class="content" | ||
> | ||
<div | ||
class="header" | ||
> | ||
<div | ||
class="handle" | ||
/> | ||
<h2 | ||
id="radix-:ra:" | ||
style="position: absolute; border: 0px; width: 1px; height: 1px; padding: 0px; margin: -1px; overflow: hidden; clip: rect(0px, 0px, 0px, 0px); white-space: nowrap; word-wrap: normal;" | ||
> | ||
My modal | ||
</h2> | ||
</div> | ||
<div | ||
class="body" | ||
> | ||
<p> | ||
This is the content. | ||
</p> | ||
</div> | ||
</div> | ||
</div> | ||
`; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters