Skip to content

Commit

Permalink
Added new tests
Browse files Browse the repository at this point in the history
  • Loading branch information
sunilk429 committed Nov 26, 2024
1 parent 7f5e3a2 commit d3c66e7
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 38 deletions.
55 changes: 19 additions & 36 deletions __tests__/tasks/task-dependency.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ describe('Task Form', () => {

// Dev Mode Tests
describe('Dev Mode Behavior', () => {
beforeAll(async () => {
beforeEach(async () => {
await page.goto('http://localhost:8000/task?dev=true');
await page.waitForNetworkIdle();
});
Expand Down Expand Up @@ -190,8 +190,9 @@ describe('Task Form', () => {
await page.click('[data-testid="skills-select-button"]');

// Check if options are loaded
const options = await page.$$eval('[data-testid="option"]', (elements) =>
elements.map((el) => el.textContent.trim()),
const options = await page.$$eval(
'[data-testid="option-label"]',
(elements) => elements.map((el) => el.textContent.trim()),
);

expect(options).toContain('(Select All)');
Expand All @@ -206,41 +207,24 @@ describe('Task Form', () => {
// Open dropdown
await page.click('[data-testid="skills-select-button"]');

// Select a skill
await page.click('[data-testid="option"][data-value="1"]');
// Select JavaScript skill
await page.click('[data-value="1"]');

// Check if badge is created
const badge = await page.$eval(
'[data-testid="badge"] .text',
'[data-testid="selected-items"] .badge .text',
(el) => el.textContent,
);
expect(badge).toBe('JavaScript');

// Remove skill
await page.click('[data-testid="badge"] .remove');
await page.click('.badge .remove');

// Check if badge is removed
const badges = await page.$$('.badge');
expect(badges.length).toBe(0);
});

it('should filter options based on search input', async () => {
await page.waitForSelector('[data-testid="skills-multi-select"]');

// Open dropdown
await page.click('[data-testid="skills-select-button"]');

// Enter a search term
await page.type('[data-testid="search-input"]', 'React');

// Verify only matching options are shown
const options = await page.$$eval('[data-testid="option"]', (elements) =>
elements.map((el) => el.textContent.trim()),
);

expect(options).toEqual(['React']);
});

it('should allow selecting all skills with (Select All)', async () => {
await page.waitForSelector('[data-testid="skills-multi-select"]');

Expand All @@ -251,31 +235,30 @@ describe('Task Form', () => {
await page.click('[data-testid="option"][data-value="select-all"]');

// Check if all skills are selected as badges
const badges = await page.$$eval('[data-testid="badge"]', (elements) =>
elements.map((el) => el.textContent.trim()),
const badges = await page.$$eval(
'[data-testid="selected-items"] .badge .text',
(elements) => elements.map((el) => el.textContent.trim()),
);
expect(badges).toEqual(['JavaScript', 'React', 'Node.js']);
});

it('should allow navigating and selecting options using the keyboard', async () => {
await page.waitForSelector('[data-testid="skills-multi-select"]');

// Focus on the multi-select button
await page.focus('[data-testid="skills-select-button"]');

// Open the dropdown using Enter key
await page.keyboard.press('Enter');
// Open dropdown
await page.click('[data-testid="skills-select-button"]');

// Navigate and select an option using Arrow keys
// Navigate and select an option
await page.keyboard.press('ArrowDown');
await page.keyboard.press('ArrowDown');
await page.keyboard.press('Enter');

// Verify badge is created
const badge = await page.$eval(
'[data-testid="badge-text"]',
(el) => el.textContent,
const badges = await page.$$eval(
'[data-testid="selected-items"] .badge .text',
(elements) => elements.map((el) => el.textContent.trim()),
);
expect(badge).toBe('JavaScript');
expect(badges).toContain('JavaScript');
});
});
});
4 changes: 2 additions & 2 deletions task/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,8 @@ class MultiSelect {
optionElement.className = 'option';
optionElement.dataset.value = option.value;
optionElement.innerHTML = `
<span class="option-label">${option.label}</span>
<span class="checkbox"></span>
<span class="option-label" data-testid="option-label">${option.label}</span>
<span class="checkbox" data-testid="option-checkbox"></span>
`;
this.optionsList.appendChild(optionElement);
});
Expand Down

0 comments on commit d3c66e7

Please sign in to comment.