// eslint-disable-next-line @typescript-eslint/triple-slash-reference
///
/* eslint-disable no-undef */
import { ZuiSelectElement } from '@zywave/zui-select';
import { assert } from '@esm-bundle/chai';
import { randString } from '@zywave/../../test/src/util/helpers';
import { faceTests } from '../../../../test/src/util/face-tests';
import type { ZuiOptionElement } from '@zywave/zui-select';
suite('zui-select', () => {
let element: ZuiSelectElement;
setup(() => {
element = document.createElement('zui-select') as ZuiSelectElement;
document.body.appendChild(element);
});
teardown(() => {
document.body.removeChild(element);
});
test('initializes as a ZuiSelectElement', () => {
assert.instanceOf(element, ZuiSelectElement);
});
// TODO(pat) zui-select should be more aligned with native select, where options support a [selected] attribute
test.skip('select respects option marked as selected', async () => {
const options: ZuiOptionElement[] = [];
for (let i = 0; i < 5; i++) {
const option = document.createElement('zui-option') as ZuiOptionElement;
option.value = randString();
options.push(option);
element.appendChild(option);
}
const randIndex = Math.floor(Math.random() * options.length);
const randOption = options[randIndex];
randOption.setAttribute('selected', '');
await element.updateComplete;
assert.equal(element.value, randOption.value);
});
test('select with value specified properly marks option as selected', async () => {
const options: ZuiOptionElement[] = [];
for (let i = 0; i < 5; i++) {
const option = document.createElement('zui-option') as ZuiOptionElement;
option.value = randString();
options.push(option);
element.appendChild(option);
}
const randIndex = Math.floor(Math.random() * options.length);
const randOption = options[randIndex];
element.setAttribute('value', randOption.value!);
await element.updateComplete;
assert.equal(element.value, randOption.value);
const option = element.shadowRoot?.querySelector(`option[value='${randOption.value}'][selected]`);
assert.exists(option);
});
});
const initialValue = randString();
faceTests('zui-select', {
defaultValue: initialValue,
valueAccessor(element) {
return element.value;
},
preConfigure(element) {
element.setAttribute('value', initialValue);
const selectedOption = document.createElement('zui-option');
selectedOption.setAttribute('value', initialValue);
element.appendChild(selectedOption);
const otherOption = document.createElement('zui-option');
otherOption.setAttribute('value', randString());
element.appendChild(otherOption);
},
});