),
disabled: false,
className: ''
},
{
id: '4',
name: 'Websocket',
prefix: '',
postfix: '',
disabled: true,
className: ''
}
]
},
{
id: '5',
name: 'Firecamp',
prefix: '',
postfix: '',
disabled: false,
className: ''
}
] as any
};
const DropDownDemo = (args: any) => {
let [selected, setSelected] = useState('GraphQL')
return (
{
setSelected(item.name || 'oops...')
}} />
)
};
describe("Dropdown component", () => {
test("should render the dropdown list with default selected value", () => {
let { container } = render()
// validate the handler text with default value
let DropdownHandler = container.querySelector(`#${DropDownDemoArgs.handlerId}`);
expect(DropdownHandler.textContent).toBe('GraphQL');
});
test('should display the correct number of options', () => {
let { container } = render()
// validate the handler options text with default value
let DropdownOptions = container.querySelector(`#${DropDownDemoArgs.containerId}`).lastElementChild;
let optionsCount = DropdownOptions.querySelectorAll("li");
//count the total number of list items to be rendered in options
let expectedListComponent = DropDownDemoArgs.options.reduce((total: number, value: any) => {
if (Object.keys(value)?.includes('header')) {
return total + value.list.length + 1; //+1 for the header list item
}
return total + 1;
}, 0);
expect(optionsCount.length).toBe(expectedListComponent)
});
test('should allow user to change the selected option', async () => {
let { container } = render()
let DropdownHandler = container.querySelector(`#${DropDownDemoArgs.handlerId}`) as HTMLElement;
click(DropdownHandler);
// validate the handler optionstext with default value
let DropdownOptions = container.querySelector(`#${DropDownDemoArgs.containerId}`).lastElementChild;
expect(DropdownOptions).toBeVisible();
let ListElementClicked = DropdownOptions.querySelectorAll("li")[2];
click(ListElementClicked);
//handler name updated to the selected list option name & validating prefix & postfix for the option preview
await waitFor(() => {
expect(DropdownHandler.textContent).toBe(DropDownDemoArgs.options[0].list[1].name);
expect(ListElementClicked.textContent).toBe('gqGraphQLComing soon')
});
});
});