Merge pull request #65 from prymitive/tests-2

feat(tests): navbar shallow render tests using skin-deep
This commit is contained in:
Łukasz Mierzwa
2018-08-23 08:49:55 +01:00
committed by GitHub
4 changed files with 118 additions and 1 deletions

34
ui/package-lock.json generated
View File

@@ -6005,6 +6005,12 @@
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
"is-subset": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
"integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
"dev": true
},
"is-svg": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
@@ -6855,6 +6861,12 @@
"jsonify": "0.0.0"
}
},
"json-stringify-pretty-compact": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-1.2.0.tgz",
"integrity": "sha512-/11Pj1OyX814QMKO7K8l85SHPTr/KsFxHp8GE2zVa0BtJgGimDjXHfM3FhC7keQdWDea7+nXf+f1de7ATZcZkQ==",
"dev": true
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
@@ -10015,6 +10027,16 @@
"prop-types": "15.6.2"
}
},
"react-element-to-string": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/react-element-to-string/-/react-element-to-string-1.0.2.tgz",
"integrity": "sha1-AmLyzg/6i1GOo1l7w6jcJuBVGkc=",
"dev": true,
"requires": {
"indent-string": "2.1.0",
"json-stringify-pretty-compact": "1.2.0"
}
},
"react-error-overlay": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-4.0.1.tgz",
@@ -10972,6 +10994,18 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
},
"skin-deep": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/skin-deep/-/skin-deep-1.2.0.tgz",
"integrity": "sha512-2TFImKMDE4bS4hm8hdpjTf4+0RXAUxK0jjQRKPrf4qypAk9zDcEldIcxdQNMUdhsJhWwFrENz7jGu5Gu/IWbbQ==",
"dev": true,
"requires": {
"escape-string-regexp": "1.0.5",
"is-subset": "0.1.1",
"react-element-to-string": "1.0.2",
"semver": "5.5.0"
}
},
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",

View File

@@ -58,6 +58,7 @@
"markdownlint-cli": "0.13.0",
"node-sass-chokidar": "1.3.3",
"onchange": "4.1.0",
"react-test-renderer": "16.4.2"
"react-test-renderer": "16.4.2",
"skin-deep": "1.2.0"
}
}

View File

@@ -0,0 +1,5 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`<NavBar /> matches snapshot with 0 alerts 1`] = `"<ResizeDetector />0<FetchIndicator /><SilenceModal /><MainModal /><FilterInput />"`;
exports[`<NavBar /> matches snapshot with 5 alerts 1`] = `"<ResizeDetector />5<FetchIndicator /><SilenceModal /><MainModal /><FilterInput />"`;

View File

@@ -0,0 +1,77 @@
import React from "react";
import sd from "skin-deep";
import moment from "moment";
import { AlertStore, NewUnappliedFilter } from "Stores/AlertStore";
import { Settings } from "Stores/Settings";
import { SilenceFormStore } from "Stores/SilenceFormStore";
import { NavBar } from ".";
let alertStore;
let settingsStore;
let silenceFormStore;
beforeEach(() => {
alertStore = new AlertStore([]);
settingsStore = new Settings();
silenceFormStore = new SilenceFormStore();
// fix startsAt & endsAt dates so they don't change between tests
silenceFormStore.data.startsAt = moment([2018, 1, 30, 10, 25, 50]).utc();
silenceFormStore.data.endsAt = moment([2018, 1, 30, 11, 25, 50]).utc();
});
const RenderNavbar = () => {
return sd.shallowRender(
<NavBar
alertStore={alertStore}
settingsStore={settingsStore}
silenceFormStore={silenceFormStore}
/>
);
};
const ValidateNavClass = (totalFilters, expectedClass) => {
for (let i = 0; i < totalFilters; i++) {
alertStore.filters.values.push(NewUnappliedFilter(`foo=${i}`));
}
const tree = RenderNavbar();
const nav = tree.subTree(".navbar-nav");
expect(nav.props.className.split(" ")).toContain(expectedClass);
};
describe("<NavBar />", () => {
it("matches snapshot with 0 alerts", () => {
const tree = RenderNavbar();
expect(tree.text()).toMatchSnapshot();
});
it("matches snapshot with 5 alerts", () => {
alertStore.info.totalAlerts = 5;
const tree = RenderNavbar();
expect(tree.text()).toMatchSnapshot();
});
it("navbar-brand shows 15 alerts with totalAlerts=15", () => {
alertStore.info.totalAlerts = 15;
const tree = RenderNavbar();
const brand = tree.subTree(".navbar-brand");
expect(brand.text()).toBe("15<FetchIndicator />");
});
it("navbar-nav includes 'flex-row' class with 0 filters", () => {
ValidateNavClass(0, "flex-row");
});
it("navbar-nav includes 'flex-row' class with 1 filter", () => {
ValidateNavClass(1, "flex-row");
});
it("navbar-nav includes 'flex-column' class with 2 filters", () => {
ValidateNavClass(2, "flex-column");
});
it("navbar-nav includes 'flex-column' class with 3 filters", () => {
ValidateNavClass(3, "flex-column");
});
});