Using new sinon.js
[mootools.git] / 1.3client / Request / Request.js
blobf69332cb7cb7d2bab3188b3cbe5119b6644b2eb8
1 /*
2 ---
3 name: Request Specs
4 description: n/a
5 requires: [Core/Request]
6 provides: [Request.Specs]
7 ...
8 */
9 describe('Request', function(){
10                 
11         beforeEach(function(){
12                 this.xhr = sinon.useFakeXMLHttpRequest();
13                 var requests = this.requests = [];
14                 this.xhr.onCreate = function(xhr){
15                         requests.push(xhr);
16                 };
17         });
18         
19         afterEach(function(){
20                 this.xhr.restore();
21         });
23         it('should create an ajax request', function(){
24                 var onComplete = jasmine.createSpy();
25                 
26                 var request = new Request({
27                         url: '/',
28                         onComplete: onComplete
29                 }).send({data: {
30                         '__response': 'res&ponsé'
31                 }});
32                 
33                 this.requests[0].respond(200, {'Content-Type': 'text/plain'}, 'res&ponsé');
34                 
35                 // checks the first argument from the first call
36                 expect(onComplete.argsForCall[0][0]).toEqual('res&ponsé');
37                 
38         });
39         
40         it('should create a Request with method get and sending data', function(){
42                 var onComplete = jasmine.createSpy();
43                 
44                 var request = new Request({
45                         url: '../Helpers/request.php',
46                         method: 'get',
47                         onComplete: onComplete
48                 }).send({data: {'some': 'data'}});
49                 
50                 var response = {method: 'get', 'get': {'some':'data'}};
51                 this.requests[0].respond(200, {'Content-Type': 'text/json'}, JSON.encode(response));
52                 
53                 expect(onComplete.wasCalled).toBe(true);
54                 
55                 expect(JSON.decode(onComplete.argsForCall[0][0])).toEqual(response);
56                 
57         });
58         
59         it('the options passed on the send method should rewrite the current ones', function(){
61                 var onComplete = jasmine.createSpy();
62                 var request = new Request({
63                         url: '../Helpers/request.php',
64                         method: 'get',
65                         data: {'setup': 'data'},
66                         onComplete: onComplete
67                 }).send({method: 'post', data: {'send': 'senddata'}});
68                 
69                 var requested = this.requests[0];
70                 
71                 expect(requested.method.toLowerCase()).toBe('post');
72                 
73                 requested.respond(200, {'Content-Type': 'text/plain'}, '');
74                 
75                 expect(onComplete.wasCalled).toBe(true);
76         });
77         
78         xit('should create an ajax request and as it\'s an invalid XML, onComplete will receive null as the xml document', function(){
80                 runs(function(){
81                         this.onComplete = jasmine.createSpy();
82                         this.request = new Request({
83                                 url: '../Helpers/request.php',
84                                 onComplete: this.onComplete
85                         }).send({data: {
86                                 '__type': 'xml',
87                                 '__response': 'response'
88                         }});
89                 });
90                 
91                 waitsFor(800, function(){
92                         return this.onComplete.wasCalled;
93                 });
94                 
95                 runs(function(){
96                         expect(this.onComplete.argsForCall[0][0]).toEqual('response');
97                         expect(this.request.response.text).toEqual('response');
98                 });
99                 
100                 runs(function(){
101                         this.chain = jasmine.createSpy();
102                         this.request.chain(this.chain).send({data: {
103                                 '__type': 'xml',
104                                 '__response': '<node>response</node><no></no>'
105                         }});
106                 });
107                 
108                 waitsFor(800, function(){
109                         return this.chain.wasCalled;
110                 });
111                 
112                 runs(function(){
113                         expect(this.onComplete.argsForCall[0][0]).toEqual('<node>response</node><no></no>');
114                         expect(this.request.response.text).toEqual('<node>response</node><no></no>');
115                 });
116                 
117         });
119         it('should not overwrite the data object', function(){
121                 var onComplete = jasmine.createSpy();
122                 var request = new Request({
123                         url: '../Helpers/request.php',
124                         data: {
125                                 __response: 'data'
126                         },
127                         onComplete: onComplete
128                 }).post();
130                 var requested = this.requests[0];
131                 requested.respond(200, {'Content-Type': 'text/plain'}, requested.requestBody)
132                 
133                 expect(onComplete.wasCalled).toBe(true);
135                 expect(onComplete.argsForCall[0][0]).toEqual('__response=data');
137         });