test(upload): api test for private media signing

This commit is contained in:
Jamie Howard 2023-03-01 14:23:12 +00:00
parent 5cb9c4a6e9
commit 33f8f8e1c3

View File

@ -6,33 +6,62 @@ const path = require('path');
// Helpers. // Helpers.
const { createTestBuilder } = require('../../../../../test/helpers/builder'); const { createTestBuilder } = require('../../../../../test/helpers/builder');
const { createStrapiInstance } = require('../../../../../test/helpers/strapi'); const { createStrapiInstance } = require('../../../../../test/helpers/strapi');
const { const { createAuthRequest } = require('../../../../../test/helpers/request');
createAuthRequest,
createContentAPIRequest,
} = require('../../../../../test/helpers/request');
const builder = createTestBuilder(); const builder = createTestBuilder();
let strapi; let strapi;
let request;
let contentAPIRequest;
const model = { let baseRequest;
uid: 'api::profile.profile', let rq;
displayName: 'Profile',
singularName: 'profile', const modelUID = 'api::model.model';
pluralName: 'profiles', const componentUID = 'default.component';
const models = {
[modelUID]: {
displayName: 'Model',
singularName: 'model',
pluralName: 'models',
kind: 'collectionType', kind: 'collectionType',
attributes: { attributes: {
name: { name: {
type: 'text', type: 'text',
}, },
profilePicture: { media: {
type: 'media', type: 'media',
}, },
slideShow: { media_repeatable: {
type: 'media', type: 'media',
multiple: true, multiple: true,
}, },
// TODO add these cases in the test
// compo_media: {
// type: 'component',
// component: componentUID,
// },
// compo_media_repeatable: {
// type: 'component',
// repeatable: true,
// component: componentUID,
// },
// dynamicZone: {
// type: 'dynamiczone',
// components: [componentUID],
// },
},
},
[componentUID]: {
displayName: 'component',
attributes: {
media_repeatable: {
type: 'media',
multiple: true,
},
media: {
type: 'media',
multiple: false,
},
},
}, },
}; };
@ -53,28 +82,46 @@ const mockProvider = (signUrl = true) => ({
}, },
}); });
const uploadImg = (fileName) => {
return baseRequest({
method: 'POST',
url: '/upload',
formData: {
files: fs.createReadStream(path.join(__dirname, `../utils/${fileName}`)),
},
});
};
describe('Upload Plugin url signing', () => { describe('Upload Plugin url signing', () => {
beforeAll(async () => { beforeAll(async () => {
const localProviderPath = require.resolve('@strapi/provider-upload-local'); const localProviderPath = require.resolve('@strapi/provider-upload-local');
jest.mock(localProviderPath, () => mockProvider(true)); jest.mock(localProviderPath, () => mockProvider(true));
// Create builder // Create builder
await builder.addContentType(model).build(); await builder.addComponent(models[componentUID]).addContentType(models[modelUID]).build();
// Create api instance // Create api instance
strapi = await createStrapiInstance(); strapi = await createStrapiInstance();
request = await createAuthRequest({ strapi }); baseRequest = await createAuthRequest({ strapi });
contentAPIRequest = createContentAPIRequest({ strapi });
await contentAPIRequest({ rq = await createAuthRequest({ strapi });
method: 'POST', rq.setURLPrefix(`/content-manager/collection-types/${modelUID}`);
url: '/profiles?populate=*',
formData: { const imgRes = [await uploadImg('rec.jpg'), await uploadImg('strapi.jpg')];
data: '{}',
'files.profilePicture': fs.createReadStream(path.join(__dirname, '../utils/rec.jpg')), const creationResult = await rq.post('/', {
body: {
name: 'name',
media: imgRes[0].body[0].id,
media_repeatable: imgRes.map((img) => img.body[0].id),
},
qs: {
populate: ['name'],
}, },
}); });
expect(creationResult.statusCode).toBe(200);
}); });
afterAll(async () => { afterAll(async () => {
@ -83,12 +130,16 @@ describe('Upload Plugin url signing', () => {
}); });
test('returns a signed url for private upload providers', async () => { test('returns a signed url for private upload providers', async () => {
const res = await request({ const res = await baseRequest({
method: 'GET', method: 'GET',
url: '/content-manager/collection-types/api::profile.profile/1', url: `/content-manager/collection-types/${modelUID}/1`,
}); });
expect(res.statusCode).toBe(200); expect(res.statusCode).toBe(200);
expect(res.body.profilePicture.url).toEqual('signedUrl'); expect(res.body.media.url).toEqual('signedUrl');
for (const media of res.body.media_repeatable) {
expect(media.url).toEqual('signedUrl');
}
}); });
}); });