228 lines
8.9 KiB
JavaScript
228 lines
8.9 KiB
JavaScript
|
/* @odoo-module */
|
||
|
|
||
|
import { startServer } from "@bus/../tests/helpers/mock_python_environment";
|
||
|
|
||
|
import { start } from "@mail/../tests/helpers/test_utils";
|
||
|
|
||
|
import { makeDeferred, patchWithCleanup } from "@web/../tests/helpers/utils";
|
||
|
import { click, contains, insertText } from "@web/../tests/utils";
|
||
|
|
||
|
QUnit.module("activity mark as done popover");
|
||
|
|
||
|
QUnit.test("activity mark done popover simplest layout", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const partnerId = pyEnv["res.partner"].create({});
|
||
|
pyEnv["mail.activity"].create({
|
||
|
activity_category: "not_upload_file",
|
||
|
can_write: true,
|
||
|
res_id: partnerId,
|
||
|
res_model: "res.partner",
|
||
|
});
|
||
|
const { openView } = await start();
|
||
|
openView({
|
||
|
res_model: "res.partner",
|
||
|
res_id: partnerId,
|
||
|
views: [[false, "form"]],
|
||
|
});
|
||
|
await click(".btn", { text: "Mark Done" });
|
||
|
await contains(".o-mail-ActivityMarkAsDone");
|
||
|
await contains(".o-mail-ActivityMarkAsDone textarea[placeholder='Write Feedback']");
|
||
|
await contains(".o-mail-ActivityMarkAsDone button[aria-label='Done and Schedule Next']");
|
||
|
await contains(".o-mail-ActivityMarkAsDone button[aria-label='Done']");
|
||
|
await contains(".o-mail-ActivityMarkAsDone button", { text: "Discard" });
|
||
|
});
|
||
|
|
||
|
QUnit.test("activity with force next mark done popover simplest layout", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const partnerId = pyEnv["res.partner"].create({});
|
||
|
pyEnv["mail.activity"].create({
|
||
|
activity_category: "not_upload_file",
|
||
|
can_write: true,
|
||
|
chaining_type: "trigger",
|
||
|
res_id: partnerId,
|
||
|
res_model: "res.partner",
|
||
|
});
|
||
|
const { openView } = await start();
|
||
|
openView({
|
||
|
res_model: "res.partner",
|
||
|
res_id: partnerId,
|
||
|
views: [[false, "form"]],
|
||
|
});
|
||
|
await click(".btn", { text: "Mark Done" });
|
||
|
await contains(".o-mail-ActivityMarkAsDone");
|
||
|
await contains(".o-mail-ActivityMarkAsDone textarea[placeholder='Write Feedback']");
|
||
|
await contains(".o-mail-ActivityMarkAsDone button[aria-label='Done and Schedule Next']");
|
||
|
await contains(".o-mail-ActivityMarkAsDone button[aria-label='Done']", { count: 0 });
|
||
|
await contains(".o-mail-ActivityMarkAsDone button", { text: "Discard" });
|
||
|
});
|
||
|
|
||
|
QUnit.test("activity mark done popover mark done without feedback", async (assert) => {
|
||
|
const pyEnv = await startServer();
|
||
|
const partnerId = pyEnv["res.partner"].create({});
|
||
|
const activityId = pyEnv["mail.activity"].create({
|
||
|
activity_category: "not_upload_file",
|
||
|
can_write: true,
|
||
|
res_id: partnerId,
|
||
|
res_model: "res.partner",
|
||
|
});
|
||
|
const { openView } = await start({
|
||
|
async mockRPC(route, args) {
|
||
|
if (route === "/web/dataset/call_kw/mail.activity/action_feedback") {
|
||
|
assert.step("action_feedback");
|
||
|
assert.strictEqual(args.args.length, 1);
|
||
|
assert.strictEqual(args.args[0].length, 1);
|
||
|
assert.strictEqual(args.args[0][0], activityId);
|
||
|
assert.strictEqual(args.kwargs.attachment_ids.length, 0);
|
||
|
assert.notOk(args.kwargs.feedback);
|
||
|
// random value returned in order for the mock server to know that this route is implemented.
|
||
|
return true;
|
||
|
}
|
||
|
if (route === "/web/dataset/call_kw/mail.activity/unlink") {
|
||
|
// 'unlink' on non-existing record raises a server crash
|
||
|
throw new Error(
|
||
|
"'unlink' RPC on activity must not be called (already unlinked from mark as done)"
|
||
|
);
|
||
|
}
|
||
|
},
|
||
|
});
|
||
|
await openView({
|
||
|
res_model: "res.partner",
|
||
|
res_id: partnerId,
|
||
|
views: [[false, "form"]],
|
||
|
});
|
||
|
await click(".btn", { text: "Mark Done" });
|
||
|
await click(".o-mail-ActivityMarkAsDone button[aria-label='Done']");
|
||
|
assert.verifySteps(["action_feedback"]);
|
||
|
});
|
||
|
|
||
|
QUnit.test("activity mark done popover mark done with feedback", async (assert) => {
|
||
|
const pyEnv = await startServer();
|
||
|
const partnerId = pyEnv["res.partner"].create({});
|
||
|
const activityId = pyEnv["mail.activity"].create({
|
||
|
activity_category: "not_upload_file",
|
||
|
can_write: true,
|
||
|
res_id: partnerId,
|
||
|
res_model: "res.partner",
|
||
|
});
|
||
|
const { openView } = await start({
|
||
|
async mockRPC(route, args) {
|
||
|
if (route === "/web/dataset/call_kw/mail.activity/action_feedback") {
|
||
|
assert.step("action_feedback");
|
||
|
assert.strictEqual(args.args.length, 1);
|
||
|
assert.strictEqual(args.args[0].length, 1);
|
||
|
assert.strictEqual(args.args[0][0], activityId);
|
||
|
assert.strictEqual(args.kwargs.attachment_ids.length, 0);
|
||
|
assert.strictEqual(args.kwargs.feedback, "This task is done");
|
||
|
// random value returned in order for the mock server to know that this route is implemented.
|
||
|
return true;
|
||
|
}
|
||
|
if (route === "/web/dataset/call_kw/mail.activity/unlink") {
|
||
|
// 'unlink' on non-existing record raises a server crash
|
||
|
throw new Error(
|
||
|
"'unlink' RPC on activity must not be called (already unlinked from mark as done)"
|
||
|
);
|
||
|
}
|
||
|
},
|
||
|
});
|
||
|
openView({
|
||
|
res_model: "res.partner",
|
||
|
res_id: partnerId,
|
||
|
views: [[false, "form"]],
|
||
|
});
|
||
|
await click(".btn", { text: "Mark Done" });
|
||
|
await insertText(
|
||
|
".o-mail-ActivityMarkAsDone textarea[placeholder='Write Feedback']",
|
||
|
"This task is done"
|
||
|
);
|
||
|
await click(".o-mail-ActivityMarkAsDone button[aria-label='Done']");
|
||
|
assert.verifySteps(["action_feedback"]);
|
||
|
});
|
||
|
|
||
|
QUnit.test("activity mark done popover mark done and schedule next", async (assert) => {
|
||
|
const pyEnv = await startServer();
|
||
|
const partnerId = pyEnv["res.partner"].create({});
|
||
|
const activityId = pyEnv["mail.activity"].create({
|
||
|
activity_category: "not_upload_file",
|
||
|
can_write: true,
|
||
|
res_id: partnerId,
|
||
|
res_model: "res.partner",
|
||
|
});
|
||
|
const { env, openView } = await start({
|
||
|
async mockRPC(route, args) {
|
||
|
if (route === "/web/dataset/call_kw/mail.activity/action_feedback_schedule_next") {
|
||
|
assert.step("action_feedback_schedule_next");
|
||
|
assert.strictEqual(args.args.length, 1);
|
||
|
assert.strictEqual(args.args[0].length, 1);
|
||
|
assert.strictEqual(args.args[0][0], activityId);
|
||
|
assert.strictEqual(args.kwargs.feedback, "This task is done");
|
||
|
return false;
|
||
|
}
|
||
|
if (route === "/web/dataset/call_kw/mail.activity/unlink") {
|
||
|
// 'unlink' on non-existing record raises a server crash
|
||
|
throw new Error(
|
||
|
"'unlink' RPC on activity must not be called (already unlinked from mark as done)"
|
||
|
);
|
||
|
}
|
||
|
},
|
||
|
});
|
||
|
openView({
|
||
|
res_model: "res.partner",
|
||
|
res_id: partnerId,
|
||
|
views: [[false, "form"]],
|
||
|
});
|
||
|
patchWithCleanup(env.services.action, {
|
||
|
doAction() {
|
||
|
assert.step("activity_action");
|
||
|
throw new Error(
|
||
|
"The do-action event should not be triggered when the route doesn't return an action"
|
||
|
);
|
||
|
},
|
||
|
});
|
||
|
await click(".btn", { text: "Mark Done" });
|
||
|
await insertText(
|
||
|
".o-mail-ActivityMarkAsDone textarea[placeholder='Write Feedback']",
|
||
|
"This task is done"
|
||
|
);
|
||
|
await click(".o-mail-ActivityMarkAsDone button[aria-label='Done and Schedule Next']");
|
||
|
assert.verifySteps(["action_feedback_schedule_next"]);
|
||
|
});
|
||
|
|
||
|
QUnit.test("[technical] activity mark done & schedule next with new action", async (assert) => {
|
||
|
const pyEnv = await startServer();
|
||
|
const partnerId = pyEnv["res.partner"].create({});
|
||
|
pyEnv["mail.activity"].create({
|
||
|
activity_category: "not_upload_file",
|
||
|
can_write: true,
|
||
|
res_id: partnerId,
|
||
|
res_model: "res.partner",
|
||
|
});
|
||
|
const { env, openView } = await start({
|
||
|
async mockRPC(route, args) {
|
||
|
if (route === "/web/dataset/call_kw/mail.activity/action_feedback_schedule_next") {
|
||
|
return { type: "ir.actions.act_window" };
|
||
|
}
|
||
|
},
|
||
|
});
|
||
|
openView({
|
||
|
res_model: "res.partner",
|
||
|
res_id: partnerId,
|
||
|
views: [[false, "form"]],
|
||
|
});
|
||
|
const def = makeDeferred();
|
||
|
patchWithCleanup(env.services.action, {
|
||
|
doAction(action) {
|
||
|
def.resolve();
|
||
|
assert.step("activity_action");
|
||
|
assert.deepEqual(
|
||
|
action,
|
||
|
{ type: "ir.actions.act_window" },
|
||
|
"The content of the action should be correct"
|
||
|
);
|
||
|
},
|
||
|
});
|
||
|
await click(".btn", { text: "Mark Done" });
|
||
|
await click(".o-mail-ActivityMarkAsDone button[aria-label='Done and Schedule Next']");
|
||
|
await def;
|
||
|
assert.verifySteps(["activity_action"]);
|
||
|
});
|