@davidbolaji/termii-node
Version:
Node.js SDK for Termii API – send SMS, voice, OTP, and manage messaging with ease.
53 lines (52 loc) • 2.33 kB
JavaScript
import { CampaignsService } from "../messaging/campaign/CampaignsService";
describe("CampaignsService", () => {
let httpClient;
let service;
beforeEach(() => {
httpClient = { request: jest.fn() };
service = new CampaignsService(httpClient);
});
it("sends a campaign", async () => {
httpClient.request.mockResolvedValueOnce({
message: "Your campaign has been scheduled",
});
const result = await service.sendCampaign({
country_code: "234",
sender_id: "Termii",
message: "Welcome",
channel: "generic",
message_type: "plain",
phonebook_id: "abc123",
campaign_type: "personalized",
schedule_sms_status: "scheduled",
schedule_time: "2025-08-16 10:00",
});
expect(httpClient.request).toHaveBeenCalledWith("/sms/campaigns/send", expect.objectContaining({ method: "POST" }));
expect(result.message).toBe("Your campaign has been scheduled");
});
it("fetches campaigns", async () => {
httpClient.request.mockResolvedValueOnce({
data: [{ campaign_id: "C123", sender: "Termii" }],
});
const result = await service.fetchCampaigns();
expect(httpClient.request).toHaveBeenCalledWith("/sms/campaigns", expect.objectContaining({ method: "GET" }));
expect(result.data[0].campaign_id).toBe("C123");
});
it("fetches campaign history", async () => {
httpClient.request.mockResolvedValueOnce({
data: [{ id: 64, message: "Hi This is from Termii Campaign" }],
});
const result = await service.fetchCampaignHistory("C123");
expect(httpClient.request).toHaveBeenCalledWith("/sms/campaigns/C123", expect.objectContaining({ method: "GET" }));
expect(result.data[0].id).toBe(64);
});
it("retries a campaign", async () => {
httpClient.request.mockResolvedValueOnce({
message: "Your failed campaign has been retried",
status: "success",
});
const result = await service.retryCampaign("C123");
expect(httpClient.request).toHaveBeenCalledWith("/sms/campaigns/C123", expect.objectContaining({ method: "PATCH" }));
expect(result.status).toBe("success");
});
});