X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/abe391c9f3a2a7ad954ecf81198268076b233ef8..760c35a45846cdcc0e1d796f0741d530e80bcd31:/src/views-components/token-dialog/token-dialog.test.tsx?ds=sidebyside diff --git a/src/views-components/token-dialog/token-dialog.test.tsx b/src/views-components/token-dialog/token-dialog.test.tsx index e8df29b8..400bb1e6 100644 --- a/src/views-components/token-dialog/token-dialog.test.tsx +++ b/src/views-components/token-dialog/token-dialog.test.tsx @@ -2,12 +2,22 @@ // // SPDX-License-Identifier: AGPL-3.0 -import * as React from 'react'; +// This mocks react-copy-to-clipboard's dependency module to avoid warnings +// from jest when running tests. As we're not testing copy-to-clipboard, it's +// safe to just mock it. +// https://github.com/nkbt/react-copy-to-clipboard/issues/106#issuecomment-605227151 +jest.mock('copy-to-clipboard', () => { + return jest.fn(); +}); + +import React from 'react'; import { Button } from '@material-ui/core'; import { mount, configure } from 'enzyme'; -import * as Adapter from 'enzyme-adapter-react-16'; -import * as CopyToClipboard from 'react-copy-to-clipboard'; +import Adapter from 'enzyme-adapter-react-16'; +import CopyToClipboard from 'react-copy-to-clipboard'; import { TokenDialogComponent } from './token-dialog'; +import { combineReducers, createStore } from 'redux'; +import { Provider } from 'react-redux'; configure({ adapter: new Adapter() }); @@ -16,21 +26,74 @@ jest.mock('toggle-selection', () => () => () => null); describe('', () => { let props; let wrapper; + let store; beforeEach(() => { props = { classes: {}, - data: { - currentToken: '123123123123', - }, + token: 'xxxtokenxxx', + apiHost: 'example.com', open: true, dispatch: jest.fn(), }; + + const initialAuthState = { + localCluster: "zzzzz", + remoteHostsConfig: {}, + sessions: {}, + }; + + store = createStore(combineReducers({ + auth: (state: any = initialAuthState, action: any) => state, + })); + }); + + describe('Get API Token dialog', () => { + beforeEach(() => { + wrapper = mount( + + + + ); + }); + + it('should include API host and token', () => { + expect(wrapper.html()).toContain('export ARVADOS_API_HOST=example.com'); + expect(wrapper.html()).toContain('export ARVADOS_API_TOKEN=xxxtokenxxx'); + }); + + it('should show the token expiration if present', () => { + expect(props.tokenExpiration).toBeUndefined(); + expect(wrapper.html()).toContain('This token does not have an expiration date'); + + const someDate = '2140-01-01T00:00:00.000Z' + props.tokenExpiration = new Date(someDate); + wrapper = mount( + + + ); + expect(wrapper.html()).toContain(props.tokenExpiration.toLocaleString()); + }); + + it('should show a create new token button when allowed', () => { + expect(props.canCreateNewTokens).toBeFalsy(); + expect(wrapper.html()).not.toContain('GET NEW TOKEN'); + + props.canCreateNewTokens = true; + wrapper = mount( + + + ); + expect(wrapper.html()).toContain('GET NEW TOKEN'); + }); }); - describe('copy to clipboard', () => { + describe('copy to clipboard button', () => { beforeEach(() => { - wrapper = mount(); + wrapper = mount( + + + ); }); it('should copy API TOKEN to the clipboard', () => { @@ -42,7 +105,7 @@ describe('', () => { payload: { hideDuration: 2000, kind: 1, - message: 'Token copied to clipboard', + message: 'Shell code block copied', }, type: 'OPEN_SNACKBAR', });