Create webdav client tests
[arvados-workbench2.git] / src / common / webdav.test.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { WebDAV } from "./webdav";
6
7 describe('WebDAV', () => {
8     it('makes use of provided config', async () => {
9         const { open, load, setRequestHeader, createRequest } = mockCreateRequest();
10         const webdav = WebDAV.create({ baseUrl: 'http://foo.com/', headers: { Authorization: 'Basic' } }, createRequest);
11         const promise = webdav.propfind('foo');
12         load();
13         const request = await promise;
14         expect(open).toHaveBeenCalledWith('PROPFIND', 'http://foo.com/foo');
15         expect(setRequestHeader).toHaveBeenCalledWith('Authorization', 'Basic');
16         expect(request).toBeInstanceOf(XMLHttpRequest);
17     });
18
19     it('PROPFIND', async () => {
20         const { open, load, createRequest } = mockCreateRequest();
21         const webdav = WebDAV.create(undefined, createRequest);
22         const promise = webdav.propfind('foo');
23         load();
24         const request = await promise;
25         expect(open).toHaveBeenCalledWith('PROPFIND', 'foo');
26         expect(request).toBeInstanceOf(XMLHttpRequest);
27     });
28
29     it('PUT', async () => {
30         const { open, send, load, createRequest } = mockCreateRequest();
31         const webdav = WebDAV.create(undefined, createRequest);
32         const promise = webdav.put('foo', { data: 'Test data' });
33         load();
34         const request = await promise;
35         expect(open).toHaveBeenCalledWith('PUT', 'foo');
36         expect(send).toHaveBeenCalledWith('Test data');
37         expect(request).toBeInstanceOf(XMLHttpRequest);
38     });
39
40     it('COPY', async () => {
41         const { open, setRequestHeader, load, createRequest } = mockCreateRequest();
42         const webdav = WebDAV.create(undefined, createRequest);
43         const promise = webdav.copy('foo', { destination: 'foo-copy' });
44         load();
45         const request = await promise;
46         expect(open).toHaveBeenCalledWith('COPY', 'foo');
47         expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'foo-copy');
48         expect(request).toBeInstanceOf(XMLHttpRequest);
49     });
50
51     it('MOVE', async () => {
52         const { open, setRequestHeader, load, createRequest } = mockCreateRequest();
53         const webdav = WebDAV.create(undefined, createRequest);
54         const promise = webdav.move('foo', { destination: 'foo-copy' });
55         load();
56         const request = await promise;
57         expect(open).toHaveBeenCalledWith('MOVE', 'foo');
58         expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'foo-copy');
59         expect(request).toBeInstanceOf(XMLHttpRequest);
60     });
61
62     it('DELETE', async () => {
63         const { open, load, createRequest } = mockCreateRequest();
64         const webdav = WebDAV.create(undefined, createRequest);
65         const promise = webdav.delete('foo');
66         load();
67         const request = await promise;
68         expect(open).toHaveBeenCalledWith('DELETE', 'foo');
69         expect(request).toBeInstanceOf(XMLHttpRequest);
70     });
71 });
72
73 const mockCreateRequest = () => {
74     const send = jest.fn();
75     const open = jest.fn();
76     const setRequestHeader = jest.fn();
77     const request = new XMLHttpRequest();
78     request.send = send;
79     request.open = open;
80     request.setRequestHeader = setRequestHeader;
81     const load = () => request.dispatchEvent(new Event('load'));
82     return {
83         send,
84         open,
85         load,
86         setRequestHeader,
87         createRequest: () => request
88     };
89 };