diff --git a/server/notification-providers/pushbullet.js b/server/notification-providers/pushbullet.js index c7b824a..9de5b61 100644 --- a/server/notification-providers/pushbullet.js +++ b/server/notification-providers/pushbullet.js @@ -8,7 +8,6 @@ class Pushbullet extends NotificationProvider { name = "pushbullet"; async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { - let okMsg = "Sent Successfully."; try { let pushbulletUrl = "https://api.pushbullet.com/v2/pushes"; @@ -23,26 +22,26 @@ class Pushbullet extends NotificationProvider { "type": "note", "title": "Uptime Kuma Alert", "body": "Testing Successful.", - } - await axios.post(pushbulletUrl, testdata, config) + }; + await axios.post(pushbulletUrl, testdata, config); } else if (heartbeatJSON["status"] == DOWN) { let downdata = { "type": "note", "title": "UptimeKuma Alert: " + monitorJSON["name"], "body": "[🔴 Down] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], - } - await axios.post(pushbulletUrl, downdata, config) + }; + await axios.post(pushbulletUrl, downdata, config); } else if (heartbeatJSON["status"] == UP) { let updata = { "type": "note", "title": "UptimeKuma Alert: " + monitorJSON["name"], "body": "[✅ Up] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], - } - await axios.post(pushbulletUrl, updata, config) + }; + await axios.post(pushbulletUrl, updata, config); } - return okMsg; + return this.sendSuccess; } catch (error) { - this.throwGeneralAxiosError(error) + this.throwGeneralAxiosError(error); } } } diff --git a/server/notification-providers/pushbullet.spec.js b/server/notification-providers/pushbullet.spec.js index 1cad877..8958b5e 100644 --- a/server/notification-providers/pushbullet.spec.js +++ b/server/notification-providers/pushbullet.spec.js @@ -1,14 +1,15 @@ -// jest.mock("nodemailer", () => ({ -// createTransport: jest.fn(), -// })); +jest.mock("axios", () => ({ + post: jest.fn(), +})); -// const mockNodeMailer = require("nodemailer"); - -const Pushbullet = require("./pushbullet"); +const axios = require("axios"); +const { UP, DOWN } = require("../../src/util"); +const NotificationSend = require("../notification"); beforeEach(() => { - // mockNodeMailer.createTransport.mockReset(); + axios.post.mockReset(); }); +const Pushbullet = require("./pushbullet"); describe("notification default information", () => { it("should have the correct name", () => { @@ -16,3 +17,185 @@ describe("notification default information", () => { expect(notification.name).toBe("pushbullet"); }); }); + +describe("notification to act properly on send", () => { + it("should call axios with the proper default data when UP", async () => { + + let response = { + data: { + Message: "OK" + } + }; + axios.post.mockResolvedValueOnce(response); + + let notif = new Pushbullet(); + let notificationConf = { + type: "pushbullet", + pushbulletAccessToken: "token", + }; + let monitorConf = { + name: "testing", + }; + let heartbeatConf = { + status: UP, + msg: "some message", + time: "example time", + }; + let msg = "PassedInMessage😀"; + let res = await notif.send(notificationConf, msg, monitorConf, heartbeatConf); + + expect(axios.post).toHaveBeenCalledWith("https://api.pushbullet.com/v2/pushes", { + "body": "[✅ Up] some message\nTime (UTC): example time", + "title": "UptimeKuma Alert: testing", + "type": "note", + }, { + "headers": { + "Access-Token": "token", + "Content-Type": "application/json", + }, + }); + expect(res).toBe("Sent Successfully."); + }); + it("should call axios with the proper default data when UP", async () => { + + let response = { + data: { + Message: "OK" + } + }; + axios.post.mockResolvedValueOnce(response); + + let notif = new Pushbullet(); + let notificationConf = { + type: "pushbullet", + pushbulletAccessToken: "token", + }; + let monitorConf = { + name: "testing", + }; + let heartbeatConf = { + status: DOWN, + msg: "some message", + time: "example time", + }; + let msg = "PassedInMessage😀"; + + let res = await notif.send(notificationConf, msg, monitorConf, heartbeatConf); + + expect(axios.post).toHaveBeenCalledWith("https://api.pushbullet.com/v2/pushes", { + "body": "[🔴 Down] some message\nTime (UTC): example time", + "title": "UptimeKuma Alert: testing", + "type": "note", + }, { + "headers": { + "Access-Token": "token", + "Content-Type": "application/json", + }, + }); + expect(res).toBe("Sent Successfully."); + }); + + it("should call axios with the proper data when monitor nil", async () => { + let response = { + data: { + Message: "OK" + } + }; + axios.post.mockResolvedValueOnce(response); + + let notif = new Pushbullet(); + let notificationConf = { + type: "pushbullet", + pushbulletAccessToken: "token", + }; + let msg = "PassedInMessage😀"; + + let res = await notif.send(notificationConf, msg, null, null); + + expect(axios.post).toHaveBeenCalledWith("https://api.pushbullet.com/v2/pushes", { + "body": "Testing Successful.", + "title": "Uptime Kuma Alert", + "type": "note", + }, { + "headers": { + "Access-Token": "token", + "Content-Type": "application/json", + }, + }); + expect(res).toBe("Sent Successfully."); + }); + +}); + +describe("notification to act properly on error", () => { + it("should respond with an axios error on error", async () => { + + axios.post.mockImplementation(() => { + throw new Error("Test Error"); + }); + let notif = new Pushbullet(); + let notificationConf = { + type: "pushbullet", + pushbulletAccessToken: "token", + }; + let msg = "PassedInMessage😀"; + + try { + await notif.send(notificationConf, msg, null, null); + expect("Error thrown").toBe(false); + } catch (e) { + expect(e.message).toBe("Error: Error: Test Error "); + } + + expect(axios.post).toHaveBeenCalledWith("https://api.pushbullet.com/v2/pushes", { + "body": "Testing Successful.", + "title": "Uptime Kuma Alert", + "type": "note", + }, { + "headers": { + "Access-Token": "token", + "Content-Type": "application/json", + }, + }); + }); + +}); + +describe("notification to get proper data from Notification.send", () => { + it("should call axios with proper data", async () => { + let response = { + data: { + Message: "OK" + } + }; + axios.post.mockResolvedValueOnce(response); + let notificationConf = { + type: "pushbullet", + pushbulletAccessToken: "token", + }; + let monitorConf = { + name: "testing", + }; + let heartbeatConf = { + status: UP, + msg: "some message", + time: "example time", + }; + let msg = "PassedInMessage😀"; + + NotificationSend.Notification.init(); + let res = await NotificationSend.Notification.send(notificationConf, msg, monitorConf, heartbeatConf); + expect(axios.post).toHaveBeenCalledWith("https://api.pushbullet.com/v2/pushes", { + "body": "[✅ Up] some message\nTime (UTC): example time", + "title": "UptimeKuma Alert: testing", + "type": "note", + }, { + "headers": { + "Access-Token": "token", + "Content-Type": "application/json", + }, + }); + expect(res).toBe("Sent Successfully."); + }); + +}); diff --git a/server/notification-providers/pushover.js b/server/notification-providers/pushover.js index 77ef1a3..76aa059 100644 --- a/server/notification-providers/pushover.js +++ b/server/notification-providers/pushover.js @@ -6,8 +6,7 @@ class Pushover extends NotificationProvider { name = "pushover"; async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { - let okMsg = "Sent Successfully."; - let pushoverlink = "https://api.pushover.net/1/messages.json" + let pushoverlink = "https://api.pushover.net/1/messages.json"; try { if (heartbeatJSON == null) { @@ -21,9 +20,9 @@ class Pushover extends NotificationProvider { "retry": "30", "expire": "3600", "html": 1, - } - await axios.post(pushoverlink, data) - return okMsg; + }; + await axios.post(pushoverlink, data); + return this.sendSuccess; } let data = { @@ -36,11 +35,11 @@ class Pushover extends NotificationProvider { "retry": "30", "expire": "3600", "html": 1, - } - await axios.post(pushoverlink, data) - return okMsg; + }; + await axios.post(pushoverlink, data); + return this.sendSuccess; } catch (error) { - this.throwGeneralAxiosError(error) + this.throwGeneralAxiosError(error); } } diff --git a/server/notification-providers/pushover.spec.js b/server/notification-providers/pushover.spec.js index dcc3adc..d86676b 100644 --- a/server/notification-providers/pushover.spec.js +++ b/server/notification-providers/pushover.spec.js @@ -1,14 +1,15 @@ -// jest.mock("nodemailer", () => ({ -// createTransport: jest.fn(), -// })); +jest.mock("axios", () => ({ + post: jest.fn(), +})); -// const mockNodeMailer = require("nodemailer"); - -const Pushover = require("./pushover"); +const axios = require("axios"); +const { UP, DOWN } = require("../../src/util"); +const NotificationSend = require("../notification"); beforeEach(() => { - // mockNodeMailer.createTransport.mockReset(); + axios.post.mockReset(); }); +const Pushover = require("./pushover"); describe("notification default information", () => { it("should have the correct name", () => { @@ -16,3 +17,125 @@ describe("notification default information", () => { expect(notification.name).toBe("pushover"); }); }); + +// describe("notification to act properly on send", () => { +// it("should call axios with the proper default data", async () => { + +// let response = { +// data: { +// Message: "OK" +// } +// }; +// axios.post.mockResolvedValueOnce(response); + +// let notif = new Pushover(); +// let notificationConf = { +// type: "octopush", +// pushoveruserkey: "123", +// pushoverapptoken: "token", +// pushoversounds: "ding", +// pushoverpriority: "6", +// pushovertitle: "Important Title!", +// }; +// let monitorConf = { +// }; +// let heartbeatConf = { +// time: "example time", +// }; +// let msg = "PassedInMessage😀"; +// let res = await notif.send(notificationConf, msg, monitorConf, heartbeatConf); + +// expect(axios.post).toHaveBeenCalledWith("", { +// }); +// expect(res).toBe("Sent Successfully."); +// }); + +// it("should call axios with the proper data when monitor nil", async () => { +// let response = { +// data: { +// Message: "OK" +// } +// }; +// axios.post.mockResolvedValueOnce(response); + +// let notif = new Pushover(); +// let notificationConf = { +// type: "octopush", +// pushoveruserkey: "123", +// pushoverapptoken: "token", +// pushoversounds: "ding", +// pushoverpriority: "6", +// pushovertitle: "Important Title!", +// }; +// let msg = "PassedInMessage😀"; + +// let res = await notif.send(notificationConf, msg, null, null); + +// expect(axios.post).toHaveBeenCalledWith("", { +// }); +// expect(res).toBe("Sent Successfully."); +// }); + +// }); + +// describe("notification to act properly on error", () => { +// it("should respond with an axios error on error", async () => { + +// axios.post.mockImplementation(() => { +// throw new Error("Test Error"); +// }); +// let notif = new Pushover(); +// let notificationConf = { +// type: "octopush", +// pushoveruserkey: "123", +// pushoverapptoken: "token", +// pushoversounds: "ding", +// pushoverpriority: "6", +// pushovertitle: "Important Title!", +// }; +// let msg = "PassedInMessage😀"; + +// try { +// await notif.send(notificationConf, msg, null, null); +// expect("Error thrown").toBe(false); +// } catch (e) { +// expect(e.message).toBe("Error: Error: Test Error "); +// } + +// expect(axios.post).toHaveBeenCalledWith("", { +// }); +// }); + +// }); + +// describe("notification to get proper data from Notification.send", () => { +// it("should call axios with proper data", async () => { +// let response = { +// data: { +// Message: "OK" +// } +// }; +// axios.post.mockResolvedValueOnce(response); +// let notificationConf = { +// type: "octopush", +// pushoveruserkey: "123", +// pushoverapptoken: "token", +// pushoversounds: "ding", +// pushoverpriority: "6", +// pushovertitle: "Important Title!", +// }; +// let monitorConf = { +// }; +// let heartbeatConf = { +// time: "example time", +// }; +// let msg = "PassedInMessage😀"; + +// NotificationSend.Notification.init(); +// let res = await NotificationSend.Notification.send(notificationConf, msg, monitorConf, heartbeatConf); +// expect(axios.post).toHaveBeenCalledWith("", { +// }); +// expect(res).toBe("Sent Successfully."); +// }); + +// });