|
|
@@ -17,11 +17,12 @@ |
|
|
|
* along with this program; if not, write to the Free Software Foundation, |
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
|
|
*/ |
|
|
|
import { shallow } from 'enzyme'; |
|
|
|
import userEvent from '@testing-library/user-event'; |
|
|
|
import * as React from 'react'; |
|
|
|
import { setSimpleSettingValue } from '../../../api/settings'; |
|
|
|
import { Button } from '../../../components/controls/buttons'; |
|
|
|
import { mockLoggedInUser, mockRouter } from '../../../helpers/testMocks'; |
|
|
|
import { renderComponent } from '../../../helpers/testReactTestingUtils'; |
|
|
|
import { byRole } from '../../../helpers/testSelector'; |
|
|
|
import { PluginRiskConsent, PluginRiskConsentProps } from '../PluginRiskConsent'; |
|
|
|
|
|
|
|
jest.mock('../../../api/settings', () => ({ |
|
|
@@ -35,36 +36,57 @@ jest.mock('react', () => { |
|
|
|
}; |
|
|
|
}); |
|
|
|
|
|
|
|
const originalLocation = window.location; |
|
|
|
|
|
|
|
beforeAll(() => { |
|
|
|
let href = ''; |
|
|
|
const location = { |
|
|
|
...window.location, |
|
|
|
get href() { |
|
|
|
return href; |
|
|
|
}, |
|
|
|
set href(v: string) { |
|
|
|
href = v; |
|
|
|
}, |
|
|
|
}; |
|
|
|
Object.defineProperty(window, 'location', { |
|
|
|
writable: true, |
|
|
|
value: location, |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
afterAll(() => { |
|
|
|
jest.clearAllMocks(); |
|
|
|
}); |
|
|
|
|
|
|
|
it('should render correctly', () => { |
|
|
|
expect(shallowRender()).toMatchSnapshot('default'); |
|
|
|
Object.defineProperty(window, 'location', { |
|
|
|
writable: true, |
|
|
|
value: originalLocation, |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
it('should redirect non-admin users', () => { |
|
|
|
const replace = jest.fn(); |
|
|
|
const wrapper = shallowRender({ |
|
|
|
renderPluginRiskConsent({ |
|
|
|
currentUser: mockLoggedInUser(), |
|
|
|
router: mockRouter({ replace }), |
|
|
|
}); |
|
|
|
expect(wrapper.type()).toBeNull(); |
|
|
|
expect(replace).toHaveBeenCalled(); |
|
|
|
}); |
|
|
|
|
|
|
|
it('should handle acknowledgement and redirect', async () => { |
|
|
|
const wrapper = shallowRender(); |
|
|
|
const user = userEvent.setup(); |
|
|
|
renderPluginRiskConsent(); |
|
|
|
|
|
|
|
wrapper.find(Button).first().simulate('click'); |
|
|
|
await user.click(ui.acknowledgeButton.get()); |
|
|
|
|
|
|
|
await new Promise(setImmediate); |
|
|
|
|
|
|
|
expect(setSimpleSettingValue).toHaveBeenCalled(); |
|
|
|
expect(window.location.href).toBe('/'); |
|
|
|
}); |
|
|
|
|
|
|
|
function shallowRender(props: Partial<PluginRiskConsentProps> = {}) { |
|
|
|
return shallow( |
|
|
|
function renderPluginRiskConsent(props: Partial<PluginRiskConsentProps> = {}) { |
|
|
|
return renderComponent( |
|
|
|
<PluginRiskConsent |
|
|
|
currentUser={mockLoggedInUser({ permissions: { global: ['admin'] } })} |
|
|
|
router={mockRouter()} |
|
|
@@ -72,3 +94,7 @@ function shallowRender(props: Partial<PluginRiskConsentProps> = {}) { |
|
|
|
/> |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
const ui = { |
|
|
|
acknowledgeButton: byRole('button', { name: 'plugin_risk_consent.action' }), |
|
|
|
}; |