diff --git a/assets/static/__snapshots__/silence.test.js.snap b/assets/static/__snapshots__/silence.test.js.snap index 5a486013a..8c674ea2e 100644 --- a/assets/static/__snapshots__/silence.test.js.snap +++ b/assets/static/__snapshots__/silence.test.js.snap @@ -7,6 +7,271 @@ exports[`failed sendSilencePOST() 1`] = `

" `; +exports[`silence form 1`] = ` +"
+
+ +
+

+ New silence form rendering failed. +

+

+ request failed +

+
" +`; + +exports[`silence form 2`] = ` +"
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + 1 + + +
+
+ + 1 + + +
+
+ + 1 + + +
+
+ +
+ +
+
+
January 2050
SuMoTuWeThFrSa
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345
2050
JanFebMarAprMayJunJulAugSepOctNovDec
2045-2056
204520462047204820492050205120522053205420552056
2000-2107
2000 - 20112012 - 20232024 - 20352036 - 20472048 - 20592060 - 20712072 - 20832084 - 20952096 - 2107
01:00
00010203
04050607
08091011
12131415
16171819
20212223
00051015
20253035
40455055
+
+
+
January 2050
SuMoTuWeThFrSa
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345
2050
JanFebMarAprMayJunJulAugSepOctNovDec
2045-2056
204520462047204820492050205120522053205420552056
2000-2107
2000 - 20112012 - 20232024 - 20352036 - 20472048 - 20592060 - 20712072 - 20832084 - 20952096 - 2107
02:00
00010203
04050607
08091011
12131415
16171819
20212223
00051015
20253035
40455055
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+
0
+
+ days + +
1
+
+ hours + +
0
+
+ minutes +
+ + + + + + + + + + + +
+
+
+
+ +
+
+ + + + +
+
+ +
+
+ + + + +
+
+ +
+ +
+ +
+ +
+
+ +
+
curl http://localhost/api/v1/silences
+  -X POST --data {
+  \\"matchers\\": [
+    {
+      \\"name\\": \\"foo\\",
+      \\"value\\": \\"bar\\",
+      \\"isRegex\\": false
+    }
+  ],
+  \\"startsAt\\": \\"2050-01-01T01:00:00.000Z\\",
+  \\"endsAt\\": \\"2050-01-01T02:00:00.000Z\\",
+  \\"createdBy\\": \\"\\",
+  \\"comment\\": \\"\\"
+}
+
+ + +
+
" +`; + +exports[`silence form 3`] = ` +"
+ + + + + + + +
+ + mock + + +

+ + abcdef +

+
+
" +`; + exports[`successful sendSilencePOST() 1`] = ` "

diff --git a/assets/static/silence.test.js b/assets/static/silence.test.js index 52ca7a0aa..e653f6473 100644 --- a/assets/static/silence.test.js +++ b/assets/static/silence.test.js @@ -1,13 +1,120 @@ const $ = window.jQuery = require("jquery"); +const moment = require("moment"); const templatesMock = require("./__mocks__/templatesMock"); const ajaxMock = require("./__mocks__/ajaxMock"); -test("silence setupSilenceForm()", () => { - var body = templatesMock.loadTemplates(); +jest.useFakeTimers(); + +test("silence form", () => { + let body = templatesMock.loadTemplates(); + body.push( + "

" + + "" + + "" + ); document.body.innerHTML = body; + const templates = require("./templates"); + templates.init(); + + const config = require("./config"); + config.init({ + CopySelector: "#copy-settings-with-filter", + SaveSelector: "#save-default-filter", + ResetSelector: "#reset-settings" + }); + const silence = require("./silence"); silence.setupSilenceForm(); + + require("bootstrap/js/tooltip.js"); + require("bootstrap/js/modal.js"); + + // rendering silence form requires AJAX call to pull data + // first check failed request + let ajaxServer = ajaxMock.createServer(500, { + "status": "error", + "errorType": "server_error", + "error": "request failed" + }); + ajaxServer.start(); + // click on the button, modal should show and render via ajax call + $("#silenceButton").click(); + jest.runOnlyPendingTimers(); + let silenceModal = $("#silenceModal").html().trim(); + expect(silenceModal).toMatchSnapshot(); + ajaxServer.stop(); + + // hide the form + $("#silenceModal").modal("hide"); + + // next try successful request + ajaxServer = ajaxMock.createServer(200, { + "groups": [ { + "receiver": "default", + "labels": {"alertname": "fakeAlert"}, + "alerts": [ { + "annotations": {}, + "labels": { + "alertname": "fakeAlert", + "cluster": "prod", + "foo": "bar" + }, + "startsAt": "2017-07-22T01:07:54.32189391Z", + "endsAt": "0001-01-01T00:00:00Z", + "state": "active", + "alertmanager": [ { + "name": "mock", + "uri": "http://localhost", + "state": "active", + "startsAt": "2017-07-22T01:07:54.32189391Z", + "endsAt": "0001-01-01T00:00:00Z", + "source": "localhost/prometheus", + "silences": {} + } ], + "receiver": "default", + "links": {} + } ], + "id": "12345", + "hash": "abcdef", + "stateCount": {"active": 1, "suppressed": 0, "unprocessed": 0} + } ] + }); + ajaxServer.start(); + // click on the button, modal should show and render via ajax call + $("#silenceButton").click(); + jest.runOnlyPendingTimers(); + // default times are relative to current time, use fixed values + let startsAt = moment("2050-01-01T01:00:00.000Z").utc(); + let endsAt = moment("2050-01-01T02:00:00.000Z").utc(); + $("#endsAt").data("DateTimePicker").date(endsAt); + $("#startsAt").data("DateTimePicker").date(startsAt); + // compare html to a snapshot + silenceModal = $("#silenceModal").html().trim(); + expect(silenceModal).toMatchSnapshot(); + ajaxServer.stop(); + + // submit silence + ajaxServer = ajaxMock.createServer(200, { + "status": "success", + "data": {"silenceId": "abcdef"} + }); + ajaxServer.start(); + $("#newSilenceForm").submit(); + ajaxServer.stop(); + silenceModal = $("#silenceModal").html().trim(); + expect(silenceModal).toMatchSnapshot(); }); test("successful sendSilencePOST()", () => {