Make the three jsonrpc protocols work correctly with and without session overriding and added tests for all the cases.
That's one small step for a man, a giant leap for all the poor programmers that would have to use that shit one day. bzr revid: nicolas.vanhoren@openerp.com-20130802150815-k2yuf0b3ku5fvx7a
This commit is contained in:
parent
adc722348c
commit
ab03d9c280
|
@ -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"""<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
@ -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
|
|
@ -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) {
|
||||
|
|
|
@ -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");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue