@@ -10,7 +10,8 @@ import LearningResourceDrawerV2 from "./LearningResourceDrawerV2"
10
10
import { urls , factories , setMockResponse } from "api/test-utils"
11
11
import { LearningResourceExpandedV2 } from "ol-components"
12
12
import { RESOURCE_DRAWER_QUERY_PARAM } from "@/common/urls"
13
- import { ResourceTypeEnum } from "api"
13
+ import { CourseResource , LearningResource , ResourceTypeEnum } from "api"
14
+ import { ControlledPromise } from "ol-test-utilities"
14
15
15
16
jest . mock ( "ol-components" , ( ) => {
16
17
const actual = jest . requireActual ( "ol-components" )
@@ -20,6 +21,22 @@ jest.mock("ol-components", () => {
20
21
}
21
22
} )
22
23
24
+ const makeSearchResponse = ( results : CourseResource [ ] | LearningResource [ ] ) => {
25
+ const responseData = {
26
+ metadata : {
27
+ suggestions : [ ] ,
28
+ aggregations : { } ,
29
+ } ,
30
+ count : results . length ,
31
+ results : results ,
32
+ next : null ,
33
+ previous : null ,
34
+ }
35
+ const promise = new ControlledPromise ( )
36
+ promise . resolve ( responseData )
37
+ return responseData
38
+ }
39
+
23
40
const mockedPostHogCapture = jest . fn ( )
24
41
25
42
jest . mock ( "posthog-js/react" , ( ) => ( {
@@ -32,6 +49,52 @@ jest.mock("posthog-js/react", () => ({
32
49
} ,
33
50
} ) )
34
51
52
+ const setupApis = ( resource : LearningResource ) => {
53
+ setMockResponse . get (
54
+ urls . learningResources . details ( { id : resource . id } ) ,
55
+ resource ,
56
+ )
57
+ const count = 10
58
+ const similarResources = factories . learningResources . resources ( {
59
+ count,
60
+ } ) . results
61
+ setMockResponse . get ( urls . userMe . get ( ) , null , { code : 403 } )
62
+ setMockResponse . get (
63
+ urls . learningResources . details ( { id : resource . id } ) ,
64
+ resource ,
65
+ )
66
+ setMockResponse . get (
67
+ urls . learningResources . vectorSimilar ( { id : resource . id } ) ,
68
+ similarResources ,
69
+ )
70
+ const topicsCourses : CourseResource [ ] = [ ]
71
+ resource . topics ?. forEach ( ( topic ) => {
72
+ const topicCourses = factories . learningResources . courses ( { count : 10 } )
73
+ topicCourses . results . map ( ( course ) => {
74
+ course . topics = [ factories . learningResources . topic ( { name : topic . name } ) ]
75
+ } )
76
+ topicsCourses . push ( ...topicCourses . results )
77
+ } )
78
+ resource . topics ?. forEach ( ( topic ) => {
79
+ setMockResponse . get (
80
+ expect . stringContaining (
81
+ urls . search . resources ( {
82
+ limit : 12 ,
83
+ resource_type : [ "course" ] ,
84
+ sortby : "-views" ,
85
+ topic : [ topic . name ] ,
86
+ } ) ,
87
+ ) ,
88
+ makeSearchResponse (
89
+ topicsCourses . filter (
90
+ ( course ) => course . topics ?. [ 0 ] . name === topic . name ,
91
+ ) ,
92
+ ) ,
93
+ )
94
+ } )
95
+ return { resource, similarResources }
96
+ }
97
+
35
98
describe ( "LearningResourceDrawerV2" , ( ) => {
36
99
it . each ( [
37
100
{ descriptor : "is enabled" , enablePostHog : true } ,
@@ -46,18 +109,7 @@ describe("LearningResourceDrawerV2", () => {
46
109
? "12345abcdef" // pragma: allowlist secret
47
110
: ""
48
111
const resource = factories . learningResources . resource ( )
49
- setMockResponse . get (
50
- urls . learningResources . details ( { id : resource . id } ) ,
51
- resource ,
52
- )
53
- setMockResponse . get (
54
- urls . learningResources . similar ( { id : resource . id } ) ,
55
- [ ] ,
56
- )
57
- setMockResponse . get (
58
- urls . learningResources . vectorSimilar ( { id : resource . id } ) ,
59
- [ ] ,
60
- )
112
+ setupApis ( resource )
61
113
62
114
renderWithProviders ( < LearningResourceDrawerV2 /> , {
63
115
url : `?dog=woof&${ RESOURCE_DRAWER_QUERY_PARAM } =${ resource . id } ` ,
@@ -114,18 +166,7 @@ describe("LearningResourceDrawerV2", () => {
114
166
} ) ,
115
167
] ,
116
168
} )
117
- setMockResponse . get (
118
- urls . learningResources . details ( { id : resource . id } ) ,
119
- resource ,
120
- )
121
- setMockResponse . get (
122
- urls . learningResources . similar ( { id : resource . id } ) ,
123
- [ ] ,
124
- )
125
- setMockResponse . get (
126
- urls . learningResources . vectorSimilar ( { id : resource . id } ) ,
127
- [ ] ,
128
- )
169
+ setupApis ( resource )
129
170
const user = factories . user . user ( {
130
171
is_learning_path_editor : isLearningPathEditor ,
131
172
} )
@@ -169,19 +210,7 @@ describe("LearningResourceDrawerV2", () => {
169
210
} ) ,
170
211
] ,
171
212
} )
172
- const count = 10
173
- const similarResources = factories . learningResources . resources ( {
174
- count,
175
- } ) . results
176
- setMockResponse . get ( urls . userMe . get ( ) , null , { code : 403 } )
177
- setMockResponse . get (
178
- urls . learningResources . details ( { id : resource . id } ) ,
179
- resource ,
180
- )
181
- setMockResponse . get (
182
- urls . learningResources . vectorSimilar ( { id : resource . id } ) ,
183
- similarResources ,
184
- )
213
+ const { similarResources } = setupApis ( resource )
185
214
renderWithProviders ( < LearningResourceDrawerV2 /> , {
186
215
url : `?resource=${ resource . id } ` ,
187
216
} )
0 commit comments