@@ -3,19 +3,18 @@ import "jest-canvas-mock"
3
3
import WS from "jest-websocket-mock"
4
4
import { rest } from "msw"
5
5
import {
6
- MockPrimaryWorkspaceProxy ,
7
- MockProxyLatencies ,
6
+ MockUser ,
8
7
MockWorkspace ,
9
8
MockWorkspaceAgent ,
10
- MockWorkspaceProxies ,
11
9
} from "testHelpers/entities"
12
10
import { TextDecoder , TextEncoder } from "util"
13
11
import { ReconnectingPTYRequest } from "../../api/types"
14
- import { history , render } from "../../testHelpers/renderHelpers"
12
+ import {
13
+ renderWithAuth ,
14
+ waitForLoaderToBeRemoved ,
15
+ } from "../../testHelpers/renderHelpers"
15
16
import { server } from "../../testHelpers/server"
16
17
import TerminalPage , { Language } from "./TerminalPage"
17
- import { Route , Routes } from "react-router-dom"
18
- import { ProxyContext } from "contexts/ProxyContext"
19
18
20
19
Object . defineProperty ( window , "matchMedia" , {
21
20
writable : true ,
@@ -35,56 +34,35 @@ Object.defineProperty(window, "TextEncoder", {
35
34
value : TextEncoder ,
36
35
} )
37
36
38
- const renderTerminal = ( ) => {
39
- // @emyrk using renderWithAuth would be best here, but I was unable to get it to work.
40
- return render (
41
- < Routes >
42
- < Route
43
- path = "/:username/:workspace/terminal"
44
- element = {
45
- < ProxyContext . Provider
46
- value = { {
47
- proxyLatencies : MockProxyLatencies ,
48
- proxy : {
49
- proxy : MockPrimaryWorkspaceProxy ,
50
- preferredPathAppURL : "" ,
51
- preferredWildcardHostname : "" ,
52
- } ,
53
- proxies : MockWorkspaceProxies ,
54
- isFetched : true ,
55
- isLoading : false ,
56
- setProxy : jest . fn ( ) ,
57
- clearProxy : jest . fn ( ) ,
58
- refetchProxyLatencies : jest . fn ( ) ,
59
- } }
60
- >
61
- < TerminalPage />
62
- </ ProxyContext . Provider >
63
- }
64
- />
65
- </ Routes > ,
66
- )
37
+ const renderTerminal = async (
38
+ route = `/${ MockUser . username } /${ MockWorkspace . name } /terminal` ,
39
+ ) => {
40
+ const utils = renderWithAuth ( < TerminalPage /> , {
41
+ route,
42
+ path : "/:username/:workspace/terminal" ,
43
+ } )
44
+ await waitForLoaderToBeRemoved ( )
45
+ return utils
67
46
}
68
47
69
48
const expectTerminalText = ( container : HTMLElement , text : string ) => {
70
- return waitFor ( ( ) => {
71
- const elements = container . getElementsByClassName ( "xterm-rows" )
72
- if ( elements . length === 0 ) {
73
- throw new Error ( "no xterm-rows" )
74
- }
75
- const row = elements [ 0 ] as HTMLDivElement
76
- if ( ! row . textContent ) {
77
- throw new Error ( "no text content" )
78
- }
79
- expect ( row . textContent ) . toContain ( text )
80
- } )
49
+ return waitFor (
50
+ ( ) => {
51
+ const elements = container . getElementsByClassName ( "xterm-rows" )
52
+ if ( elements . length === 0 ) {
53
+ throw new Error ( "no xterm-rows" )
54
+ }
55
+ const row = elements [ 0 ] as HTMLDivElement
56
+ if ( ! row . textContent ) {
57
+ throw new Error ( "no text content" )
58
+ }
59
+ expect ( row . textContent ) . toContain ( text )
60
+ } ,
61
+ { timeout : 3_000 } ,
62
+ )
81
63
}
82
64
83
65
describe ( "TerminalPage" , ( ) => {
84
- beforeEach ( ( ) => {
85
- history . push ( `/some-user/${ MockWorkspace . name } /terminal` )
86
- } )
87
-
88
66
it ( "shows an error if fetching workspace fails" , async ( ) => {
89
67
// Given
90
68
server . use (
@@ -97,7 +75,7 @@ describe("TerminalPage", () => {
97
75
)
98
76
99
77
// When
100
- const { container } = renderTerminal ( )
78
+ const { container } = await renderTerminal ( )
101
79
102
80
// Then
103
81
await expectTerminalText ( container , Language . workspaceErrorMessagePrefix )
@@ -112,67 +90,66 @@ describe("TerminalPage", () => {
112
90
)
113
91
114
92
// When
115
- const { container } = renderTerminal ( )
93
+ const { container } = await renderTerminal ( )
116
94
117
95
// Then
118
96
await expectTerminalText ( container , Language . websocketErrorMessagePrefix )
119
97
} )
120
98
121
99
it ( "renders data from the backend" , async ( ) => {
122
100
// Given
123
- const server = new WS (
124
- " ws://localhost/api/v2/workspaceagents/" + MockWorkspaceAgent . id + " /pty" ,
101
+ const ws = new WS (
102
+ ` ws://localhost/api/v2/workspaceagents/${ MockWorkspaceAgent . id } /pty` ,
125
103
)
126
104
const text = "something to render"
127
105
128
106
// When
129
- const { container } = renderTerminal ( )
107
+ const { container } = await renderTerminal ( )
130
108
131
109
// Then
132
- await server . connected
133
- server . send ( text )
110
+ await ws . connected
111
+ ws . send ( text )
134
112
await expectTerminalText ( container , text )
135
- server . close ( )
113
+ ws . close ( )
136
114
} )
137
115
138
116
it ( "resizes on connect" , async ( ) => {
139
117
// Given
140
- const server = new WS (
141
- " ws://localhost/api/v2/workspaceagents/" + MockWorkspaceAgent . id + " /pty" ,
118
+ const ws = new WS (
119
+ ` ws://localhost/api/v2/workspaceagents/${ MockWorkspaceAgent . id } /pty` ,
142
120
)
143
121
144
122
// When
145
- renderTerminal ( )
123
+ await renderTerminal ( )
146
124
147
125
// Then
148
- await server . connected
149
- const msg = await server . nextMessage
126
+ await ws . connected
127
+ const msg = await ws . nextMessage
150
128
const req : ReconnectingPTYRequest = JSON . parse (
151
129
new TextDecoder ( ) . decode ( msg as Uint8Array ) ,
152
130
)
153
131
154
132
expect ( req . height ) . toBeGreaterThan ( 0 )
155
133
expect ( req . width ) . toBeGreaterThan ( 0 )
156
- server . close ( )
134
+ ws . close ( )
157
135
} )
158
136
159
137
it ( "supports workspace.agent syntax" , async ( ) => {
160
138
// Given
161
- const server = new WS (
162
- " ws://localhost/api/v2/workspaceagents/" + MockWorkspaceAgent . id + " /pty" ,
139
+ const ws = new WS (
140
+ ` ws://localhost/api/v2/workspaceagents/${ MockWorkspaceAgent . id } /pty` ,
163
141
)
164
142
const text = "something to render"
165
143
166
144
// When
167
- history . push (
145
+ const { container } = await renderTerminal (
168
146
`/some-user/${ MockWorkspace . name } .${ MockWorkspaceAgent . name } /terminal` ,
169
147
)
170
- const { container } = renderTerminal ( )
171
148
172
149
// Then
173
- await server . connected
174
- server . send ( text )
150
+ await ws . connected
151
+ ws . send ( text )
175
152
await expectTerminalText ( container , text )
176
- server . close ( )
153
+ ws . close ( )
177
154
} )
178
155
} )
0 commit comments