import React from 'react';
import { fireEvent, render } from '@testing-library/react-native';
import { Provider } from 'react-redux';
import { SwitchItemEncrypted, ISwitchItemEncrypted } from './SwitchItemEncrypted';
import { mockedStore as store } from '../../../reducers/mockedStore';
import i18n from '../../../i18n';
const onPressMock = jest.fn((value: boolean) => value);
const testEncrypted = {
encrypted: false,
encryptionEnabled: false,
isTeam: false,
onValueChangeEncrypted: onPressMock,
type: false,
testSwitchID: 'create-channel-encrypted',
testLabelID: `create-channel-encrypted-hint`
};
const Render = ({ encrypted, encryptionEnabled, isTeam, onValueChangeEncrypted, type }: ISwitchItemEncrypted) => (
);
describe('SwitchItemEncrypted', () => {
it('should not render the Encrypted Switch component', async () => {
const { findByTestId } = render(
testEncrypted.onValueChangeEncrypted(value)}
type={testEncrypted.type}
/>
);
try {
await findByTestId(testEncrypted.testSwitchID);
} catch (e) {
expect(e).toBeTruthy();
}
});
it('should render the Encrypted Switch component', async () => {
testEncrypted.encryptionEnabled = true;
const { findByTestId } = render(
testEncrypted.onValueChangeEncrypted(value)}
type={testEncrypted.type}
/>
);
const component = await findByTestId(testEncrypted.testSwitchID);
expect(component).toBeTruthy();
});
it('should change value of switch', async () => {
const { findByTestId } = render(
testEncrypted.onValueChangeEncrypted(value)}
type={testEncrypted.type}
/>
);
const component = await findByTestId(testEncrypted.testSwitchID);
fireEvent(component, 'valueChange', { value: true });
expect(onPressMock).toHaveReturnedWith({ value: !testEncrypted.encrypted });
});
it('label when encrypted and isTeam are false and is a public channel', async () => {
const { findByTestId } = render(
testEncrypted.onValueChangeEncrypted(value)}
type={testEncrypted.type}
/>
);
const component = await findByTestId(testEncrypted.testLabelID);
expect(component.props.children).toBe(i18n.t('Channel_hint_encrypted_not_available'));
});
it('label when encrypted and isTeam are true and is a private team', async () => {
testEncrypted.isTeam = true;
testEncrypted.type = true;
testEncrypted.encrypted = true;
const { findByTestId } = render(
testEncrypted.onValueChangeEncrypted(value)}
type={testEncrypted.type}
/>
);
const component = await findByTestId(testEncrypted.testLabelID);
expect(component.props.children).toBe(i18n.t('Team_hint_encrypted'));
});
});