[ADD] a bunch of tests of the dataset API (translation of javascript dataset calls...
authorXavier Morel <xmo@openerp.com>
Fri, 24 Feb 2012 10:57:53 +0000 (11:57 +0100)
committerXavier Morel <xmo@openerp.com>
Fri, 24 Feb 2012 10:57:53 +0000 (11:57 +0100)
bzr revid: xmo@openerp.com-20120224105753-hqf7o9xwwkc0xcok

addons/web/static/test/fulltest/dataset.js

index 4b94826..21b6b80 100644 (file)
 $(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
+
 });