diff --git a/addons/web/controllers/testing.py b/addons/web/controllers/testing.py index 36afbd1e653..b51b12fc53d 100644 --- a/addons/web/controllers/testing.py +++ b/addons/web/controllers/testing.py @@ -13,6 +13,8 @@ from openerp.modules import module from .main import module_topological_sort from .. import http +from ..http import request + NOMODULE_TEMPLATE = Template(u""" @@ -162,3 +164,11 @@ class TestRunnerController(http.Controller): for path in glob.glob(normalized_pattern): # replace OS path separators (from join & normpath) by URI ones yield path[len(root):].replace(os.path.sep, '/') + + @http.route('/web/tests/set_session_value', type='json', auth="none") + def set_session_value(self, value): + request.session.some_test_value = value + + @http.route('/web/tests/get_session_value', type='json', auth="none") + def get_session_value(self): + return request.session.some_test_value \ No newline at end of file diff --git a/addons/web/static/src/js/openerpframework.js b/addons/web/static/src/js/openerpframework.js index 226480c96dd..d8e946d0bed 100644 --- a/addons/web/static/src/js/openerpframework.js +++ b/addons/web/static/src/js/openerpframework.js @@ -914,9 +914,9 @@ openerp.web.JsonRPC = openerp.web.Class.extend(openerp.web.PropertiesMixin, { function always() { self.avoid_recursion = false; } - if (this.override_server) { - return this.rpc("/gen_session_id", {}).then(function() { - debugger; + if (this.override_session) { + return this.rpc("/gen_session_id", {}).then(function(result) { + self.session_id = result; }).always(always); } else { this.avoid_recursion = true; @@ -957,10 +957,15 @@ openerp.web.JsonRPC = openerp.web.Class.extend(openerp.web.PropertiesMixin, { var fct; if (self.origin_server) { fct = openerp.web.jsonRpc; + if (self.override_session) { + options.headers = _.extend({}, options.headers, { + "X-Openerp-Session-Id": self.override_session ? self.session_id || '' : '', + }); + } } else { fct = openerp.web.jsonpRpc; url = self.url(url, null); - options.session_id = self.session_id; + options.session_id = self.session_id || ''; } var p = fct(url, "call", params, options); p = p.then(function (result) { diff --git a/addons/web/static/test/jsonrpc.js b/addons/web/static/test/jsonrpc.js index 76e83dc2097..89e4df8694f 100644 --- a/addons/web/static/test/jsonrpc.js +++ b/addons/web/static/test/jsonrpc.js @@ -1,23 +1,105 @@ openerp.testing.section('jsonrpc', {}, function (test) { - test('basic', {asserts: 1}, function () { + test('basic-jsonrpc', {asserts: 1}, function () { var session = new openerp.web.JsonRPC(); return session.rpc("/gen_session_id", {}).then(function(result) { ok(result.length > 0, "Result returned by /gen_session_id"); }); }); - test('jsonprpc', {asserts: 1}, function () { + test('basic-jsonprpc', {asserts: 1}, function () { var session = new openerp.web.JsonRPC(); session.origin_server = false; return session.rpc("/gen_session_id", {}).then(function(result) { ok(result.length > 0, "Result returned by /gen_session_id"); }); }); - test('jsonprpc2', {asserts: 1}, function () { + test('basic-jsonprpc2', {asserts: 1}, function () { var session = new openerp.web.JsonRPC(); session.origin_server = false; return session.rpc("/gen_session_id", {}, {force2step: true}).then(function(result) { ok(result.length > 0, "Result returned by /gen_session_id"); }); }); + test('session-jsonrpc', {asserts: 2}, function () { + var session = new openerp.web.JsonRPC(); + var tmp = _.uniqueId("something"); + return session.rpc("/web/tests/set_session_value", {value: tmp}).then(function() { + ok(true, "set_session returned"); + return session.rpc("/web/tests/get_session_value", {}); + }).then(function(result) { + equal(result, tmp, "Got the same value from the session"); + }); + }); + test('session-jsonprpc', {asserts: 2}, function () { + var session = new openerp.web.JsonRPC(); + session.origin_server = false; + var tmp = _.uniqueId("something"); + return session.rpc("/web/tests/set_session_value", {value: tmp}).then(function() { + ok(true, "set_session returned"); + return session.rpc("/web/tests/get_session_value", {}); + }).then(function(result) { + equal(result, tmp, "Got the same value from the session"); + }); + }); + test('session-jsonprpc2', {asserts: 2}, function () { + var session = new openerp.web.JsonRPC(); + session.origin_server = false; + var tmp = _.uniqueId("something"); + return session.rpc("/web/tests/set_session_value", {value: tmp}, {force2step: true}).then(function() { + ok(true, "set_session returned"); + return session.rpc("/web/tests/get_session_value", {}, {force2step: true}); + }).then(function(result) { + equal(result, tmp, "Got the same value from the session"); + }); + }); + test('overridesession-jsonrpc', {asserts: 4}, function () { + var origin_session = new openerp.web.JsonRPC(); + var origin_tmp = _.uniqueId("something"); + var session = new openerp.web.JsonRPC(null, null, {override_session: true}); + var tmp = _.uniqueId("something_else"); + return session.rpc("/web/tests/set_session_value", {value: tmp}).then(function() { + ok(true, "set_session returned"); + return origin_session.rpc("/web/tests/set_session_value", {value: origin_tmp}); + }).then(function(result) { + ok(true, "set_session on origin returned"); + return session.rpc("/web/tests/get_session_value", {}); + }).then(function(result) { + equal(result, tmp, "Got the same value from the session"); + notEqual(result, origin_tmp, "Values in the different sessions should be different"); + }); + }); + test('overridesession-jsonprpc', {asserts: 4}, function () { + var origin_session = new openerp.web.JsonRPC(); + var origin_tmp = _.uniqueId("something"); + var session = new openerp.web.JsonRPC(null, null, {override_session: true}); + var tmp = _.uniqueId("something_else"); + session.origin_server = false; + return session.rpc("/web/tests/set_session_value", {value: tmp}).then(function() { + ok(true, "set_session returned"); + return origin_session.rpc("/web/tests/set_session_value", {value: origin_tmp}); + }).then(function(result) { + ok(true, "set_session on origin returned"); + return session.rpc("/web/tests/get_session_value", {}); + }).then(function(result) { + equal(result, tmp, "Got the same value from the session"); + notEqual(result, origin_tmp, "Values in the different sessions should be different"); + }); + }); + test('overridesession-jsonprpc2', {asserts: 4}, function () { + var origin_session = new openerp.web.JsonRPC(); + var origin_tmp = _.uniqueId("something"); + var session = new openerp.web.JsonRPC(null, null, {override_session: true}); + var tmp = _.uniqueId("something_else"); + session.origin_server = false; + return session.rpc("/web/tests/set_session_value", {value: tmp}, {force2step: true}).then(function() { + ok(true, "set_session returned"); + return origin_session.rpc("/web/tests/set_session_value", {value: origin_tmp}); + }).then(function(result) { + ok(true, "set_session on origin returned"); + return session.rpc("/web/tests/get_session_value", {}, {force2step: true}); + }).then(function(result) { + equal(result, tmp, "Got the same value from the session"); + notEqual(result, origin_tmp, "Values in the different sessions should be different"); + }); + }); });