| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const fs = require('fs'); | 
					
						
							|  |  |  | const path = require('path'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Helpers.
 | 
					
						
							|  |  |  | const { createTestBuilder } = require('../../../../../test/helpers/builder'); | 
					
						
							|  |  |  | const { createStrapiInstance } = require('../../../../../test/helpers/strapi'); | 
					
						
							|  |  |  | const { | 
					
						
							|  |  |  |   createContentAPIRequest, | 
					
						
							|  |  |  |   createAuthRequest, | 
					
						
							|  |  |  | } = require('../../../../../test/helpers/request'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const builder = createTestBuilder(); | 
					
						
							|  |  |  | const data = { | 
					
						
							|  |  |  |   dogs: [], | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | let strapi; | 
					
						
							|  |  |  | let rq; | 
					
						
							|  |  |  | let rqAdmin; | 
					
						
							|  |  |  | let uploadFolder; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const dogModel = { | 
					
						
							|  |  |  |   displayName: 'Dog', | 
					
						
							|  |  |  |   singularName: 'dog', | 
					
						
							|  |  |  |   pluralName: 'dogs', | 
					
						
							|  |  |  |   kind: 'collectionType', | 
					
						
							|  |  |  |   attributes: { | 
					
						
							|  |  |  |     pic: { | 
					
						
							|  |  |  |       type: 'media', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe('Uploads folder', () => { | 
					
						
							|  |  |  |   beforeAll(async () => { | 
					
						
							|  |  |  |     await builder.addContentType(dogModel).build(); | 
					
						
							|  |  |  |     strapi = await createStrapiInstance(); | 
					
						
							|  |  |  |     rq = await createContentAPIRequest({ strapi }); | 
					
						
							|  |  |  |     rqAdmin = await createAuthRequest({ strapi }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   afterAll(async () => { | 
					
						
							|  |  |  |     // delete all folders
 | 
					
						
							| 
									
										
										
										
											2022-05-05 15:35:52 +02:00
										 |  |  |     const res = await rqAdmin({ | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |       method: 'GET', | 
					
						
							| 
									
										
										
										
											2022-05-20 11:59:47 +02:00
										 |  |  |       url: '/upload/folders', | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2022-05-05 15:35:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |     await rqAdmin({ | 
					
						
							|  |  |  |       method: 'POST', | 
					
						
							|  |  |  |       url: '/upload/actions/bulk-delete', | 
					
						
							|  |  |  |       body: { | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |         folderIds: res.body.data.map((f) => f.id), | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |       }, | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     await strapi.destroy(); | 
					
						
							|  |  |  |     await builder.cleanup(); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe('Regular upload', () => { | 
					
						
							|  |  |  |     test('Uploaded file goes into a specific folder', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           files: fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { body: file } = await rqAdmin({ | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							|  |  |  |         url: `/upload/files/${res.body[0].id}`, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(file).toMatchObject({ | 
					
						
							|  |  |  |         folder: { | 
					
						
							| 
									
										
										
										
											2022-05-17 15:39:17 +02:00
										 |  |  |           name: 'API Uploads', | 
					
						
							| 
									
										
										
										
											2022-06-07 10:56:33 +02:00
										 |  |  |           pathId: expect.any(Number), | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2022-06-03 16:21:52 +02:00
										 |  |  |         folderPath: `/${file.folder.pathId}`, | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       uploadFolder = file.folder; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Uploads folder is recreated if deleted', async () => { | 
					
						
							|  |  |  |       await rqAdmin({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload/actions/bulk-delete', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           folderIds: [uploadFolder.id], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           files: fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { body: file } = await rqAdmin({ | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							|  |  |  |         url: `/upload/files/${res.body[0].id}`, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(file).toMatchObject({ | 
					
						
							|  |  |  |         folder: { | 
					
						
							| 
									
										
										
										
											2022-05-17 15:39:17 +02:00
										 |  |  |           name: 'API Uploads', | 
					
						
							| 
									
										
										
										
											2022-06-07 10:56:33 +02:00
										 |  |  |           pathId: expect.any(Number), | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2022-06-03 16:21:52 +02:00
										 |  |  |         folderPath: `/${file.folder.pathId}`, | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       uploadFolder = file.folder; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Uploads folder is recreated if deleted (handle duplicates)', async () => { | 
					
						
							|  |  |  |       await rqAdmin({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload/actions/bulk-delete', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           folderIds: [uploadFolder.id], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       await rqAdmin({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload/folders', | 
					
						
							|  |  |  |         body: { | 
					
						
							| 
									
										
										
										
											2022-05-17 15:39:17 +02:00
										 |  |  |           name: 'API Uploads', | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |           parent: null, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           files: fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { body: file } = await rqAdmin({ | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							|  |  |  |         url: `/upload/files/${res.body[0].id}`, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(file).toMatchObject({ | 
					
						
							|  |  |  |         folder: { | 
					
						
							| 
									
										
										
										
											2022-05-17 15:39:17 +02:00
										 |  |  |           name: 'API Uploads (1)', | 
					
						
							| 
									
										
										
										
											2022-06-07 10:56:33 +02:00
										 |  |  |           pathId: expect.any(Number), | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2022-06-03 16:21:52 +02:00
										 |  |  |         folderPath: `/${file.folder.pathId}`, | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       uploadFolder = file.folder; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe('Upload to an entity', () => { | 
					
						
							|  |  |  |     test('Uploaded file goes into a specific folder', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/dogs?populate=*', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           data: '{}', | 
					
						
							|  |  |  |           'files.pic': fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { body: file } = await rqAdmin({ | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							|  |  |  |         url: `/upload/files/${res.body.data.attributes.pic.data.id}`, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(file).toMatchObject({ | 
					
						
							|  |  |  |         folder: { | 
					
						
							| 
									
										
										
										
											2022-05-17 15:39:17 +02:00
										 |  |  |           name: 'API Uploads (1)', | 
					
						
							| 
									
										
										
										
											2022-06-07 10:56:33 +02:00
										 |  |  |           pathId: expect.any(Number), | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2022-06-03 16:21:52 +02:00
										 |  |  |         folderPath: `/${file.folder.pathId}`, | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       uploadFolder = file.folder; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Uploads folder is recreated if deleted', async () => { | 
					
						
							|  |  |  |       await rqAdmin({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload/actions/bulk-delete', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           folderIds: [uploadFolder.id], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/dogs?populate=*', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           data: '{}', | 
					
						
							|  |  |  |           'files.pic': fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { body: file } = await rqAdmin({ | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							|  |  |  |         url: `/upload/files/${res.body.data.attributes.pic.data.id}`, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(file).toMatchObject({ | 
					
						
							|  |  |  |         folder: { | 
					
						
							| 
									
										
										
										
											2022-05-17 15:39:17 +02:00
										 |  |  |           name: 'API Uploads (1)', | 
					
						
							| 
									
										
										
										
											2022-06-07 10:56:33 +02:00
										 |  |  |           pathId: expect.any(Number), | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2022-06-03 16:21:52 +02:00
										 |  |  |         folderPath: `/${file.folder.pathId}`, | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       uploadFolder = file.folder; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Uploads folder is recreated if deleted (handle duplicates)', async () => { | 
					
						
							|  |  |  |       await rqAdmin({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload/actions/bulk-delete', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           folderIds: [uploadFolder.id], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       await rqAdmin({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload/folders', | 
					
						
							|  |  |  |         body: { | 
					
						
							| 
									
										
										
										
											2022-05-17 15:39:17 +02:00
										 |  |  |           name: 'API Uploads (1)', | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |           parent: null, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/dogs?populate=*', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           data: '{}', | 
					
						
							|  |  |  |           'files.pic': fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { body: file } = await rqAdmin({ | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							|  |  |  |         url: `/upload/files/${res.body.data.attributes.pic.data.id}`, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(file).toMatchObject({ | 
					
						
							|  |  |  |         folder: { | 
					
						
							| 
									
										
										
										
											2022-05-17 15:39:17 +02:00
										 |  |  |           name: 'API Uploads (2)', | 
					
						
							| 
									
										
										
										
											2022-06-07 10:56:33 +02:00
										 |  |  |           pathId: expect.any(Number), | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2022-06-03 16:21:52 +02:00
										 |  |  |         folderPath: `/${file.folder.pathId}`, | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       uploadFolder = file.folder; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe('Attach to an entity', () => { | 
					
						
							|  |  |  |     beforeAll(async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/dogs', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           data: '{}', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |       data.dogs.push(res.body.data); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Uploaded file goes into a specific folder', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           data: '{}', | 
					
						
							|  |  |  |           files: fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), | 
					
						
							|  |  |  |           refId: data.dogs[0].id, | 
					
						
							|  |  |  |           ref: 'api::dog.dog', | 
					
						
							|  |  |  |           field: 'pic', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { body: file } = await rqAdmin({ | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							|  |  |  |         url: `/upload/files/${res.body[0].id}`, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(file).toMatchObject({ | 
					
						
							|  |  |  |         folder: { | 
					
						
							| 
									
										
										
										
											2022-05-17 15:39:17 +02:00
										 |  |  |           name: 'API Uploads (2)', | 
					
						
							| 
									
										
										
										
											2022-06-07 10:56:33 +02:00
										 |  |  |           pathId: expect.any(Number), | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2022-06-03 16:21:52 +02:00
										 |  |  |         folderPath: `/${file.folder.pathId}`, | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       uploadFolder = file.folder; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Uploads folder is recreated if deleted', async () => { | 
					
						
							|  |  |  |       await rqAdmin({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload/actions/bulk-delete', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           folderIds: [uploadFolder.id], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           data: '{}', | 
					
						
							|  |  |  |           files: fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), | 
					
						
							|  |  |  |           refId: data.dogs[0].id, | 
					
						
							|  |  |  |           ref: 'api::dog.dog', | 
					
						
							|  |  |  |           field: 'pic', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { body: file } = await rqAdmin({ | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							|  |  |  |         url: `/upload/files/${res.body[0].id}`, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(file).toMatchObject({ | 
					
						
							|  |  |  |         folder: { | 
					
						
							| 
									
										
										
										
											2022-05-17 15:39:17 +02:00
										 |  |  |           name: 'API Uploads (2)', | 
					
						
							| 
									
										
										
										
											2022-06-07 10:56:33 +02:00
										 |  |  |           pathId: expect.any(Number), | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2022-06-03 16:21:52 +02:00
										 |  |  |         folderPath: `/${file.folder.pathId}`, | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       uploadFolder = file.folder; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Uploads folder is recreated if deleted (handle duplicates)', async () => { | 
					
						
							|  |  |  |       await rqAdmin({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload/actions/bulk-delete', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           folderIds: [uploadFolder.id], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       await rqAdmin({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload/folders', | 
					
						
							|  |  |  |         body: { | 
					
						
							| 
									
										
										
										
											2022-05-17 15:39:17 +02:00
										 |  |  |           name: 'API Uploads (2)', | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |           parent: null, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           files: fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), | 
					
						
							|  |  |  |           refId: data.dogs[0].id, | 
					
						
							|  |  |  |           ref: 'api::dog.dog', | 
					
						
							|  |  |  |           field: 'pic', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { body: file } = await rqAdmin({ | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							|  |  |  |         url: `/upload/files/${res.body[0].id}`, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(file).toMatchObject({ | 
					
						
							|  |  |  |         folder: { | 
					
						
							| 
									
										
										
										
											2022-05-17 15:39:17 +02:00
										 |  |  |           name: 'API Uploads (3)', | 
					
						
							| 
									
										
										
										
											2022-06-07 10:56:33 +02:00
										 |  |  |           pathId: expect.any(Number), | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2022-06-03 16:21:52 +02:00
										 |  |  |         folderPath: `/${file.folder.pathId}`, | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       uploadFolder = file.folder; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2022-08-08 16:01:34 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe('Upload with multiple files', () => { | 
					
						
							|  |  |  |     test('Uploaded files go into a specific folder', async () => { | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           files: [ | 
					
						
							|  |  |  |             fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), | 
					
						
							|  |  |  |             fs.createReadStream(path.join(__dirname, '../utils/strapi.jpg')), | 
					
						
							|  |  |  |           ], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { | 
					
						
							|  |  |  |         body: { results: files }, | 
					
						
							|  |  |  |       } = await rqAdmin({ | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							| 
									
										
										
										
											2022-08-08 17:45:21 +02:00
										 |  |  |         url: '/upload/files', | 
					
						
							|  |  |  |         qs: { | 
					
						
							|  |  |  |           filters: { | 
					
						
							|  |  |  |             id: { | 
					
						
							|  |  |  |               $in: res.body.map(({ id }) => id), | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           populate: '*', | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2022-08-08 16:01:34 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-09 18:21:48 +02:00
										 |  |  |       files.forEach((file) => | 
					
						
							| 
									
										
										
										
											2022-08-08 16:01:34 +02:00
										 |  |  |         expect(file).toMatchObject({ | 
					
						
							|  |  |  |           folder: { | 
					
						
							|  |  |  |             name: 'API Uploads (3)', | 
					
						
							|  |  |  |             pathId: expect.any(Number), | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           folderPath: `/${file.folder.pathId}`, | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-09 18:21:48 +02:00
										 |  |  |       expect(files.every((file) => file.folder.id === files[0].folder.id)).toBe(true); | 
					
						
							| 
									
										
										
										
											2022-08-08 16:01:34 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       uploadFolder = files[0].folder; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-08 17:45:21 +02:00
										 |  |  |     test('Uploaded files with fileInfo', async () => { | 
					
						
							|  |  |  |       const fileInfo = [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'file1', | 
					
						
							|  |  |  |           alternativeText: 'file1', | 
					
						
							|  |  |  |           caption: 'file1', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           name: 'file2', | 
					
						
							|  |  |  |           alternativeText: 'file2', | 
					
						
							|  |  |  |           caption: 'file2', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           files: [ | 
					
						
							|  |  |  |             fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), | 
					
						
							|  |  |  |             fs.createReadStream(path.join(__dirname, '../utils/strapi.jpg')), | 
					
						
							|  |  |  |           ], | 
					
						
							|  |  |  |           fileInfo: fileInfo.map(JSON.stringify), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { | 
					
						
							|  |  |  |         body: { results: files }, | 
					
						
							|  |  |  |       } = await rqAdmin({ | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							|  |  |  |         url: '/upload/files', | 
					
						
							|  |  |  |         qs: { | 
					
						
							|  |  |  |           filters: { | 
					
						
							|  |  |  |             id: { | 
					
						
							|  |  |  |               $in: res.body.map(({ id }) => id), | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           populate: '*', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       files.forEach((file, index) => | 
					
						
							|  |  |  |         expect(file).toMatchObject({ | 
					
						
							|  |  |  |           ...fileInfo[index], | 
					
						
							|  |  |  |           folder: { | 
					
						
							|  |  |  |             name: 'API Uploads (3)', | 
					
						
							|  |  |  |             pathId: expect.any(Number), | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           folderPath: `/${file.folder.pathId}`, | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-09 18:21:48 +02:00
										 |  |  |       expect(files.every((file) => file.folder.id === files[0].folder.id)).toBe(true); | 
					
						
							| 
									
										
										
										
											2022-08-08 17:45:21 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       uploadFolder = files[0].folder; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-08 16:01:34 +02:00
										 |  |  |     test('Uploads folder is recreated if deleted', async () => { | 
					
						
							|  |  |  |       await rqAdmin({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload/actions/bulk-delete', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           folderIds: [uploadFolder.id], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           files: [ | 
					
						
							|  |  |  |             fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), | 
					
						
							|  |  |  |             fs.createReadStream(path.join(__dirname, '../utils/strapi.jpg')), | 
					
						
							|  |  |  |           ], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { | 
					
						
							|  |  |  |         body: { results: files }, | 
					
						
							|  |  |  |       } = await rqAdmin({ | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							| 
									
										
										
										
											2022-08-08 17:45:21 +02:00
										 |  |  |         url: '/upload/files', | 
					
						
							|  |  |  |         qs: { | 
					
						
							|  |  |  |           filters: { | 
					
						
							|  |  |  |             id: { | 
					
						
							|  |  |  |               $in: res.body.map(({ id }) => id), | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           populate: '*', | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2022-08-08 16:01:34 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-09 18:21:48 +02:00
										 |  |  |       files.forEach((file) => { | 
					
						
							| 
									
										
										
										
											2022-08-08 16:01:34 +02:00
										 |  |  |         expect(file).toMatchObject({ | 
					
						
							|  |  |  |           folder: { | 
					
						
							|  |  |  |             name: 'API Uploads (3)', | 
					
						
							|  |  |  |             pathId: expect.any(Number), | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           folderPath: `/${file.folder.pathId}`, | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-09 18:21:48 +02:00
										 |  |  |       expect(files.every((file) => file.folder.id === files[0].folder.id)).toBe(true); | 
					
						
							| 
									
										
										
										
											2022-08-08 16:01:34 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       uploadFolder = files[0].folder; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test('Uploads folder is recreated if deleted (handle duplicates)', async () => { | 
					
						
							|  |  |  |       await rqAdmin({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload/actions/bulk-delete', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           folderIds: [uploadFolder.id], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       await rqAdmin({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload/folders', | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           name: 'API Uploads (3)', | 
					
						
							|  |  |  |           parent: null, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const res = await rq({ | 
					
						
							|  |  |  |         method: 'POST', | 
					
						
							|  |  |  |         url: '/upload', | 
					
						
							|  |  |  |         formData: { | 
					
						
							|  |  |  |           files: [ | 
					
						
							|  |  |  |             fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), | 
					
						
							|  |  |  |             fs.createReadStream(path.join(__dirname, '../utils/strapi.jpg')), | 
					
						
							|  |  |  |           ], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(res.statusCode).toBe(200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { | 
					
						
							|  |  |  |         body: { results: files }, | 
					
						
							|  |  |  |       } = await rqAdmin({ | 
					
						
							|  |  |  |         method: 'GET', | 
					
						
							| 
									
										
										
										
											2022-08-08 17:45:21 +02:00
										 |  |  |         url: '/upload/files', | 
					
						
							|  |  |  |         qs: { | 
					
						
							|  |  |  |           filters: { | 
					
						
							|  |  |  |             id: { | 
					
						
							|  |  |  |               $in: res.body.map(({ id }) => id), | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           populate: '*', | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2022-08-08 16:01:34 +02:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-09 18:21:48 +02:00
										 |  |  |       files.forEach((file) => { | 
					
						
							| 
									
										
										
										
											2022-08-08 16:01:34 +02:00
										 |  |  |         expect(file).toMatchObject({ | 
					
						
							|  |  |  |           folder: { | 
					
						
							|  |  |  |             name: 'API Uploads (4)', | 
					
						
							|  |  |  |             pathId: expect.any(Number), | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           folderPath: `/${file.folder.pathId}`, | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-09 18:21:48 +02:00
										 |  |  |       expect(files.every((file) => file.folder.id === files[0].folder.id)).toBe(true); | 
					
						
							| 
									
										
										
										
											2022-08-08 16:01:34 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       uploadFolder = files[0].folder; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2022-05-05 10:47:43 +02:00
										 |  |  | }); |