mirror of
https://github.com/transloadit/uppy.git
synced 2026-07-24 18:58:57 +00:00
* transloadit: Add an Assembly class to handle status updates. * transloadit: Replace StatusSocket with new Assembly class. * transloadit: Draft new Golden Retriever integration * transloadit: Refetch Assembly status on events. * transloadit: Update `assemblies` state when new status was fetched. * transloadit: Move assembly options extraction to a class * transloadit: use AssemblyOptions class directly for assembly options tests * transloadit: move attachAssemblyMetadata to a class method. * transloadit: Remove obsolete dependency. * transloadit: Reconnect to assemblies after restore. * tus: Always store uploadUrl This was changed in: https://github.com/transloadit/uppy/pull/507 but actually, the uploadUrl is required by GoldenRetriever, _especially_ when `resume` is false. * transloadit: Move `afterUpload()` closures to AssemblyWatcher class * transloadit: Prefix private methods with _ * transloadit: Replace 2kb url-parse with custom helper. * transloadit: Semi consistent comment width * transloadit: Capitalise "Assembly".
182 lines
4.8 KiB
JavaScript
182 lines
4.8 KiB
JavaScript
const Assembly = require('./Assembly')
|
|
|
|
describe('Transloadit/Assembly', () => {
|
|
describe('status diffing', () => {
|
|
function attemptDiff (prev, next) {
|
|
const assembly = new Assembly(prev)
|
|
const events = []
|
|
assembly.emit = jest.fn((name, ...args) => {
|
|
events.push([name, ...args])
|
|
})
|
|
|
|
assembly.updateStatus(next)
|
|
|
|
return events
|
|
}
|
|
|
|
it('ASSEMBLY_UPLOADING → ASSEMBLY_EXECUTING', () => {
|
|
const result = attemptDiff({
|
|
ok: 'ASSEMBLY_UPLOADING',
|
|
uploads: {},
|
|
results: {}
|
|
}, {
|
|
ok: 'ASSEMBLY_EXECUTING',
|
|
uploads: {},
|
|
results: {}
|
|
})
|
|
|
|
expect(result[0]).toEqual(['executing'])
|
|
})
|
|
|
|
it('ASSEMBLY_EXECUTING → ASSEMBLY_COMPLETED', () => {
|
|
const result = attemptDiff({
|
|
ok: 'ASSEMBLY_EXECUTING',
|
|
uploads: {},
|
|
results: {}
|
|
}, {
|
|
ok: 'ASSEMBLY_COMPLETED',
|
|
uploads: {},
|
|
results: {}
|
|
})
|
|
|
|
expect(result[0]).toEqual(['finished'])
|
|
})
|
|
|
|
it('ASSEMBLY_UPLOADING → ASSEMBLY_COMPLETED', () => {
|
|
const result = attemptDiff({
|
|
ok: 'ASSEMBLY_UPLOADING',
|
|
uploads: {},
|
|
results: {}
|
|
}, {
|
|
ok: 'ASSEMBLY_COMPLETED',
|
|
uploads: {},
|
|
results: {}
|
|
})
|
|
|
|
expect(result[0]).toEqual(['executing'])
|
|
expect(result[1]).toEqual(['metadata'])
|
|
expect(result[2]).toEqual(['finished'])
|
|
})
|
|
|
|
it('emits events for new files', () => {
|
|
const result = attemptDiff({
|
|
ok: 'ASSEMBLY_UPLOADING',
|
|
uploads: {},
|
|
results: {}
|
|
}, {
|
|
ok: 'ASSEMBLY_UPLOADING',
|
|
uploads: {
|
|
some_id: { id: 'some_id' }
|
|
},
|
|
results: {}
|
|
})
|
|
|
|
expect(result[0]).toEqual(['upload', { id: 'some_id' }])
|
|
})
|
|
|
|
it('emits executing, then upload, on new files + status change', () => {
|
|
const result = attemptDiff({
|
|
ok: 'ASSEMBLY_UPLOADING',
|
|
uploads: {},
|
|
results: {}
|
|
}, {
|
|
ok: 'ASSEMBLY_EXECUTING',
|
|
uploads: {
|
|
some_id: { id: 'some_id' }
|
|
},
|
|
results: {}
|
|
})
|
|
|
|
expect(result[0]).toEqual(['executing'])
|
|
expect(result[1]).toEqual(['upload', { id: 'some_id' }])
|
|
expect(result[2]).toEqual(['metadata'])
|
|
})
|
|
|
|
it('emits new results', () => {
|
|
const one = {
|
|
ok: 'ASSEMBLY_EXECUTING',
|
|
uploads: {
|
|
cool_video: { id: 'cool_video' }
|
|
},
|
|
results: {}
|
|
}
|
|
const two = {
|
|
ok: 'ASSEMBLY_EXECUTING',
|
|
uploads: {
|
|
cool_video: { id: 'cool_video' }
|
|
},
|
|
results: {
|
|
step_one: [
|
|
{ id: 'thumb1' },
|
|
{ id: 'thumb2' },
|
|
{ id: 'thumb3' }
|
|
]
|
|
}
|
|
}
|
|
const three = {
|
|
ok: 'ASSEMBLY_EXECUTING',
|
|
uploads: {
|
|
cool_video: { id: 'cool_video' }
|
|
},
|
|
results: {
|
|
step_one: [
|
|
{ id: 'thumb1' },
|
|
{ id: 'thumb2' },
|
|
{ id: 'thumb3' },
|
|
{ id: 'thumb4' }
|
|
],
|
|
step_two: [
|
|
{ id: 'transcript' }
|
|
]
|
|
}
|
|
}
|
|
|
|
const resultOne = attemptDiff(one, two)
|
|
const resultTwo = attemptDiff(two, three)
|
|
|
|
expect(resultOne[0]).toEqual(['result', 'step_one', { id: 'thumb1' }])
|
|
expect(resultOne[1]).toEqual(['result', 'step_one', { id: 'thumb2' }])
|
|
expect(resultOne[2]).toEqual(['result', 'step_one', { id: 'thumb3' }])
|
|
|
|
expect(resultTwo[0]).toEqual(['result', 'step_one', { id: 'thumb4' }])
|
|
expect(resultTwo[1]).toEqual(['result', 'step_two', { id: 'transcript' }])
|
|
})
|
|
|
|
it('emits correctly jumping straight from uploading to finished', () => {
|
|
const start = {
|
|
ok: 'ASSEMBLY_UPLOADING',
|
|
uploads: {},
|
|
results: {}
|
|
}
|
|
const end = {
|
|
ok: 'ASSEMBLY_COMPLETED',
|
|
uploads: {
|
|
cool_video: { id: 'cool_video' }
|
|
},
|
|
results: {
|
|
step_one: [
|
|
{ id: 'thumb1' },
|
|
{ id: 'thumb2' },
|
|
{ id: 'thumb3' },
|
|
{ id: 'thumb4' }
|
|
],
|
|
step_two: [
|
|
{ id: 'transcript' }
|
|
]
|
|
}
|
|
}
|
|
|
|
const result = attemptDiff(start, end)
|
|
|
|
expect(result[0]).toEqual(['executing'])
|
|
expect(result[1]).toEqual(['upload', { id: 'cool_video' }])
|
|
expect(result[2]).toEqual(['metadata'])
|
|
expect(result[3]).toEqual(['result', 'step_one', { id: 'thumb1' }])
|
|
expect(result[4]).toEqual(['result', 'step_one', { id: 'thumb2' }])
|
|
expect(result[5]).toEqual(['result', 'step_one', { id: 'thumb3' }])
|
|
expect(result[6]).toEqual(['result', 'step_one', { id: 'thumb4' }])
|
|
expect(result[7]).toEqual(['result', 'step_two', { id: 'transcript' }])
|
|
expect(result[8]).toEqual(['finished'])
|
|
})
|
|
})
|
|
})
|