DAV.test.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import Collection from '../../src/lib/DAV/Collection';
  2. import DAV from '../../src/lib/DAV.js';
  3. describe('DAV', () => {
  4. const getSpies = (SpyHTTPReturns = {}, SpyCacheReturns = {}) => {
  5. const SpyHTTP = jasmine.createSpyObj('HTTP', ['GET', 'HEAD', 'PUT', 'PROPFIND', 'DELETE', 'MKCOL', 'COPY', 'MOVE']),
  6. SpyCache = jasmine.createSpyObj('Cache', ['delete', 'get', 'has', 'set'])
  7. ;
  8. [
  9. [SpyHTTP, SpyHTTPReturns],
  10. [SpyCache, SpyCacheReturns]
  11. ].forEach(
  12. ([object, returnValues]) => Object.entries(returnValues).forEach(
  13. ([method, returnValue]) => object[method] = object[method].and.returnValue(returnValue)
  14. )
  15. );
  16. return [
  17. SpyHTTP,
  18. SpyCache
  19. ];
  20. };
  21. it('should fire a HEAD request on check', () => {
  22. const [SpyHTTP, SpyCache] = getSpies(),
  23. dav = new DAV({}, SpyCache, SpyHTTP)
  24. ;
  25. dav.check('/checkHeadRequest');
  26. expect(SpyHTTP.HEAD).toHaveBeenCalledWith('/checkHeadRequest');
  27. });
  28. it('should fire a COPY request on copy', () => {
  29. const [SpyHTTP, SpyCache] = getSpies(),
  30. dav = new DAV({}, SpyCache, SpyHTTP)
  31. ;
  32. dav.copy('/copySource', '/copyDestination');
  33. expect(SpyHTTP.COPY).toHaveBeenCalledWith('/copySource', {
  34. headers: {
  35. Destination: `${location.protocol}//${location.hostname}${location.port ? `:${location.port}` : ''}/copyDestination`
  36. }
  37. });
  38. });
  39. it('should fire a DELETE request on del', () => {
  40. const [SpyHTTP, SpyCache] = getSpies(),
  41. dav = new DAV({}, SpyCache, SpyHTTP)
  42. ;
  43. dav.del('/checkDeleteRequest');
  44. expect(SpyHTTP.DELETE).toHaveBeenCalledWith('/checkDeleteRequest');
  45. });
  46. it('should fire a GET request on get', () => {
  47. const [SpyHTTP, SpyCache] = getSpies(),
  48. dav = new DAV({}, SpyCache, SpyHTTP)
  49. ;
  50. dav.get('/checkGetRequest');
  51. expect(SpyHTTP.GET).toHaveBeenCalledWith('/checkGetRequest');
  52. });
  53. it('should fire a PROPFIND request and store cache on list', async () => {
  54. const [SpyHTTP, SpyCache] = getSpies({
  55. HEAD: {
  56. ok: true
  57. },
  58. PROPFIND: {
  59. text: () => '<?xml version="1.0" encoding="utf-8"?><D:multistatus xmlns:D="DAV:"><D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/"><D:href>/Directory%20name/</D:href><D:propstat><D:prop><lp1:resourcetype><D:collection/></lp1:resourcetype><lp1:creationdate>2019-11-06T16:29:46Z</lp1:creationdate><lp1:getlastmodified>Wed, 06 Nov 2019 16:29:46 GMT</lp1:getlastmodified><lp1:getetag>"6-596b00e926ba3"</lp1:getetag><D:supportedlock><D:lockentry><D:lockscope><D:exclusive/></D:lockscope><D:locktype><D:write/></D:locktype></D:lockentry><D:lockentry><D:lockscope><D:shared/></D:lockscope><D:locktype><D:write/></D:locktype></D:lockentry></D:supportedlock><D:lockdiscovery/><D:getcontenttype>httpd/unix-directory</D:getcontenttype></D:prop><D:status>HTTP/1.1 200 OK</D:status></D:propstat></D:response></D:multistatus>'
  60. }
  61. }, {
  62. get: false
  63. }),
  64. dav = new DAV({}, SpyCache, SpyHTTP),
  65. collection = await dav.list('/checkPropfindRequest')
  66. ;
  67. expect(SpyCache.get).toHaveBeenCalledWith('/checkPropfindRequest/');
  68. expect(SpyHTTP.HEAD).toHaveBeenCalledWith('/checkPropfindRequest/');
  69. expect(SpyHTTP.PROPFIND).toHaveBeenCalledWith('/checkPropfindRequest/');
  70. expect(collection).toBeInstanceOf(Collection);
  71. expect(SpyCache.set).toHaveBeenCalledWith('/checkPropfindRequest/', collection);
  72. });
  73. it('should fire an MKCOL request on mkcol', () => {
  74. const [SpyHTTP, SpyCache] = getSpies(),
  75. dav = new DAV({}, SpyCache, SpyHTTP)
  76. ;
  77. dav.mkcol('/checkMkcolRequest');
  78. expect(SpyHTTP.MKCOL).toHaveBeenCalledWith('/checkMkcolRequest');
  79. });
  80. it('should fire a MOVE request on move', () => {
  81. const [SpyHTTP, SpyCache] = getSpies(),
  82. dav = new DAV({}, SpyCache, SpyHTTP)
  83. ;
  84. dav.move('/moveSource', '/moveDestination');
  85. expect(SpyHTTP.MOVE).toHaveBeenCalledWith('/moveSource', {
  86. headers: {
  87. Destination: `${location.protocol}//${location.hostname}${location.port ? `:${location.port}` : ''}/moveDestination`
  88. }
  89. });
  90. });
  91. it('should fire a PUT request on upload', () => {
  92. const [SpyHTTP, SpyCache] = getSpies(),
  93. dav = new DAV({}, SpyCache, SpyHTTP),
  94. file = new File([''], 'uploadTest', {
  95. type: 'text/plain'
  96. })
  97. ;
  98. dav.upload('/path/', file);
  99. expect(SpyHTTP.PUT).toHaveBeenCalledWith('/path/uploadTest', {
  100. headers: {
  101. 'Content-Type': file.type
  102. },
  103. body: file
  104. });
  105. });
  106. it('should not fire a HEAD request on list when `bypassCheck` is set', async () => {
  107. const [SpyHTTP, SpyCache] = getSpies({
  108. HEAD: {
  109. ok: true
  110. },
  111. PROPFIND: {
  112. text: () => '<?xml version="1.0" encoding="utf-8"?><D:multistatus xmlns:D="DAV:"><D:response xmlns:lp1="DAV:" xmlns:lp2="http://apache.org/dav/props/"><D:href>/Directory%20name/</D:href><D:propstat><D:prop><lp1:resourcetype><D:collection/></lp1:resourcetype><lp1:creationdate>2019-11-06T16:29:46Z</lp1:creationdate><lp1:getlastmodified>Wed, 06 Nov 2019 16:29:46 GMT</lp1:getlastmodified><lp1:getetag>"6-596b00e926ba3"</lp1:getetag><D:supportedlock><D:lockentry><D:lockscope><D:exclusive/></D:lockscope><D:locktype><D:write/></D:locktype></D:lockentry><D:lockentry><D:lockscope><D:shared/></D:lockscope><D:locktype><D:write/></D:locktype></D:lockentry></D:supportedlock><D:lockdiscovery/><D:getcontenttype>httpd/unix-directory</D:getcontenttype></D:prop><D:status>HTTP/1.1 200 OK</D:status></D:propstat></D:response></D:multistatus>'
  113. }
  114. }, {
  115. get: false
  116. }),
  117. dav = new DAV({
  118. bypassCheck: true
  119. }, SpyCache, SpyHTTP)
  120. ;
  121. await dav.list('/checkPropfindRequest');
  122. expect(SpyHTTP.HEAD).not.toHaveBeenCalledWith('/checkPropfindRequest/');
  123. });
  124. });