]> source.dussan.org Git - nextcloud-server.git/commitdiff
Fix JS DAV files client unit tests
authorVincent Petry <pvince81@owncloud.com>
Thu, 4 Feb 2016 14:39:18 +0000 (15:39 +0100)
committerVincent Petry <pvince81@owncloud.com>
Thu, 4 Feb 2016 14:39:18 +0000 (15:39 +0100)
Instead of trying to mock the promise, just stub davclient.js' request
object.

core/js/tests/specs/files/clientSpec.js

index 61cff0a66ecd255de485d33854e66120844ff5a5..b945e1bb4daeb4596373dbb4fa7b6ea9d99a07db 100644 (file)
 *
 */
 
+/* global dav */
+
 describe('OC.Files.Client tests', function() {
        var Client = OC.Files.Client;
        var baseUrl;
        var client;
+       var requestStub;
+       var requestDeferred;
 
        beforeEach(function() {
+               requestDeferred = new $.Deferred();
+               requestStub = sinon.stub(dav.Client.prototype, 'request').returns(requestDeferred.promise());
                baseUrl = 'https://testhost/owncloud/remote.php/webdav/';
 
                client = new Client({
@@ -35,6 +41,7 @@ describe('OC.Files.Client tests', function() {
        });
        afterEach(function() {
                client = null;
+               requestStub.restore();
        });
 
        /**
@@ -51,11 +58,10 @@ describe('OC.Files.Client tests', function() {
                promise.done(successHandler);
                promise.fail(failHandler);
 
-               fakeServer.requests[0].respond(
-                       status,
-                       {'Content-Type': 'application/xml'},
-                       ''
-               );
+               requestDeferred.resolve({
+                       status: status,
+                       body: ''
+               });
 
                promise.then(function() {
                        expect(successHandler.calledOnce).toEqual(true);
@@ -81,19 +87,16 @@ describe('OC.Files.Client tests', function() {
                promise.done(successHandler);
                promise.fail(failHandler);
 
-               fakeServer.requests[0].respond(
-                       status,
-                       {'Content-Type': 'application/xml'},
-                       ''
-               );
+               requestDeferred.resolve({
+                       status: status,
+                       body: ''
+               });
 
                promise.then(function() {
                        expect(failHandler.calledOnce).toEqual(true);
                        expect(failHandler.calledWith(status)).toEqual(true);
 
                        expect(successHandler.notCalled).toEqual(true);
-
-                       fulfill();
                });
 
                return promise;
@@ -149,7 +152,8 @@ describe('OC.Files.Client tests', function() {
 
        describe('file listing', function() {
 
-               var folderContentsXml =
+               // TODO: switch this to the already parsed structure
+               var folderContentsXml = dav.Client.prototype.parseMultiStatus(
                        '<?xml version="1.0" encoding="utf-8"?>' +
                        '<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns">' +
                        makeResponseBlock(
@@ -159,8 +163,9 @@ describe('OC.Files.Client tests', function() {
                                'd:getetag': '"56cfcabd79abb"',
                                'd:resourcetype': '<d:collection/>',
                                'oc:id': '00000011oc2d13a6a068',
+                               'oc:fileid': '11',
                                'oc:permissions': 'RDNVCK',
-                               'oc:size': 120
+                               'oc:size': '120'
                        },
                        [
                                'd:getcontenttype',
@@ -176,6 +181,7 @@ describe('OC.Files.Client tests', function() {
                                'd:getcontentlength': 250,
                                'd:resourcetype': '',
                                'oc:id': '00000051oc2d13a6a068',
+                               'oc:fileid': '51',
                                'oc:permissions': 'RDNVW'
                        },
                        [
@@ -189,25 +195,27 @@ describe('OC.Files.Client tests', function() {
                                'd:getetag': '"66cfcabd79abb"',
                                'd:resourcetype': '<d:collection/>',
                                'oc:id': '00000015oc2d13a6a068',
+                               'oc:fileid': '15',
                                'oc:permissions': 'RDNVCK',
-                               'oc:size': 100
+                               'oc:size': '100'
                        },
                        [
                                'd:getcontenttype',
                                'd:getcontentlength'
                        ]
                        ) +
-                       '</d:multistatus>';
+                       '</d:multistatus>'
+               );
 
                it('sends PROPFIND with explicit properties to get file list', function() {
                        client.getFolderContents('path/to space/文件夹');
 
-                       expect(fakeServer.requests.length).toEqual(1);
-                       expect(fakeServer.requests[0].method).toEqual('PROPFIND');
-                       expect(fakeServer.requests[0].url).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9');
-                       expect(fakeServer.requests[0].requestHeaders.Depth).toEqual(1);
+                       expect(requestStub.calledOnce).toEqual(true);
+                       expect(requestStub.lastCall.args[0]).toEqual('PROPFIND');
+                       expect(requestStub.lastCall.args[1]).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9');
+                       expect(requestStub.lastCall.args[2].Depth).toEqual(1);
 
-                       var props = getRequestedProperties(fakeServer.requests[0].requestBody);
+                       var props = getRequestedProperties(requestStub.lastCall.args[3]);
                        expect(props).toContain('{DAV:}getlastmodified');
                        expect(props).toContain('{DAV:}getcontentlength');
                        expect(props).toContain('{DAV:}getcontenttype');
@@ -219,24 +227,23 @@ describe('OC.Files.Client tests', function() {
                });
                it('sends PROPFIND to base url when empty path given', function() {
                        client.getFolderContents('');
-                       expect(fakeServer.requests.length).toEqual(1);
-                       expect(fakeServer.requests[0].url).toEqual(baseUrl);
+                       expect(requestStub.calledOnce).toEqual(true);
+                       expect(requestStub.lastCall.args[1]).toEqual(baseUrl);
                });
                it('sends PROPFIND to base url when root path given', function() {
                        client.getFolderContents('/');
-                       expect(fakeServer.requests.length).toEqual(1);
-                       expect(fakeServer.requests[0].url).toEqual(baseUrl);
+                       expect(requestStub.calledOnce).toEqual(true);
+                       expect(requestStub.lastCall.args[1]).toEqual(baseUrl);
                });
                it('parses the result list into a FileInfo array', function() {
                        var promise = client.getFolderContents('path/to space/文件夹');
 
-                       expect(fakeServer.requests.length).toEqual(1);
+                       expect(requestStub.calledOnce).toEqual(true);
 
-                       fakeServer.requests[0].respond(
-                               207,
-                               {'Content-Type': 'application/xml'},
-                               folderContentsXml
-                       );
+                       requestDeferred.resolve({
+                               status: 207,
+                               body: folderContentsXml
+                       });
 
                        promise.then(function(status, response) {
                                expect(status).toEqual(207);
@@ -250,7 +257,7 @@ describe('OC.Files.Client tests', function() {
                                expect(info.id).toEqual(51);
                                expect(info.path).toEqual('/path/to space/文件夹');
                                expect(info.name).toEqual('One.txt');
-                               expect(info.permissions).toEqual(31);
+                               expect(info.permissions).toEqual(27);
                                expect(info.size).toEqual(250);
                                expect(info.mtime).toEqual(1436535485000);
                                expect(info.mimetype).toEqual('text/plain');
@@ -268,18 +275,16 @@ describe('OC.Files.Client tests', function() {
                                expect(info.mimetype).toEqual('httpd/unix-directory');
                                expect(info.etag).toEqual('66cfcabd79abb');
                        });
-                       return promise.promise();
                });
                it('returns parent node in result if specified', function() {
                        var promise = client.getFolderContents('path/to space/文件夹', {includeParent: true});
 
-                       expect(fakeServer.requests.length).toEqual(1);
+                       expect(requestStub.calledOnce).toEqual(true);
 
-                       fakeServer.requests[0].respond(
-                               207,
-                               {'Content-Type': 'application/xml'},
-                               folderContentsXml
-                       );
+                       requestDeferred.resolve({
+                               status: 207,
+                               body: folderContentsXml
+                       });
 
                        promise.then(function(status, response) {
                                expect(status).toEqual(207);
@@ -303,12 +308,10 @@ describe('OC.Files.Client tests', function() {
                                expect(response[1].id).toEqual(51);
                                expect(response[2].id).toEqual(15);
                        });
-
-                       return promise;
                });
                it('rejects promise when an error occurred', function() {
                        var promise = client.getFolderContents('path/to space/文件夹', {includeParent: true});
-                       return respondAndCheckError(promise, 404);
+                       respondAndCheckError(promise, 404);
                });
                it('throws exception if arguments are missing', function() {
                        // TODO
@@ -316,7 +319,7 @@ describe('OC.Files.Client tests', function() {
        });
 
        describe('file info', function() {
-               var responseXml =
+               var responseXml = dav.Client.prototype.parseMultiStatus(
                        '<?xml version="1.0" encoding="utf-8"?>' +
                        '<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns">' +
                        makeResponseBlock(
@@ -326,25 +329,27 @@ describe('OC.Files.Client tests', function() {
                                'd:getetag': '"56cfcabd79abb"',
                                'd:resourcetype': '<d:collection/>',
                                'oc:id': '00000011oc2d13a6a068',
+                               'oc:fileid': '11',
                                'oc:permissions': 'RDNVCK',
-                               'oc:size': 120
+                               'oc:size': '120'
                        },
                        [
                                'd:getcontenttype',
                                'd:getcontentlength'
                        ]
                        ) +
-                       '</d:multistatus>';
+                       '</d:multistatus>'
+               );
 
                it('sends PROPFIND with zero depth to get single file info', function() {
                        client.getFileInfo('path/to space/文件夹');
 
-                       expect(fakeServer.requests.length).toEqual(1);
-                       expect(fakeServer.requests[0].method).toEqual('PROPFIND');
-                       expect(fakeServer.requests[0].url).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9');
-                       expect(fakeServer.requests[0].requestHeaders.Depth).toEqual(0);
+                       expect(requestStub.calledOnce).toEqual(true);
+                       expect(requestStub.lastCall.args[0]).toEqual('PROPFIND');
+                       expect(requestStub.lastCall.args[1]).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9');
+                       expect(requestStub.lastCall.args[2].Depth).toEqual(0);
 
-                       var props = getRequestedProperties(fakeServer.requests[0].requestBody);
+                       var props = getRequestedProperties(requestStub.lastCall.args[3]);
                        expect(props).toContain('{DAV:}getlastmodified');
                        expect(props).toContain('{DAV:}getcontentlength');
                        expect(props).toContain('{DAV:}getcontenttype');
@@ -357,13 +362,12 @@ describe('OC.Files.Client tests', function() {
                it('parses the result into a FileInfo', function() {
                        var promise = client.getFileInfo('path/to space/文件夹');
 
-                       expect(fakeServer.requests.length).toEqual(1);
+                       expect(requestStub.calledOnce).toEqual(true);
 
-                       fakeServer.requests[0].respond(
-                               207,
-                               {'Content-Type': 'application/xml'},
-                               responseXml
-                       );
+                       requestDeferred.resolve({
+                               status: 207,
+                               body: responseXml
+                       });
 
                        promise.then(function(status, response) {
                                expect(status).toEqual(207);
@@ -380,11 +384,9 @@ describe('OC.Files.Client tests', function() {
                                expect(info.mimetype).toEqual('httpd/unix-directory');
                                expect(info.etag).toEqual('56cfcabd79abb');
                        });
-
-                       return promise;
                });
                it('properly parses entry inside root', function() {
-                       var responseXml =
+                       var responseXml = dav.Client.prototype.parseMultiStatus(
                                '<?xml version="1.0" encoding="utf-8"?>' +
                                '<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns">' +
                                makeResponseBlock(
@@ -394,25 +396,26 @@ describe('OC.Files.Client tests', function() {
                                        'd:getetag': '"56cfcabd79abb"',
                                        'd:resourcetype': '<d:collection/>',
                                        'oc:id': '00000011oc2d13a6a068',
+                                       'oc:fileid': '11',
                                        'oc:permissions': 'RDNVCK',
-                                       'oc:size': 120
+                                       'oc:size': '120'
                                },
                                [
                                        'd:getcontenttype',
                                        'd:getcontentlength'
                                ]
                                ) +
-                               '</d:multistatus>';
+                               '</d:multistatus>'
+                       );
 
                        var promise = client.getFileInfo('in root');
 
-                       expect(fakeServer.requests.length).toEqual(1);
+                       expect(requestStub.calledOnce).toEqual(true);
 
-                       fakeServer.requests[0].respond(
-                               207,
-                               {'Content-Type': 'application/xml'},
-                               responseXml
-                       );
+                       requestDeferred.resolve({
+                               status: 207,
+                               body: responseXml
+                       });
 
                        promise.then(function(status, response) {
                                expect(status).toEqual(207);
@@ -429,12 +432,10 @@ describe('OC.Files.Client tests', function() {
                                expect(info.mimetype).toEqual('httpd/unix-directory');
                                expect(info.etag).toEqual('56cfcabd79abb');
                        });
-
-                       return promise;
                });
                it('rejects promise when an error occurred', function() {
                        var promise = client.getFileInfo('path/to space/文件夹');
-                       return respondAndCheckError(promise, 404);
+                       respondAndCheckError(promise, 404);
                });
                it('throws exception if arguments are missing', function() {
                        // TODO
@@ -449,6 +450,7 @@ describe('OC.Files.Client tests', function() {
                                'd:getetag': '"559fcabd79a38"',
                                'd:getcontentlength': 250,
                                'oc:id': '00000051oc2d13a6a068',
+                               'oc:fileid': '51',
                                'oc:permissions': webdavPerm,
                        };
 
@@ -458,25 +460,28 @@ describe('OC.Files.Client tests', function() {
                                props['d:resourcetype'] = '<d:collection/>';
                        }
 
-                       var responseXml =
+                       var def = new $.Deferred();
+                       requestStub.reset();
+                       requestStub.returns(def);
+
+                       var responseXml = dav.Client.prototype.parseMultiStatus(
                                '<?xml version="1.0" encoding="utf-8"?>' +
                                '<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns">' +
                                makeResponseBlock(
                                        '/owncloud/remote.php/webdav/file.txt',
                                        props
                                ) +
-                               '</d:multistatus>';
+                               '</d:multistatus>'
+                       );
+
                        var promise = client.getFileInfo('file.txt');
 
-                       expect(fakeServer.requests.length).toEqual(1);
-                       fakeServer.requests[0].respond(
-                               207,
-                               {'Content-Type': 'application/xml'},
-                               responseXml
-                       );
+                       expect(requestStub.calledOnce).toEqual(true);
 
-                       fakeServer.restore();
-                       fakeServer = sinon.fakeServer.create();
+                       def.resolve({
+                               status: 207,
+                               body: responseXml
+                       });
 
                        return promise;
                }
@@ -486,7 +491,6 @@ describe('OC.Files.Client tests', function() {
                        promise.then(function(result) {
                                expect(result.permissions).toEqual(expectedPermissions);
                        });
-                       return promise;
                }
 
                function testMountType(permission, isFile, expectedMountType) {
@@ -494,7 +498,6 @@ describe('OC.Files.Client tests', function() {
                        promise.then(function(result) {
                                expect(result.mountType).toEqual(expectedMountType);
                        });
-                       return promise;
                }
 
                it('properly parses file permissions', function() {
@@ -508,11 +511,9 @@ describe('OC.Files.Client tests', function() {
                                ['R', true, OC.PERMISSION_READ | OC.PERMISSION_SHARE],
                                ['CKWDR', true, OC.PERMISSION_ALL]
                        ];
-                       return Promise.all(
-                               _.map(testCases, function(testCase) {
-                                       return testPermission.apply(testCase);
-                               })
-                       );
+                       _.each(testCases, function(testCase) {
+                               return testPermission.apply(testCase);
+                       });
                });
                it('properly parses folder permissions', function() {
                        var testCases = [
@@ -525,11 +526,9 @@ describe('OC.Files.Client tests', function() {
                                ['CKWDR', false, OC.PERMISSION_ALL]
                        ];
 
-                       return Promise.all(
-                               _.map(testCases, function(testCase) {
-                                       return testPermission.apply(testCase);
-                               })
-                       );
+                       _.each(testCases, function(testCase) {
+                               return testPermission.apply(testCase);
+                       });
                });
                it('properly parses mount types', function() {
                        var testCases = [
@@ -539,11 +538,9 @@ describe('OC.Files.Client tests', function() {
                                ['SM', false, 'shared']
                        ];
 
-                       return Promise.all(
-                               _.map(testCases, function(testCase) {
-                                       return testMountType.apply(testCase);
-                               })
-                       );
+                       _.each(testCases, function(testCase) {
+                               return testMountType.apply(testCase);
+                       });
                });
        });
 
@@ -551,26 +548,23 @@ describe('OC.Files.Client tests', function() {
                it('returns file contents', function() {
                        var promise = client.getFileContents('path/to space/文件夹/One.txt');
 
-                       expect(fakeServer.requests.length).toEqual(1);
-                       expect(fakeServer.requests[0].method).toEqual('GET');
-                       expect(fakeServer.requests[0].url).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9/One.txt');
+                       expect(requestStub.calledOnce).toEqual(true);
+                       expect(requestStub.lastCall.args[0]).toEqual('GET');
+                       expect(requestStub.lastCall.args[1]).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9/One.txt');
 
-                       fakeServer.requests[0].respond(
-                               200,
-                               {'Content-Type': 'text/plain'},
-                               'some contents'
-                       );
+                       requestDeferred.resolve({
+                               status: 200,
+                               body: 'some contents'
+                       });
 
                        promise.then(function(status, response) {
                                expect(status).toEqual(200);
                                expect(response).toEqual('some contents');
                        });
-
-                       return promise;
                });
                it('rejects promise when an error occurred', function() {
                        var promise = client.getFileContents('path/to space/文件夹/One.txt');
-                       return respondAndCheckError(promise, 409);
+                       respondAndCheckError(promise, 409);
                });
                it('throws exception if arguments are missing', function() {
                        // TODO
@@ -584,14 +578,14 @@ describe('OC.Files.Client tests', function() {
                                        'some contents'
                        );
 
-                       expect(fakeServer.requests.length).toEqual(1);
-                       expect(fakeServer.requests[0].method).toEqual('PUT');
-                       expect(fakeServer.requests[0].url).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9/One.txt');
-                       expect(fakeServer.requests[0].requestBody).toEqual('some contents');
-                       expect(fakeServer.requests[0].requestHeaders['If-None-Match']).toEqual('*');
-                       expect(fakeServer.requests[0].requestHeaders['Content-Type']).toEqual('text/plain;charset=utf-8');
+                       expect(requestStub.calledOnce).toEqual(true);
+                       expect(requestStub.lastCall.args[0]).toEqual('PUT');
+                       expect(requestStub.lastCall.args[1]).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9/One.txt');
+                       expect(requestStub.lastCall.args[2]['If-None-Match']).toEqual('*');
+                       expect(requestStub.lastCall.args[2]['Content-Type']).toEqual('text/plain;charset=utf-8');
+                       expect(requestStub.lastCall.args[3]).toEqual('some contents');
 
-                       return respondAndCheckStatus(promise, 201);
+                       respondAndCheckStatus(promise, 201);
                });
                it('sends PUT with file contents with headers matching options', function() {
                        var promise = client.putFileContents(
@@ -603,21 +597,21 @@ describe('OC.Files.Client tests', function() {
                                        }
                        );
 
-                       expect(fakeServer.requests.length).toEqual(1);
-                       expect(fakeServer.requests[0].method).toEqual('PUT');
-                       expect(fakeServer.requests[0].url).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9/One.txt');
-                       expect(fakeServer.requests[0].requestBody).toEqual('some contents');
-                       expect(fakeServer.requests[0].requestHeaders['If-None-Match']).not.toBeDefined();
-                       expect(fakeServer.requests[0].requestHeaders['Content-Type']).toEqual('text/markdown;charset=utf-8');
+                       expect(requestStub.calledOnce).toEqual(true);
+                       expect(requestStub.lastCall.args[0]).toEqual('PUT');
+                       expect(requestStub.lastCall.args[1]).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9/One.txt');
+                       expect(requestStub.lastCall.args[2]['If-None-Match']).not.toBeDefined();
+                       expect(requestStub.lastCall.args[2]['Content-Type']).toEqual('text/markdown');
+                       expect(requestStub.lastCall.args[3]).toEqual('some contents');
 
-                       return respondAndCheckStatus(promise, 201);
+                       respondAndCheckStatus(promise, 201);
                });
                it('rejects promise when an error occurred', function() {
                        var promise = client.putFileContents(
                                        'path/to space/文件夹/One.txt',
                                        'some contents'
                        );
-                       return respondAndCheckError(promise, 409);
+                       respondAndCheckError(promise, 409);
                });
                it('throws exception if arguments are missing', function() {
                        // TODO
@@ -628,15 +622,15 @@ describe('OC.Files.Client tests', function() {
                it('sends MKCOL with specified path', function() {
                        var promise = client.createDirectory('path/to space/文件夹/new dir');
 
-                       expect(fakeServer.requests.length).toEqual(1);
-                       expect(fakeServer.requests[0].method).toEqual('MKCOL');
-                       expect(fakeServer.requests[0].url).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9/new%20dir');
+                       expect(requestStub.calledOnce).toEqual(true);
+                       expect(requestStub.lastCall.args[0]).toEqual('MKCOL');
+                       expect(requestStub.lastCall.args[1]).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9/new%20dir');
 
-                       return respondAndCheckStatus(promise, 201);
+                       respondAndCheckStatus(promise, 201);
                });
                it('rejects promise when an error occurred', function() {
                        var promise = client.createDirectory('path/to space/文件夹/new dir');
-                       return respondAndCheckError(promise, 404);
+                       respondAndCheckError(promise, 404);
                });
                it('throws exception if arguments are missing', function() {
                        // TODO
@@ -647,15 +641,15 @@ describe('OC.Files.Client tests', function() {
                it('sends DELETE with specified path', function() {
                        var promise = client.remove('path/to space/文件夹');
 
-                       expect(fakeServer.requests.length).toEqual(1);
-                       expect(fakeServer.requests[0].method).toEqual('DELETE');
-                       expect(fakeServer.requests[0].url).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9');
+                       expect(requestStub.calledOnce).toEqual(true);
+                       expect(requestStub.lastCall.args[0]).toEqual('DELETE');
+                       expect(requestStub.lastCall.args[1]).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9');
 
-                       return respondAndCheckStatus(promise, 201);
+                       respondAndCheckStatus(promise, 201);
                });
                it('rejects promise when an error occurred', function() {
                        var promise = client.remove('path/to space/文件夹');
-                       return respondAndCheckError(promise, 404);
+                       respondAndCheckError(promise, 404);
                });
                it('throws exception if arguments are missing', function() {
                        // TODO
@@ -669,15 +663,15 @@ describe('OC.Files.Client tests', function() {
                                        'path/to space/anotherdir/文件夹'
                        );
 
-                       expect(fakeServer.requests.length).toEqual(1);
-                       expect(fakeServer.requests[0].method).toEqual('MOVE');
-                       expect(fakeServer.requests[0].url).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9');
-                       expect(fakeServer.requests[0].requestHeaders.Destination)
+                       expect(requestStub.calledOnce).toEqual(true);
+                       expect(requestStub.lastCall.args[0]).toEqual('MOVE');
+                       expect(requestStub.lastCall.args[1]).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9');
+                       expect(requestStub.lastCall.args[2].Destination)
                                .toEqual(baseUrl + 'path/to%20space/anotherdir/%E6%96%87%E4%BB%B6%E5%A4%B9');
-                       expect(fakeServer.requests[0].requestHeaders.Overwrite)
+                       expect(requestStub.lastCall.args[2].Overwrite)
                                .toEqual('F');
 
-                       return respondAndCheckStatus(promise, 201);
+                       respondAndCheckStatus(promise, 201);
                });
                it('sends MOVE with silent overwrite mode when specified', function() {
                        var promise = client.move(
@@ -686,15 +680,15 @@ describe('OC.Files.Client tests', function() {
                                        {allowOverwrite: true}
                        );
 
-                       expect(fakeServer.requests.length).toEqual(1);
-                       expect(fakeServer.requests[0].method).toEqual('MOVE');
-                       expect(fakeServer.requests[0].url).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9');
-                       expect(fakeServer.requests[0].requestHeaders.Destination)
+                       expect(requestStub.calledOnce).toEqual(true);
+                       expect(requestStub.lastCall.args[0]).toEqual('MOVE');
+                       expect(requestStub.lastCall.args[1]).toEqual(baseUrl + 'path/to%20space/%E6%96%87%E4%BB%B6%E5%A4%B9');
+                       expect(requestStub.lastCall.args[2].Destination)
                                .toEqual(baseUrl + 'path/to%20space/anotherdir/%E6%96%87%E4%BB%B6%E5%A4%B9');
-                       expect(fakeServer.requests[0].requestHeaders.Overwrite)
+                       expect(requestStub.lastCall.args[2].Overwrite)
                                .not.toBeDefined();
 
-                       return respondAndCheckStatus(promise, 201);
+                       respondAndCheckStatus(promise, 201);
                });
                it('rejects promise when an error occurred', function() {
                        var promise = client.move(
@@ -702,7 +696,7 @@ describe('OC.Files.Client tests', function() {
                                        'path/to space/anotherdir/文件夹',
                                        {allowOverwrite: true}
                        );
-                       return respondAndCheckError(promise, 404);
+                       respondAndCheckError(promise, 404);
                });
                it('throws exception if arguments are missing', function() {
                        // TODO