mirror of
https://github.com/Choices-js/Choices.git
synced 2026-03-15 23:25:45 +01:00
213 lines
8.3 KiB
TypeScript
213 lines
8.3 KiB
TypeScript
import { expect } from '@playwright/test';
|
|
import { test } from '../bundle-test';
|
|
import { SelectTestSuit } from '../select-test-suit';
|
|
|
|
const { describe } = test;
|
|
|
|
const testUrl = '/test/select-multiple/index-performance.html';
|
|
|
|
describe(`Choices - select multiple (performance tests)`, () => {
|
|
// test.setTimeout(30000);
|
|
|
|
describe('scenarios', () => {
|
|
describe('basic', () => {
|
|
const testId = 'basic';
|
|
const inputValue = 'test';
|
|
|
|
describe('focusing on container', () => {
|
|
describe('pressing enter key', () => {
|
|
test('toggles the dropdown', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
await suite.start();
|
|
await suite.wrapper.focus();
|
|
await suite.enterKey();
|
|
await suite.expectVisibleDropdown();
|
|
await suite.escapeKey();
|
|
await suite.expectHiddenDropdown();
|
|
});
|
|
});
|
|
|
|
describe('pressing an alpha-numeric key', () => {
|
|
test('opens the dropdown and the input value', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
await suite.start();
|
|
await suite.selectByKeyPress(inputValue);
|
|
await expect(suite.input).toHaveValue(inputValue);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('selecting choices', () => {
|
|
const selectedChoiceText = 'Choice 1$';
|
|
|
|
test('allows selecting choices from dropdown', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
await suite.startWithClick();
|
|
|
|
await suite.choices.first().click();
|
|
await expect(suite.items.last()).toHaveText(selectedChoiceText);
|
|
});
|
|
|
|
test('remove selected choice from dropdown list', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
await suite.startWithClick();
|
|
|
|
await suite.choices.first().click();
|
|
await expect(suite.choices.first()).not.toHaveText(selectedChoiceText);
|
|
await expect(suite.items.last()).toHaveText(selectedChoiceText);
|
|
});
|
|
|
|
test('multiple choices', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
await suite.startWithClick();
|
|
|
|
await suite.expectedItemCount(1000);
|
|
await suite.expectChoiceCount(1000);
|
|
await suite.expectVisibleDropdown();
|
|
|
|
await suite.getChoiceWithText('Choice 1$').click();
|
|
await suite.expectedItemCount(1001);
|
|
await suite.expectChoiceCount(999);
|
|
await suite.expectVisibleDropdown();
|
|
|
|
await suite.getChoiceWithText('Choice 3$').click();
|
|
await suite.expectedItemCount(1002);
|
|
await suite.expectChoiceCount(998);
|
|
await suite.expectVisibleDropdown();
|
|
});
|
|
|
|
/* This test is unreasonably slow due to selecting over a thousand items...
|
|
describe('slowly', () => {
|
|
test.setTimeout(60000);
|
|
test('all available choices', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
await suite.startWithClick();
|
|
|
|
const itemCount = await suite.items.count();
|
|
const count = await suite.choices.count();
|
|
|
|
for (let i = 1; i < count + 1; i++) {
|
|
await suite.expectVisibleDropdown();
|
|
await suite.getChoiceWithText(`Choice ${i * 2 - 1}$`).click();
|
|
await suite.advanceClock();
|
|
await suite.expectedItemCount(itemCount + i);
|
|
await expect(suite.selectableChoices).toHaveCount(count - i);
|
|
}
|
|
|
|
await suite.expectVisibleNoticeHtml('No choices to choose from', true)
|
|
});
|
|
});
|
|
*/
|
|
});
|
|
|
|
describe('keys for choice', () => {
|
|
test('up/down arrows for selection', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
await suite.startWithClick();
|
|
|
|
await suite.input.press('ArrowDown');
|
|
await expect(suite.choices.first()).not.toHaveClass(/is-highlighted/);
|
|
await expect(suite.choices.nth(1)).toHaveClass(/is-highlighted/);
|
|
|
|
await suite.input.press('ArrowUp');
|
|
await expect(suite.choices.first()).toHaveClass(/is-highlighted/);
|
|
await expect(suite.choices.nth(1)).not.toHaveClass(/is-highlighted/);
|
|
});
|
|
|
|
test('page-up/page-down arrows for selection', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
await suite.startWithClick();
|
|
|
|
await suite.input.press('PageDown');
|
|
await expect(suite.choices.first()).not.toHaveClass(/is-highlighted/);
|
|
await expect(suite.choices.last()).toHaveClass(/is-highlighted/);
|
|
|
|
await suite.input.press('PageUp');
|
|
await expect(suite.choices.first()).toHaveClass(/is-highlighted/);
|
|
await expect(suite.choices.last()).not.toHaveClass(/is-highlighted/);
|
|
});
|
|
});
|
|
|
|
describe('searching choices', () => {
|
|
describe('on input', () => {
|
|
describe('searching by label', () => {
|
|
test('displays choices filtered by inputted value', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
await suite.startWithClick();
|
|
await suite.typeText('item2');
|
|
|
|
await suite.expectVisibleDropdownWithItem('Choice 2');
|
|
});
|
|
});
|
|
|
|
describe('searching by value', () => {
|
|
test('displays choices filtered by inputted value - by character', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
const searchTerm = 'Choice 3';
|
|
await suite.startWithClick();
|
|
for (const t of [...searchTerm]) {
|
|
await suite.typeText(t);
|
|
}
|
|
// await suite.typeText(searchTerm);
|
|
|
|
await suite.expectVisibleDropdownWithItem(searchTerm);
|
|
});
|
|
|
|
test('displays choices filtered by inputted value - by phrase', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
const searchTerm = 'Choice 3';
|
|
await suite.startWithClick();
|
|
await suite.typeText(searchTerm);
|
|
|
|
await suite.expectVisibleDropdownWithItem(searchTerm);
|
|
});
|
|
});
|
|
|
|
describe('no results found', () => {
|
|
test('displays "no results found" prompt', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
await suite.startWithClick();
|
|
await suite.typeText('faergge');
|
|
|
|
await suite.expectVisibleNoticeHtml('No results found', true);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('disabling', () => {
|
|
describe('on disable', () => {
|
|
test('disables the search input', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
await suite.startWithClick();
|
|
await suite.group.locator('button.disable').click();
|
|
await expect(suite.wrapper).toBeDisabled();
|
|
await expect(suite.input).toBeDisabled();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('enabling', () => {
|
|
describe('on enable', () => {
|
|
test('enables the search input', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
await suite.startWithClick();
|
|
await suite.group.locator('button.disable').click();
|
|
await suite.group.locator('button.enable').click();
|
|
await expect(suite.wrapper).toBeEnabled();
|
|
await expect(suite.input).toBeEnabled();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('setting options', () => {
|
|
test.setTimeout(30000);
|
|
test('setChoices', async ({ page, bundle }) => {
|
|
const suite = new SelectTestSuit(page, bundle, testUrl, testId);
|
|
await suite.startWithClick();
|
|
await suite.group.locator('button.setChoices').click();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|