@financial-times/n-conversion-forms
Version:
Containing jsx components and styles for forms included on Accounts and Acqusition apps (next-signup, next-profile, next-retention, etc).
66 lines (57 loc) • 1.58 kB
JavaScript
const Password = require('./password');
describe('Password', () => {
let password;
let document;
let passwordElement;
let checkboxElement;
beforeEach(() => {
passwordElement = { type: '' };
checkboxElement = { addEventListener: () => {}, checked: false };
document = {
querySelector: (selector) => {
if (selector.indexOf('#password') !== -1) {
return passwordElement;
} else {
return checkboxElement;
}
},
};
password = new Password(document);
jest.spyOn(password, 'toggleMask');
jest.spyOn(checkboxElement, 'addEventListener');
});
afterEach(() => {
jest.clearAllMocks();
});
describe('constructor', () => {
it('throws an error if document element is not passed in.', () => {
expect(() => {
new Password();
}).toThrow();
});
it('throws an error if password element does not exist on the page', () => {
expect(() => {
document.querySelector = () => {};
new Password(document);
}).toThrow();
});
});
describe('registerMaskCheckbox', () => {
it('adds event listener to checkbox if it exists', () => {
new Password(document);
expect(checkboxElement.addEventListener).toHaveBeenCalled();
});
});
describe('toggleMask', () => {
it('sets the input type to text', () => {
passwordElement.type = 'password';
password.toggleMask(false);
expect(passwordElement.type).toEqual('text');
});
it('sets the input type to password', () => {
passwordElement.type = 'text';
password.toggleMask(true);
expect(passwordElement.type).toEqual('password');
});
});
});