forked from Mapan/odoo17e
148 lines
4.9 KiB
JavaScript
148 lines
4.9 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import { click, getFixture, mount, patchWithCleanup, nextTick } from "@web/../tests/helpers/utils";
|
|
import { browser } from "@web/core/browser/browser";
|
|
import { makeTestEnv } from "@web/../tests/helpers/mock_env";
|
|
import {
|
|
makeFakeUserService,
|
|
makeFakeDialogService,
|
|
makeFakeLocalizationService,
|
|
} from "@web/../tests/helpers/mock_services";
|
|
import { SMSSignerDialog } from "@sign/dialogs/dialogs";
|
|
import { registry } from "@web/core/registry";
|
|
import { hotkeyService } from "@web/core/hotkeys/hotkey_service";
|
|
import { uiService } from "@web/core/ui/ui_service";
|
|
|
|
const serviceRegistry = registry.category("services");
|
|
let target;
|
|
|
|
const fakePhoneNumber = "123456789";
|
|
const documentId = 23;
|
|
const signRequestItemToken = "abc";
|
|
const fakeCode = "1234";
|
|
|
|
QUnit.module("sms signer dialog", (hooks) => {
|
|
const mountSMSSignerDialog = async (mockRPC, postValidation = () => {}) => {
|
|
const env = await makeTestEnv({ mockRPC });
|
|
env.dialogData = {
|
|
isActive: true,
|
|
close: () => {},
|
|
};
|
|
|
|
await mount(SMSSignerDialog, target, {
|
|
props: {
|
|
signerPhone: fakePhoneNumber,
|
|
postValidation: postValidation,
|
|
close: () => {},
|
|
},
|
|
env,
|
|
});
|
|
};
|
|
|
|
hooks.beforeEach(async () => {
|
|
target = getFixture();
|
|
serviceRegistry.add("user", makeFakeUserService());
|
|
serviceRegistry.add("dialog", makeFakeDialogService());
|
|
serviceRegistry.add("localization", makeFakeLocalizationService());
|
|
serviceRegistry.add("ui", uiService);
|
|
serviceRegistry.add("hotkey", hotkeyService);
|
|
const signInfo = {
|
|
documentId,
|
|
signRequestItemToken,
|
|
};
|
|
serviceRegistry.add("signInfo", {
|
|
name: "signInfo",
|
|
start() {
|
|
return {
|
|
get(key) {
|
|
return signInfo[key];
|
|
},
|
|
};
|
|
},
|
|
});
|
|
});
|
|
|
|
QUnit.test("SMS Signer Dialog should be rendered", async (assert) => {
|
|
const mockRPC = async (route) => {
|
|
if (
|
|
route === `/sign/send-sms/${documentId}/${signRequestItemToken}/${fakePhoneNumber}`
|
|
) {
|
|
assert.step("sms-sent");
|
|
await nextTick();
|
|
assert.containsOnce(
|
|
target,
|
|
"button:contains('SMS Sent')",
|
|
"should show 'SMS sent' while sending SMS"
|
|
);
|
|
return new Promise((res, rej) => {
|
|
browser.setTimeout(() => res(true), 1000);
|
|
});
|
|
}
|
|
};
|
|
|
|
await mountSMSSignerDialog(mockRPC, (code) => {
|
|
assert.step("post-validation");
|
|
assert.strictEqual(code, fakeCode, "post validation should be called with same code");
|
|
});
|
|
|
|
assert.containsOnce(target, ".o_sign_validate_sms", "should render verify SMS button");
|
|
assert.containsOnce(target, ".o_sign_resend_sms");
|
|
assert.containsOnce(target, "input[name='phone']");
|
|
assert.strictEqual(target.querySelector("input[name='phone']").value, fakePhoneNumber);
|
|
|
|
await click(target.querySelector("button.o_sign_resend_sms"));
|
|
|
|
assert.verifySteps(["sms-sent"]);
|
|
|
|
target.querySelector("#o_sign_public_signer_sms_input").value = fakeCode;
|
|
await click(target.querySelector(".o_sign_validate_sms"));
|
|
assert.verifySteps(["post-validation"]);
|
|
});
|
|
|
|
QUnit.test("SMS Signer Dialog should handle errors", async (assert) => {
|
|
const mockRPC = (route) => {
|
|
if (
|
|
route === `/sign/send-sms/${documentId}/${signRequestItemToken}/${fakePhoneNumber}`
|
|
) {
|
|
assert.step("sms-failed");
|
|
return false;
|
|
}
|
|
};
|
|
|
|
patchWithCleanup(SMSSignerDialog.prototype, {
|
|
handleSMSError: () => {
|
|
assert.step("handle-sms-error");
|
|
},
|
|
});
|
|
|
|
await mountSMSSignerDialog(mockRPC);
|
|
|
|
await click(target.querySelector("button.o_sign_resend_sms"));
|
|
|
|
assert.verifySteps(["sms-failed", "handle-sms-error"]);
|
|
});
|
|
|
|
QUnit.test("SMS Signer Dialog timeout should enable re-send button", async (assert) => {
|
|
const mockRPC = (route) => {
|
|
if (
|
|
route === `/sign/send-sms/${documentId}/${signRequestItemToken}/${fakePhoneNumber}`
|
|
) {
|
|
return true;
|
|
}
|
|
};
|
|
|
|
patchWithCleanup(browser, {
|
|
setTimeout: (fn) => fn(),
|
|
});
|
|
|
|
await mountSMSSignerDialog(mockRPC);
|
|
|
|
await click(target.querySelector("button.o_sign_resend_sms"));
|
|
assert.containsOnce(
|
|
target,
|
|
"button:contains('Re-send SMS')",
|
|
"re-send sms button should be rendered"
|
|
);
|
|
});
|
|
});
|