[IMP] add a level of nesting to do_fill result so do_fill_table can get the view...
[odoo/odoo.git] / addons / base / static / test / list.js
1 $(document).ready(function () {
2     /**
3      * Tests a jQuery collection against a selector ("ands" the .is() of each
4      * member of the collection, instead of "or"-ing them)
5      *
6      * @param {jQuery} $c a jQuery collection object
7      * @param {String} selector the selector to test the collection against
8      */
9     var are = function ($c, selector) {
10         return ($c.filter(function () { return $(this).is(selector); }).length
11                 === $c.length);
12     };
13
14     var fvg = {fields_view: {
15         'fields': [],
16         'arch': {
17             'attrs': {string: ''}
18         }
19     }};
20
21     var openerp;
22     module("ListView", {
23         setup: function () {
24             openerp = window.openerp.init(true);
25             window.openerp.base.chrome(openerp);
26             // views loader stuff
27             window.openerp.base.data(openerp);
28             window.openerp.base.views(openerp);
29             window.openerp.base.form(openerp);
30             window.openerp.base.list(openerp);
31         }
32     });
33
34     asyncTest('render selection checkboxes', 2, function () {
35         var listview = new openerp.base.ListView(
36                 {}, null,
37                 'qunit-fixture', {model: null, ids: [null, null, null], index: 0});
38
39         listview.on_loaded(fvg);
40
41         listview.do_fill_table({records: [
42                 {data: {id: {value: null}}},
43                 {data: {id: {value: null}}},
44                 {data: {id: {value: null}}}
45         ]}).then(function () {
46             ok(are(listview.$element.find('tbody th'),
47                    '.oe-record-selector'));
48             ok(are(listview.$element.find('tbody th input'),
49                    ':checkbox:not([name])'));
50             start();
51         });
52     });
53     asyncTest('render no checkbox if selectable=false', 1, function () {
54         var listview = new openerp.base.ListView(
55                 {}, null,
56                 'qunit-fixture', {model: null, ids: [null, null, null], index: 0}, false,
57                 {selectable: false});
58
59         listview.on_loaded(fvg);
60
61         listview.do_fill_table({records: [
62                 {data: {id: {value: null}}},
63                 {data: {id: {value: null}}},
64                 {data: {id: {value: null}}}
65         ]}).then(function () {
66             equal(listview.$element.find('tbody th').length, 0);
67             start();
68         });
69     });
70     asyncTest('select a bunch of records', 2, function () {
71         var listview = new openerp.base.ListView(
72                 {}, null, 'qunit-fixture', {model: null, ids: [1, 2, 3], index: 0});
73         listview.on_loaded(fvg);
74
75         listview.do_fill_table({records: [
76                 {data: {id: {value: 1}}},
77                 {data: {id: {value: 2}}},
78                 {data: {id: {value: 3}}}
79         ]}).then(function () {
80             listview.$element.find('tbody th input:eq(2)')
81                              .attr('checked', true);
82             deepEqual(listview.get_selection(), [3]);
83             listview.$element.find('tbody th input:eq(1)')
84                              .attr('checked', true);
85             deepEqual(listview.get_selection(), [2, 3]);
86             start();
87         });
88     });
89     asyncTest('render deletion button if list is deletable', 1, function () {
90         var listview = new openerp.base.ListView(
91                 {}, null, 'qunit-fixture', {model: null, ids: [null, null, null], index: 0});
92
93         listview.on_loaded(fvg);
94
95         listview.do_fill_table({records: [
96                 {data: {id: {value: null}}},
97                 {data: {id: {value: null}}},
98                 {data: {id: {value: null}}}
99         ]}).then(function () {
100             equal(
101                 listview.$element.find('tbody tr td.oe-record-delete button').length,
102                 3);
103             start();
104         });
105     });
106     asyncTest('deletion button should lead on deletion in the dataset',
107               2, function () {
108         var deleted;
109         var listview = new openerp.base.ListView(
110                 {}, null, 'qunit-fixture', {model: null, unlink: function (ids) {
111             deleted = ids;
112         }, ids: [1, 2, 3], index: 0});
113
114         listview.on_loaded(fvg);
115
116         listview.do_fill_table({records: [
117                 {data: {id: {value: 1}}},
118                 {data: {id: {value: 2}}},
119                 {data: {id: {value: 3}}}
120         ]}).then(function () {
121             listview.$element.find('tbody td.oe-record-delete:eq(2) button').click();
122             deepEqual(deleted, [3]);
123             listview.$element.find('tbody td.oe-record-delete:eq(0) button').click();
124             deepEqual(deleted, [1]);
125             start();
126         });
127     });
128     asyncTest('multiple records deletion', 1, function () {
129         var deleted;
130         var listview = new openerp.base.ListView(
131                 {}, null, 'qunit-fixture', {model: null, unlink: function (ids) {
132             deleted = ids;
133         }, ids: [1, 2, 3], index: 0});
134
135         listview.on_loaded(fvg);
136
137         listview.do_fill_table({records: [
138                 {data: {id: {value: 1}}},
139                 {data: {id: {value: 2}}},
140                 {data: {id: {value: 3}}}
141         ]}).then(function () {
142             listview.$element.find('tbody th input:eq(2)')
143                              .attr('checked', true);
144             listview.$element.find('tbody th input:eq(1)')
145                              .attr('checked', true);
146
147             listview.$element.find('#oe-list-delete').click();
148             deepEqual(deleted, [2, 3]);
149             start();
150         });
151     });
152 });