With this commit we try to improve the way the events are displayed to the user. Now, an event is displayed for each attendee of the event that are selected in the filter. These events are displayed correctly based on the status of the attendee in the event. The colors displayed for the events now represent the attendees and not the organizer. If an attendee edit an event, it is edited for all others attendees. Also, when an attendee that is not the organizer try to delete the event, then the event is now declined in place of being deleted. If the organizer delete the event, it is deleted for all attendees. In case of an event where all attendees have declined it but the organizer, the organizer see now a danger icon before the name of the event and it's outlined and not filled with color, no matter of the actual status of the organizer in the event. task-2196775 COM PR: odoo/odoo#55190 ENT PR: odoo/enterprise#12196 UPG PR: odoo/upgrade#1532
128 lines
5.5 KiB
JavaScript
128 lines
5.5 KiB
JavaScript
odoo.define('google_calendar.calendar_tests', function (require) {
|
|
"use strict";
|
|
|
|
var GoogleCalendarView = require('calendar.CalendarView');
|
|
var testUtils = require('web.test_utils');
|
|
|
|
var createCalendarView = testUtils.createCalendarView;
|
|
|
|
var initialDate = new Date("2016-12-12T08:00:00Z");
|
|
|
|
|
|
QUnit.module('Google Calendar', {
|
|
beforeEach: function () {
|
|
this.data = {
|
|
'calendar.event': {
|
|
fields: {
|
|
id: {string: "ID", type: "integer"},
|
|
user_id: {string: "user", type: "many2one", relation: 'user'},
|
|
partner_id: {string: "user", type: "many2one", relation: 'partner', related: 'user_id.partner_id'},
|
|
name: {string: "name", type: "char"},
|
|
start_date: {string: "start date", type: "date"},
|
|
stop_date: {string: "stop date", type: "date"},
|
|
start: {string: "start datetime", type: "datetime"},
|
|
stop: {string: "stop datetime", type: "datetime"},
|
|
allday: {string: "allday", type: "boolean"},
|
|
partner_ids: {string: "attendees", type: "one2many", relation: 'partner'},
|
|
type: {string: "type", type: "integer"},
|
|
},
|
|
records: [
|
|
{id: 5, user_id: 4, partner_id: 4, name: "event 1", start: "2016-12-13 15:55:05", stop: "2016-12-15 18:55:05", allday: false, partner_ids: [], type: 2},
|
|
{id: 6, user_id: 4, partner_id: 4, name: "event 2", start: "2016-12-18 08:00:00", stop: "2016-12-18 09:00:00", allday: false, partner_ids: [], type: 3}
|
|
],
|
|
check_access_rights: function () {
|
|
return Promise.resolve(true);
|
|
}
|
|
},
|
|
user: {
|
|
fields: {
|
|
id: {string: "ID", type: "integer"},
|
|
display_name: {string: "Displayed name", type: "char"},
|
|
partner_id: {string: "partner", type: "many2one", relation: 'partner'},
|
|
image_1920: {string: "image", type: "integer"},
|
|
},
|
|
records: [
|
|
{id: 4, display_name: "user 4", partner_id: 4},
|
|
]
|
|
},
|
|
partner: {
|
|
fields: {
|
|
id: {string: "ID", type: "integer"},
|
|
display_name: {string: "Displayed name", type: "char"},
|
|
image_1920: {string: "image", type: "integer"},
|
|
},
|
|
records: [
|
|
{id: 4, display_name: "partner 4", image_1920: 'DDD'}
|
|
]
|
|
},
|
|
filter_partner: {
|
|
fields: {
|
|
id: {string: "ID", type: "integer"},
|
|
user_id: {string: "user", type: "many2one", relation: 'user'},
|
|
partner_id: {string: "partner", type: "many2one", relation: 'partner'},
|
|
},
|
|
records: [
|
|
{id: 3, user_id: 4, partner_id: 4}
|
|
]
|
|
},
|
|
};
|
|
}
|
|
}, function () {
|
|
|
|
QUnit.test('sync google calendar', async function (assert) {
|
|
assert.expect(9);
|
|
|
|
var calendar = await createCalendarView({
|
|
View: GoogleCalendarView,
|
|
model: 'calendar.event',
|
|
data: this.data,
|
|
arch:
|
|
'<calendar class="o_calendar_test" '+
|
|
'js_class="attendee_calendar" '+
|
|
'date_start="start" '+
|
|
'date_stop="stop" '+
|
|
'mode="month">'+
|
|
'<field name="name"/>'+
|
|
'</calendar>',
|
|
viewOptions: {
|
|
initialDate: initialDate,
|
|
},
|
|
mockRPC: async function (route, args) {
|
|
if (route === '/google_calendar/sync_data') {
|
|
assert.step(route);
|
|
this.data['calendar.event'].records.push(
|
|
{id: 7, user_id: 4, partner_id: 4, name: "event from google calendar", start: "2016-12-28 15:55:05", stop: "2016-12-29 18:55:05", allday: false, partner_ids: [], type: 2}
|
|
);
|
|
return Promise.resolve({status: 'need_refresh'});
|
|
} else if (route === '/web/dataset/call_kw/calendar.event/search_read') {
|
|
assert.step(route);
|
|
} else if (route === '/microsoft_calendar/sync_data') {
|
|
return Promise.resolve();
|
|
} else if (route === '/web/dataset/call_kw/res.partner/get_attendee_detail') {
|
|
return Promise.resolve([]);
|
|
}
|
|
return await this._super.apply(this, arguments);
|
|
},
|
|
});
|
|
|
|
assert.containsN(calendar, '.fc-event', 3, "should display 3 events on the month");
|
|
|
|
await testUtils.dom.click(calendar.$('.o_calendar_button_next'));
|
|
await testUtils.dom.click(calendar.$('.o_calendar_button_prev'));
|
|
|
|
assert.verifySteps([
|
|
'/google_calendar/sync_data',
|
|
'/web/dataset/call_kw/calendar.event/search_read',
|
|
'/google_calendar/sync_data',
|
|
'/web/dataset/call_kw/calendar.event/search_read',
|
|
'/google_calendar/sync_data',
|
|
'/web/dataset/call_kw/calendar.event/search_read',
|
|
], 'should do a search_read before and after the call to sync_data');
|
|
|
|
assert.containsN(calendar, '.fc-event', 5, "should now display 4 events on the month");
|
|
|
|
calendar.destroy();
|
|
});
|
|
});
|
|
});
|