From 66f28479372951584a9684032c5076bcc11ee9c2 Mon Sep 17 00:00:00 2001 From: Jeffrey Koehler Date: Sat, 23 Oct 2021 04:55:17 -0500 Subject: [PATCH] Feishu tests --- server/notification-providers/feishu.js | 7 +- server/notification-providers/feishu.spec.js | 166 ++++++++++++++++++- 2 files changed, 164 insertions(+), 9 deletions(-) diff --git a/server/notification-providers/feishu.js b/server/notification-providers/feishu.js index a3e3403..5ab8ca7 100644 --- a/server/notification-providers/feishu.js +++ b/server/notification-providers/feishu.js @@ -6,7 +6,6 @@ class Feishu extends NotificationProvider { name = "Feishu"; async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { - let okMsg = "Sent Successfully."; let feishuWebHookUrl = notification.feishuWebHookUrl; try { @@ -18,7 +17,7 @@ class Feishu extends NotificationProvider { }, }; await axios.post(feishuWebHookUrl, testdata); - return okMsg; + return this.sendSuccess; } if (heartbeatJSON["status"] == DOWN) { @@ -45,7 +44,7 @@ class Feishu extends NotificationProvider { }, }; await axios.post(feishuWebHookUrl, downdata); - return okMsg; + return this.sendSuccess; } if (heartbeatJSON["status"] == UP) { @@ -72,7 +71,7 @@ class Feishu extends NotificationProvider { }, }; await axios.post(feishuWebHookUrl, updata); - return okMsg; + return this.sendSuccess; } } catch (error) { this.throwGeneralAxiosError(error); diff --git a/server/notification-providers/feishu.spec.js b/server/notification-providers/feishu.spec.js index 5d34906..cb152f3 100644 --- a/server/notification-providers/feishu.spec.js +++ b/server/notification-providers/feishu.spec.js @@ -1,13 +1,15 @@ -// jest.mock("nodemailer", () => ({ -// createTransport: jest.fn(), -// })); +jest.mock("axios", () => ({ + post: jest.fn(), +})); -// const mockNodeMailer = require("nodemailer"); +const axios = require("axios"); +const { UP, DOWN } = require("../../src/util"); +const NotificationSend = require("../notification"); const Feishu = require("./feishu"); beforeEach(() => { - // mockNodeMailer.createTransport.mockReset(); + axios.post.mockReset(); }); describe("notification default information", () => { @@ -16,3 +18,157 @@ describe("notification default information", () => { expect(notification.name).toBe("Feishu"); }); }); + +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 Feishu(); + let notificationConf = { + feishuWebHookUrl: "feishuWebHookUrl" + }; + let msg = "PassedInMessage"; + let monitorConf = { + type: "http", + url: "https://www.google.com", + name: "testing", + }; + let heartbeatConf = { + status: UP, + msg: "some message", + time: "example time", + }; + let res = await notif.send(notificationConf, msg, monitorConf, heartbeatConf); + + expect(axios.post).toHaveBeenCalledWith("feishuWebHookUrl", { + content: { + post: { + zh_cn: { + content: [ + [ + { + tag: "text", + text: "[Up] some message\nTime (UTC): example time", + }, + ], + ], + title: "UptimeKuma Alert: testing", + }, + }, + }, + msg_type: "post", + }); + 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 Feishu(); + let notificationConf = { + feishuWebHookUrl: "feishuWebHookUrl" + }; + let msg = "PassedInMessage"; + + let res = await notif.send(notificationConf, msg, null, null); + + expect(axios.post).toHaveBeenCalledWith("feishuWebHookUrl", { + "content": { + "text": "PassedInMessage" + }, + "msg_type": "text" + }); + 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 notificationConf = { + feishuWebHookUrl: "feishuWebHookUrl" + + }; + let msg = "PassedInMessage"; + let notif = new Feishu(); + + 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("feishuWebHookUrl", { + content: { + text: "PassedInMessage", + }, + msg_type: "text", + }); + }); + +}); + +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: "Feishu", + feishuWebHookUrl: "feishuWebHookUrl" + }; + let monitorConf = { + type: "http", + url: "https://www.google.com", + name: "testing", + }; + let heartbeatConf = { + status: UP, + msg: "some message", + time: "example time", + }; + + NotificationSend.Notification.init(); + let res = await NotificationSend.Notification.send(notificationConf, "PassedInMessage", monitorConf, heartbeatConf); + expect(axios.post).toHaveBeenCalledWith("feishuWebHookUrl", { + content: { + post: { + zh_cn: { + content: [ + [ + { + tag: "text", + text: "[Up] some message\nTime (UTC): example time", + }, + ], + ], + title: "UptimeKuma Alert: testing", + }, + }, + }, + msg_type: "post", + }); + expect(res).toBe("Sent Successfully."); + }); + +});