Skip to content

Instantly share code, notes, and snippets.

@RiansyahTohamba
Created May 23, 2023 03:46
Show Gist options
  • Save RiansyahTohamba/befb4127f7d20cfb5b34a647e6edb426 to your computer and use it in GitHub Desktop.
Save RiansyahTohamba/befb4127f7d20cfb5b34a647e6edb426 to your computer and use it in GitHub Desktop.
Nodemailer testing without actually send Email
const Lab = require("@hapi/lab");
const { expect } = require("chai");
const sinon = require("sinon");
const nodemailer = require("nodemailer");
const { PASS_MAIL, USER_MAIL } = process.env;
const { init } = require("../server_test");
const {
describe, it, beforeEach, afterEach,
} = exports.lab = Lab.script();
describe("POST /slik/create", () => {
let token;
let server;
let sendMailSpy;
beforeEach(async () => {
server = await init(); // Inisialisasi server Hapi
const options = {
method: "POST",
url: "/auth/signin",
payload: {
username: "82292319224",
password: "password",
},
};
const res = await server.inject(options);
token = res.result.token;
const transporter = nodemailer.createTransport({
service: "gmail",
auth: {
user: USER_MAIL,
pass: PASS_MAIL,
},
});
sendMailSpy = sinon.spy(transporter, "sendMail");
});
afterEach(async () => {
await server.stop(); // Menghentikan server Hapi
sendMailSpy.restore();
});
it("should create a new Slik Request & send Email", async () => {
const payload = {};
const response = await server.inject({
url: "/book/dummy/create",
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
},
payload,
});
expect(response.statusCode).to.equal(201);
// sinon.assert.called(sendMailSpy);
// Verifikasi operasi database melalui test-double
// expect(dbStub.calledOnce).to.be.true();
// expect(dbStub.getCall(0).args[0]).to.equal(payload);
});
});
// routes
{
method: "POST",
path: "/book/dummy/create",
config: Slik.createDummy,
},
// controller
module.exports.createDummy = async (request, h) => {
console.log("create record");
// ?
console.log("send email");
const nameList = ["Riansyah Tohamba"];
const mailList = ["riansyah.tohamba@kendari.com"];
const noLetter = "book/12/232";
const replacements = {
title: "New Request requested to you",
username: nameList,
header: "New Request need your review.",
bodyText: `New with number of letter: ${noLetter} has been created and request approved by you, Please click button bellow for more details`,
link: `${LOCAL_URL}/dashboard/request/10/detail`,
};
const subject = `New Request has been created with number: ${noLetter}`;
// attachment is null in create request
const emailRes = await sendEmail(h, replacements, subject, mailList);
if (emailRes.messageId !== undefined) {
return h.response({
emailNotif: `Email has sent: ${emailRes.messageId}`,
message: "create dummy success",
}).code(201);
}
// ini case dimana email gagal send karene network dan sebagainya
return emailRes;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment