@@ -2,9 +2,13 @@ const puppeteer = require('puppeteer');
2
2
const { tags } = require ( '../../mock-data/tags' ) ;
3
3
const { levels } = require ( '../../mock-data/levels' ) ;
4
4
const { users } = require ( '../../mock-data/users' ) ;
5
- const { STAGING_API_URL } = require ( '../../mock-data/constants' ) ;
5
+ const {
6
+ STAGING_API_URL ,
7
+ SKILL_TREE_BACKEND_BASE_URL ,
8
+ } = require ( '../../mock-data/constants' ) ;
9
+ const { skills } = require ( '../../mock-data/skills' ) ;
6
10
7
- describe ( 'Input box ' , ( ) => {
11
+ describe ( 'Task Form ' , ( ) => {
8
12
let browser ;
9
13
let page ;
10
14
jest . setTimeout ( 60000 ) ;
@@ -27,6 +31,7 @@ describe('Input box', () => {
27
31
[ `${ STAGING_API_URL } /levels` ] : levels ,
28
32
[ `${ STAGING_API_URL } /users` ] : users ,
29
33
[ `${ STAGING_API_URL } /tags` ] : tags ,
34
+ [ `${ SKILL_TREE_BACKEND_BASE_URL } /skills` ] : skills ,
30
35
} ;
31
36
32
37
if ( mockResponses [ url ] ) {
@@ -136,7 +141,7 @@ describe('Input box', () => {
136
141
137
142
// Dev Mode Tests
138
143
describe ( 'Dev Mode Behavior' , ( ) => {
139
- beforeAll ( async ( ) => {
144
+ beforeEach ( async ( ) => {
140
145
await page . goto ( 'http://localhost:8000/task?dev=true' ) ;
141
146
await page . waitForNetworkIdle ( ) ;
142
147
} ) ;
@@ -172,5 +177,92 @@ describe('Input box', () => {
172
177
const dependsOnField = await page . $ ( '[data-testid="dependsOn"]' ) ;
173
178
expect ( dependsOnField ) . toBeTruthy ( ) ;
174
179
} ) ;
180
+
181
+ it ( 'should show skills multi-select component' , async ( ) => {
182
+ const skillsComponent = await page . $eval (
183
+ '[data-testid="skills"] .multi-select-container' ,
184
+ ( el ) =>
185
+ window . getComputedStyle ( el . closest ( '[data-testid="skills"]' ) ) . display ,
186
+ ) ;
187
+ expect ( skillsComponent ) . not . toBe ( 'none' ) ;
188
+ } ) ;
189
+
190
+ it ( 'should initialize skills multi-select with options' , async ( ) => {
191
+ await page . waitForSelector ( '[data-testid="skills-multi-select"]' ) ;
192
+
193
+ // Click to open dropdown
194
+ await page . click ( '[data-testid="skills-select-button"]' ) ;
195
+
196
+ // Check if options are loaded
197
+ const options = await page . $$eval (
198
+ '[data-testid="option-label"]' ,
199
+ ( elements ) => elements . map ( ( el ) => el . textContent . trim ( ) ) ,
200
+ ) ;
201
+
202
+ expect ( options ) . toContain ( '(Select All)' ) ;
203
+ expect ( options ) . toContain ( 'JavaScript' ) ;
204
+ expect ( options ) . toContain ( 'React' ) ;
205
+ expect ( options ) . toContain ( 'Node.js' ) ;
206
+ } ) ;
207
+
208
+ it ( 'should allow selecting and deselecting skills' , async ( ) => {
209
+ await page . waitForSelector ( '[data-testid="skills-multi-select"]' ) ;
210
+
211
+ // Open dropdown
212
+ await page . click ( '[data-testid="skills-select-button"]' ) ;
213
+
214
+ // Select JavaScript skill
215
+ await page . click ( '[data-value="1"]' ) ;
216
+
217
+ // Check if badge is created
218
+ const badge = await page . $eval (
219
+ '[data-testid="selected-items"] .badge .text' ,
220
+ ( el ) => el . textContent ,
221
+ ) ;
222
+ expect ( badge ) . toBe ( 'JavaScript' ) ;
223
+
224
+ // Remove skill
225
+ await page . click ( '.badge .remove' ) ;
226
+
227
+ // Check if badge is removed
228
+ const badges = await page . $$ ( '.badge' ) ;
229
+ expect ( badges . length ) . toBe ( 0 ) ;
230
+ } ) ;
231
+
232
+ it ( 'should allow selecting all skills with (Select All)' , async ( ) => {
233
+ await page . waitForSelector ( '[data-testid="skills-multi-select"]' ) ;
234
+
235
+ // Open dropdown
236
+ await page . click ( '[data-testid="skills-select-button"]' ) ;
237
+
238
+ // Click (Select All)
239
+ await page . click ( '[data-testid="option"][data-value="select-all"]' ) ;
240
+
241
+ // Check if all skills are selected as badges
242
+ const badges = await page . $$eval (
243
+ '[data-testid="selected-items"] .badge .text' ,
244
+ ( elements ) => elements . map ( ( el ) => el . textContent . trim ( ) ) ,
245
+ ) ;
246
+ expect ( badges ) . toEqual ( [ 'JavaScript' , 'React' , 'Node.js' ] ) ;
247
+ } ) ;
248
+
249
+ it ( 'should allow navigating and selecting options using the keyboard' , async ( ) => {
250
+ await page . waitForSelector ( '[data-testid="skills-multi-select"]' ) ;
251
+
252
+ // Open dropdown
253
+ await page . click ( '[data-testid="skills-select-button"]' ) ;
254
+
255
+ // Navigate and select an option
256
+ await page . keyboard . press ( 'ArrowDown' ) ;
257
+ await page . keyboard . press ( 'ArrowDown' ) ;
258
+ await page . keyboard . press ( 'Enter' ) ;
259
+
260
+ // Verify badge is created
261
+ const badges = await page . $$eval (
262
+ '[data-testid="selected-items"] .badge .text' ,
263
+ ( elements ) => elements . map ( ( el ) => el . textContent . trim ( ) ) ,
264
+ ) ;
265
+ expect ( badges ) . toContain ( 'JavaScript' ) ;
266
+ } ) ;
175
267
} ) ;
176
268
} ) ;
0 commit comments