import { SmsSendLogService } from "./sms-send-log.service"; import { SmsSendLogKind, SmsSendLogOperation, SmsSendLogProvider, SmsSendLogStatus, } from "../schema/sms-send-log.schema"; describe("SmsSendLogService", () => { const createMock = jest.fn(); let service: SmsSendLogService; beforeEach(() => { createMock.mockReset(); createMock.mockResolvedValue({}); service = new SmsSendLogService({ create: createMock, } as never); delete process.env.SMS; delete process.env.SMS_PROVIDER; process.env.AUTH_SMS_TEMPLATE = "auth-otp"; process.env.AUTH_SMS_MESSAGE = "کاربر محترم رمز یکبار مصرف شما:\nCode: {token}"; }); it("records successful verifyLookup OTP with plain-text code and kavenegar sender", async () => { await service.recordGatewayVerifyLookup({ data: { receptor: "09120000000", template: "auth-otp", token: "54321", isOtp: true, }, startedAt: Date.now() - 12, result: { return: { status: 200 } }, }); expect(createMock).toHaveBeenCalledTimes(1); const doc = createMock.mock.calls[0][0]; expect(doc).toMatchObject({ receptor: "09120000000", provider: SmsSendLogProvider.KAVENEGAR, sender: "10008663", operation: SmsSendLogOperation.VERIFY_LOOKUP, status: SmsSendLogStatus.SUCCESS, kind: SmsSendLogKind.OTP, isOtp: true, template: "auth-otp", tokens: { token: "54321" }, messageText: "کاربر محترم رمز یکبار مصرف شما:\nCode: 54321", }); expect(doc.providerResponse).toEqual({ return: { status: 200 } }); }); it("records skipped fake OTP as tejaratno provider with plain-text OTP", async () => { await service.recordSkippedOtp({ receptor: "09121111111", otp: "12345", }); expect(createMock).toHaveBeenCalledWith( expect.objectContaining({ receptor: "09121111111", provider: SmsSendLogProvider.TEJARATNO, operation: SmsSendLogOperation.SKIPPED, status: SmsSendLogStatus.SKIPPED, kind: SmsSendLogKind.SKIPPED, isOtp: true, tokens: { token: "12345" }, messageText: "کاربر محترم رمز یکبار مصرف شما:\nCode: 12345", }), ); }); it("records parsian plain send with message text and no sender shortcode", async () => { process.env.SMS = "parsian"; await service.recordGatewaySend({ data: { receptor: "09123333333", message: "hello party" }, startedAt: Date.now(), result: { ok: true }, }); expect(createMock).toHaveBeenCalledWith( expect.objectContaining({ provider: SmsSendLogProvider.PARSIAN, sender: undefined, operation: SmsSendLogOperation.SEND, status: SmsSendLogStatus.SUCCESS, kind: SmsSendLogKind.PLAIN, messageText: "hello party", }), ); }); });