1 | const Assembly = require('./Assembly')
|
2 |
|
3 | describe('Transloadit/Assembly', () => {
|
4 | describe('status diffing', () => {
|
5 | function attemptDiff (prev, next) {
|
6 | const assembly = new Assembly(prev)
|
7 | const events = []
|
8 | assembly.emit = jest.fn((name, ...args) => {
|
9 | events.push([name, ...args])
|
10 | })
|
11 |
|
12 | assembly.updateStatus(next)
|
13 |
|
14 | return events
|
15 | }
|
16 |
|
17 | it('ASSEMBLY_UPLOADING → ASSEMBLY_EXECUTING', () => {
|
18 | const result = attemptDiff({
|
19 | ok: 'ASSEMBLY_UPLOADING',
|
20 | uploads: {},
|
21 | results: {}
|
22 | }, {
|
23 | ok: 'ASSEMBLY_EXECUTING',
|
24 | uploads: {},
|
25 | results: {}
|
26 | })
|
27 |
|
28 | expect(result[0]).toEqual(['executing'])
|
29 | })
|
30 |
|
31 | it('ASSEMBLY_EXECUTING → ASSEMBLY_COMPLETED', () => {
|
32 | const result = attemptDiff({
|
33 | ok: 'ASSEMBLY_EXECUTING',
|
34 | uploads: {},
|
35 | results: {}
|
36 | }, {
|
37 | ok: 'ASSEMBLY_COMPLETED',
|
38 | uploads: {},
|
39 | results: {}
|
40 | })
|
41 |
|
42 | expect(result[0]).toEqual(['finished'])
|
43 | })
|
44 |
|
45 | it('ASSEMBLY_UPLOADING → ASSEMBLY_COMPLETED', () => {
|
46 | const result = attemptDiff({
|
47 | ok: 'ASSEMBLY_UPLOADING',
|
48 | uploads: {},
|
49 | results: {}
|
50 | }, {
|
51 | ok: 'ASSEMBLY_COMPLETED',
|
52 | uploads: {},
|
53 | results: {}
|
54 | })
|
55 |
|
56 | expect(result[0]).toEqual(['executing'])
|
57 | expect(result[1]).toEqual(['metadata'])
|
58 | expect(result[2]).toEqual(['finished'])
|
59 | })
|
60 |
|
61 | it('emits events for new files', () => {
|
62 | const result = attemptDiff({
|
63 | ok: 'ASSEMBLY_UPLOADING',
|
64 | uploads: {},
|
65 | results: {}
|
66 | }, {
|
67 | ok: 'ASSEMBLY_UPLOADING',
|
68 | uploads: {
|
69 | some_id: { id: 'some_id' }
|
70 | },
|
71 | results: {}
|
72 | })
|
73 |
|
74 | expect(result[0]).toEqual(['upload', { id: 'some_id' }])
|
75 | })
|
76 |
|
77 | it('emits executing, then upload, on new files + status change', () => {
|
78 | const result = attemptDiff({
|
79 | ok: 'ASSEMBLY_UPLOADING',
|
80 | uploads: {},
|
81 | results: {}
|
82 | }, {
|
83 | ok: 'ASSEMBLY_EXECUTING',
|
84 | uploads: {
|
85 | some_id: { id: 'some_id' }
|
86 | },
|
87 | results: {}
|
88 | })
|
89 |
|
90 | expect(result[0]).toEqual(['executing'])
|
91 | expect(result[1]).toEqual(['upload', { id: 'some_id' }])
|
92 | expect(result[2]).toEqual(['metadata'])
|
93 | })
|
94 |
|
95 | it('emits new results', () => {
|
96 | const one = {
|
97 | ok: 'ASSEMBLY_EXECUTING',
|
98 | uploads: {
|
99 | cool_video: { id: 'cool_video' }
|
100 | },
|
101 | results: {}
|
102 | }
|
103 | const two = {
|
104 | ok: 'ASSEMBLY_EXECUTING',
|
105 | uploads: {
|
106 | cool_video: { id: 'cool_video' }
|
107 | },
|
108 | results: {
|
109 | step_one: [
|
110 | { id: 'thumb1' },
|
111 | { id: 'thumb2' },
|
112 | { id: 'thumb3' }
|
113 | ]
|
114 | }
|
115 | }
|
116 | const three = {
|
117 | ok: 'ASSEMBLY_EXECUTING',
|
118 | uploads: {
|
119 | cool_video: { id: 'cool_video' }
|
120 | },
|
121 | results: {
|
122 | step_one: [
|
123 | { id: 'thumb1' },
|
124 | { id: 'thumb2' },
|
125 | { id: 'thumb3' },
|
126 | { id: 'thumb4' }
|
127 | ],
|
128 | step_two: [
|
129 | { id: 'transcript' }
|
130 | ]
|
131 | }
|
132 | }
|
133 |
|
134 | const resultOne = attemptDiff(one, two)
|
135 | const resultTwo = attemptDiff(two, three)
|
136 |
|
137 | expect(resultOne[0]).toEqual(['result', 'step_one', { id: 'thumb1' }])
|
138 | expect(resultOne[1]).toEqual(['result', 'step_one', { id: 'thumb2' }])
|
139 | expect(resultOne[2]).toEqual(['result', 'step_one', { id: 'thumb3' }])
|
140 |
|
141 | expect(resultTwo[0]).toEqual(['result', 'step_one', { id: 'thumb4' }])
|
142 | expect(resultTwo[1]).toEqual(['result', 'step_two', { id: 'transcript' }])
|
143 | })
|
144 |
|
145 | it('emits correctly jumping straight from uploading to finished', () => {
|
146 | const start = {
|
147 | ok: 'ASSEMBLY_UPLOADING',
|
148 | uploads: {},
|
149 | results: {}
|
150 | }
|
151 | const end = {
|
152 | ok: 'ASSEMBLY_COMPLETED',
|
153 | uploads: {
|
154 | cool_video: { id: 'cool_video' }
|
155 | },
|
156 | results: {
|
157 | step_one: [
|
158 | { id: 'thumb1' },
|
159 | { id: 'thumb2' },
|
160 | { id: 'thumb3' },
|
161 | { id: 'thumb4' }
|
162 | ],
|
163 | step_two: [
|
164 | { id: 'transcript' }
|
165 | ]
|
166 | }
|
167 | }
|
168 |
|
169 | const result = attemptDiff(start, end)
|
170 |
|
171 | expect(result[0]).toEqual(['executing'])
|
172 | expect(result[1]).toEqual(['upload', { id: 'cool_video' }])
|
173 | expect(result[2]).toEqual(['metadata'])
|
174 | expect(result[3]).toEqual(['result', 'step_one', { id: 'thumb1' }])
|
175 | expect(result[4]).toEqual(['result', 'step_one', { id: 'thumb2' }])
|
176 | expect(result[5]).toEqual(['result', 'step_one', { id: 'thumb3' }])
|
177 | expect(result[6]).toEqual(['result', 'step_one', { id: 'thumb4' }])
|
178 | expect(result[7]).toEqual(['result', 'step_two', { id: 'transcript' }])
|
179 | expect(result[8]).toEqual(['finished'])
|
180 | })
|
181 | })
|
182 | })
|