import React from 'react';
import { render, screen, fireEvent, cleanup } from '@testing-library/react';
import { expect } from 'chai';
import sinon from 'sinon';
import ConnectFormActions from './connection-form-actions';
describe('ConnectFormActions Component', function () {
afterEach(cleanup);
describe('Save Button', function () {
describe('with save button hidden', function () {
let onSaveClickedFn: sinon.SinonSpy;
let onSaveAndConnectClickedFn: sinon.SinonSpy;
beforeEach(function () {
onSaveClickedFn = sinon.spy();
onSaveAndConnectClickedFn = sinon.spy();
render(
true}
onSaveClicked={onSaveClickedFn}
onSaveAndConnectClicked={onSaveAndConnectClickedFn}
saveButton="hidden"
saveAndConnectButton="hidden"
showSaveActions
>
);
});
it('should not show the button', function () {
expect(screen.queryByText('Save')).to.throw;
});
});
describe('with save button disabled', function () {
let onSaveClickedFn: sinon.SinonSpy;
let onSaveAndConnectClickedFn: sinon.SinonSpy;
beforeEach(function () {
onSaveClickedFn = sinon.spy();
onSaveAndConnectClickedFn = sinon.spy();
render(
true}
onSaveClicked={onSaveClickedFn}
onSaveAndConnectClicked={onSaveAndConnectClickedFn}
saveButton="disabled"
saveAndConnectButton="hidden"
showSaveActions
>
);
});
it('should show the button', function () {
const saveButton = screen.getByText('Save');
expect(saveButton).to.be.visible;
});
it('should not call onSaveClicked function', function () {
const saveButton = screen.getByText('Save');
fireEvent(
saveButton,
new MouseEvent('click', {
bubbles: true,
cancelable: true,
})
);
expect(onSaveClickedFn.callCount).to.equal(0);
});
});
describe('with save button enabled', function () {
let onSaveClickedFn: sinon.SinonSpy;
let onSaveAndConnectClickedFn: sinon.SinonSpy;
beforeEach(function () {
onSaveClickedFn = sinon.spy();
onSaveAndConnectClickedFn = sinon.spy();
render(
true}
onSaveClicked={onSaveClickedFn}
onSaveAndConnectClicked={onSaveAndConnectClickedFn}
saveButton="enabled"
saveAndConnectButton="hidden"
showSaveActions
>
);
});
it('should show the button', function () {
const saveButton = screen.getByText('Save');
expect(saveButton).to.be.visible;
});
it('should call onSaveClicked function', function () {
const saveButton = screen.getByText('Save');
fireEvent(
saveButton,
new MouseEvent('click', {
bubbles: true,
cancelable: true,
})
);
expect(onSaveClickedFn.callCount).to.equal(1);
});
});
describe('with save and connect button hidden', function () {
let onSaveClickedFn: sinon.SinonSpy;
let onSaveAndConnectClickedFn: sinon.SinonSpy;
beforeEach(function () {
onSaveClickedFn = sinon.spy();
onSaveAndConnectClickedFn = sinon.spy();
render(
true}
onSaveClicked={onSaveClickedFn}
onSaveAndConnectClicked={onSaveAndConnectClickedFn}
saveButton="hidden"
saveAndConnectButton="hidden"
showSaveActions
>
);
});
it('should not show the button', function () {
expect(screen.queryByText('Save & Connect')).to.throw;
});
});
describe('with save and connect button disabled', function () {
let onSaveClickedFn: sinon.SinonSpy;
let onSaveAndConnectClickedFn: sinon.SinonSpy;
beforeEach(function () {
onSaveClickedFn = sinon.spy();
onSaveAndConnectClickedFn = sinon.spy();
render(
true}
onSaveClicked={onSaveClickedFn}
onSaveAndConnectClicked={onSaveAndConnectClickedFn}
saveButton="disabled"
saveAndConnectButton="disabled"
showSaveActions
>
);
});
it('should show the button', function () {
const saveAndConnectButton = screen.getByText('Save & Connect');
expect(saveAndConnectButton).to.be.visible;
});
it('should not call onSaveAndConnectClicked function', function () {
const saveAndConnectButton = screen.getByText('Save & Connect');
fireEvent(
saveAndConnectButton,
new MouseEvent('click', {
bubbles: true,
cancelable: true,
})
);
expect(onSaveAndConnectClickedFn.callCount).to.equal(0);
});
});
describe('with save and connect button enabled', function () {
let onSaveClickedFn: sinon.SinonSpy;
let onSaveAndConnectClickedFn: sinon.SinonSpy;
beforeEach(function () {
onSaveClickedFn = sinon.spy();
onSaveAndConnectClickedFn = sinon.spy();
render(
true}
onSaveClicked={onSaveClickedFn}
onSaveAndConnectClicked={onSaveAndConnectClickedFn}
saveButton="disabled"
saveAndConnectButton="enabled"
showSaveActions
>
);
});
it('should show the button', function () {
const saveAndConnectButton = screen.getByText('Save & Connect');
expect(saveAndConnectButton).to.be.visible;
});
it('should call onSaveAndConnectClicked function', function () {
const saveAndConnectButton = screen.getByText('Save & Connect');
fireEvent(
saveAndConnectButton,
new MouseEvent('click', {
bubbles: true,
cancelable: true,
})
);
expect(onSaveAndConnectClickedFn.callCount).to.equal(1);
});
});
describe('Connect Button', function () {
let onConnectButtonFn: sinon.SinonSpy;
beforeEach(function () {
onConnectButtonFn = sinon.spy();
render(
true}
onSaveAndConnectClicked={() => true}
saveButton="hidden"
saveAndConnectButton="hidden"
showSaveActions
>
);
});
it('should call onConnectClicked function', function () {
const saveButton = screen.getByText('Connect');
fireEvent(
saveButton,
new MouseEvent('click', {
bubbles: true,
cancelable: true,
})
);
expect(onConnectButtonFn.callCount).to.equal(1);
});
});
});
});