From 0f7f3fc2f1c78cfaaaef435c1189ac79fe330b15 Mon Sep 17 00:00:00 2001 From: David Monjoie <dmo@odoo.com> Date: Tue, 27 Jun 2017 10:25:49 +0200 Subject: [PATCH] [FIX] web: prevent traceback on quickCreate in calendar --- .../js/views/calendar/calendar_controller.js | 4 +- .../web/static/tests/views/calendar_tests.js | 57 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/js/views/calendar/calendar_controller.js b/addons/web/static/src/js/views/calendar/calendar_controller.js index 6d827adf9906..db2394ddd1db 100644 --- a/addons/web/static/src/js/views/calendar/calendar_controller.js +++ b/addons/web/static/src/js/views/calendar/calendar_controller.js @@ -156,8 +156,10 @@ var CalendarController = AbstractController.extend({ self.quick.destroy(); self.quick = null; self.reload(id); - }, function () { + }, function (error, errorEvent) { // This will occurs if there are some more fields required + // Preventdefaulting the error event will prevent the traceback window + errorEvent.preventDefault(); event.data.options.disableQuickCreate = true; event.data.data.on_save = self.quick.destroy.bind(self.quick); self._onOpenCreate(event.data); diff --git a/addons/web/static/tests/views/calendar_tests.js b/addons/web/static/tests/views/calendar_tests.js index def68d54e162..25676e6547d2 100644 --- a/addons/web/static/tests/views/calendar_tests.js +++ b/addons/web/static/tests/views/calendar_tests.js @@ -349,6 +349,63 @@ QUnit.module('Views', { calendar.destroy(); }); + QUnit.test('quickcreate switching to actual create for required fields', function (assert) { + assert.expect(4); + + var event = $.Event(); + var calendar = createView({ + View: CalendarView, + model: 'event', + data: this.data, + arch: + '<calendar class="o_calendar_test" '+ + 'string="Events" ' + + 'event_open_popup="true" '+ + 'date_start="start" '+ + 'date_stop="stop" '+ + 'all_day="allday" '+ + 'mode="month" '+ + 'readonly_form_view_id="1">'+ + '<field name="name"/>'+ + '</calendar>', + archs: archs, + viewOptions: { + initialDate: initialDate, + }, + mockRPC: function (route, args) { + if (args.method === "create") { + return $.Deferred().reject({ + code: 200, + data: {}, + message: "Odoo server error", + }, event); + } + return this._super(route, args); + }, + }); + + // create a new event + var $cell = calendar.$('.fc-day-grid .fc-row:eq(2) .fc-day:eq(2)'); + testUtils.triggerMouseEvent($cell, "mousedown"); + testUtils.triggerMouseEvent($cell, "mouseup"); + + assert.strictEqual($('.modal-dialog.modal-sm .modal-title').text(), 'Create', + "should open the quick create dialog"); + + $('.modal-body input:first').val('new event in quick create').trigger('input'); + $('.modal button.btn:contains(Create)').trigger('click').trigger('click'); + + // If the event is not default-prevented, a traceback will be raised, which we do not want + assert.ok(event.isDefaultPrevented(), "fail deferred event should have been default-prevented"); + + assert.strictEqual($('.modal-dialog.modal-lg .modal-title').text(), 'Create: Events', + "should have switched to a bigger modal for an actual create rather than quickcreate"); + assert.strictEqual($('.modal-dialog.modal-lg .modal-body .o_form_view.o_form_editable').length, 1, + "should open the full event form view in a dialog"); + + calendar.destroy(); + }); + QUnit.test('create event with timezone in week mode', function (assert) { assert.expect(5); -- GitLab