import React from 'react'; import { cleanup, render, screen, fireEvent, waitFor, } from '@testing-library/react'; import { expect } from 'chai'; import sinon from 'sinon'; import Connecting from './connecting'; const oidcUrlText = 'Visit the following URL to complete authentication'; describe('Connecting Component', function () { let onCancelConnectionClickedSpy; beforeEach(function () { onCancelConnectionClickedSpy = sinon.spy(); }); before(function () { sinon.replace(window, 'requestAnimationFrame', () => 0); sinon.replace(window, 'cancelAnimationFrame', () => 0); }); afterEach(function () { // Modals can have delays and transitions so it's best to cleanup. cleanup(); }); after(function () { sinon.restore(); }); describe('when there is a connection attempt in progress', function () { beforeEach(function () { render( ); }); it('shows the connecting background overlay', function () { expect(screen.queryByTestId('connecting-background-svg')).to.be.visible; }); it('does not show the connecting modal yet', function () { expect(screen.queryByText('Cancel')).to.not.exist; }); describe('after a slight delay', function () { beforeEach(async function () { await waitFor(() => { return screen.getByText('Cancel'); }); }); it('shows the connecting modal', function () { expect(screen.getByText('Cancel')).to.be.visible; expect( screen.getByTestId('connecting-modal-content').textContent ).to.not.include(oidcUrlText); }); describe('when the cancel button is clicked', function () { beforeEach(function () { expect(onCancelConnectionClickedSpy.called).to.equal(false); const cancelButton = screen.getByText('Cancel'); fireEvent.click(cancelButton); }); it('calls onCancelConnectionClicked', function () { expect(onCancelConnectionClickedSpy.called).to.equal(true); }); }); }); }); describe('when there is an oidc device auth code and url', function () { beforeEach(async function () { render( ); await waitFor(() => { return screen.getByText('Cancel'); }); }); it('shows the url', function () { expect( screen.getByTestId('connecting-modal-content').textContent ).to.include(oidcUrlText); expect( screen.getByTestId('connecting-modal-content').textContent ).to.include('https://localhost:27097'); }); }); });