diff --git a/assets/static/__mocks__/ajaxMock.js b/assets/static/__mocks__/ajaxMock.js new file mode 100644 index 000000000..c561cbae6 --- /dev/null +++ b/assets/static/__mocks__/ajaxMock.js @@ -0,0 +1,12 @@ +const mockXHR = require("mock-xhr"); + +function createServer(status, payload) { + var server = new mockXHR.server(); + server.handle = function (request) { + request.setResponseHeader("Content-Type", "application/json"); + request.receive(status, JSON.stringify(payload)); + }; + return server; +} + +exports.createServer = createServer; diff --git a/assets/static/__snapshots__/silence.test.js.snap b/assets/static/__snapshots__/silence.test.js.snap new file mode 100644 index 000000000..5a486013a --- /dev/null +++ b/assets/static/__snapshots__/silence.test.js.snap @@ -0,0 +1,15 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`failed sendSilencePOST() 1`] = ` +"

+ + request failed +

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

+ + abcdef +

" +`; diff --git a/assets/static/silence.js b/assets/static/silence.js index 73ccb8366..d4216758e 100644 --- a/assets/static/silence.js +++ b/assets/static/silence.js @@ -328,3 +328,4 @@ function setupSilenceForm() { } exports.setupSilenceForm = setupSilenceForm; +exports.sendSilencePOST = sendSilencePOST; diff --git a/assets/static/silence.test.js b/assets/static/silence.test.js index 2ce6d91dd..52ca7a0aa 100644 --- a/assets/static/silence.test.js +++ b/assets/static/silence.test.js @@ -1,5 +1,66 @@ +const $ = window.jQuery = require("jquery"); +const templatesMock = require("./__mocks__/templatesMock"); +const ajaxMock = require("./__mocks__/ajaxMock"); + test("silence setupSilenceForm()", () => { - window.jQuery = require("jquery"); + var body = templatesMock.loadTemplates(); + document.body.innerHTML = body; + const silence = require("./silence"); silence.setupSilenceForm(); }); + +test("successful sendSilencePOST()", () => { + var body = templatesMock.loadTemplates(); + body.push( + "" + + "" + ); + document.body.innerHTML = body; + + const templates = require("./templates"); + templates.init(); + + const ajaxServer = ajaxMock.createServer(200, { + "status": "success", + "data": {"silenceId": "abcdef"} + }); + ajaxServer.start(); + + const silence = require("./silence"); + silence.sendSilencePOST("http://localhost", {}); + + let resultElem = $(".silence-post-result").html().trim(); + expect(resultElem).toMatchSnapshot(); + + ajaxServer.stop(); +}); + +test("failed sendSilencePOST()", () => { + var body = templatesMock.loadTemplates(); + body.push( + "" + + "" + ); + document.body.innerHTML = body; + + const templates = require("./templates"); + templates.init(); + + const ajaxServer = ajaxMock.createServer(500, { + "status": "success", + "errorType": "server_error", + "error": "request failed" + }); + ajaxServer.start(); + + const silence = require("./silence"); + silence.sendSilencePOST("http://localhost", {}); + + let resultElem = $(".silence-post-result").html().trim(); + expect(resultElem).toMatchSnapshot(); + + ajaxServer.stop(); +});