Files
remark42/frontend/app/components/auth-panel/auth-panel.test.tsx
T
2021-08-08 14:25:10 -05:00

99 lines
2.7 KiB
TypeScript

import { h } from 'preact';
import { mount } from 'enzyme';
import createMockStore from 'redux-mock-store';
import { Middleware } from 'redux';
import { Provider } from 'react-redux';
import { IntlProvider } from 'react-intl';
import type { User } from 'common/types';
import enMessages from 'locales/en.json';
import { AuthPanel, Props } from './auth-panel';
const DefaultProps = {
postInfo: {
read_only: false,
url: 'https://example.com',
count: 3,
},
hiddenUsers: {},
} as Props;
const initialStore = {
user: null,
theme: 'light',
comments: {
sort: '-score',
},
provider: { name: 'google' },
} as const;
const mockStore = createMockStore([] as Middleware[]);
describe('<AuthPanel />', () => {
const createWrapper = (props: Props = DefaultProps, store: ReturnType<typeof mockStore> = mockStore(initialStore)) =>
mount(
<IntlProvider locale="en" messages={enMessages}>
<Provider store={store}>
<AuthPanel {...props} />
</Provider>
</IntlProvider>
);
describe('For not authorized : null', () => {
it('should not render settings if there is no hidden users', () => {
const element = createWrapper({
...DefaultProps,
user: null,
postInfo: { ...DefaultProps.postInfo, read_only: true },
} as Props);
const adminAction = element.find('.auth-panel__admin-action');
expect(adminAction.exists()).toBe(false);
});
it('should render settings if there is some hidden users', () => {
const element = createWrapper({
...DefaultProps,
user: null,
postInfo: { ...DefaultProps.postInfo, read_only: true },
hiddenUsers: { hidden_joe: {} as User },
} as Props);
const adminAction = element.find('.auth-panel__admin-action');
expect(adminAction.text()).toEqual('Show settings');
});
});
describe('For authorized user', () => {
it('should render info about current user', () => {
const element = createWrapper({
...DefaultProps,
user: { id: 'john', name: 'John' },
} as Props);
const authPanelColumn = element.find('.auth-panel__column');
expect(authPanelColumn.length).toEqual(2);
const userInfo = authPanelColumn.first();
expect(userInfo.text()).toEqual(expect.stringContaining('John'));
});
});
describe('For admin user', () => {
it('should render admin action', () => {
const element = createWrapper({
...DefaultProps,
user: { id: 'test', admin: true, name: 'John' },
} as Props);
const adminAction = element.find('.auth-panel__admin-action').first();
expect(adminAction.text()).toEqual('Show settings');
});
});
});