[TEST] saving of editor with required non-filled field, and cancelling of edition
[odoo/odoo.git] / addons / web / static / test / rpc.js
1 $(document).ready(function () {
2     var openerp;
3
4     module('Misordered resolution management', {
5         setup: function () {
6             openerp = window.openerp.init([]);
7             window.openerp.web.corelib(openerp);
8             window.openerp.web.coresetup(openerp);
9             window.openerp.web.data(openerp);
10         }
11     });
12     test('Resolve all correctly ordered, sync', function () {
13         var dm = new openerp.web.DropMisordered(), flag = false;
14
15         var d1 = $.Deferred(), d2 = $.Deferred(),
16             r1 = dm.add(d1), r2 = dm.add(d2);
17
18         $.when(r1, r2).done(function () {
19             flag = true;
20         });
21         d1.resolve();
22         d2.resolve();
23
24         ok(flag);
25     });
26     test("Don't resolve mis-ordered, sync", function () {
27         var dm = new openerp.web.DropMisordered(),
28             done1 = false, done2 = false,
29             fail1 = false, fail2 = false;
30
31         var d1 = $.Deferred(), d2 = $.Deferred();
32         dm.add(d1).then(function () { done1 = true; },
33                         function () { fail1 = true; });
34         dm.add(d2).then(function () { done2 = true; },
35                         function () { fail2 = true; });
36
37         d2.resolve();
38         d1.resolve();
39
40         // d1 is in limbo
41         ok(!done1);
42         ok(!fail1);
43         // d2 is resolved
44         ok(done2);
45         ok(!fail2);
46     });
47     test('Fail mis-ordered flag, sync', function () {
48         var dm = new openerp.web.DropMisordered(true),
49             done1 = false, done2 = false,
50             fail1 = false, fail2 = false;
51
52         var d1 = $.Deferred(), d2 = $.Deferred();
53         dm.add(d1).then(function () { done1 = true; },
54                         function () { fail1 = true; });
55         dm.add(d2).then(function () { done2 = true; },
56                         function () { fail2 = true; });
57
58         d2.resolve();
59         d1.resolve();
60
61         // d1 is failed
62         ok(!done1);
63         ok(fail1);
64         // d2 is resolved
65         ok(done2);
66         ok(!fail2);
67     });
68
69     asyncTest('Resolve all correctly ordered, async', 1, function () {
70         var dm = new openerp.web.DropMisordered();
71
72         var d1 = $.Deferred(), d2 = $.Deferred(),
73             r1 = dm.add(d1), r2 = dm.add(d2);
74
75         setTimeout(function () { d1.resolve(); }, 100);
76         setTimeout(function () { d2.resolve(); }, 200);
77
78         $.when(r1, r2).done(function () {
79             start();
80             ok(true);
81         });
82     });
83     asyncTest("Don't resolve mis-ordered, async", 4, function () {
84         var dm = new openerp.web.DropMisordered(),
85             done1 = false, done2 = false,
86             fail1 = false, fail2 = false;
87
88         var d1 = $.Deferred(), d2 = $.Deferred();
89         dm.add(d1).then(function () { done1 = true; },
90                         function () { fail1 = true; });
91         dm.add(d2).then(function () { done2 = true; },
92                         function () { fail2 = true; });
93
94         setTimeout(function () { d1.resolve(); }, 200);
95         setTimeout(function () { d2.resolve(); }, 100);
96
97         setTimeout(function () {
98             start();
99             // d1 is in limbo
100             ok(!done1);
101             ok(!fail1);
102             // d2 is resolved
103             ok(done2);
104             ok(!fail2);
105         }, 400);
106     });
107     asyncTest('Fail mis-ordered flag, async', 4, function () {
108         var dm = new openerp.web.DropMisordered(true),
109             done1 = false, done2 = false,
110             fail1 = false, fail2 = false;
111
112         var d1 = $.Deferred(), d2 = $.Deferred();
113         dm.add(d1).then(function () { done1 = true; },
114                         function () { fail1 = true; });
115         dm.add(d2).then(function () { done2 = true; },
116                         function () { fail2 = true; });
117
118         setTimeout(function () { d1.resolve(); }, 200);
119         setTimeout(function () { d2.resolve(); }, 100);
120
121         setTimeout(function () {
122             start();
123             // d1 is failed
124             ok(!done1);
125             ok(fail1);
126             // d2 is resolved
127             ok(done2);
128             ok(!fail2);
129         }, 400);
130     });
131 });