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: ''+ ''+ '', viewOptions: { initialDate: initialDate, }, mockRPC: 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(); } return 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(); }); }); });