166 lines
6.6 KiB
JavaScript
166 lines
6.6 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import {
|
|
start,
|
|
startServer,
|
|
} from '@mail/../tests/helpers/test_utils';
|
|
|
|
import session from 'web.session';
|
|
import { date_to_str } from 'web.time';
|
|
import { patchWithCleanup } from '@web/../tests/helpers/utils';
|
|
|
|
|
|
QUnit.module('test_mail', {}, function () {
|
|
QUnit.module('systray_activity_menu_tests.js', {
|
|
async beforeEach() {
|
|
const tomorrow = new Date();
|
|
tomorrow.setDate(tomorrow.getDate() + 1);
|
|
const yesterday = new Date();
|
|
yesterday.setDate(yesterday.getDate() - 1);
|
|
const pyEnv = await startServer();
|
|
const resPartnerId1 = pyEnv['res.partner'].create({});
|
|
const mailTestActivityIds = pyEnv['mail.test.activity'].create([{}, {}, {}, {}]);
|
|
pyEnv['mail.activity'].create([
|
|
{ res_id: resPartnerId1, res_model: 'res.partner' },
|
|
{ res_id: mailTestActivityIds[0], res_model: 'mail.test.activity' },
|
|
{ date_deadline: date_to_str(tomorrow), res_id: mailTestActivityIds[1], res_model: 'mail.test.activity' },
|
|
{ date_deadline: date_to_str(tomorrow), res_id: mailTestActivityIds[2], res_model: 'mail.test.activity' },
|
|
{ date_deadline: date_to_str(yesterday), res_id: mailTestActivityIds[3], res_model: 'mail.test.activity' },
|
|
]);
|
|
},
|
|
});
|
|
|
|
QUnit.test('activity menu widget: menu with no records', async function (assert) {
|
|
assert.expect(1);
|
|
|
|
const { click } = await start({
|
|
mockRPC: function (route, args) {
|
|
if (args.method === 'systray_get_activities') {
|
|
return Promise.resolve([]);
|
|
}
|
|
},
|
|
});
|
|
await click('.o_ActivityMenuView_dropdownToggle');
|
|
assert.containsOnce(document.body, '.o_ActivityMenuView_noActivity');
|
|
});
|
|
|
|
QUnit.test('activity menu widget: activity menu with 2 models', async function (assert) {
|
|
assert.expect(10);
|
|
|
|
const { click, env } = await start();
|
|
|
|
await click('.o_ActivityMenuView_dropdownToggle');
|
|
assert.containsOnce(document.body, '.o_ActivityMenuView', 'should contain an instance of widget');
|
|
assert.ok(document.querySelectorAll('.o_ActivityMenuView_activityGroup').length);
|
|
assert.containsOnce(document.body, '.o_ActivityMenuView_counter', "widget should have notification counter");
|
|
assert.strictEqual(parseInt(document.querySelector('.o_ActivityMenuView_counter').innerText), 5, "widget should have 5 notification counter");
|
|
|
|
var context = {};
|
|
patchWithCleanup(env.services.action, {
|
|
doAction(action) {
|
|
assert.deepEqual(action.context, context, "wrong context value");
|
|
},
|
|
});
|
|
|
|
// case 1: click on "late"
|
|
context = {
|
|
force_search_count: 1,
|
|
search_default_activities_overdue: 1,
|
|
};
|
|
assert.containsOnce(document.body, '.o_ActivityMenuView_dropdownMenu.show', 'ActivityMenu should be open');
|
|
await click('.o_ActivityMenuView_activityGroupFilterButton[data-model_name="mail.test.activity"][data-filter="overdue"]');
|
|
assert.containsNone(document.body, '.show', 'ActivityMenu should be closed');
|
|
// case 2: click on "today"
|
|
context = {
|
|
force_search_count: 1,
|
|
search_default_activities_today: 1,
|
|
};
|
|
await click('.dropdown-toggle[title="Activities"]');
|
|
await click('.o_ActivityMenuView_activityGroupFilterButton[data-model_name="mail.test.activity"][data-filter="today"]');
|
|
// case 3: click on "future"
|
|
context = {
|
|
force_search_count: 1,
|
|
search_default_activities_upcoming_all: 1,
|
|
};
|
|
await click('.dropdown-toggle[title="Activities"]');
|
|
await click('.o_ActivityMenuView_activityGroupFilterButton[data-model_name="mail.test.activity"][data-filter="upcoming_all"]');
|
|
// case 4: click anywere else
|
|
context = {
|
|
force_search_count: 1,
|
|
search_default_activities_overdue: 1,
|
|
search_default_activities_today: 1,
|
|
};
|
|
await click('.dropdown-toggle[title="Activities"]');
|
|
await click('.o_ActivityMenuView_activityGroups > div[data-model_name="mail.test.activity"]');
|
|
});
|
|
|
|
QUnit.test('activity menu widget: activity view icon', async function (assert) {
|
|
assert.expect(14);
|
|
|
|
patchWithCleanup(session, { uid: 10 });
|
|
const { click, env } = await start();
|
|
|
|
await click('.o_ActivityMenuView_dropdownToggle');
|
|
assert.containsN(document.body, '.o_ActivityMenuView_activityGroupActionButton', 2,
|
|
"widget should have 2 activity view icons");
|
|
|
|
var first = document.querySelector('.o_ActivityMenuView_activityGroupActionButton[data-model_name="res.partner"]');
|
|
var second = document.querySelector('.o_ActivityMenuView_activityGroupActionButton[data-model_name="mail.test.activity"]');
|
|
assert.ok(first, "should have activity action linked to 'res.partner'");
|
|
assert.hasClass(first, 'fa-clock-o', "should display the activity action icon");
|
|
|
|
assert.ok(second, "should have activity action linked to 'mail.test.activity'");
|
|
assert.hasClass(second, 'fa-clock-o', "should display the activity action icon");
|
|
|
|
patchWithCleanup(env.services.action, {
|
|
doAction(action) {
|
|
if (action.name) {
|
|
assert.ok(action.domain, "should define a domain on the action");
|
|
assert.deepEqual(action.domain, [["activity_ids.user_id", "=", 10]],
|
|
"should set domain to user's activity only");
|
|
assert.step('do_action:' + action.name);
|
|
} else {
|
|
assert.step('do_action:' + action);
|
|
}
|
|
},
|
|
});
|
|
|
|
assert.hasClass(document.querySelector('.o-dropdown-menu'), 'show',
|
|
"dropdown should be expanded");
|
|
|
|
await click('.o_ActivityMenuView_activityGroupActionButton[data-model_name="mail.test.activity"]');
|
|
assert.containsNone(document.body, '.o-dropdown-menu',
|
|
"dropdown should be collapsed");
|
|
|
|
// click on the "res.partner" activity icon
|
|
await click('.dropdown-toggle[title="Activities"]');
|
|
await click('.o_ActivityMenuView_activityGroupActionButton[data-model_name="res.partner"]');
|
|
|
|
assert.verifySteps([
|
|
'do_action:mail.test.activity',
|
|
'do_action:res.partner'
|
|
]);
|
|
});
|
|
|
|
QUnit.test('activity menu widget: close on messaging menu click', async function (assert) {
|
|
assert.expect(2);
|
|
|
|
const { click } = await start();
|
|
|
|
await click('.dropdown-toggle[title="Activities"]');
|
|
assert.hasClass(
|
|
document.querySelector('.o_ActivityMenuView_dropdownMenu'),
|
|
'show',
|
|
"activity menu should be shown after click on itself"
|
|
);
|
|
|
|
await click(`.o_MessagingMenu_toggler`);
|
|
assert.containsNone(
|
|
document.body,
|
|
'.o_ActivityMenuView_dropdownMenu',
|
|
"activity menu should be hidden after click on messaging menu"
|
|
);
|
|
});
|
|
|
|
});
|