import React from 'react';
import { render, screen, cleanup } from '@testing-library/react';
import { expect } from 'chai';
import sinon from 'sinon';
import { Tab } from './tab';
describe('Tab', function () {
let onCloseSpy: sinon.SinonSpy;
let onSelectSpy: sinon.SinonSpy;
beforeEach(function () {
onCloseSpy = sinon.spy();
onSelectSpy = sinon.spy();
});
afterEach(cleanup);
describe('when rendered selected', function () {
beforeEach(function () {
render(
);
});
it('should render the subtitle', async function () {
expect(await screen.findByText('test.collection')).to.be.visible;
});
it('should render the title', async function () {
expect(await screen.findByText('docs')).to.be.visible;
});
it('should render the icon', async function () {
expect(await screen.findByTestId('workspace-tab-icon-Folder')).to.be
.visible;
});
it('should render the close tab button visible', async function () {
expect(await screen.findByLabelText('Close Tab')).to.be.visible;
});
it('should call "onClose" when the close button is clicked', async function () {
expect(onCloseSpy.callCount).to.equal(0);
const closeTabButton = await screen.findByLabelText('Close Tab');
closeTabButton.click();
expect(onCloseSpy.callCount).to.equal(1);
});
it('should call "onSelect" when the tab is clicked', async function () {
expect(onSelectSpy.callCount).to.equal(0);
const tabContent = await screen.findByText('test.collection');
tabContent.click();
expect(onSelectSpy.callCount).to.equal(1);
});
});
describe('when rendered', function () {
beforeEach(function () {
render(
);
});
it('should render the close tab button hidden', async function () {
expect(await screen.findByLabelText('Close Tab')).to.not.be.visible;
});
// Focus visible is not working proper in jsdom environment
it.skip('should render the close tab button visible when the tab is focused', async function () {
const tabToFocus = await screen.findByRole('tab');
tabToFocus.focus();
expect(await screen.findByLabelText('Close Tab')).to.be.visible;
});
});
});