AssemblyOptions.test.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. const AssemblyOptions = require('./AssemblyOptions')
  2. describe('Transloadit/AssemblyOptions', () => {
  3. it('Validates response from getAssemblyOptions()', () => {
  4. const options = new AssemblyOptions([
  5. { name: 'testfile' }
  6. ], {
  7. getAssemblyOptions: (file) => {
  8. expect(file.name).toBe('testfile')
  9. return {
  10. params: '{"some":"json"}'
  11. }
  12. }
  13. })
  14. return expect(options.build()).rejects.toThrow(
  15. /The `params\.auth\.key` option is required/
  16. )
  17. })
  18. it('Uses different assemblies for different params', () => {
  19. const data = Buffer.alloc(10)
  20. data.size = data.byteLength
  21. const options = new AssemblyOptions([
  22. { name: 'a.png', data },
  23. { name: 'b.png', data },
  24. { name: 'c.png', data },
  25. { name: 'd.png', data }
  26. ], {
  27. getAssemblyOptions: (file) => ({
  28. params: {
  29. auth: { key: 'fake key' },
  30. steps: {
  31. fake_step: { data: file.name }
  32. }
  33. }
  34. })
  35. })
  36. return options.build().then((assemblies) => {
  37. expect(assemblies).toHaveLength(4)
  38. expect(assemblies[0].options.params.steps.fake_step.data).toBe('a.png')
  39. expect(assemblies[1].options.params.steps.fake_step.data).toBe('b.png')
  40. expect(assemblies[2].options.params.steps.fake_step.data).toBe('c.png')
  41. expect(assemblies[3].options.params.steps.fake_step.data).toBe('d.png')
  42. })
  43. })
  44. it('Should merge files with same parameters into one Assembly', () => {
  45. const data = Buffer.alloc(10)
  46. const data2 = Buffer.alloc(20)
  47. const options = new AssemblyOptions([
  48. { name: 'a.png', data, size: data.byteLength },
  49. { name: 'b.png', data, size: data.byteLength },
  50. { name: 'c.png', data, size: data.byteLength },
  51. { name: 'd.png', data: data2, size: data2.byteLength }
  52. ], {
  53. getAssemblyOptions: (file) => ({
  54. params: {
  55. auth: { key: 'fake key' },
  56. steps: {
  57. fake_step: { data: file.size }
  58. }
  59. }
  60. })
  61. })
  62. return options.build().then((assemblies) => {
  63. expect(assemblies).toHaveLength(2)
  64. expect(assemblies[0].fileIDs).toHaveLength(3)
  65. expect(assemblies[1].fileIDs).toHaveLength(1)
  66. expect(assemblies[0].options.params.steps.fake_step.data).toBe(10)
  67. expect(assemblies[1].options.params.steps.fake_step.data).toBe(20)
  68. })
  69. })
  70. it('Does not create an Assembly if no files are being uploaded', () => {
  71. const options = new AssemblyOptions([], {
  72. getAssemblyOptions () {
  73. throw new Error('should not create Assembly')
  74. }
  75. })
  76. return expect(options.build()).resolves.toEqual([])
  77. })
  78. it('Creates an Assembly if no files are being uploaded but `alwaysRunAssembly` is enabled', () => {
  79. const options = new AssemblyOptions([], {
  80. alwaysRunAssembly: true,
  81. getAssemblyOptions (file) {
  82. expect(file).toBe(null)
  83. return {
  84. params: {
  85. auth: { key: 'fake key' },
  86. template_id: 'example'
  87. }
  88. }
  89. }
  90. })
  91. return expect(options.build()).resolves.toHaveLength(1)
  92. })
  93. })