1
1
import { render , waitFor , within } from "@/lib/test-utils" ;
2
- import { test , expect } from "vitest" ;
2
+ import { test , expect , vi } from "vitest" ;
3
+ import userEvent from "@testing-library/user-event" ;
3
4
import { RouteWorkspace } from "../route-workspace" ;
4
5
6
+ const mockNavigate = vi . fn ( ) ;
7
+
5
8
const renderComponent = ( ) =>
6
9
render ( < RouteWorkspace /> , {
7
10
routeConfig : {
@@ -24,6 +27,17 @@ vi.mock("@monaco-editor/react", () => {
24
27
return { default : FakeEditor } ;
25
28
} ) ;
26
29
30
+ vi . mock ( "react-router-dom" , async ( ) => {
31
+ const original =
32
+ await vi . importActual < typeof import ( "react-router-dom" ) > (
33
+ "react-router-dom" ,
34
+ ) ;
35
+ return {
36
+ ...original ,
37
+ useNavigate : ( ) => mockNavigate ,
38
+ } ;
39
+ } ) ;
40
+
27
41
test ( "renders title" , ( ) => {
28
42
const { getByRole } = renderComponent ( ) ;
29
43
@@ -59,3 +73,19 @@ test("has breadcrumbs", () => {
59
73
) . toHaveAttribute ( "href" , "/workspaces" ) ;
60
74
expect ( within ( breadcrumbs ) . getByText ( / w o r k s p a c e s e t t i n g s / i) ) . toBeVisible ( ) ;
61
75
} ) ;
76
+
77
+ test ( "rename workspace" , async ( ) => {
78
+ const { getByRole, getByTestId } = renderComponent ( ) ;
79
+
80
+ const workspaceName = getByRole ( "textbox" , {
81
+ name : / w o r k s p a c e n a m e / i,
82
+ } ) ;
83
+ await userEvent . type ( workspaceName , "_renamed" ) ;
84
+
85
+ const saveBtn = within ( getByTestId ( "workspace-name" ) ) . getByRole ( "button" , {
86
+ name : / s a v e / i,
87
+ } ) ;
88
+ await userEvent . click ( saveBtn ) ;
89
+ await waitFor ( ( ) => expect ( mockNavigate ) . toHaveBeenCalledTimes ( 1 ) ) ;
90
+ expect ( mockNavigate ) . toHaveBeenCalledWith ( "/workspace/foo_renamed" ) ;
91
+ } ) ;
0 commit comments