Files
yara724-api/src/sms-orchestration/entities/db-service/sms-send-log.service.spec.ts

96 lines
2.9 KiB
TypeScript

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",
}),
);
});
});