From 27dfa4d12b2acc53176962f3cb0753e7349176ee Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 24 Feb 2012 11:57:53 +0100 Subject: [PATCH] [ADD] a bunch of tests of the dataset API (translation of javascript dataset calls to XMLRPC ones) bzr revid: xmo@openerp.com-20120224105753-hqf7o9xwwkc0xcok --- addons/web/static/test/fulltest/dataset.js | 144 ++++++++++++++++++++- 1 file changed, 139 insertions(+), 5 deletions(-) diff --git a/addons/web/static/test/fulltest/dataset.js b/addons/web/static/test/fulltest/dataset.js index 4b948261a3b..21b6b80cb80 100644 --- a/addons/web/static/test/fulltest/dataset.js +++ b/addons/web/static/test/fulltest/dataset.js @@ -1,11 +1,145 @@ $(document).ready(function () { var t = window.openerp.test_support; - t.module('check', 'data'); - t.test('check1', function (openerp) { - var ds = new openerp.web.DataSet({session: openerp.connection}, 'res.users', {}); - t.expect(ds.create({name: 'foo'}), function (result) { - ok(false, 'ha ha ha') + t.module('Dataset shortcuts', 'data'); + t.test('read_index', function (openerp) { + var ds = new openerp.web.DataSet( + {session: openerp.connection}, 'some.model'); + ds.ids = [10, 20, 30, 40, 50]; + ds.index = 2; + t.expect(ds.read_index(['a', 'b', 'c']), function (result) { + strictEqual(result.method, 'read'); + strictEqual(result.model, 'some.model'); + + strictEqual(result.args.length, 3); + deepEqual(result.args[0], [30]); + deepEqual(result.args[1], ['a', 'b', 'c']); + + ok(_.isEmpty(result.kwargs)); }); }); + t.test('default_get', function (openerp) { + var ds = new openerp.web.DataSet( + {session: openerp.connection}, 'some.model', {foo: 'bar'}); + t.expect(ds.default_get(['a', 'b', 'c']), function (result) { + strictEqual(result.method, 'default_get'); + strictEqual(result.model, 'some.model'); + + strictEqual(result.args.length, 2); + deepEqual(result.args[0], ['a', 'b', 'c']); + // FIXME: args[1] is context w/ user context, where to get? Hardcode? + strictEqual(result.args[1].foo, 'bar'); + + ok(_.isEmpty(result.kwargs)); + }); + }); + t.test('create', function (openerp) { + var ds = new openerp.web.DataSet({session: openerp.connection}, 'some.model'); + t.expect(ds.create({foo: 1, bar: 2}), function (r) { + strictEqual(r.method, 'create'); + + strictEqual(r.args.length, 2); + deepEqual(r.args[0], {foo: 1, bar: 2}); + + ok(_.isEmpty(r.kwargs)); + }); + }); + t.test('write', function (openerp) { + var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + t.expect(ds.write(42, {foo: 1}), function (r) { + strictEqual(r.method, 'write'); + + strictEqual(r.args.length, 3); + deepEqual(r.args[0], [42]); + deepEqual(r.args[1], {foo: 1}); + + ok(_.isEmpty(r.kwargs)); + }); + // FIXME: can't run multiple sessions in the same test(), fucks everything up +// t.expect(ds.write(42, {foo: 1}, { context: {lang: 'bob'} }), function (r) { +// strictEqual(r.args.length, 3); +// strictEqual(r.args[2].lang, 'bob'); +// }); + }); + t.test('unlink', function (openerp) { + var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + t.expect(ds.unlink([42]), function (r) { + strictEqual(r.method, 'unlink'); + + strictEqual(r.args.length, 2); + deepEqual(r.args[0], [42]); + + ok(_.isEmpty(r.kwargs)); + }); + }); + t.test('call', function (openerp) { + var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + t.expect(ds.call('frob', ['a', 'b', 42]), function (r) { + strictEqual(r.method, 'frob'); + + strictEqual(r.args.length, 3); + deepEqual(r.args, ['a', 'b', 42]); + + ok(_.isEmpty(r.kwargs)); + }); + }); + t.test('name_get', function (openerp) { + var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + t.expect(ds.name_get([1, 2], null), function (r) { + strictEqual(r.method, 'name_get'); + + strictEqual(r.args.length, 2); + deepEqual(r.args[0], [1, 2]); + + ok(_.isEmpty(r.kwargs)); + }); + }); + t.test('name_search, name', function (openerp) { + var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + t.expect(ds.name_search('bob'), function (r) { + strictEqual(r.method, 'name_search'); + + strictEqual(r.args.length, 5); + strictEqual(r.args[0], 'bob'); + // domain + deepEqual(r.args[1], []); + strictEqual(r.args[2], 'ilike'); + strictEqual(r.args[4], 0); + + ok(_.isEmpty(r.kwargs)); + }); + }); + t.test('name_search, domain & operator', function (openerp) { + var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + t.expect(ds.name_search(0, [['foo', '=', 3]], 'someop'), function (r) { + strictEqual(r.method, 'name_search'); + + strictEqual(r.args.length, 5); + strictEqual(r.args[0], ''); + // domain + deepEqual(r.args[1], [['foo', '=', 3]]); + strictEqual(r.args[2], 'someop'); + // limit + strictEqual(r.args[4], 0); + + ok(_.isEmpty(r.kwargs)); + }); + }); + t.test('exec_workflow', function (openerp) { + var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod'); + t.expect(ds.exec_workflow(42, 'foo'), function (r) { + strictEqual(r['service'], 'object'); + strictEqual(r.method, 'exec_workflow'); + + // db, id, password, model, method, id + strictEqual(r.args.length, 6); + strictEqual(r.args[4], 'foo'); + strictEqual(r.args[5], 42); + }); + }); + // TODO: SearchDataSet#read_slice? + // TODO: non-literal domains and contexts basics + // TODO: call_and_eval + // TODO: name_search, non-literal domains + });