batch.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. const { expect } = require("chai");
  2. const { verify_fsentry } = require("./fsentry");
  3. module.exports = {
  4. name: 'batch',
  5. do: async t => {
  6. let results;
  7. /*
  8. await t.case('batch write', async () => {
  9. results = null;
  10. results = await t.batch('/batch/write', [
  11. {
  12. path: t.resolve('test_1.txt'),
  13. overwrite: true,
  14. },
  15. {
  16. path: t.resolve('test_3.txt'),
  17. }
  18. ], [
  19. 'first file',
  20. 'second file',
  21. ])
  22. console.log('results?', results)
  23. expect(results.length).equal(2);
  24. for ( const result of results ) {
  25. await verify_fsentry(t, result)
  26. }
  27. });
  28. t.case('batch mkdir', async () => {
  29. results = null;
  30. results = await t.batch_json('batch/mkdir', [
  31. {
  32. path: t.resolve('test_1_dir'),
  33. overwrite: true,
  34. },
  35. {
  36. path: t.resolve('test_3_dir'),
  37. }
  38. ])
  39. expect(results.length).equal(2);
  40. for ( const result of results ) {
  41. await verify_fsentry(t, result)
  42. }
  43. });
  44. */
  45. await t.case('3-3 nested directores', async () => {
  46. results = null;
  47. results = await t.batch('batch', [
  48. {
  49. op: 'mktree',
  50. parent: t.cwd,
  51. tree: [
  52. 'a/b/c',
  53. [
  54. 'a/b/c',
  55. ['a/b/c'],
  56. ['d/e/f'],
  57. ['g/h/i'],
  58. ['j/k/l'],
  59. ],
  60. [
  61. 'd/e/f',
  62. ['a/b/c'],
  63. ['d/e/f'],
  64. ['g/h/i'],
  65. ['j/k/l'],
  66. ],
  67. [
  68. 'g/h/i',
  69. ['a/b/c'],
  70. ['d/e/f'],
  71. ['g/h/i'],
  72. ['j/k/l'],
  73. ],
  74. [
  75. 'j/k/l',
  76. ['a/b/c'],
  77. ['d/e/f'],
  78. ['g/h/i'],
  79. ['j/k/l'],
  80. ],
  81. ]
  82. }
  83. ], []);
  84. });
  85. await t.case('path reference resolution', async () => {
  86. results = null;
  87. results = await t.batch('batch', [
  88. {
  89. op: 'mkdir',
  90. as: 'dest_1',
  91. path: t.resolve('q/w'),
  92. create_missing_parents: true,
  93. },
  94. {
  95. op: 'mkdir',
  96. as: 'dest_2',
  97. path: t.resolve('q/w'), // "q/w (1)"
  98. dedupe_name: true,
  99. create_missing_parents: true,
  100. },
  101. {
  102. op: 'write',
  103. path: t.resolve('$dest_1/file_1.txt'),
  104. },
  105. {
  106. op: 'write',
  107. path: t.resolve('$dest_2/file_2.txt'),
  108. },
  109. ], [
  110. 'file 1 contents',
  111. 'file 2 contents',
  112. ]);
  113. console.log('res?', results)
  114. expect(results.length).equal(4);
  115. expect(results[0].name).equal('w');
  116. expect(results[1].name).equal('w (1)');
  117. expect(results[2].path).equal(t.resolve('q/w/file_1.txt'));
  118. expect(results[3].path).equal(t.resolve('q/w (1)/file_2.txt'));
  119. });
  120. await t.case('batch mkdir and write', async () => {
  121. results = null;
  122. results = await t.batch('batch', [
  123. {
  124. op: 'mkdir',
  125. path: t.resolve('test_x_1_dir'),
  126. overwrite: true,
  127. },
  128. {
  129. op: 'write',
  130. path: t.resolve('test_x_1.txt'),
  131. },
  132. {
  133. op: 'mkdir',
  134. path: t.resolve('test_x_2_dir'),
  135. },
  136. {
  137. op: 'write',
  138. path: t.resolve('test_x_2.txt'),
  139. }
  140. ], [
  141. 'first file',
  142. 'second file',
  143. ]);
  144. console.log('res?', results)
  145. expect(results.length).equal(4);
  146. for ( const result of results ) {
  147. // await verify_fsentry(t, result)
  148. }
  149. });
  150. await t.case('path reference resolution (without dedupe)', async () => {
  151. results = null;
  152. results = await t.batch('batch', [
  153. {
  154. op: 'mkdir',
  155. as: 'dest_1',
  156. path: t.resolve('q/w'),
  157. create_missing_parents: true,
  158. },
  159. {
  160. op: 'write',
  161. path: t.resolve('$dest_1/file_1.txt'),
  162. },
  163. ], [
  164. 'file 1 contents',
  165. ]);
  166. console.log('res?', results)
  167. expect(results.length).equal(2);
  168. expect(results[0].name).equal('w');
  169. expect(results[1].path).equal(t.resolve('q/w/file_1.txt'));
  170. });
  171. // Test for path reference resolution
  172. await t.case('path reference resolution', async () => {
  173. results = null;
  174. results = await t.batch('batch', [
  175. {
  176. op: 'mkdir',
  177. as: 'dest_1',
  178. path: t.resolve('q/w'),
  179. create_missing_parents: true,
  180. },
  181. {
  182. op: 'mkdir',
  183. as: 'dest_2',
  184. path: t.resolve('q/w'), // "q/w (1)"
  185. dedupe_name: true,
  186. create_missing_parents: true,
  187. },
  188. {
  189. op: 'write',
  190. path: t.resolve('$dest_1/file_1.txt'),
  191. },
  192. {
  193. op: 'write',
  194. path: t.resolve('$dest_2/file_2.txt'),
  195. },
  196. ], [
  197. 'file 1 contents',
  198. 'file 2 contents',
  199. ]);
  200. console.log('res?', results)
  201. expect(results.length).equal(4);
  202. expect(results[0].name).equal('w');
  203. expect(results[1].name).equal('w (1)');
  204. expect(results[2].path).equal(t.resolve('q/w/file_1.txt'));
  205. expect(results[3].path).equal(t.resolve('q/w (1)/file_2.txt'));
  206. });
  207. // Test for a single write
  208. await t.case('single write', async () => {
  209. results = null;
  210. results = await t.batch('batch', [
  211. {
  212. op: 'write',
  213. path: t.resolve('just_one_file.txt'),
  214. },
  215. ], [
  216. 'file 1 contents',
  217. ]);
  218. console.log('res?', results)
  219. });
  220. }
  221. };