1
1
import { renderHook } from "@testing-library/react" ;
2
- import { resourceOptionId , useResourcesNav } from "./useResourcesNav" ;
2
+ import { resourceOptionValue , useResourcesNav } from "./useResourcesNav" ;
3
3
import { WorkspaceResource } from "api/typesGenerated" ;
4
4
import { MockWorkspaceResource } from "testHelpers/entities" ;
5
5
import { RouterProvider , createMemoryRouter } from "react-router-dom" ;
@@ -20,27 +20,9 @@ describe("useResourcesNav", () => {
20
20
/>
21
21
) ,
22
22
} ) ;
23
- expect ( result . current . selected ?. id ) . toBe ( MockWorkspaceResource . id ) ;
24
- } ) ;
25
-
26
- it ( "selects the first resource if it has agents and selected resource is not find" , async ( ) => {
27
- const resources : WorkspaceResource [ ] = [
28
- MockWorkspaceResource ,
29
- {
30
- ...MockWorkspaceResource ,
31
- agents : [ ] ,
32
- } ,
33
- ] ;
34
- const { result } = renderHook ( ( ) => useResourcesNav ( resources ) , {
35
- wrapper : ( { children } ) => (
36
- < RouterProvider
37
- router = { createMemoryRouter ( [ { path : "/" , element : children } ] , {
38
- initialEntries : [ "/?resources=not_found_resource_id" ] ,
39
- } ) }
40
- />
41
- ) ,
42
- } ) ;
43
- expect ( result . current . selected ?. id ) . toBe ( MockWorkspaceResource . id ) ;
23
+ expect ( result . current . value ) . toBe (
24
+ resourceOptionValue ( MockWorkspaceResource ) ,
25
+ ) ;
44
26
} ) ;
45
27
46
28
it ( "selects the resource passed in the URL" , ( ) => {
@@ -66,12 +48,14 @@ describe("useResourcesNav", () => {
66
48
wrapper : ( { children } ) => (
67
49
< RouterProvider
68
50
router = { createMemoryRouter ( [ { path : "/" , element : children } ] , {
69
- initialEntries : [ `/?resources=${ resourceOptionId ( resources [ 1 ] ) } ` ] ,
51
+ initialEntries : [
52
+ `/?resources=${ resourceOptionValue ( resources [ 1 ] ) } ` ,
53
+ ] ,
70
54
} ) }
71
55
/>
72
56
) ,
73
57
} ) ;
74
- expect ( result . current . selected ?. id ) . toBe ( resources [ 1 ] . id ) ;
58
+ expect ( result . current . value ) . toBe ( resourceOptionValue ( resources [ 1 ] ) ) ;
75
59
} ) ;
76
60
77
61
it ( "selects a resource when resources are updated" , ( ) => {
@@ -104,7 +88,7 @@ describe("useResourcesNav", () => {
104
88
initialProps : { resources : startedResources } ,
105
89
} ,
106
90
) ;
107
- expect ( result . current . selected ?. id ) . toBe ( startedResources [ 0 ] . id ) ;
91
+ expect ( result . current . value ) . toBe ( resourceOptionValue ( startedResources [ 0 ] ) ) ;
108
92
109
93
// When a workspace is stopped, there are no resources with agents, so we
110
94
// need to retain the currently selected resource. This ensures consistency
@@ -121,12 +105,46 @@ describe("useResourcesNav", () => {
121
105
} ,
122
106
] ;
123
107
rerender ( { resources : stoppedResources } ) ;
124
- expect ( result . current . selectedValue ) . toBe (
125
- resourceOptionId ( startedResources [ 0 ] ) ,
126
- ) ;
108
+ expect ( result . current . value ) . toBe ( resourceOptionValue ( startedResources [ 0 ] ) ) ;
127
109
128
110
// When a workspace is started again a resource is selected
129
111
rerender ( { resources : startedResources } ) ;
130
- expect ( result . current . selected ?. id ) . toBe ( startedResources [ 0 ] . id ) ;
112
+ expect ( result . current . value ) . toBe ( resourceOptionValue ( startedResources [ 0 ] ) ) ;
113
+ } ) ;
114
+
115
+ // This happens when a new workspace is created and there are no resources
116
+ it ( "selects a resource when resources are not defined previously" , ( ) => {
117
+ const startingResources : WorkspaceResource [ ] = [ ] ;
118
+ const { result, rerender } = renderHook (
119
+ ( { resources } ) => useResourcesNav ( resources ) ,
120
+ {
121
+ wrapper : ( { children } ) => (
122
+ < RouterProvider
123
+ router = { createMemoryRouter ( [ { path : "/" , element : children } ] ) }
124
+ />
125
+ ) ,
126
+ initialProps : { resources : startingResources } ,
127
+ } ,
128
+ ) ;
129
+ const startedResources : WorkspaceResource [ ] = [
130
+ {
131
+ ...MockWorkspaceResource ,
132
+ type : "docker_container" ,
133
+ name : "coder_python" ,
134
+ } ,
135
+ {
136
+ ...MockWorkspaceResource ,
137
+ type : "docker_container" ,
138
+ name : "coder_java" ,
139
+ } ,
140
+ {
141
+ ...MockWorkspaceResource ,
142
+ type : "docker_image" ,
143
+ name : "coder_image_python" ,
144
+ agents : [ ] ,
145
+ } ,
146
+ ] ;
147
+ rerender ( { resources : startedResources } ) ;
148
+ expect ( result . current . value ) . toBe ( resourceOptionValue ( startedResources [ 0 ] ) ) ;
131
149
} ) ;
132
150
} ) ;
0 commit comments