[MERGE] from trunk
[odoo/odoo.git] / addons / web / static / test / evals.js
1 openerp.testing.section('eval.types', {
2     dependencies: ['web.coresetup']
3 }, function (test) {
4     test('strftime', function (instance) {
5         var d = new Date();
6         var context = instance.web.pyeval.context();
7         strictEqual(
8             py.eval("time.strftime('%Y')", context),
9             String(d.getFullYear()));
10         strictEqual(
11             py.eval("time.strftime('%Y')+'-01-30'", context),
12             String(d.getFullYear()) + '-01-30');
13         strictEqual(
14             py.eval("time.strftime('%Y-%m-%d %H:%M:%S')", context),
15             _.str.sprintf('%04d-%02d-%02d %02d:%02d:%02d',
16                 d.getFullYear(), d.getMonth() + 1, d.getDate(),
17                 d.getHours(), d.getMinutes(), d.getSeconds()));
18     });
19 });
20 openerp.testing.section('eval.contexts', {
21     dependencies: ['web.coresetup']
22 }, function (test) {
23     test('context_recursive', function (instance) {
24         var context_to_eval = [{
25             __ref: 'context',
26             __debug: '{"foo": context.get("bar", "qux")}'
27         }];
28         deepEqual(
29             instance.web.pyeval.eval('contexts', context_to_eval, {bar: "ok"}),
30             {foo: 'ok'});
31         deepEqual(
32             instance.web.pyeval.eval('contexts', context_to_eval, {bar: false}),
33             {foo: false});
34         deepEqual(
35             instance.web.pyeval.eval('contexts', context_to_eval),
36             {foo: 'qux'});
37     });
38     test('context_sequences', function (instance) {
39         // Context n should have base evaluation context + all of contexts
40         // 0..n-1 in its own evaluation context
41         var active_id = 4;
42         var result = instance.web.pyeval.eval('contexts', [
43             {
44                 "__contexts": [
45                     {
46                         "department_id": false,
47                         "lang": "en_US",
48                         "project_id": false,
49                         "section_id": false,
50                         "tz": false,
51                         "uid": 1
52                     },
53                     { "search_default_create_uid": 1 },
54                     {}
55                 ],
56                 "__eval_context": null,
57                 "__ref": "compound_context"
58             },
59             {
60                 "active_id": active_id,
61                 "active_ids": [ active_id ],
62                 "active_model": "purchase.requisition"
63             },
64             {
65                 "__debug": "{'record_id' : active_id}",
66                 "__id": "63e8e9bff8a6",
67                 "__ref": "context"
68             }
69         ]);
70
71         deepEqual(result, {
72             department_id: false,
73             lang: 'en_US',
74             project_id: false,
75             section_id: false,
76             tz: false,
77             uid: 1,
78             search_default_create_uid: 1,
79             active_id: active_id,
80             active_ids: [active_id],
81             active_model: 'purchase.requisition',
82             record_id: active_id
83         });
84     });
85     test('non-literal_eval_contexts', function (instance) {
86         var result = instance.web.pyeval.eval('contexts', [{
87             "__ref": "compound_context",
88             "__contexts": [
89                 {"__ref": "context", "__debug": "{'type':parent.type}",
90                  "__id": "462b9dbed42f"}
91             ],
92             "__eval_context": {
93                 "__ref": "compound_context",
94                 "__contexts": [{
95                         "__ref": "compound_context",
96                         "__contexts": [
97                             {"__ref": "context", "__debug": "{'type': type}",
98                              "__id": "16a04ed5a194"}
99                         ],
100                         "__eval_context": {
101                             "__ref": "compound_context",
102                             "__contexts": [
103                                 {"lang": "en_US", "tz": false, "uid": 1,
104                                  "journal_type": "sale", "section_id": false,
105                                  "default_type": "out_invoice",
106                                  "type": "out_invoice", "department_id": false},
107                                 {"id": false, "journal_id": 10,
108                                  "number": false, "type": "out_invoice",
109                                  "currency_id": 1, "partner_id": 4,
110                                  "fiscal_position": false,
111                                  "date_invoice": false, "period_id": false,
112                                  "payment_term": false, "reference_type": "none",
113                                  "reference": false, "account_id": 440,
114                                  "name": false, "invoice_line": [],
115                                  "tax_line": [], "amount_untaxed": 0,
116                                  "amount_tax": 0, "reconciled": false,
117                                  "amount_total": 0, "state": "draft",
118                                  "residual": 0, "company_id": 1,
119                                  "date_due": false, "user_id": 1,
120                                  "partner_bank_id": false, "origin": false,
121                                  "move_id": false, "comment": false,
122                                  "payment_ids": [[6, false, []]],
123                                  "active_id": false, "active_ids": [],
124                                  "active_model": "account.invoice",
125                                  "parent": {}}
126                     ], "__eval_context": null}
127                 }, {
128                     "id": false,
129                     "product_id": 4,
130                     "name": "[PC1] Basic PC",
131                     "quantity": 1,
132                     "uos_id": 1,
133                     "price_unit": 100,
134                     "account_id": 853,
135                     "discount": 0,
136                     "account_analytic_id": false,
137                     "company_id": false,
138                     "note": false,
139                     "invoice_line_tax_id": [[6, false, [1]]],
140                     "active_id": false,
141                     "active_ids": [],
142                     "active_model": "account.invoice.line",
143                     "parent": {
144                         "id": false, "journal_id": 10, "number": false,
145                         "type": "out_invoice", "currency_id": 1,
146                         "partner_id": 4, "fiscal_position": false,
147                         "date_invoice": false, "period_id": false,
148                         "payment_term": false, "reference_type": "none",
149                         "reference": false, "account_id": 440, "name": false,
150                         "tax_line": [], "amount_untaxed": 0, "amount_tax": 0,
151                         "reconciled": false, "amount_total": 0,
152                         "state": "draft", "residual": 0, "company_id": 1,
153                         "date_due": false, "user_id": 1,
154                         "partner_bank_id": false, "origin": false,
155                         "move_id": false, "comment": false,
156                         "payment_ids": [[6, false, []]]}
157                 }],
158                 "__eval_context": null
159             }
160         }]);
161         deepEqual(result, {type: 'out_invoice'});
162     });
163 });
164 openerp.testing.section('eval.contexts', {
165     dependencies: ['web.coresetup', 'web.dates']
166 }, function (test) {
167     test('current_date', function (instance) {
168         var current_date = instance.web.date_to_str(new Date());
169         var result = instance.web.pyeval.eval('domains',
170             [[],{"__ref":"domain","__debug":"[('name','>=',current_date),('name','<=',current_date)]","__id":"5dedcfc96648"}],
171             instance.web.pyeval.context());
172         deepEqual(result, [
173             ['name', '>=', current_date],
174             ['name', '<=', current_date]
175         ]);
176     });
177     test('context_freevar', function (instance) {
178         var domains_to_eval = [{
179             __ref: 'domain',
180             __debug: '[("foo", "=", context.get("bar", "qux"))]'
181         }, [['bar', '>=', 42]]];
182         deepEqual(
183             instance.web.pyeval.eval('domains', domains_to_eval, {bar: "ok"}),
184             [['foo', '=', 'ok'], ['bar', '>=', 42]]);
185         deepEqual(
186             instance.web.pyeval.eval('domains', domains_to_eval, {bar: false}),
187             [['foo', '=', false], ['bar', '>=', 42]]);
188         deepEqual(
189             instance.web.pyeval.eval('domains', domains_to_eval),
190             [['foo', '=', 'qux'], ['bar', '>=', 42]]);
191     });
192 });
193 openerp.testing.section('eval.groupbys', {
194     dependencies: ['web.coresetup']
195 }, function (test) {
196     test('groupbys_00', function (instance) {
197         var result = instance.web.pyeval.eval('groupbys', [
198             {group_by: 'foo'},
199             {group_by: ['bar', 'qux']},
200             {group_by: null},
201             {group_by: 'grault'}
202         ]);
203         deepEqual(result, ['foo', 'bar', 'qux', 'grault']);
204     });
205     test('groupbys_01', function (instance) {
206         var result = instance.web.pyeval.eval('groupbys', [
207             {group_by: 'foo'},
208             { __ref: 'context', __debug: '{"group_by": "bar"}' },
209             {group_by: 'grault'}
210         ]);
211         deepEqual(result, ['foo', 'bar', 'grault']);
212     });
213     test('groupbys_02', function (instance) {
214         var result = instance.web.pyeval.eval('groupbys', [
215             {group_by: 'foo'},
216             {
217                 __ref: 'compound_context',
218                 __contexts: [ {group_by: 'bar'} ],
219                 __eval_context: null
220             },
221             {group_by: 'grault'}
222         ]);
223         deepEqual(result, ['foo', 'bar', 'grault']);
224     });
225     test('groupbys_03', function (instance) {
226         var result = instance.web.pyeval.eval('groupbys', [
227             {group_by: 'foo'},
228             {
229                 __ref: 'compound_context',
230                 __contexts: [
231                     { __ref: 'context', __debug: '{"group_by": value}' }
232                 ],
233                 __eval_context: { value: 'bar' }
234             },
235             {group_by: 'grault'}
236         ]);
237         deepEqual(result, ['foo', 'bar', 'grault']);
238     });
239     test('groupbys_04', function (instance) {
240         var result = instance.web.pyeval.eval('groupbys', [
241             {group_by: 'foo'},
242             {
243                 __ref: 'compound_context',
244                 __contexts: [
245                     { __ref: 'context', __debug: '{"group_by": value}' }
246                 ],
247                 __eval_context: { value: 'bar' }
248             },
249             {group_by: 'grault'}
250         ], { value: 'bar' });
251         deepEqual(result, ['foo', 'bar', 'grault']);
252     });
253     test('groupbys_05', function (instance) {
254         var result = instance.web.pyeval.eval('groupbys', [
255             {group_by: 'foo'},
256             { __ref: 'context', __debug: '{"group_by": value}' },
257             {group_by: 'grault'}
258         ], { value: 'bar' });
259         deepEqual(result, ['foo', 'bar', 'grault']);
260     });
261 });