delete.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. const { expect } = require("chai");
  2. const sleep = require("../lib/sleep");
  3. module.exports = {
  4. name: 'delete',
  5. do: async t => {
  6. await t.case('delete for normal file', async () => {
  7. await t.write('test_delete.txt', 'delete test\n', { overwrite: true });
  8. await t.delete('test_delete.txt');
  9. let threw = false;
  10. try {
  11. await t.stat('test_delete.txt');
  12. } catch (e) {
  13. expect(e.response.status).equal(404);
  14. threw = true;
  15. }
  16. expect(threw).true;
  17. });
  18. await t.case('error for non-existing file', async () => {
  19. let threw = false;
  20. try {
  21. await t.delete('test_delete.txt');
  22. } catch (e) {
  23. expect(e.response.status).equal(404);
  24. threw = true;
  25. }
  26. expect(threw).true;
  27. });
  28. await t.case('delete for directory', async () => {
  29. await t.mkdir('test_delete_dir', { overwrite: true });
  30. await t.delete('test_delete_dir');
  31. let threw = false;
  32. try {
  33. await t.stat('test_delete_dir');
  34. } catch (e) {
  35. expect(e.response.status).equal(404);
  36. threw = true;
  37. }
  38. expect(threw).true;
  39. });
  40. await t.case('delete for non-empty directory', async () => {
  41. await t.mkdir('test_delete_dir', { overwrite: true });
  42. await t.write('test_delete_dir/test.txt', 'delete test\n', { overwrite: true });
  43. let threw = false;
  44. try {
  45. await t.delete('test_delete_dir');
  46. } catch (e) {
  47. expect(e.response.status).equal(422);
  48. threw = true;
  49. }
  50. expect(threw).true;
  51. });
  52. await t.case('delete for non-empty directory with recursive=true', async () => {
  53. await t.mkdir('test_delete_dir', { overwrite: true });
  54. await t.write('test_delete_dir/test.txt', 'delete test\n', { overwrite: true });
  55. await t.delete('test_delete_dir', { recursive: true });
  56. let threw = false;
  57. await sleep(500);
  58. try {
  59. await t.stat('test_delete_dir');
  60. } catch (e) {
  61. expect(e.response.status).equal(404);
  62. threw = true;
  63. }
  64. expect(threw).true;
  65. });
  66. await t.case('non-empty deep recursion', async () => {
  67. await t.mkdir('del/a/b/c/d', {
  68. create_missing_parents: true,
  69. });
  70. await t.write('del/a/b/c/d/test.txt', 'delete test\n');
  71. await t.delete('del', {
  72. recursive: true,
  73. descendants_only: true,
  74. });
  75. let threw = false;
  76. t.quirk('delete too asynchronous');
  77. await new Promise(rslv => setTimeout(rslv, 500));
  78. try {
  79. await t.stat('del/a/b/c/d/test.txt');
  80. } catch (e) {
  81. expect(e.response.status).equal(404);
  82. threw = true;
  83. }
  84. expect(threw).true;
  85. threw = false;
  86. try {
  87. await t.stat('del/a');
  88. } catch (e) {
  89. expect(e.response.status).equal(404);
  90. threw = true;
  91. }
  92. expect(threw).true;
  93. await t.case('parent directory still exists', async () => {
  94. const stat = await t.stat('del');
  95. expect(stat.name).equal('del');
  96. });
  97. });
  98. }
  99. };