summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Monjoie <dmo@odoo.com>2017-06-27 10:25:49 +0200
committerDavid Monjoie <dmo@odoo.com>2017-07-03 08:15:23 +0200
commit0f7f3fc2f1c78cfaaaef435c1189ac79fe330b15 (patch)
treebc5778033be26b94c982834ecd5ac353ec25ea46
parent58e130ced5067c02160b14e45ca1c0642d17c6e9 (diff)
[FIX] web: prevent traceback on quickCreate in calendar
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_controller.js4
-rw-r--r--addons/web/static/tests/views/calendar_tests.js57
2 files changed, 60 insertions, 1 deletions
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 6d827adf990..db2394ddd1d 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 def68d54e16..25676e6547d 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);