diff --git a/web_readonly_bypass/README.rst b/web_readonly_bypass/README.rst index 36cbb7e9..19c6592f 100644 --- a/web_readonly_bypass/README.rst +++ b/web_readonly_bypass/README.rst @@ -63,6 +63,9 @@ Contributors * Jonathan Nemry * Laetitia Gangloff * Pierre Verkest +* Kalpana Hemnani +* Simone Orsi + Maintainer ---------- diff --git a/web_readonly_bypass/__manifest__.py b/web_readonly_bypass/__manifest__.py index c6c79c2a..23dc9b58 100644 --- a/web_readonly_bypass/__manifest__.py +++ b/web_readonly_bypass/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Read Only ByPass', 'version': '10.0.1.0.0', - "author": "ACSONE SA/NV,Kalpana Hemnani,Odoo Community Association (OCA)", + "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "http://www.acsone.eu", "license": "LGPL-3", 'category': 'Technical Settings', diff --git a/web_readonly_bypass/static/src/js/readonly_bypass.js b/web_readonly_bypass/static/src/js/readonly_bypass.js index ea3f460e..bafa80b7 100644 --- a/web_readonly_bypass/static/src/js/readonly_bypass.js +++ b/web_readonly_bypass/static/src/js/readonly_bypass.js @@ -1,9 +1,10 @@ -"use strict"; -(function(){ - var instance = openerp; - var QWeb = instance.web.qweb, _t = instance.web._t; +odoo.define('web_readonly_bypass', function(require) { + 'use strict'; - instance.web_readonly_bypass = { + var data = require('web.data'), + pyeval = require('web.pyeval'); + + var readonly_bypass = { /** * ignore readonly: place options['readonly_fields'] into the data * if nothing is specified into the context @@ -26,7 +27,7 @@ } }); } - data = $.extend(data,readonly_by_pass_fields); + data = $.extend(data, readonly_by_pass_fields); }, /** @@ -59,15 +60,13 @@ }, }; - var readonly_bypass = instance.web_readonly_bypass; - - instance.web.BufferedDataSet.include({ + data.BufferedDataSet.include({ init : function() { this._super.apply(this, arguments); }, /** - * Creates Overriding + * Create Overriding * * @param {Object} data field values to set on the new record * @param {Object} options Dictionary that can contain the following keys: @@ -77,13 +76,12 @@ */ create : function(data, options) { var self = this; - var context = instance.web.pyeval.eval('contexts', - self.context.__eval_context); + var context = pyeval.eval('contexts', self.context.get_eval_context()); readonly_bypass.ignore_readonly(data, options, true, context); return self._super(data,options); }, /** - * Creates Overriding + * Write Overriding * * @param {Object} data field values to set on the new record * @param {Object} options Dictionary that can contain the following keys: @@ -93,15 +91,14 @@ */ write : function(id, data, options) { var self = this; - var context = instance.web.pyeval.eval('contexts', - self.context.__eval_context); + var context = pyeval.eval('contexts', self.context.get_eval_context()); readonly_bypass.ignore_readonly(data, options, false, context); return self._super(id,data,options); }, }); - instance.web.DataSet.include({ + data.DataSet.include({ /* BufferedDataSet: case of 'add an item' into a form view */ @@ -138,4 +135,7 @@ }, }); -})(); + + return readonly_bypass; + +}); diff --git a/web_readonly_bypass/static/test/web_readonly_bypass.js b/web_readonly_bypass/static/test/web_readonly_bypass.js index fbc44f72..2a2e02d8 100644 --- a/web_readonly_bypass/static/test/web_readonly_bypass.js +++ b/web_readonly_bypass/static/test/web_readonly_bypass.js @@ -1,166 +1,166 @@ -openerp.testing.section( 'web_readonly_bypass', {}, -function(test){ - test('ignore_readonly', function(instance){ - var data = {}; - var mode_create = true; - var options = {}; - var context = {}; - instance.web_readonly_bypass.ignore_readonly(data, options, - mode_create, context); - deepEqual(data, - {}, - "Empty context and options mode create" - ); - - mode_create = false; - data = {}; - instance.web_readonly_bypass.ignore_readonly(data, options, - mode_create, context); - deepEqual(data, - {}, - "Empty context and options mode write" - ); - - mode_create = false; - data = {}; - context = {'readonly_by_pass': true}; - options = {'readonly_fields': {'field_1': 'va1-1', - 'field_2': false, +odoo.define_section('web_readonly_bypass', ['web_readonly_bypass'], function(test) { +"use strict"; + + + test('ignore_readonly', function(assert, ro_bypass){ + var data = {}; + var mode_create = true; + var options = {}; + var context = {}; + ro_bypass.ignore_readonly(data, options, mode_create, context); + assert.deepEqual(data, + {}, + "Empty context and options mode create" + ); + + mode_create = false; + data = {}; + ro_bypass.ignore_readonly(data, options, mode_create, context); + assert.deepEqual(data, + {}, + "Empty context and options mode write" + ); + + mode_create = false; + data = {}; + context = {'readonly_by_pass': true}; + options = {'readonly_fields': {'field_1': 'va1-1', + 'field_2': false, + 'field_3': 'val-3'}}; + ro_bypass.ignore_readonly(data, options, mode_create, context); + + assert.deepEqual(data, + {'field_1': 'va1-1', 'field_2': false, 'field_3': 'val-3'}, + "all fields mode write" + ); + + mode_create = true; + data = {}; + context = {'readonly_by_pass': true}; + options = {'readonly_fields': {'field_1': 'va1-1', + 'field_2': false, + 'field_3': 'val-3'}}; + ro_bypass.ignore_readonly(data, options, mode_create, context); + + assert.deepEqual(data, + {'field_1': 'va1-1', 'field_3': 'val-3'}, + "all fields mode create (false value are escaped)" + ); + + mode_create = true; + data = {}; + context = {}; + options = {'readonly_fields': {'field_1': 'va1-1', + 'field_2': false, + 'field_3': 'val-3'}}; + ro_bypass.ignore_readonly(data, options, mode_create, context); + + assert.deepEqual(data, + {}, + "without context, default, we won't save readonly fields" + ); + }); + + test('retrieve_readonly_by_pass_fields', ['web_readonly_bypass'], function(assert, ro_bypass){ + var context = {'readonly_by_pass': true} + var options = {'readonly_fields': {'field_1': 'va1-1', + 'field_2': 'val-2', 'field_3': 'val-3'}}; - instance.web_readonly_bypass.ignore_readonly(data, options, - mode_create, context); - deepEqual(data, - {'field_1': 'va1-1', 'field_2': false, 'field_3': 'val-3'}, - "all fields mode write" - ); - - mode_create = true; - data = {}; - context = {'readonly_by_pass': true}; - options = {'readonly_fields': {'field_1': 'va1-1', - 'field_2': false, - 'field_3': 'val-3'}}; - instance.web_readonly_bypass.ignore_readonly(data, options, - mode_create, context); - deepEqual(data, - {'field_1': 'va1-1', 'field_3': 'val-3'}, - "all fields mode create (false value are escaped)" - ); - - mode_create = true; - data = {}; - context = {}; - options = {'readonly_fields': {'field_1': 'va1-1', - 'field_2': false, - 'field_3': 'val-3'}}; - instance.web_readonly_bypass.ignore_readonly(data, options, - mode_create, context); - deepEqual(data, - {}, - "without context, default, we won't save readonly fields" - ); - }); - - test('retrieve_readonly_by_pass_fields', function(instance){ - var context = {'readonly_by_pass': true} - var options = {'readonly_fields': {'field_1': 'va1-1', - 'field_2': 'val-2', - 'field_3': 'val-3'}}; - deepEqual( - instance.web_readonly_bypass.retrieve_readonly_by_pass_fields( - options, context), - {'field_1': 'va1-1', 'field_2': 'val-2', 'field_3': 'val-3'}, - "All fields should be accepted!" - ); - - context = {'readonly_by_pass': ['field_1', 'field_3']}; - deepEqual( - instance.web_readonly_bypass.retrieve_readonly_by_pass_fields( - options, context), - {'field_1': 'va1-1','field_3': 'val-3'}, - "two field s1" - ); - - context = {'readonly_by_pass': ['field_1',]}; - deepEqual( - instance.web_readonly_bypass.retrieve_readonly_by_pass_fields( - options, context), - {'field_1': 'va1-1'}, - "Only field 1" - ); - - context = {'readonly_by_pass': []}; - deepEqual( - instance.web_readonly_bypass.retrieve_readonly_by_pass_fields( - options, context), - {}, - "Empty context field" - ); - - context = null; - deepEqual( - instance.web_readonly_bypass.retrieve_readonly_by_pass_fields( - options, context), - {}, - "Null context" - ); - - context = false; - deepEqual( - instance.web_readonly_bypass.retrieve_readonly_by_pass_fields( - options, context), - {}, - "false context" - ); - - context = {'readonly_by_pass': true} - options = {'readonly_fields': {'field_1': 'va1-1'}}; - deepEqual( - instance.web_readonly_bypass.retrieve_readonly_by_pass_fields( - options, context), - {'field_1': 'va1-1'}, - "Only one option" - ); - - - options = {'readonly_fields': {}}; - deepEqual( - instance.web_readonly_bypass.retrieve_readonly_by_pass_fields( - options, context), - {}, - "Empty readonly_fields option" - ); - - options = {}; - deepEqual( - instance.web_readonly_bypass.retrieve_readonly_by_pass_fields( - options, context), - {}, - "Empty option" - ); - - options = null; - deepEqual( - instance.web_readonly_bypass.retrieve_readonly_by_pass_fields( - options, context), - {}, - "null option" - ); - - options = false; - deepEqual( - instance.web_readonly_bypass.retrieve_readonly_by_pass_fields( - options, context), - {}, - "false option" - ); - - context = false; - deepEqual( - instance.web_readonly_bypass.retrieve_readonly_by_pass_fields( - options, context), - {}, - "false option and false context" - ); - }); + assert.deepEqual( + ro_bypass.retrieve_readonly_by_pass_fields( + options, context), + {'field_1': 'va1-1', 'field_2': 'val-2', 'field_3': 'val-3'}, + "All fields should be accepted!" + ); + + context = {'readonly_by_pass': ['field_1', 'field_3']}; + assert.deepEqual( + ro_bypass.retrieve_readonly_by_pass_fields( + options, context), + {'field_1': 'va1-1','field_3': 'val-3'}, + "two field s1" + ); + + context = {'readonly_by_pass': ['field_1',]}; + assert.deepEqual( + ro_bypass.retrieve_readonly_by_pass_fields( + options, context), + {'field_1': 'va1-1'}, + "Only field 1" + ); + + context = {'readonly_by_pass': []}; + assert.deepEqual( + ro_bypass.retrieve_readonly_by_pass_fields( + options, context), + {}, + "Empty context field" + ); + + context = null; + assert.deepEqual( + ro_bypass.retrieve_readonly_by_pass_fields( + options, context), + {}, + "Null context" + ); + + context = false; + assert.deepEqual( + ro_bypass.retrieve_readonly_by_pass_fields( + options, context), + {}, + "false context" + ); + + context = {'readonly_by_pass': true} + options = {'readonly_fields': {'field_1': 'va1-1'}}; + assert.deepEqual( + ro_bypass.retrieve_readonly_by_pass_fields( + options, context), + {'field_1': 'va1-1'}, + "Only one option" + ); + + + options = {'readonly_fields': {}}; + assert.deepEqual( + ro_bypass.retrieve_readonly_by_pass_fields( + options, context), + {}, + "Empty readonly_fields option" + ); + + options = {}; + assert.deepEqual( + ro_bypass.retrieve_readonly_by_pass_fields( + options, context), + {}, + "Empty option" + ); + + options = null; + assert.deepEqual( + ro_bypass.retrieve_readonly_by_pass_fields( + options, context), + {}, + "null option" + ); + + options = false; + assert.deepEqual( + ro_bypass.retrieve_readonly_by_pass_fields( + options, context), + {}, + "false option" + ); + + context = false; + assert.deepEqual( + ro_bypass.retrieve_readonly_by_pass_fields( + options, context), + {}, + "false option and false context" + ); + }); }); diff --git a/web_readonly_bypass/tests/__init__.py b/web_readonly_bypass/tests/__init__.py new file mode 100644 index 00000000..6dab214a --- /dev/null +++ b/web_readonly_bypass/tests/__init__.py @@ -0,0 +1 @@ +from . import test_ui diff --git a/web_readonly_bypass/tests/test_ui.py b/web_readonly_bypass/tests/test_ui.py new file mode 100644 index 00000000..6b14af62 --- /dev/null +++ b/web_readonly_bypass/tests/test_ui.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017 Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from odoo.tests import HttpCase + + +class TestUi(HttpCase): + + def test_ui_web(self): + self.phantom_js( + "/web/tests?module=web_readonly_bypass", + "", + login="admin", + ) diff --git a/web_readonly_bypass/views/readonly_bypass.xml b/web_readonly_bypass/views/readonly_bypass.xml index 6a4a9ee3..63935cc7 100644 --- a/web_readonly_bypass/views/readonly_bypass.xml +++ b/web_readonly_bypass/views/readonly_bypass.xml @@ -1,16 +1,14 @@ - - - + + - - - \ No newline at end of file + +