mirror of
https://github.com/verdaccio/verdaccio.git
synced 2024-12-23 22:27:34 -05:00
120 lines
3.6 KiB
JavaScript
120 lines
3.6 KiB
JavaScript
/**
|
|
* Header component
|
|
*/
|
|
import React from 'react';
|
|
import { shallow, mount } from 'enzyme';
|
|
import Header from '../../../src/webui/src/components/Header';
|
|
import { BrowserRouter } from 'react-router-dom';
|
|
import storage from '../../../src/webui/utils/storage';
|
|
|
|
jest.mock('../../../src/webui/utils/api', () => ({
|
|
request: require('./__mocks__/api').default.request,
|
|
}));
|
|
|
|
describe('<Header /> component shallow', () => {
|
|
let wrapper;
|
|
|
|
beforeEach(() => {
|
|
wrapper = shallow(
|
|
<BrowserRouter>
|
|
<Header />
|
|
</BrowserRouter>
|
|
);
|
|
});
|
|
|
|
it('should check the initial state', () => {
|
|
const state = {
|
|
showLogin: false,
|
|
username: '',
|
|
password: '',
|
|
logo: '',
|
|
loginError: null
|
|
};
|
|
const HeaderWrapper = wrapper.find(Header).dive();
|
|
expect(HeaderWrapper.state()).toEqual(state);
|
|
});
|
|
|
|
it('should toggleLogin modal', () => {
|
|
const HeaderWrapper = wrapper.find(Header).dive();
|
|
const toggleLoginModal = HeaderWrapper.instance().toggleLoginModal;
|
|
|
|
expect(toggleLoginModal()).toBeUndefined();
|
|
expect(HeaderWrapper.state('showLogin')).toBeTruthy();
|
|
});
|
|
|
|
it('should handleInput set state', () => {
|
|
const HeaderWrapper = wrapper.find(Header).dive();
|
|
const handleInput = HeaderWrapper.instance().handleInput;
|
|
|
|
expect(handleInput('username', 'xyz')).toBeUndefined();
|
|
expect(HeaderWrapper.state('username')).toEqual('xyz');
|
|
|
|
expect(handleInput('password', '1234')).toBeUndefined();
|
|
expect(HeaderWrapper.state('password')).toEqual('1234');
|
|
});
|
|
|
|
it('handleSubmit - should give error for blank username and password', () => {
|
|
const HeaderWrapper = wrapper.find(Header).dive();
|
|
const handleSubmit = HeaderWrapper.instance().handleSubmit;
|
|
const error = {
|
|
description: "Username or password can't be empty!",
|
|
title: 'Unable to login',
|
|
type: 'error'
|
|
};
|
|
expect(handleSubmit({ preventDefault: () => {} })).toBeDefined();
|
|
expect(HeaderWrapper.state('loginError')).toEqual(error);
|
|
});
|
|
|
|
it('handleSubmit - should login successfully', () => {
|
|
const HeaderWrapper = wrapper.find(Header).dive();
|
|
const handleSubmit = HeaderWrapper.instance().handleSubmit;
|
|
|
|
HeaderWrapper.setState({ username: 'sam', password: '1234' });
|
|
|
|
handleSubmit().then(() => {
|
|
expect(storage.getItem('token')).toEqual('TEST_TOKEN');
|
|
expect(storage.getItem('username')).toEqual('sam');
|
|
});
|
|
});
|
|
|
|
it('handleSubmit - login should failed with 401', () => {
|
|
const HeaderWrapper = wrapper.find(Header).dive();
|
|
const handleSubmit = HeaderWrapper.instance().handleSubmit;
|
|
const errorObject = {
|
|
title: 'Unable to login',
|
|
type: 'error',
|
|
description: 'Unauthorized'
|
|
};
|
|
HeaderWrapper.setState({ username: 'sam', password: '12345' });
|
|
|
|
handleSubmit().catch((error) => {
|
|
expect(HeaderWrapper.state('loginError')).toEqual(errorObject);
|
|
});
|
|
});
|
|
|
|
it('handleSubmit - login should failed with when no data is sent', () => {
|
|
const HeaderWrapper = wrapper.find(Header).dive();
|
|
const handleSubmit = HeaderWrapper.instance().handleSubmit;
|
|
const error = {
|
|
title: 'Unable to login',
|
|
type: 'error',
|
|
description: "Username or password can't be empty!"
|
|
};
|
|
HeaderWrapper.setState({});
|
|
|
|
handleSubmit().then(() => {
|
|
expect(HeaderWrapper.state('loginError')).toEqual(error);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('<Header /> snapshot test', () => {
|
|
it('shoud match snapshot', () => {
|
|
const wrapper = mount(
|
|
<BrowserRouter>
|
|
<Header />
|
|
</BrowserRouter>
|
|
);
|
|
expect(wrapper.html()).toMatchSnapshot();
|
|
});
|
|
});
|