fix router tests and create seaparate package ui-tests

This commit is contained in:
Sebastian Sdorra
2019-10-10 15:05:17 +02:00
parent 72afcf0f23
commit 9d50ed05e1
19 changed files with 109 additions and 75 deletions

View File

@@ -16,16 +16,18 @@
"storybook": "start-storybook" "storybook": "start-storybook"
}, },
"devDependencies": { "devDependencies": {
"@scm-manager/ui-tests": "2.0.0-SNAPSHOT",
"@storybook/addon-actions": "^5.2.3", "@storybook/addon-actions": "^5.2.3",
"@storybook/addon-storyshots": "^5.2.3", "@storybook/addon-storyshots": "^5.2.3",
"@storybook/react": "^5.2.3", "@storybook/react": "^5.2.3",
"enzyme": "^3.5.0", "enzyme": "^3.5.0",
"enzyme-adapter-react-16": "^1.3.1", "enzyme-adapter-react-16": "^1.3.1",
"enzyme-context": "^1.1.2",
"enzyme-context-react-router-4": "^2.0.0",
"fetch-mock": "^7.5.1", "fetch-mock": "^7.5.1",
"flow-bin": "^0.109.0", "flow-bin": "^0.109.0",
"flow-typed": "^2.5.1", "flow-typed": "^2.5.1",
"raf": "^3.4.0", "raf": "^3.4.0",
"react-router-enzyme-context": "^1.2.0",
"storybook-addon-i18next": "^1.2.1", "storybook-addon-i18next": "^1.2.1",
"storybook-react-router": "^1.0.8" "storybook-react-router": "^1.0.8"
}, },
@@ -45,7 +47,9 @@
"react-syntax-highlighter": "^11.0.2" "react-syntax-highlighter": "^11.0.2"
}, },
"babel": { "babel": {
"presets": ["@scm-manager/babel-preset"] "presets": [
"@scm-manager/babel-preset"
]
}, },
"jest": { "jest": {
"preset": "@scm-manager/jest-preset" "preset": "@scm-manager/jest-preset"

View File

@@ -1,8 +1,8 @@
// @flow // @flow
import React from "react"; import React from "react";
import { mount, shallow } from "enzyme"; import { mount, shallow } from "enzyme";
import "./tests/enzyme"; import "@scm-manager/ui-tests/enzyme";
import "./tests/i18n"; import "@scm-manager/ui-tests/i18n";
import ReactRouterEnzymeContext from "react-router-enzyme-context"; import ReactRouterEnzymeContext from "react-router-enzyme-context";
import Paginator from "./Paginator"; import Paginator from "./Paginator";

View File

@@ -1 +0,0 @@
module.exports = {};

View File

@@ -0,0 +1,11 @@
import "./enzyme";
import { createMount, createShallow } from "enzyme-context";
import { routerContext } from "enzyme-context-react-router-4";
const plugins = {
history: routerContext()
};
export const mount = createMount(plugins);
export const shallow = createShallow(plugins);

View File

@@ -0,0 +1,15 @@
{
"name": "@scm-manager/ui-tests",
"version": "2.0.0-SNAPSHOT",
"description": "UI-Tests helpers",
"author": "Sebastian Sdorra <sebastian.sdorra@cloudogu.com>",
"license": "BSD-3-Clause",
"private": false,
"dependencies": {
"enzyme": "^3.10.0",
"enzyme-context": "^1.1.2",
"enzyme-context-react-router-4": "^2.0.0",
"jest": "^24.9.0",
"raf": "^3.4.1"
}
}

View File

@@ -44,6 +44,7 @@
"pre-commit": "jest && flow && eslint src" "pre-commit": "jest && flow && eslint src"
}, },
"devDependencies": { "devDependencies": {
"@scm-manager/ui-tests": "2.0.0-SNAPSHOT",
"concat": "^1.0.3", "concat": "^1.0.3",
"copyfiles": "^2.0.0", "copyfiles": "^2.0.0",
"enzyme": "^3.3.0", "enzyme": "^3.3.0",

View File

@@ -2,8 +2,8 @@
import React from "react"; import React from "react";
import { shallow } from "enzyme"; import { shallow } from "enzyme";
import "../../../tests/enzyme"; import "@scm-manager/ui-tests/enzyme";
import "../../../tests/i18n"; import "@scm-manager/ui-tests/i18n";
import EditGroupNavLink from "./EditGroupNavLink"; import EditGroupNavLink from "./EditGroupNavLink";
it("should render nothing, if the edit link is missing", () => { it("should render nothing, if the edit link is missing", () => {

View File

@@ -1,12 +1,11 @@
import React from "react"; import React from "react";
import { shallow, mount } from "enzyme"; import { shallow, mount } from "@scm-manager/ui-tests/enzyme-router";
import "../../tests/enzyme"; import "@scm-manager/ui-tests/enzyme";
import "../../tests/i18n"; import "@scm-manager/ui-tests/i18n";
import ReactRouterEnzymeContext from "react-router-enzyme-context";
import EditRepoNavLink from "./EditRepoNavLink"; import EditRepoNavLink from "./EditRepoNavLink";
describe("GeneralNavLink", () => { describe("GeneralNavLink", () => {
const options = new ReactRouterEnzymeContext();
it("should render nothing, if the modify link is missing", () => { it("should render nothing, if the modify link is missing", () => {
const repository = { const repository = {
@@ -14,8 +13,7 @@ describe("GeneralNavLink", () => {
}; };
const navLink = shallow( const navLink = shallow(
<EditRepoNavLink repository={repository} editUrl="" />, <EditRepoNavLink repository={repository} editUrl="" />
options.get()
); );
expect(navLink.text()).toBe(""); expect(navLink.text()).toBe("");
}); });
@@ -30,8 +28,7 @@ describe("GeneralNavLink", () => {
}; };
const navLink = mount( const navLink = mount(
<EditRepoNavLink repository={repository} editUrl="" />, <EditRepoNavLink repository={repository} editUrl="" />
options.get()
); );
expect(navLink.text()).toBe("repositoryRoot.menu.generalNavLink"); expect(navLink.text()).toBe("repositoryRoot.menu.generalNavLink");
}); });

View File

@@ -1,7 +1,6 @@
import React from "react"; import React from "react";
import { mount, shallow } from "enzyme"; import {mount, shallow } from "@scm-manager/ui-tests/enzyme-router";
import "../../tests/enzyme"; import "@scm-manager/ui-tests/i18n";
import "../../tests/i18n";
import ReactRouterEnzymeContext from "react-router-enzyme-context"; import ReactRouterEnzymeContext from "react-router-enzyme-context";
import PermissionsNavLink from "./PermissionsNavLink"; import PermissionsNavLink from "./PermissionsNavLink";

View File

@@ -1,13 +1,12 @@
// @flow // @flow
import React from "react"; import React from "react";
import { shallow, mount } from "enzyme"; import { shallow, mount } from "@scm-manager/ui-tests/enzyme-router";
import "../../tests/enzyme"; import "@scm-manager/ui-tests/enzyme";
import "../../tests/i18n"; import "@scm-manager/ui-tests/i18n";
import ReactRouterEnzymeContext from "react-router-enzyme-context";
import RepositoryNavLink from "./RepositoryNavLink"; import RepositoryNavLink from "./RepositoryNavLink";
describe("RepositoryNavLink", () => { describe("RepositoryNavLink", () => {
const options = new ReactRouterEnzymeContext();
it("should render nothing, if the sources link is missing", () => { it("should render nothing, if the sources link is missing", () => {
const repository = { const repository = {
@@ -24,8 +23,7 @@ describe("RepositoryNavLink", () => {
to="/sources" to="/sources"
label="Sources" label="Sources"
activeOnlyWhenExact={true} activeOnlyWhenExact={true}
/>, />
options.get()
); );
expect(navLink.text()).toBe(""); expect(navLink.text()).toBe("");
}); });
@@ -49,8 +47,7 @@ describe("RepositoryNavLink", () => {
to="/sources" to="/sources"
label="Sources" label="Sources"
activeOnlyWhenExact={true} activeOnlyWhenExact={true}
/>, />
options.get()
); );
expect(navLink.text()).toBe("Sources"); expect(navLink.text()).toBe("Sources");
}); });

View File

@@ -1,18 +1,16 @@
import React from "react"; import React from "react";
import { mount, shallow } from "enzyme"; import { shallow, mount } from "@scm-manager/ui-tests/enzyme-router";
import "../../../../tests/enzyme"; import "@scm-manager/ui-tests/enzyme";
import "../../../../tests/i18n"; import "@scm-manager/ui-tests/i18n";
import DeletePermissionButton from "./DeletePermissionButton"; import DeletePermissionButton from "./DeletePermissionButton";
import { confirmAlert } from "@scm-manager/ui-components"; import { confirmAlert } from "@scm-manager/ui-components";
import ReactRouterEnzymeContext from "react-router-enzyme-context";
jest.mock("@scm-manager/ui-components", () => ({ jest.mock("@scm-manager/ui-components", () => ({
confirmAlert: jest.fn(), confirmAlert: jest.fn(),
DeleteButton: require.requireActual("@scm-manager/ui-components").DeleteButton DeleteButton: require.requireActual("@scm-manager/ui-components").DeleteButton
})); }));
describe("DeletePermissionButton", () => { describe("DeletePermissionButton", () => {
const options = new ReactRouterEnzymeContext();
it("should render nothing, if the delete link is missing", () => { it("should render nothing, if the delete link is missing", () => {
const permission = { const permission = {
@@ -23,8 +21,7 @@ describe("DeletePermissionButton", () => {
<DeletePermissionButton <DeletePermissionButton
permission={permission} permission={permission}
deletePermission={() => {}} deletePermission={() => {}}
/>, />
options.get()
); );
expect(navLink.text()).toBe(""); expect(navLink.text()).toBe("");
}); });
@@ -42,8 +39,7 @@ describe("DeletePermissionButton", () => {
<DeletePermissionButton <DeletePermissionButton
permission={permission} permission={permission}
deletePermission={() => {}} deletePermission={() => {}}
/>, />
options.get()
); );
expect(deleteIcon.html()).not.toBe(""); expect(deleteIcon.html()).not.toBe("");
}); });
@@ -61,8 +57,7 @@ describe("DeletePermissionButton", () => {
<DeletePermissionButton <DeletePermissionButton
permission={permission} permission={permission}
deletePermission={() => {}} deletePermission={() => {}}
/>, />
options.get()
); );
button.find(".fa-trash").simulate("click"); button.find(".fa-trash").simulate("click");
@@ -88,8 +83,7 @@ describe("DeletePermissionButton", () => {
permission={permission} permission={permission}
confirmDialog={false} confirmDialog={false}
deletePermission={capture} deletePermission={capture}
/>, />
options.get()
); );
button.find(".fa-trash").simulate("click"); button.find(".fa-trash").simulate("click");

View File

@@ -1,12 +0,0 @@
import "raf/polyfill";
import { configure } from "enzyme";
import Adapter from "enzyme-adapter-react-16";
// Temporary hack to suppress error
// https://github.com/facebook/create-react-app/issues/3199#issuecomment-345024029
window.requestAnimationFrame = function(callback) {
setTimeout(callback, 0);
return 0;
};
configure({ adapter: new Adapter() });

View File

@@ -1,7 +0,0 @@
jest.mock("react-i18next", () => ({
// this mock makes sure any components using the translate HoC receive the t function as a prop
translate: () => Component => {
Component.defaultProps = { ...Component.defaultProps, t: key => key };
return Component;
}
}));

View File

@@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { shallow } from "enzyme"; import { shallow } from "enzyme";
import "../../../tests/enzyme"; import "@scm-manager/ui-tests/enzyme";
import "../../../tests/i18n"; import "@scm-manager/ui-tests/i18n";
import EditUserNavLink from "./EditUserNavLink"; import EditUserNavLink from "./EditUserNavLink";
it("should render nothing, if the edit link is missing", () => { it("should render nothing, if the edit link is missing", () => {

View File

@@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { shallow } from "enzyme"; import { shallow } from "enzyme";
import "../../../tests/enzyme"; import "@scm-manager/ui-tests/enzyme";
import "../../../tests/i18n"; import "@scm-manager/ui-tests/i18n";
import ChangePasswordNavLink from "./SetPasswordNavLink"; import ChangePasswordNavLink from "./SetPasswordNavLink";
it("should render nothing, if the password link is missing", () => { it("should render nothing, if the password link is missing", () => {

View File

@@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { shallow } from "enzyme"; import { shallow } from "enzyme";
import "../../../tests/enzyme"; import "@scm-manager/ui-tests/enzyme";
import "../../../tests/i18n"; import "@scm-manager/ui-tests/i18n";
import SetPermissionsNavLink from "./SetPermissionsNavLink"; import SetPermissionsNavLink from "./SetPermissionsNavLink";
it("should render nothing, if the permissions link is missing", () => { it("should render nothing, if the permissions link is missing", () => {

View File

@@ -1786,7 +1786,7 @@
"@types/minimatch" "*" "@types/minimatch" "*"
"@types/node" "*" "@types/node" "*"
"@types/history@*": "@types/history@*", "@types/history@^4.7.3":
version "4.7.3" version "4.7.3"
resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.3.tgz#856c99cdc1551d22c22b18b5402719affec9839a" resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.3.tgz#856c99cdc1551d22c22b18b5402719affec9839a"
integrity sha512-cS5owqtwzLN5kY+l+KgKdRJ/Cee8tlmQoGQuIE9tWnSmS3JMKzmxo2HIAk2wODMifGwO20d62xZQLYz+RLfXmw== integrity sha512-cS5owqtwzLN5kY+l+KgKdRJ/Cee8tlmQoGQuIE9tWnSmS3JMKzmxo2HIAk2wODMifGwO20d62xZQLYz+RLfXmw==
@@ -1816,6 +1816,18 @@
"@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*" "@types/istanbul-lib-report" "*"
"@types/lodash.merge@^4.6.4":
version "4.6.6"
resolved "https://registry.yarnpkg.com/@types/lodash.merge/-/lodash.merge-4.6.6.tgz#b84b403c1d31bc42d51772d1cd5557fa008cd3d6"
integrity sha512-IB90krzMf7YpfgP3u/EvZEdXVvm4e3gJbUvh5ieuI+o+XqiNEt6fCzqNRaiLlPVScLI59RxIGZMQ3+Ko/DJ8vQ==
dependencies:
"@types/lodash" "*"
"@types/lodash@*":
version "4.14.144"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.144.tgz#12e57fc99064bce45e5ab3c8bc4783feb75eab8e"
integrity sha512-ogI4g9W5qIQQUhXAclq6zhqgqNUr7UlFaqDHbch7WLSLeeM/7d3CRaw7GLajxvyFvhJqw4Rpcz5bhoaYtIx6Tg==
"@types/minimatch@*": "@types/minimatch@*":
version "3.0.3" version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
@@ -2512,11 +2524,6 @@ babel-code-frame@^6.22.0:
esutils "^2.0.2" esutils "^2.0.2"
js-tokens "^3.0.2" js-tokens "^3.0.2"
babel-core@7.0.0-bridge.0:
version "7.0.0-bridge.0"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
babel-eslint@^10.0.3: babel-eslint@^10.0.3:
version "10.0.3" version "10.0.3"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a"
@@ -4769,7 +4776,31 @@ enzyme-adapter-utils@^1.12.0:
prop-types "^15.7.2" prop-types "^15.7.2"
semver "^5.6.0" semver "^5.6.0"
enzyme@^3.3.0, enzyme@^3.5.0: enzyme-context-react-router-4@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/enzyme-context-react-router-4/-/enzyme-context-react-router-4-2.0.0.tgz#d23ab6a4e3a6c6d34519def1bdacea4fd19daecd"
integrity sha512-q/0Fugcvipzo6qxghQ9NQjMrj0PW1wZh02dQ67AVg/j35naD4MeXihI2la3s4fUKGhrK6IUCQ4QGEw15slTNqQ==
dependencies:
"@types/history" "^4.7.3"
enzyme-context-utils "^1.1.0"
history "^4.9.0"
enzyme-context-utils@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/enzyme-context-utils/-/enzyme-context-utils-1.1.0.tgz#2afdc446aef31417c908fd4be3179974451957e0"
integrity sha512-Nom/w7wAYfTd3evDPWDmnrDWYL/4NH30fBkrIaAAq+0vkxP2x2obCLpaJg6tptAEMAPnGEvOoGfKGgYUfFqe4g==
enzyme-context@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/enzyme-context/-/enzyme-context-1.1.2.tgz#30aec6cd68a3c31b71ae5b7b38d6c53c971baaaf"
integrity sha512-KevDIkfztlgnUrPaOykBHMEZZ9zVILsFu2kYOmGnao1EPYXlns6GdnOyBTcjgy+igPovgKGO77KewjQmjexTDQ==
dependencies:
"@types/lodash.merge" "^4.6.4"
enzyme-context-utils "^1.1.0"
lodash.merge "^4.6.2"
once "^1.4.0"
enzyme@^3.10.0, enzyme@^3.3.0, enzyme@^3.5.0:
version "3.10.0" version "3.10.0"
resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.10.0.tgz#7218e347c4a7746e133f8e964aada4a3523452f6" resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.10.0.tgz#7218e347c4a7746e133f8e964aada4a3523452f6"
integrity sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg== integrity sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==
@@ -5818,7 +5849,7 @@ getpass@^0.1.1:
dependencies: dependencies:
assert-plus "^1.0.0" assert-plus "^1.0.0"
gitdiff-parser@^0.1.2, "gitdiff-parser@https://github.com/cloudogu/gitdiff-parser#3a72da4a8e3d9bfb4b9e01a43e85628c19f26cc4": gitdiff-parser@^0.1.2:
version "0.1.2" version "0.1.2"
resolved "https://github.com/cloudogu/gitdiff-parser#3a72da4a8e3d9bfb4b9e01a43e85628c19f26cc4" resolved "https://github.com/cloudogu/gitdiff-parser#3a72da4a8e3d9bfb4b9e01a43e85628c19f26cc4"
@@ -7878,6 +7909,11 @@ lodash.merge@4.6.1:
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54"
integrity sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ== integrity sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==
lodash.merge@^4.6.2:
version "4.6.2"
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
lodash.sortby@^4.7.0: lodash.sortby@^4.7.0:
version "4.7.0" version "4.7.0"
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
@@ -9840,7 +9876,7 @@ querystringify@^2.1.1:
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
raf@^3.4.0: raf@^3.4.0, raf@^3.4.1:
version "3.4.1" version "3.4.1"
resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==