mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2024-12-23 01:20:24 +03:00
Fixed tests
This commit is contained in:
parent
fd5060b996
commit
4f128b3fe8
7 changed files with 43 additions and 58 deletions
40
.eslintrc
40
.eslintrc
|
@ -1,46 +1,10 @@
|
||||||
{
|
{
|
||||||
"root": true,
|
"root": true,
|
||||||
"extends": [
|
"extends": [
|
||||||
"airbnb",
|
"@shlinkio/js-coding-standard"
|
||||||
"airbnb-typescript",
|
|
||||||
"plugin:@typescript-eslint/recommended"
|
|
||||||
],
|
],
|
||||||
"parserOptions": {
|
"parserOptions": {
|
||||||
"project": "./tsconfig.json"
|
"project": "./tsconfig.json"
|
||||||
},
|
},
|
||||||
"ignorePatterns": ["src/service*.ts"],
|
"ignorePatterns": ["src/service*.ts"]
|
||||||
"rules": {
|
|
||||||
"object-curly-newline": "off",
|
|
||||||
"implicit-arrow-linebreak": "off",
|
|
||||||
"no-restricted-globals": "off",
|
|
||||||
"default-case": "off",
|
|
||||||
"max-len": ["error", { "code": 120, "ignoreComments": true, "ignoreStrings": true, "ignoreTemplateLiterals": true }],
|
|
||||||
"import/no-cycle": "off",
|
|
||||||
"import/prefer-default-export": "off",
|
|
||||||
"import/no-extraneous-dependencies": "off",
|
|
||||||
"react/react-in-jsx-scope": "off",
|
|
||||||
"react/prop-types": "off",
|
|
||||||
"react/require-default-props": "off",
|
|
||||||
"react/function-component-definition": "off",
|
|
||||||
"react/no-array-index-key": "off",
|
|
||||||
"react/no-unstable-nested-components": "off",
|
|
||||||
"react/jsx-one-expression-per-line": "off",
|
|
||||||
"react/jsx-props-no-spreading": "off",
|
|
||||||
"react/jsx-no-useless-fragment": "off",
|
|
||||||
"@typescript-eslint/no-unused-expressions": "off",
|
|
||||||
"@typescript-eslint/ban-types": "off",
|
|
||||||
"@typescript-eslint/no-explicit-any": "off",
|
|
||||||
"@typescript-eslint/lines-between-class-members": "off"
|
|
||||||
},
|
|
||||||
"overrides": [
|
|
||||||
{
|
|
||||||
"files": ["*.test.*"],
|
|
||||||
"rules": {
|
|
||||||
"prefer-promise-reject-errors": "off",
|
|
||||||
"no-param-reassign": "off",
|
|
||||||
"react/no-children-prop": "off",
|
|
||||||
"@typescript-eslint/no-shadow": "off"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
32
package-lock.json
generated
32
package-lock.json
generated
|
@ -50,6 +50,7 @@
|
||||||
"workbox-strategies": "^6.5.1"
|
"workbox-strategies": "^6.5.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@shlinkio/eslint-config-js-coding-standard": "~2.0.0",
|
||||||
"@stryker-mutator/core": "^5.6.1",
|
"@stryker-mutator/core": "^5.6.1",
|
||||||
"@stryker-mutator/jest-runner": "^5.6.1",
|
"@stryker-mutator/jest-runner": "^5.6.1",
|
||||||
"@stryker-mutator/typescript-checker": "^5.6.1",
|
"@stryker-mutator/typescript-checker": "^5.6.1",
|
||||||
|
@ -68,8 +69,6 @@
|
||||||
"@types/react-redux": "^7.1.23",
|
"@types/react-redux": "^7.1.23",
|
||||||
"@types/react-tag-autocomplete": "^6.1.1",
|
"@types/react-tag-autocomplete": "^6.1.1",
|
||||||
"@types/uuid": "^8.3.4",
|
"@types/uuid": "^8.3.4",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.16.0",
|
|
||||||
"@typescript-eslint/parser": "^5.16.0",
|
|
||||||
"@wojtekmaj/enzyme-adapter-react-17": "0.6.5",
|
"@wojtekmaj/enzyme-adapter-react-17": "0.6.5",
|
||||||
"adm-zip": "^0.5.9",
|
"adm-zip": "^0.5.9",
|
||||||
"babel-jest": "^27.5.1",
|
"babel-jest": "^27.5.1",
|
||||||
|
@ -77,8 +76,6 @@
|
||||||
"dart-sass": "^1.25.0",
|
"dart-sass": "^1.25.0",
|
||||||
"enzyme": "^3.11.0",
|
"enzyme": "^3.11.0",
|
||||||
"eslint": "^8.12.0",
|
"eslint": "^8.12.0",
|
||||||
"eslint-config-airbnb": "^19.0.4",
|
|
||||||
"eslint-config-airbnb-typescript": "^16.1.4",
|
|
||||||
"identity-obj-proxy": "^3.0.0",
|
"identity-obj-proxy": "^3.0.0",
|
||||||
"jest": "^27.5.1",
|
"jest": "^27.5.1",
|
||||||
"react-scripts": "^5.0.0",
|
"react-scripts": "^5.0.0",
|
||||||
|
@ -3485,6 +3482,21 @@
|
||||||
"integrity": "sha512-BUyKJGdDWqvWC5GEhyOiUrGNi9iJUr4CU0O2WxJL6QJhHeeA/NVBalH+FeK0r/x/W0rPymXt5s78TDS7d6lCwg==",
|
"integrity": "sha512-BUyKJGdDWqvWC5GEhyOiUrGNi9iJUr4CU0O2WxJL6QJhHeeA/NVBalH+FeK0r/x/W0rPymXt5s78TDS7d6lCwg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/@shlinkio/eslint-config-js-coding-standard": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@shlinkio/eslint-config-js-coding-standard/-/eslint-config-js-coding-standard-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-yD/+NVu3vxcA23ptsFGxX827+tZgGfBoWMonRcliG56HOMYDrf7OET7f7Xvi1or2U0PLQDOPRShk4IlR3Km6kA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@typescript-eslint/eslint-plugin": "^5.16.0",
|
||||||
|
"@typescript-eslint/parser": "^5.16.0",
|
||||||
|
"eslint-config-airbnb": "^19.0.4",
|
||||||
|
"eslint-config-airbnb-typescript": "^16.1.4"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"eslint": "^8.12.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@sinonjs/commons": {
|
"node_modules/@sinonjs/commons": {
|
||||||
"version": "1.8.3",
|
"version": "1.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
|
||||||
|
@ -29244,6 +29256,18 @@
|
||||||
"integrity": "sha512-BUyKJGdDWqvWC5GEhyOiUrGNi9iJUr4CU0O2WxJL6QJhHeeA/NVBalH+FeK0r/x/W0rPymXt5s78TDS7d6lCwg==",
|
"integrity": "sha512-BUyKJGdDWqvWC5GEhyOiUrGNi9iJUr4CU0O2WxJL6QJhHeeA/NVBalH+FeK0r/x/W0rPymXt5s78TDS7d6lCwg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"@shlinkio/eslint-config-js-coding-standard": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@shlinkio/eslint-config-js-coding-standard/-/eslint-config-js-coding-standard-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-yD/+NVu3vxcA23ptsFGxX827+tZgGfBoWMonRcliG56HOMYDrf7OET7f7Xvi1or2U0PLQDOPRShk4IlR3Km6kA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@typescript-eslint/eslint-plugin": "^5.16.0",
|
||||||
|
"@typescript-eslint/parser": "^5.16.0",
|
||||||
|
"eslint-config-airbnb": "^19.0.4",
|
||||||
|
"eslint-config-airbnb-typescript": "^16.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@sinonjs/commons": {
|
"@sinonjs/commons": {
|
||||||
"version": "1.8.3",
|
"version": "1.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
|
||||||
|
|
|
@ -66,6 +66,7 @@
|
||||||
"workbox-strategies": "^6.5.1"
|
"workbox-strategies": "^6.5.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@shlinkio/eslint-config-js-coding-standard": "~2.0.0",
|
||||||
"@stryker-mutator/core": "^5.6.1",
|
"@stryker-mutator/core": "^5.6.1",
|
||||||
"@stryker-mutator/jest-runner": "^5.6.1",
|
"@stryker-mutator/jest-runner": "^5.6.1",
|
||||||
"@stryker-mutator/typescript-checker": "^5.6.1",
|
"@stryker-mutator/typescript-checker": "^5.6.1",
|
||||||
|
@ -84,8 +85,6 @@
|
||||||
"@types/react-redux": "^7.1.23",
|
"@types/react-redux": "^7.1.23",
|
||||||
"@types/react-tag-autocomplete": "^6.1.1",
|
"@types/react-tag-autocomplete": "^6.1.1",
|
||||||
"@types/uuid": "^8.3.4",
|
"@types/uuid": "^8.3.4",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.16.0",
|
|
||||||
"@typescript-eslint/parser": "^5.16.0",
|
|
||||||
"@wojtekmaj/enzyme-adapter-react-17": "0.6.5",
|
"@wojtekmaj/enzyme-adapter-react-17": "0.6.5",
|
||||||
"adm-zip": "^0.5.9",
|
"adm-zip": "^0.5.9",
|
||||||
"babel-jest": "^27.5.1",
|
"babel-jest": "^27.5.1",
|
||||||
|
@ -93,8 +92,6 @@
|
||||||
"dart-sass": "^1.25.0",
|
"dart-sass": "^1.25.0",
|
||||||
"enzyme": "^3.11.0",
|
"enzyme": "^3.11.0",
|
||||||
"eslint": "^8.12.0",
|
"eslint": "^8.12.0",
|
||||||
"eslint-config-airbnb": "^19.0.4",
|
|
||||||
"eslint-config-airbnb-typescript": "^16.1.4",
|
|
||||||
"identity-obj-proxy": "^3.0.0",
|
"identity-obj-proxy": "^3.0.0",
|
||||||
"jest": "^27.5.1",
|
"jest": "^27.5.1",
|
||||||
"react-scripts": "^5.0.0",
|
"react-scripts": "^5.0.0",
|
||||||
|
|
|
@ -3,10 +3,10 @@ import { formatIsoDate } from '../../utils/helpers/date';
|
||||||
import { ShlinkVisitsParams } from '../../api/types';
|
import { ShlinkVisitsParams } from '../../api/types';
|
||||||
import { CreateVisit, NormalizedOrphanVisit, NormalizedVisit, OrphanVisit, Stats, Visit, VisitsParams } from './index';
|
import { CreateVisit, NormalizedOrphanVisit, NormalizedVisit, OrphanVisit, Stats, Visit, VisitsParams } from './index';
|
||||||
|
|
||||||
export const isOrphanVisit = (visit: Visit): visit is OrphanVisit => !!(visit as OrphanVisit).visitedUrl;
|
export const isOrphanVisit = (visit: Visit): visit is OrphanVisit => (visit as OrphanVisit).visitedUrl !== undefined;
|
||||||
|
|
||||||
export const isNormalizedOrphanVisit = (visit: NormalizedVisit): visit is NormalizedOrphanVisit =>
|
export const isNormalizedOrphanVisit = (visit: NormalizedVisit): visit is NormalizedOrphanVisit =>
|
||||||
!!(visit as NormalizedOrphanVisit).visitedUrl;
|
(visit as NormalizedOrphanVisit).visitedUrl !== undefined;
|
||||||
|
|
||||||
export interface GroupedNewVisits {
|
export interface GroupedNewVisits {
|
||||||
orphanVisits: CreateVisit[];
|
orphanVisits: CreateVisit[];
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { shallow, ShallowWrapper } from 'enzyme';
|
import { shallow, ShallowWrapper } from 'enzyme';
|
||||||
import { Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';
|
import { Button, Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';
|
||||||
import { Mock } from 'ts-mockery';
|
import { Mock } from 'ts-mockery';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
import DeleteServerModal from '../../src/servers/DeleteServerModal';
|
import DeleteServerModal from '../../src/servers/DeleteServerModal';
|
||||||
|
@ -45,7 +45,7 @@ describe('<DeleteServerModal />', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('toggles when clicking cancel button', () => {
|
it('toggles when clicking cancel button', () => {
|
||||||
const cancelBtn = wrapper.find('button').first();
|
const cancelBtn = wrapper.find(Button).first();
|
||||||
|
|
||||||
cancelBtn.simulate('click');
|
cancelBtn.simulate('click');
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ describe('<DeleteServerModal />', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('deletes server when clicking accept button', () => {
|
it('deletes server when clicking accept button', () => {
|
||||||
const acceptBtn = wrapper.find('button').last();
|
const acceptBtn = wrapper.find(Button).last();
|
||||||
|
|
||||||
acceptBtn.simulate('click');
|
acceptBtn.simulate('click');
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ import { QrErrorCorrectionDropdown } from '../../../src/short-urls/helpers/qr-co
|
||||||
|
|
||||||
describe('<QrCodeModal />', () => {
|
describe('<QrCodeModal />', () => {
|
||||||
let wrapper: ShallowWrapper;
|
let wrapper: ShallowWrapper;
|
||||||
const saveImage = jest.fn();
|
const saveImage = jest.fn().mockReturnValue(Promise.resolve());
|
||||||
const QrCodeModal = createQrCodeModal(Mock.of<ImageDownloader>({ saveImage }), () => null);
|
const QrCodeModal = createQrCodeModal(Mock.of<ImageDownloader>({ saveImage }), () => null);
|
||||||
const shortUrl = 'https://doma.in/abc123';
|
const shortUrl = 'https://doma.in/abc123';
|
||||||
const createWrapper = (version: SemVer = '2.6.0') => {
|
const createWrapper = (version: SemVer = '2.6.0') => {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { shallow, ShallowWrapper } from 'enzyme';
|
import { shallow, ShallowWrapper } from 'enzyme';
|
||||||
import { Modal, ModalBody, ModalFooter } from 'reactstrap';
|
import { Button, Modal, ModalBody, ModalFooter } from 'reactstrap';
|
||||||
import DeleteTagConfirmModal from '../../../src/tags/helpers/DeleteTagConfirmModal';
|
import DeleteTagConfirmModal from '../../../src/tags/helpers/DeleteTagConfirmModal';
|
||||||
import { TagDeletion } from '../../../src/tags/reducers/tagDelete';
|
import { TagDeletion } from '../../../src/tags/reducers/tagDelete';
|
||||||
|
|
||||||
|
@ -30,11 +30,11 @@ describe('<DeleteTagConfirmModal />', () => {
|
||||||
wrapper = createWrapper({ error: false, deleting: false });
|
wrapper = createWrapper({ error: false, deleting: false });
|
||||||
const body = wrapper.find(ModalBody);
|
const body = wrapper.find(ModalBody);
|
||||||
const footer = wrapper.find(ModalFooter);
|
const footer = wrapper.find(ModalFooter);
|
||||||
const delBtn = footer.find('.btn-danger');
|
const delBtn = footer.find(Button).last();
|
||||||
|
|
||||||
expect(body.html()).toContain(`Are you sure you want to delete tag <b>${tag}</b>?`);
|
expect(body.html()).toContain(`Are you sure you want to delete tag <b>${tag}</b>?`);
|
||||||
expect(delBtn.prop('disabled')).toEqual(false);
|
expect(delBtn.prop('disabled')).toEqual(false);
|
||||||
expect(delBtn.text()).toEqual('Delete tag');
|
expect(delBtn.html()).toContain('>Delete tag<');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('shows error message when deletion failed', () => {
|
it('shows error message when deletion failed', () => {
|
||||||
|
@ -47,16 +47,16 @@ describe('<DeleteTagConfirmModal />', () => {
|
||||||
it('shows loading status while deleting', () => {
|
it('shows loading status while deleting', () => {
|
||||||
wrapper = createWrapper({ error: false, deleting: true });
|
wrapper = createWrapper({ error: false, deleting: true });
|
||||||
const footer = wrapper.find(ModalFooter);
|
const footer = wrapper.find(ModalFooter);
|
||||||
const delBtn = footer.find('.btn-danger');
|
const delBtn = footer.find(Button).last();
|
||||||
|
|
||||||
expect(delBtn.prop('disabled')).toEqual(true);
|
expect(delBtn.prop('disabled')).toEqual(true);
|
||||||
expect(delBtn.text()).toEqual('Deleting tag...');
|
expect(delBtn.html()).toContain('>Deleting tag...<');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('deletes tag modal when btn is clicked', async () => {
|
it('deletes tag modal when btn is clicked', async () => {
|
||||||
wrapper = createWrapper({ error: false, deleting: true });
|
wrapper = createWrapper({ error: false, deleting: true });
|
||||||
const footer = wrapper.find(ModalFooter);
|
const footer = wrapper.find(ModalFooter);
|
||||||
const delBtn = footer.find('.btn-danger');
|
const delBtn = footer.find(Button).last();
|
||||||
|
|
||||||
await delBtn.simulate('click'); // eslint-disable-line @typescript-eslint/await-thenable
|
await delBtn.simulate('click'); // eslint-disable-line @typescript-eslint/await-thenable
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue