UNPKG

gatsby-transformer-cloudinary

Version:

Transform local files into Cloudinary-managed assets for Gatsby sites.

197 lines (181 loc) 5.54 kB
const { createGatsbyImageDataResolver, _amendTransformTypeMapping, } = require('./index'); const gatsbyUtilsMocks = { createResolvers: jest.fn(), }; describe('_amendTransformTypeConfig', () => { it('defaults to using the field name as key', () => { const ammendedMapping = _amendTransformTypeMapping({}); const source = { publicId: 'a publicId', cloudName: 'a cloudName', height: 300, width: 200, format: 'a format', base64: 'a base64', tracedSVG: 'a tracedSVG', }; expect({ publicId: ammendedMapping.publicId(source), cloudName: ammendedMapping.cloudName(source), height: ammendedMapping.height(source), width: ammendedMapping.width(source), format: ammendedMapping.format(source), base64: ammendedMapping.base64(source), tracedSVG: ammendedMapping.tracedSVG(source), }).toEqual(source); }); it('allows field name config', () => { const originalMapping = { publicId: 'field1', cloudName: 'field2', height: 'field3', width: 'field4', format: 'field5', base64: 'field6', tracedSVG: 'field7', }; const ammenedMapping = _amendTransformTypeMapping(originalMapping); const source = { field1: 'a publicId', field2: 'a cloudName', field3: 300, field4: 200, field5: 'a format', field6: 'a base64', field7: 'a tracedSVG', }; const asset = { publicId: 'a publicId', cloudName: 'a cloudName', height: 300, width: 200, format: 'a format', base64: 'a base64', tracedSVG: 'a tracedSVG', }; expect({ publicId: ammenedMapping.publicId(source), cloudName: ammenedMapping.cloudName(source), height: ammenedMapping.height(source), width: ammenedMapping.width(source), format: ammenedMapping.format(source), base64: ammenedMapping.base64(source), tracedSVG: ammenedMapping.tracedSVG(source), }).toEqual(asset); }); it('allows function config', () => { const originalMapping = { publicId: (source) => { return source.field1; }, cloudName: () => { return 'cloud five'; }, height: (source) => { return source.field3.height; }, width: () => { return 200; }, format: (source) => { return source.field5.toLowerCase(); }, base64: (source) => { return source.field6.toUpperCase(); }, tracedSVG: (source) => { return undefined; }, }; const ammendedMapping = _amendTransformTypeMapping(originalMapping); const source = { field1: 'a publicId', field2: 'a cloudName', // will not be used field3: { height: 300 }, field4: 200, // will not be used field5: 'A FORMAT', field6: 'a base64', field7: 'a tracedSVG', // will not be used }; const asset = { publicId: 'a publicId', cloudName: 'cloud five', height: 300, width: 200, format: 'a format', base64: 'A BASE64', tracedSVG: undefined, }; expect({ publicId: ammendedMapping.publicId(source), cloudName: ammendedMapping.cloudName(source), height: ammendedMapping.height(source), width: ammendedMapping.width(source), format: ammendedMapping.format(source), base64: ammendedMapping.base64(source), tracedSVG: ammendedMapping.tracedSVG(source), }).toEqual(asset); }); }); describe('createGatsbyImageDataResolver', () => { it('creates a resolver', () => { const pluginOptions = { defaultTransformations: ['c_fill', 'g_auto', 'q_auto'], transformTypes: ['CloudinaryAsset', { type: 'CloudinaryAsset2' }], }; createGatsbyImageDataResolver(gatsbyUtilsMocks, pluginOptions); expect(gatsbyUtilsMocks.createResolvers).toBeCalledWith({ CloudinaryAsset: expect.objectContaining({ gatsbyImageData: expect.objectContaining({ type: 'GatsbyImageData', resolve: expect.any(Function), args: expect.objectContaining({ transformations: expect.objectContaining({ defaultValue: ['c_fill', 'g_auto', 'q_auto'], type: '[String]', }), secure: expect.objectContaining({ type: 'Boolean', }), secureDistribution: expect.objectContaining({ type: 'String', }), cname: expect.objectContaining({ type: 'String', }), privateCdn: expect.objectContaining({ type: 'Boolean', }), }), }), }), CloudinaryAsset2: expect.objectContaining({ gatsbyImageData: expect.objectContaining({ type: 'GatsbyImageData', resolve: expect.any(Function), args: expect.objectContaining({ transformations: expect.objectContaining({ defaultValue: ['c_fill', 'g_auto', 'q_auto'], type: '[String]', }), secure: expect.objectContaining({ type: 'Boolean', }), secureDistribution: expect.objectContaining({ type: 'String', }), cname: expect.objectContaining({ type: 'String', }), privateCdn: expect.objectContaining({ type: 'Boolean', }), }), }), }), }); }); });