@pixwel/pixwel-sdk 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +2 -1
- package/README.md +60 -0
- package/coverage/clover.xml +581 -430
- package/coverage/coverage-final.json +15 -9
- package/coverage/lcov-report/Ass.js.html +212 -212
- package/coverage/lcov-report/Asset.js.html +27 -27
- package/coverage/lcov-report/AssetType.js.html +98 -0
- package/coverage/lcov-report/Encode.js.html +98 -0
- package/coverage/lcov-report/File.js.html +98 -0
- package/coverage/lcov-report/Filename.js.html +9 -726
- package/coverage/lcov-report/Ingest.js.html +1239 -279
- package/coverage/lcov-report/IngestFile.js.html +5 -5
- package/coverage/lcov-report/Model.js.html +821 -0
- package/coverage/lcov-report/Order.js.html +25 -25
- package/coverage/lcov-report/Srt.js.html +102 -102
- package/coverage/lcov-report/Sub.js.html +43 -43
- package/coverage/lcov-report/Tag.js.html +98 -0
- package/coverage/lcov-report/TimeFormat.js.html +63 -63
- package/coverage/lcov-report/fileType.js.html +188 -0
- package/coverage/lcov-report/index.html +164 -86
- package/coverage/lcov.info +1159 -846
- package/dist/index.js +74 -22
- package/dist/src/Asset.js +10 -5
- package/dist/src/AssetType.js +54 -0
- package/dist/src/Encode.js +54 -0
- package/dist/src/File.js +54 -0
- package/dist/src/Filename.js +7 -228
- package/dist/src/Ingest.js +365 -33
- package/dist/src/IngestFile.js +6 -2
- package/dist/src/Model.js +569 -0
- package/dist/src/Order.js +20 -9
- package/dist/src/Srt.js +5 -1
- package/dist/src/Tag.js +54 -0
- package/dist/src/fileType.js +43 -0
- package/index.js +14 -0
- package/package.json +9 -3
- package/src/AssetType.js +11 -0
- package/src/Encode.js +11 -0
- package/src/File.js +11 -0
- package/src/Filename.js +0 -239
- package/src/Ingest.js +347 -27
- package/src/Model.js +252 -0
- package/src/Tag.js +11 -0
- package/src/fileType.js +41 -0
- package/test/Filename.spec.js +3 -707
- package/test/Ingest.spec.js +1107 -152
- package/test/Model.spec.js +328 -0
package/test/Ingest.spec.js
CHANGED
|
@@ -8,12 +8,930 @@ import mxfMock from "./mocks/mediainfo.mxf.mock";
|
|
|
8
8
|
import mocks from "./mocks/mocks";
|
|
9
9
|
|
|
10
10
|
describe("Ingest", () => {
|
|
11
|
+
describe("renderPath", () => {
|
|
12
|
+
it("should render filename path", () => {
|
|
13
|
+
let data = {
|
|
14
|
+
asset: {
|
|
15
|
+
type: "social",
|
|
16
|
+
project: {
|
|
17
|
+
slug: "bumblebee",
|
|
18
|
+
studio: {
|
|
19
|
+
slug: "paramount"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
let ingest = new Ingest(data);
|
|
25
|
+
let res = ingest.renderPath();
|
|
26
|
+
expect(res).toBe("paramount/bumblebee/social");
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe("renderFilename", () => {
|
|
30
|
+
it("renders language only for dual-language codes", function() {
|
|
31
|
+
let data = {
|
|
32
|
+
asset: {
|
|
33
|
+
name: "Test Asset A",
|
|
34
|
+
slug: "test-asset-a",
|
|
35
|
+
type: "trailer.intl",
|
|
36
|
+
mediaType: "video",
|
|
37
|
+
project: {
|
|
38
|
+
filePrefix: "TESTPROJECT"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
selected: {
|
|
42
|
+
download: {
|
|
43
|
+
language: "PFR-FLE",
|
|
44
|
+
country: "US",
|
|
45
|
+
tags: {
|
|
46
|
+
Text: "txtd",
|
|
47
|
+
Extra: ["COMING-SOON", "HOJE"],
|
|
48
|
+
Codec: "PRORES",
|
|
49
|
+
Resolution: "640x480",
|
|
50
|
+
Framerate: "23.98",
|
|
51
|
+
"Frame Mode": "progressive"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
let ingest = new Ingest(data);
|
|
57
|
+
let allTags = [];
|
|
58
|
+
let allTypes = [];
|
|
59
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
60
|
+
expect(name).toBe(
|
|
61
|
+
"TESTPROJECT_ITR-TEST-ASSET-A_PFR-FLE_TXTD_COMING-SOON_HOJE_PRORES_480p2398"
|
|
62
|
+
);
|
|
63
|
+
});
|
|
64
|
+
it("throws exception if missing Framerate", function() {
|
|
65
|
+
let data = {
|
|
66
|
+
asset: {
|
|
67
|
+
name: "Test Asset A",
|
|
68
|
+
slug: "test-asset-a",
|
|
69
|
+
type: "trailer.intl",
|
|
70
|
+
mediaType: "video",
|
|
71
|
+
project: {
|
|
72
|
+
filePrefix: "TESTPROJECT"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
selected: {
|
|
76
|
+
download: {
|
|
77
|
+
language: "ENG",
|
|
78
|
+
tags: {
|
|
79
|
+
Codec: "prores",
|
|
80
|
+
Text: "txtd",
|
|
81
|
+
Resolution: "640x480",
|
|
82
|
+
// Framerate: '23.98',
|
|
83
|
+
"Frame Mode": "progressive"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
let ingest = new Ingest(data);
|
|
89
|
+
let allTags = [];
|
|
90
|
+
let allTypes = [];
|
|
91
|
+
expect(() => {
|
|
92
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
93
|
+
}).toThrow("missing options.tags.Framerate");
|
|
94
|
+
});
|
|
95
|
+
it("displays resolution for images", function() {
|
|
96
|
+
let data = {
|
|
97
|
+
asset: {
|
|
98
|
+
name: "Test Asset A",
|
|
99
|
+
slug: "test-asset-a",
|
|
100
|
+
type: "trailer.intl",
|
|
101
|
+
mediaType: "image",
|
|
102
|
+
project: {
|
|
103
|
+
filePrefix: "TESTPROJECT"
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
selected: {
|
|
107
|
+
download: {
|
|
108
|
+
language: "ENG",
|
|
109
|
+
country: "WW",
|
|
110
|
+
tags: {
|
|
111
|
+
Text: "txtd",
|
|
112
|
+
Resolution: "640x480"
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
let ingest = new Ingest(data);
|
|
118
|
+
let allTags = [];
|
|
119
|
+
let allTypes = [];
|
|
120
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
121
|
+
expect(name).toBe("TESTPROJECT_ITR-TEST-ASSET-A_ENG_TXTD_640x480");
|
|
122
|
+
});
|
|
123
|
+
it("throws exception if missing asset.project.filePrefix", function() {
|
|
124
|
+
let data = {
|
|
125
|
+
asset: {
|
|
126
|
+
name: "Test Asset A",
|
|
127
|
+
slug: "test-asset-a",
|
|
128
|
+
type: "trailer.intl",
|
|
129
|
+
project: {
|
|
130
|
+
// filePrefix: 'TESTPROJECT'
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
selected: {
|
|
134
|
+
download: {
|
|
135
|
+
language: "ENG"
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
expect(() => {
|
|
140
|
+
let ingest = new Ingest(data);
|
|
141
|
+
let allTags = [];
|
|
142
|
+
let allTypes = [];
|
|
143
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
144
|
+
}).toThrow("missing asset.project.filePrefix");
|
|
145
|
+
});
|
|
146
|
+
it("throws exception if missing asset.name", function() {
|
|
147
|
+
let data = {
|
|
148
|
+
asset: {
|
|
149
|
+
// name: 'Test Asset A',
|
|
150
|
+
slug: "test-asset-a",
|
|
151
|
+
type: "trailer.intl",
|
|
152
|
+
project: {
|
|
153
|
+
filePrefix: "TESTPROJECT"
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
selected: {
|
|
157
|
+
download: {
|
|
158
|
+
language: "ENG"
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
expect(() => {
|
|
163
|
+
let ingest = new Ingest(data);
|
|
164
|
+
let allTags = [];
|
|
165
|
+
let allTypes = [];
|
|
166
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
167
|
+
}).toThrow("missing asset.name");
|
|
168
|
+
});
|
|
169
|
+
it("renders country and territory", function() {
|
|
170
|
+
let data = {
|
|
171
|
+
asset: {
|
|
172
|
+
name: "Test Asset A",
|
|
173
|
+
slug: "test-asset-a",
|
|
174
|
+
type: "trailer.intl",
|
|
175
|
+
mediaType: "video",
|
|
176
|
+
project: {
|
|
177
|
+
filePrefix: "TESTPROJECT"
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
selected: {
|
|
181
|
+
download: {
|
|
182
|
+
language: "ENG",
|
|
183
|
+
country: "US",
|
|
184
|
+
tags: {
|
|
185
|
+
Text: "txtd",
|
|
186
|
+
Codec: "prores",
|
|
187
|
+
Resolution: "640x480",
|
|
188
|
+
Framerate: "23.98",
|
|
189
|
+
"Frame Mode": "progressive"
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
let ingest = new Ingest(data);
|
|
195
|
+
let allTags = [];
|
|
196
|
+
let allTypes = [];
|
|
197
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
198
|
+
expect(name).toBe(
|
|
199
|
+
"TESTPROJECT_ITR-TEST-ASSET-A_ENG-US_TXTD_PRORES_480p2398"
|
|
200
|
+
);
|
|
201
|
+
});
|
|
202
|
+
it("renders domestic trailer type with custom name", function() {
|
|
203
|
+
let data = {
|
|
204
|
+
asset: {
|
|
205
|
+
name: "Test Asset A",
|
|
206
|
+
slug: "test-asset-a",
|
|
207
|
+
type: "trailer.us",
|
|
208
|
+
mediaType: "video",
|
|
209
|
+
project: {
|
|
210
|
+
filePrefix: "TESTPROJECT"
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
selected: {
|
|
214
|
+
download: {
|
|
215
|
+
language: "ENG",
|
|
216
|
+
tags: {
|
|
217
|
+
Text: "txtd",
|
|
218
|
+
Codec: "prores",
|
|
219
|
+
Resolution: "640x480",
|
|
220
|
+
Framerate: "23.98",
|
|
221
|
+
"Frame Mode": "progressive"
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
let ingest = new Ingest(data);
|
|
227
|
+
let allTags = [];
|
|
228
|
+
let allTypes = [];
|
|
229
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
230
|
+
expect(name).toBe(
|
|
231
|
+
"TESTPROJECT_DTR-TEST-ASSET-A_ENG_TXTD_PRORES_480p2398"
|
|
232
|
+
);
|
|
233
|
+
});
|
|
234
|
+
it("renders generic trailer type", function() {
|
|
235
|
+
let data = {
|
|
236
|
+
asset: {
|
|
237
|
+
name: "Generic Trailer",
|
|
238
|
+
slug: "generic-trailer",
|
|
239
|
+
type: "trailer",
|
|
240
|
+
mediaType: "video",
|
|
241
|
+
project: {
|
|
242
|
+
filePrefix: "TESTPROJECT"
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
selected: {
|
|
246
|
+
download: {
|
|
247
|
+
language: "ENG",
|
|
248
|
+
tags: {
|
|
249
|
+
Text: "txtd",
|
|
250
|
+
Codec: "prores",
|
|
251
|
+
Resolution: "640x480",
|
|
252
|
+
Framerate: "23.98",
|
|
253
|
+
"Frame Mode": "progressive"
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
let ingest = new Ingest(data);
|
|
259
|
+
let allTags = [];
|
|
260
|
+
let allTypes = [];
|
|
261
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
262
|
+
expect(name).toBe(
|
|
263
|
+
"TESTPROJECT_TR-GENERIC-TRAILER_ENG_TXTD_PRORES_480p2398"
|
|
264
|
+
);
|
|
265
|
+
});
|
|
266
|
+
it("throws an error if asset type does not exist", function() {
|
|
267
|
+
let data = {
|
|
268
|
+
asset: {
|
|
269
|
+
name: "Cool Spot 15",
|
|
270
|
+
slug: "cool-spot-15",
|
|
271
|
+
type: "doesnt-exist",
|
|
272
|
+
mediaType: "video",
|
|
273
|
+
project: {
|
|
274
|
+
filePrefix: "TESTPROJECT"
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
selected: {
|
|
278
|
+
download: {
|
|
279
|
+
language: "ENG",
|
|
280
|
+
tags: {
|
|
281
|
+
Text: "txtd",
|
|
282
|
+
Codec: "prores",
|
|
283
|
+
Resolution: "640x480",
|
|
284
|
+
Framerate: "23.98",
|
|
285
|
+
"Frame Mode": "progressive"
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
expect(function() {
|
|
291
|
+
let ingest = new Ingest(data);
|
|
292
|
+
let allTags = [];
|
|
293
|
+
let allTypes = [];
|
|
294
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
295
|
+
}).toThrow('Asset type "doesnt-exist" could not be found');
|
|
296
|
+
});
|
|
297
|
+
it("renders non-trailer types", function() {
|
|
298
|
+
let data = {
|
|
299
|
+
asset: {
|
|
300
|
+
name: "Cool Spot 15",
|
|
301
|
+
slug: "cool-spot-15",
|
|
302
|
+
type: "tv-spot.intl",
|
|
303
|
+
mediaType: "video",
|
|
304
|
+
project: {
|
|
305
|
+
filePrefix: "TESTPROJECT"
|
|
306
|
+
}
|
|
307
|
+
},
|
|
308
|
+
selected: {
|
|
309
|
+
download: {
|
|
310
|
+
language: "ENG",
|
|
311
|
+
tags: {
|
|
312
|
+
Text: "txtd",
|
|
313
|
+
Codec: "prores",
|
|
314
|
+
Resolution: "640x480",
|
|
315
|
+
Framerate: "23.98",
|
|
316
|
+
"Frame Mode": "progressive"
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
let ingest = new Ingest(data);
|
|
322
|
+
let allTags = [];
|
|
323
|
+
let allTypes = [{ _id: "tv-spot.intl", name: "tv-spot.intl" }];
|
|
324
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
325
|
+
expect(name).toBe(
|
|
326
|
+
"TESTPROJECT_TV-SPOT-INTL_COOL-SPOT-15_ENG_TXTD_PRORES_480p2398"
|
|
327
|
+
);
|
|
328
|
+
});
|
|
329
|
+
it("throws exception if missing options.tags.Text", function() {
|
|
330
|
+
let data = {
|
|
331
|
+
asset: {
|
|
332
|
+
name: "Test Asset A",
|
|
333
|
+
slug: "test-asset-a",
|
|
334
|
+
type: "trailer.intl",
|
|
335
|
+
mediaType: "video",
|
|
336
|
+
project: {
|
|
337
|
+
filePrefix: "TESTPROJECT"
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
selected: {
|
|
341
|
+
download: {
|
|
342
|
+
tags: {
|
|
343
|
+
Text: ""
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
expect(() => {
|
|
349
|
+
let ingest = new Ingest(data);
|
|
350
|
+
let allTags = [];
|
|
351
|
+
let allTypes = [];
|
|
352
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
353
|
+
}).toThrow("missing options.language");
|
|
354
|
+
});
|
|
355
|
+
it("throws exception if missing options.language", function() {
|
|
356
|
+
let data = {
|
|
357
|
+
asset: {
|
|
358
|
+
name: "Test Asset A",
|
|
359
|
+
slug: "test-asset-a",
|
|
360
|
+
type: "trailer.intl",
|
|
361
|
+
mediaType: "video",
|
|
362
|
+
project: {
|
|
363
|
+
filePrefix: "TESTPROJECT"
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
selected: { download: {} }
|
|
367
|
+
};
|
|
368
|
+
expect(() => {
|
|
369
|
+
let ingest = new Ingest(data);
|
|
370
|
+
let allTags = [];
|
|
371
|
+
let allTypes = [];
|
|
372
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
373
|
+
}).toThrow("missing options.language");
|
|
374
|
+
});
|
|
375
|
+
it("throws exception if missing asset.type", function() {
|
|
376
|
+
let data = {
|
|
377
|
+
asset: {
|
|
378
|
+
name: "Test Asset A",
|
|
379
|
+
slug: "test-asset-a",
|
|
380
|
+
// type: 'trailer.intl',
|
|
381
|
+
project: {
|
|
382
|
+
filePrefix: "TESTPROJECT"
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
selected: {
|
|
386
|
+
download: {
|
|
387
|
+
language: "ENG"
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
expect(() => {
|
|
392
|
+
let ingest = new Ingest(data);
|
|
393
|
+
let allTags = [];
|
|
394
|
+
let allTypes = [];
|
|
395
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
396
|
+
}).toThrow("missing asset.type");
|
|
397
|
+
});
|
|
398
|
+
it("contains running time from film clips", function() {
|
|
399
|
+
let data = {
|
|
400
|
+
asset: {
|
|
401
|
+
name: "Ultra Violence",
|
|
402
|
+
slug: "ultra-violence",
|
|
403
|
+
type: "film-clip.intl",
|
|
404
|
+
length: 63,
|
|
405
|
+
mediaType: "video",
|
|
406
|
+
project: {
|
|
407
|
+
filePrefix: "TESTPROJECT"
|
|
408
|
+
}
|
|
409
|
+
},
|
|
410
|
+
selected: {
|
|
411
|
+
download: {
|
|
412
|
+
language: "ENG",
|
|
413
|
+
tags: {
|
|
414
|
+
Text: "txtd",
|
|
415
|
+
Codec: "prores",
|
|
416
|
+
Resolution: "640x480",
|
|
417
|
+
Framerate: "23.98",
|
|
418
|
+
"Frame Mode": "progressive"
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
let ingest = new Ingest(data);
|
|
424
|
+
let allTags = [];
|
|
425
|
+
let allTypes = [{ name: "film-clip.intl" }];
|
|
426
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
427
|
+
expect(name).toBe(
|
|
428
|
+
"TESTPROJECT_FILM-CLIP-INTL_ULTRA-VIOLENCE_1MIN3SEC_ENG_TXTD_PRORES_480p2398"
|
|
429
|
+
);
|
|
430
|
+
|
|
431
|
+
ingest.asset.length = 60;
|
|
432
|
+
name = ingest.renderFilename({ allTags, allTypes });
|
|
433
|
+
|
|
434
|
+
expect(name).toBe(
|
|
435
|
+
"TESTPROJECT_FILM-CLIP-INTL_ULTRA-VIOLENCE_1MIN_ENG_TXTD_PRORES_480p2398"
|
|
436
|
+
);
|
|
437
|
+
|
|
438
|
+
ingest.asset.length = 45;
|
|
439
|
+
name = ingest.renderFilename({ allTags, allTypes });
|
|
440
|
+
|
|
441
|
+
expect(name).toBe(
|
|
442
|
+
"TESTPROJECT_FILM-CLIP-INTL_ULTRA-VIOLENCE_45SEC_ENG_TXTD_PRORES_480p2398"
|
|
443
|
+
);
|
|
444
|
+
});
|
|
445
|
+
it("does not redundantly include tag info", function() {
|
|
446
|
+
let data = {
|
|
447
|
+
asset: {
|
|
448
|
+
name: "Test Asset A",
|
|
449
|
+
slug: "test-asset-a",
|
|
450
|
+
type: "trailer.intl",
|
|
451
|
+
mediaType: "video",
|
|
452
|
+
project: {
|
|
453
|
+
filePrefix: "TESTPROJECT"
|
|
454
|
+
}
|
|
455
|
+
},
|
|
456
|
+
selected: {
|
|
457
|
+
download: {
|
|
458
|
+
language: "ENG",
|
|
459
|
+
country: "WW",
|
|
460
|
+
tags: {
|
|
461
|
+
Resolution: "1080i",
|
|
462
|
+
"Frame Mode": "progressive",
|
|
463
|
+
Framerate: "29.97",
|
|
464
|
+
Text: "txtd",
|
|
465
|
+
Extra: ["COMING-SOON", "HOJE"],
|
|
466
|
+
Codec: "PRORES"
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
};
|
|
471
|
+
let ingest = new Ingest(data);
|
|
472
|
+
let allTags = [];
|
|
473
|
+
let allTypes = [{ name: "film-clip.intl" }];
|
|
474
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
475
|
+
expect(name).toBe(
|
|
476
|
+
"TESTPROJECT_ITR-TEST-ASSET-A_ENG_TXTD_COMING-SOON_HOJE_PRORES_1080i2997"
|
|
477
|
+
);
|
|
478
|
+
|
|
479
|
+
ingest.selected.download = {
|
|
480
|
+
language: "ENG",
|
|
481
|
+
country: "WW",
|
|
482
|
+
tags: {
|
|
483
|
+
Usage: "online",
|
|
484
|
+
Aspect: "16:9",
|
|
485
|
+
Codec: "h264",
|
|
486
|
+
Resolution: "1920x1080",
|
|
487
|
+
"Frame Mode": "progressive",
|
|
488
|
+
Framerate: "29.97",
|
|
489
|
+
Text: "txtd",
|
|
490
|
+
Extra: ["COMING-SOON", "HOJE"]
|
|
491
|
+
}
|
|
492
|
+
};
|
|
493
|
+
name = ingest.renderFilename({ allTags, allTypes });
|
|
494
|
+
|
|
495
|
+
expect(name).toBe(
|
|
496
|
+
"TESTPROJECT_ITR-TEST-ASSET-A_ENG_TXTD_COMING-SOON_HOJE_H264_1080p2997"
|
|
497
|
+
);
|
|
498
|
+
});
|
|
499
|
+
it("converts asset names containing `int'l` to `intl`", function() {
|
|
500
|
+
let data = {
|
|
501
|
+
asset: {
|
|
502
|
+
type: "tv-spot.intl",
|
|
503
|
+
name: "Test Asset Int'l 10",
|
|
504
|
+
slug: "test-asset-intl-10",
|
|
505
|
+
mediaType: "video",
|
|
506
|
+
project: {
|
|
507
|
+
filePrefix: "TESTPROJECT"
|
|
508
|
+
}
|
|
509
|
+
},
|
|
510
|
+
selected: {
|
|
511
|
+
download: {
|
|
512
|
+
language: "ENG",
|
|
513
|
+
country: "WW",
|
|
514
|
+
tags: {
|
|
515
|
+
Text: "txtd",
|
|
516
|
+
Extra: ["COMING-SOON", "HOJE"],
|
|
517
|
+
Codec: "prores",
|
|
518
|
+
Resolution: "640x480",
|
|
519
|
+
Framerate: "23.98",
|
|
520
|
+
"Frame Mode": "progressive"
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
};
|
|
525
|
+
let ingest = new Ingest(data);
|
|
526
|
+
let allTags = [];
|
|
527
|
+
let allTypes = [{ name: "film-clip.intl" }, { name: "tv-spot.intl" }];
|
|
528
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
529
|
+
expect(name).toBe(
|
|
530
|
+
"TESTPROJECT_TV-SPOT-INTL_TEST-ASSET-INTL-10_ENG_TXTD_COMING-SOON_HOJE_PRORES_480p2398"
|
|
531
|
+
);
|
|
532
|
+
});
|
|
533
|
+
it("renders sub and dub tags", function() {
|
|
534
|
+
let data = {
|
|
535
|
+
asset: {
|
|
536
|
+
type: "tv-spot.intl",
|
|
537
|
+
name: "Test Asset Int'l 10",
|
|
538
|
+
slug: "test-asset-int-l-10",
|
|
539
|
+
mediaType: "video",
|
|
540
|
+
project: {
|
|
541
|
+
filePrefix: "TESTPROJECT"
|
|
542
|
+
}
|
|
543
|
+
},
|
|
544
|
+
selected: {
|
|
545
|
+
download: {
|
|
546
|
+
language: "ENG",
|
|
547
|
+
country: "WW",
|
|
548
|
+
tags: {
|
|
549
|
+
SubDub: {
|
|
550
|
+
sub: true,
|
|
551
|
+
dub: false
|
|
552
|
+
},
|
|
553
|
+
Extra: ["COMING-SOON", "HOJE"],
|
|
554
|
+
Codec: "PRORES",
|
|
555
|
+
Resolution: "640x480",
|
|
556
|
+
Framerate: "23.98",
|
|
557
|
+
"Frame Mode": "progressive"
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
};
|
|
562
|
+
let ingest = new Ingest(data);
|
|
563
|
+
let allTags = [];
|
|
564
|
+
let allTypes = [{ name: "film-clip.intl" }, { name: "tv-spot.intl" }];
|
|
565
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
566
|
+
expect(name).toBe(
|
|
567
|
+
"TESTPROJECT_TV-SPOT-INTL_TEST-ASSET-INTL-10_ENG_SUB_COMING-SOON_HOJE_PRORES_480p2398"
|
|
568
|
+
);
|
|
569
|
+
|
|
570
|
+
Object.assign(ingest.selected.download.tags.SubDub, {
|
|
571
|
+
sub: true,
|
|
572
|
+
dub: true
|
|
573
|
+
});
|
|
574
|
+
|
|
575
|
+
name = ingest.renderFilename({ allTags, allTypes });
|
|
576
|
+
|
|
577
|
+
expect(name).toBe(
|
|
578
|
+
"TESTPROJECT_TV-SPOT-INTL_TEST-ASSET-INTL-10_ENG_SUB_DUB_COMING-SOON_HOJE_PRORES_480p2398"
|
|
579
|
+
);
|
|
580
|
+
});
|
|
581
|
+
it("includes `Frame mode` and `Framerate`", function() {
|
|
582
|
+
let data = {
|
|
583
|
+
asset: {
|
|
584
|
+
name: "Test Asset A",
|
|
585
|
+
slug: "test-asset-a",
|
|
586
|
+
type: "trailer.intl",
|
|
587
|
+
mediaType: "video",
|
|
588
|
+
project: {
|
|
589
|
+
filePrefix: "TESTPROJECT"
|
|
590
|
+
}
|
|
591
|
+
},
|
|
592
|
+
selected: {
|
|
593
|
+
download: {
|
|
594
|
+
language: "ENG",
|
|
595
|
+
country: "WW",
|
|
596
|
+
tags: {
|
|
597
|
+
Resolution: "1920x1080",
|
|
598
|
+
"Frame Mode": "progressive",
|
|
599
|
+
Framerate: "29.97",
|
|
600
|
+
Text: "txtd",
|
|
601
|
+
Extra: ["COMING-SOON", "HOJE"],
|
|
602
|
+
Codec: "PRORES"
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
};
|
|
607
|
+
let ingest = new Ingest(data);
|
|
608
|
+
let allTags = [];
|
|
609
|
+
let allTypes = [{ name: "film-clip.intl" }];
|
|
610
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
611
|
+
expect(name).toBe(
|
|
612
|
+
"TESTPROJECT_ITR-TEST-ASSET-A_ENG_TXTD_COMING-SOON_HOJE_PRORES_1080p2997"
|
|
613
|
+
);
|
|
614
|
+
});
|
|
615
|
+
it("renders `set` tags when all tags in `set` are specified but retains `codec`", function() {
|
|
616
|
+
let data = {
|
|
617
|
+
asset: {
|
|
618
|
+
name: "Test Asset A",
|
|
619
|
+
slug: "test-asset-a",
|
|
620
|
+
type: "trailer.intl",
|
|
621
|
+
mediaType: "video",
|
|
622
|
+
project: {
|
|
623
|
+
filePrefix: "TESTPROJECT"
|
|
624
|
+
}
|
|
625
|
+
},
|
|
626
|
+
selected: {
|
|
627
|
+
download: {
|
|
628
|
+
language: "ENG",
|
|
629
|
+
tags: {
|
|
630
|
+
Codec: "h264",
|
|
631
|
+
Resolution: "1920x1080",
|
|
632
|
+
Usage: "online",
|
|
633
|
+
Text: "txtd",
|
|
634
|
+
Framerate: "23.98",
|
|
635
|
+
"Frame Mode": "progressive"
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
};
|
|
640
|
+
let ingest = new Ingest(data);
|
|
641
|
+
let allTags = [];
|
|
642
|
+
let allTypes = [{ name: "film-clip.intl" }];
|
|
643
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
644
|
+
expect(name).toBe("TESTPROJECT_ITR-TEST-ASSET-A_ENG_TXTD_H264_1080p2398");
|
|
645
|
+
});
|
|
646
|
+
it("throws exception if missing Frame Mode", function() {
|
|
647
|
+
let data = {
|
|
648
|
+
asset: {
|
|
649
|
+
name: "Test Asset A",
|
|
650
|
+
slug: "test-asset-a",
|
|
651
|
+
type: "trailer.intl",
|
|
652
|
+
mediaType: "video",
|
|
653
|
+
project: {
|
|
654
|
+
filePrefix: "TESTPROJECT"
|
|
655
|
+
}
|
|
656
|
+
},
|
|
657
|
+
selected: {
|
|
658
|
+
download: {
|
|
659
|
+
language: "ENG",
|
|
660
|
+
tags: {
|
|
661
|
+
Codec: "prores",
|
|
662
|
+
Text: "txtd",
|
|
663
|
+
Resolution: "640x480",
|
|
664
|
+
Framerate: "23.98"
|
|
665
|
+
// "Frame Mode": 'progressive'
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
};
|
|
670
|
+
expect(() => {
|
|
671
|
+
let ingest = new Ingest(data);
|
|
672
|
+
let allTags = [];
|
|
673
|
+
let allTypes = [];
|
|
674
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
675
|
+
}).toThrow("missing options.tags[Frame Mode]");
|
|
676
|
+
});
|
|
677
|
+
it("throws exception if missing Resolution", function() {
|
|
678
|
+
let data = {
|
|
679
|
+
asset: {
|
|
680
|
+
name: "Test Asset A",
|
|
681
|
+
slug: "test-asset-a",
|
|
682
|
+
type: "trailer.intl",
|
|
683
|
+
mediaType: "video",
|
|
684
|
+
project: {
|
|
685
|
+
filePrefix: "TESTPROJECT"
|
|
686
|
+
}
|
|
687
|
+
},
|
|
688
|
+
selected: {
|
|
689
|
+
download: {
|
|
690
|
+
language: "ENG",
|
|
691
|
+
tags: {
|
|
692
|
+
Codec: "prores",
|
|
693
|
+
Text: "txtd",
|
|
694
|
+
// Resolution: '640x480',
|
|
695
|
+
Framerate: "23.98",
|
|
696
|
+
"Frame Mode": "progressive"
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
};
|
|
701
|
+
let ingest = new Ingest(data);
|
|
702
|
+
let allTags = [];
|
|
703
|
+
let allTypes = [];
|
|
704
|
+
expect(() => {
|
|
705
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
706
|
+
}).toThrow("missing options.tags.Resolution");
|
|
707
|
+
});
|
|
708
|
+
it("throws exception if missing asset.project", function() {
|
|
709
|
+
let data = {
|
|
710
|
+
asset: {
|
|
711
|
+
name: "Test Asset A",
|
|
712
|
+
slug: "test-asset-a",
|
|
713
|
+
type: "trailer.intl",
|
|
714
|
+
mediaType: "video"
|
|
715
|
+
},
|
|
716
|
+
selected: {
|
|
717
|
+
download: {
|
|
718
|
+
language: "ENG"
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
};
|
|
722
|
+
let ingest = new Ingest(data);
|
|
723
|
+
let allTags = [];
|
|
724
|
+
let allTypes = [];
|
|
725
|
+
expect(() => {
|
|
726
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
727
|
+
}).toThrow("missing asset.project");
|
|
728
|
+
});
|
|
729
|
+
it("renders language and country", function() {
|
|
730
|
+
let data = {
|
|
731
|
+
asset: {
|
|
732
|
+
name: "Test Asset A",
|
|
733
|
+
slug: "test-asset-a",
|
|
734
|
+
type: "trailer.intl",
|
|
735
|
+
mediaType: "video",
|
|
736
|
+
project: {
|
|
737
|
+
filePrefix: "TESTPROJECT"
|
|
738
|
+
}
|
|
739
|
+
},
|
|
740
|
+
selected: {
|
|
741
|
+
download: {
|
|
742
|
+
language: "ENG",
|
|
743
|
+
country: "US",
|
|
744
|
+
tags: {
|
|
745
|
+
Text: "txtd",
|
|
746
|
+
Extra: ["COMING-SOON", "HOJE"],
|
|
747
|
+
Codec: "PRORES",
|
|
748
|
+
Resolution: "640x480",
|
|
749
|
+
Framerate: "23.98",
|
|
750
|
+
"Frame Mode": "progressive"
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
};
|
|
755
|
+
let ingest = new Ingest(data);
|
|
756
|
+
let allTags = [];
|
|
757
|
+
let allTypes = [];
|
|
758
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
759
|
+
expect(name).toBe(
|
|
760
|
+
"TESTPROJECT_ITR-TEST-ASSET-A_ENG-US_TXTD_COMING-SOON_HOJE_PRORES_480p2398"
|
|
761
|
+
);
|
|
762
|
+
});
|
|
763
|
+
it("renders version", function() {
|
|
764
|
+
let data = {
|
|
765
|
+
asset: {
|
|
766
|
+
name: "Test Asset A",
|
|
767
|
+
slug: "test-asset-a",
|
|
768
|
+
type: "trailer.intl",
|
|
769
|
+
mediaType: "video",
|
|
770
|
+
project: {
|
|
771
|
+
filePrefix: "TESTPROJECT"
|
|
772
|
+
}
|
|
773
|
+
},
|
|
774
|
+
selected: {
|
|
775
|
+
download: {
|
|
776
|
+
version: "rev",
|
|
777
|
+
language: "ENG",
|
|
778
|
+
tags: {
|
|
779
|
+
Text: "txtd",
|
|
780
|
+
Codec: "prores",
|
|
781
|
+
Resolution: "640x480",
|
|
782
|
+
Framerate: "23.98",
|
|
783
|
+
"Frame Mode": "progressive"
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
};
|
|
788
|
+
let ingest = new Ingest(data);
|
|
789
|
+
let allTags = [];
|
|
790
|
+
let allTypes = [];
|
|
791
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
792
|
+
expect(name).toEqual(
|
|
793
|
+
"TESTPROJECT_ITR-TEST-ASSET-A_ENG_TXTD_REV_PRORES_480p2398"
|
|
794
|
+
);
|
|
795
|
+
});
|
|
796
|
+
it("renders asset names with contractions correctly", function() {
|
|
797
|
+
let data = {
|
|
798
|
+
asset: {
|
|
799
|
+
name: "Can't Int'l 10",
|
|
800
|
+
slug: "cant-intl-10",
|
|
801
|
+
type: "trailer.intl",
|
|
802
|
+
mediaType: "video",
|
|
803
|
+
project: {
|
|
804
|
+
filePrefix: "TESTPROJECT"
|
|
805
|
+
}
|
|
806
|
+
},
|
|
807
|
+
selected: {
|
|
808
|
+
download: {
|
|
809
|
+
language: "ENG",
|
|
810
|
+
tags: {
|
|
811
|
+
Text: "txtd",
|
|
812
|
+
Codec: "prores",
|
|
813
|
+
Resolution: "640x480",
|
|
814
|
+
Framerate: "23.98",
|
|
815
|
+
"Frame Mode": "progressive"
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
};
|
|
820
|
+
let ingest = new Ingest(data);
|
|
821
|
+
let allTags = [];
|
|
822
|
+
let allTypes = [];
|
|
823
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
824
|
+
expect(name).toBe(
|
|
825
|
+
"TESTPROJECT_ITR-CANT-INTL-10_ENG_TXTD_PRORES_480p2398"
|
|
826
|
+
);
|
|
827
|
+
});
|
|
828
|
+
it("renders tags as an underscore-separated string", function() {
|
|
829
|
+
let data = {
|
|
830
|
+
asset: {
|
|
831
|
+
name: "Test Asset A",
|
|
832
|
+
slug: "test-asset-a",
|
|
833
|
+
type: "trailer.intl",
|
|
834
|
+
mediaType: "video",
|
|
835
|
+
project: {
|
|
836
|
+
filePrefix: "TESTPROJECT"
|
|
837
|
+
}
|
|
838
|
+
},
|
|
839
|
+
selected: {
|
|
840
|
+
download: {
|
|
841
|
+
language: "ENG",
|
|
842
|
+
country: "WW",
|
|
843
|
+
tags: {
|
|
844
|
+
Text: "txtd",
|
|
845
|
+
Extra: ["COMING-SOON", "HOJE"],
|
|
846
|
+
Codec: "PRORES",
|
|
847
|
+
Resolution: "640x480",
|
|
848
|
+
Framerate: "23.98",
|
|
849
|
+
"Frame Mode": "progressive"
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
};
|
|
854
|
+
let ingest = new Ingest(data);
|
|
855
|
+
let allTags = [];
|
|
856
|
+
let allTypes = [];
|
|
857
|
+
let name = ingest.renderFilename({ allTags, allTypes });
|
|
858
|
+
expect(name).toBe(
|
|
859
|
+
"TESTPROJECT_ITR-TEST-ASSET-A_ENG_TXTD_COMING-SOON_HOJE_PRORES_480p2398"
|
|
860
|
+
);
|
|
861
|
+
});
|
|
862
|
+
});
|
|
863
|
+
describe("createFile", () => {
|
|
864
|
+
it("should create a File object given an Ingest and Order", () => {
|
|
865
|
+
let data = {
|
|
866
|
+
_id: "a1b2c3",
|
|
867
|
+
workRequest: "a1b2c3",
|
|
868
|
+
context: {
|
|
869
|
+
tag: "FRIDAY"
|
|
870
|
+
},
|
|
871
|
+
asset: {
|
|
872
|
+
_id: "a1b2c3",
|
|
873
|
+
name: "Asset",
|
|
874
|
+
type: "tv-spot.intl",
|
|
875
|
+
slug: "asset",
|
|
876
|
+
mediaType: "video",
|
|
877
|
+
project: {
|
|
878
|
+
filePrefix: "PROJECT",
|
|
879
|
+
slug: "project",
|
|
880
|
+
studio: {
|
|
881
|
+
slug: "paramount"
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
},
|
|
885
|
+
filename: {
|
|
886
|
+
asset: {},
|
|
887
|
+
file: {
|
|
888
|
+
tags: ["sub"]
|
|
889
|
+
}
|
|
890
|
+
},
|
|
891
|
+
mediainfo: {
|
|
892
|
+
File: { track: {} }
|
|
893
|
+
},
|
|
894
|
+
selected: {
|
|
895
|
+
download: {
|
|
896
|
+
language: "ENG",
|
|
897
|
+
country: "US",
|
|
898
|
+
tags: {
|
|
899
|
+
Codec: "prores",
|
|
900
|
+
Resolution: "1024x768",
|
|
901
|
+
Framerate: "24",
|
|
902
|
+
"Frame Mode": "progressive"
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
};
|
|
907
|
+
let allTags = [];
|
|
908
|
+
let allTypes = [{ name: "tv-spot.intl" }];
|
|
909
|
+
let order = new Order();
|
|
910
|
+
let ingest = new Ingest(data);
|
|
911
|
+
let file = ingest.createFile({ allTags, allTypes, order });
|
|
912
|
+
let expected = {
|
|
913
|
+
name: "PROJECT_TV-SPOT-INTL_ASSET_ENG-US_PRORES_768p24",
|
|
914
|
+
path: "paramount/project/tv-spot.intl",
|
|
915
|
+
asset: "a1b2c3",
|
|
916
|
+
generator: "ingest",
|
|
917
|
+
contextTag: "FRIDAY",
|
|
918
|
+
language: "ENG",
|
|
919
|
+
country: "US",
|
|
920
|
+
tags: ["FRIDAY", "prores", "1024x768", "24", "progressive"],
|
|
921
|
+
ingest: "a1b2c3",
|
|
922
|
+
workRequest: "a1b2c3",
|
|
923
|
+
verified: true
|
|
924
|
+
};
|
|
925
|
+
expect(file.data()).toEqual(expected);
|
|
926
|
+
});
|
|
927
|
+
});
|
|
11
928
|
describe("assemble", () => {
|
|
12
929
|
it("should set country and language from filename if not found in order", () => {
|
|
13
930
|
let original = {
|
|
14
|
-
context: {}
|
|
15
|
-
|
|
16
|
-
|
|
931
|
+
context: {},
|
|
932
|
+
filename: {
|
|
933
|
+
asset: ""
|
|
934
|
+
},
|
|
17
935
|
selected: {
|
|
18
936
|
download: {
|
|
19
937
|
language: "ENG",
|
|
@@ -21,28 +939,30 @@ describe("Ingest", () => {
|
|
|
21
939
|
}
|
|
22
940
|
}
|
|
23
941
|
};
|
|
24
|
-
let mediainfo = {};
|
|
25
942
|
let order = new Order();
|
|
26
|
-
let ingest = Ingest
|
|
27
|
-
|
|
28
|
-
expect(
|
|
943
|
+
let ingest = new Ingest(original);
|
|
944
|
+
let data = ingest.assemble({ order });
|
|
945
|
+
expect(data.selected.download.language).toBe("ENG");
|
|
946
|
+
expect(data.selected.download.country).toBe("US");
|
|
29
947
|
});
|
|
30
948
|
it("should use asset from filename when there is no context", () => {
|
|
31
949
|
let original = {
|
|
32
|
-
context: {}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
950
|
+
context: {},
|
|
951
|
+
filename: {
|
|
952
|
+
asset: {
|
|
953
|
+
_id: "a1b2c3"
|
|
954
|
+
}
|
|
955
|
+
}
|
|
36
956
|
};
|
|
37
|
-
let mediainfo = {};
|
|
38
957
|
let order = new Order();
|
|
39
|
-
let ingest = Ingest
|
|
40
|
-
|
|
958
|
+
let ingest = new Ingest(original);
|
|
959
|
+
let data = ingest.assemble({ order });
|
|
960
|
+
expect(data.selected.asset).toBe("a1b2c3");
|
|
41
961
|
});
|
|
42
|
-
it(
|
|
962
|
+
it("should prefer ingest asset data over filename when coming from workrequest", () => {
|
|
43
963
|
let original = {
|
|
44
964
|
asset: {
|
|
45
|
-
slug:
|
|
965
|
+
slug: "alpha"
|
|
46
966
|
},
|
|
47
967
|
context: {
|
|
48
968
|
workRequest: "5c90dd39ab0e003b358b456d",
|
|
@@ -51,237 +971,263 @@ describe("Ingest", () => {
|
|
|
51
971
|
project: "5ada6930679eef010c8b45fc",
|
|
52
972
|
group: 1553693108697,
|
|
53
973
|
tag: "FRIDAY"
|
|
974
|
+
},
|
|
975
|
+
filename: {
|
|
976
|
+
project: { _id: "a1b2c3" },
|
|
977
|
+
asset: {
|
|
978
|
+
_id: "a1b2c3",
|
|
979
|
+
slug: "beta"
|
|
980
|
+
}
|
|
54
981
|
}
|
|
55
982
|
};
|
|
56
|
-
let filename = {
|
|
57
|
-
project: { _id: "a1b2c3" },
|
|
58
|
-
asset: {
|
|
59
|
-
_id: "a1b2c3",
|
|
60
|
-
slug: 'beta'
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
let mediainfo = {};
|
|
64
983
|
let order = new Order({ _id: "5c90dd39ab0e003b358b456d" });
|
|
65
|
-
let ingest = Ingest
|
|
66
|
-
|
|
984
|
+
let ingest = new Ingest(original);
|
|
985
|
+
let data = ingest.assemble({ order });
|
|
986
|
+
expect(data.asset.slug).toEqual("alpha");
|
|
67
987
|
});
|
|
68
988
|
it("should use all context when coming from an order", () => {
|
|
69
989
|
let original = {
|
|
70
990
|
selected: {
|
|
71
991
|
download: {
|
|
72
992
|
tags: {
|
|
73
|
-
Extra: [
|
|
993
|
+
Extra: ["A", "B"]
|
|
74
994
|
}
|
|
75
995
|
}
|
|
76
996
|
},
|
|
77
997
|
context: {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
998
|
+
workRequest: "5c90dd39ab0e003b358b456d",
|
|
999
|
+
asset: "5c804776bb65ce2e008b4568",
|
|
1000
|
+
assetType: "social",
|
|
1001
|
+
project: "5ada6930679eef010c8b45fc",
|
|
1002
|
+
group: 1553693108697,
|
|
1003
|
+
tag: "FRIDAY"
|
|
1004
|
+
},
|
|
1005
|
+
filename: {
|
|
1006
|
+
project: { _id: "a1b2c3" },
|
|
1007
|
+
asset: { _id: "a1b2c3" }
|
|
84
1008
|
}
|
|
85
1009
|
};
|
|
86
|
-
let filename = {
|
|
87
|
-
project: { _id: "a1b2c3"},
|
|
88
|
-
asset: { _id: "a1b2c3" }
|
|
89
|
-
};
|
|
90
|
-
let mediainfo = {};
|
|
91
1010
|
let order = new Order({ _id: "5c90dd39ab0e003b358b456d" });
|
|
92
|
-
let ingest = Ingest
|
|
93
|
-
|
|
94
|
-
expect(
|
|
95
|
-
expect(
|
|
96
|
-
expect(
|
|
1011
|
+
let ingest = new Ingest(original);
|
|
1012
|
+
let data = ingest.assemble({ order });
|
|
1013
|
+
expect(data.selected.download.tags.Extra).toEqual(["FRIDAY"]);
|
|
1014
|
+
expect(data.selected.project).toBe("5ada6930679eef010c8b45fc");
|
|
1015
|
+
expect(data.selected.asset).toBe("5c804776bb65ce2e008b4568");
|
|
1016
|
+
expect(data.selected.assetType).toBe("social");
|
|
97
1017
|
});
|
|
98
1018
|
it("should set preview revision=Unfinished for creative assets", () => {
|
|
99
1019
|
let original = {
|
|
100
1020
|
asset: {
|
|
101
1021
|
creative: true
|
|
102
1022
|
},
|
|
103
|
-
context: {}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
1023
|
+
context: {},
|
|
1024
|
+
filename: {
|
|
1025
|
+
selected: {
|
|
1026
|
+
download: {
|
|
1027
|
+
language: "ENG",
|
|
1028
|
+
country: "US"
|
|
1029
|
+
}
|
|
110
1030
|
}
|
|
111
1031
|
}
|
|
112
1032
|
};
|
|
113
|
-
let mediainfo = {};
|
|
114
1033
|
let order = new Order();
|
|
115
|
-
let ingest = Ingest
|
|
116
|
-
|
|
1034
|
+
let ingest = new Ingest(original);
|
|
1035
|
+
let data = ingest.assemble({ order });
|
|
1036
|
+
expect(data.selected.preview.revision).toBe("Unfinished");
|
|
117
1037
|
});
|
|
118
1038
|
it("should keep tags from parsed filename when order is empty", () => {
|
|
119
|
-
let original = {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
1039
|
+
let original = {
|
|
1040
|
+
asset: { creative: true },
|
|
1041
|
+
context: {},
|
|
1042
|
+
filename: {
|
|
1043
|
+
selected: {
|
|
1044
|
+
download: {
|
|
1045
|
+
language: "ENG",
|
|
1046
|
+
country: "US",
|
|
1047
|
+
tags: {
|
|
1048
|
+
Extra: ["coming-soon"],
|
|
1049
|
+
SubDub: {
|
|
1050
|
+
sub: true
|
|
1051
|
+
}
|
|
129
1052
|
}
|
|
130
1053
|
}
|
|
131
1054
|
}
|
|
132
1055
|
}
|
|
133
1056
|
};
|
|
134
|
-
let mediainfo = {};
|
|
135
1057
|
let order = new Order();
|
|
136
|
-
let ingest = Ingest
|
|
137
|
-
|
|
1058
|
+
let ingest = new Ingest(original);
|
|
1059
|
+
let data = ingest.assemble({ order });
|
|
1060
|
+
expect(data.selected.download.tags).toEqual({
|
|
138
1061
|
Extra: ["coming-soon"],
|
|
139
1062
|
SubDub: { sub: true }
|
|
140
1063
|
});
|
|
141
1064
|
});
|
|
142
1065
|
it("should set preview revision=Final for finished assets", () => {
|
|
143
|
-
let original = {
|
|
144
|
-
|
|
145
|
-
|
|
1066
|
+
let original = {
|
|
1067
|
+
asset: { creative: false },
|
|
1068
|
+
context: {},
|
|
1069
|
+
filename: {
|
|
1070
|
+
selected: { download: { language: "ENG", country: "US" } }
|
|
1071
|
+
}
|
|
146
1072
|
};
|
|
147
|
-
let mediainfo = {};
|
|
148
1073
|
let order = new Order();
|
|
149
|
-
let ingest = Ingest
|
|
150
|
-
|
|
1074
|
+
let ingest = new Ingest(original);
|
|
1075
|
+
let data = ingest.assemble({ order });
|
|
1076
|
+
expect(data.selected.preview.revision).toBe("Final");
|
|
151
1077
|
});
|
|
152
1078
|
it("should enable preview if file is prores 1080p 23.98/25", () => {
|
|
153
|
-
let original = {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
Framerate: "23.98"
|
|
1079
|
+
let original = {
|
|
1080
|
+
context: {},
|
|
1081
|
+
mediainfo: {
|
|
1082
|
+
selected: {
|
|
1083
|
+
download: {
|
|
1084
|
+
tags: {
|
|
1085
|
+
Codec: "prores",
|
|
1086
|
+
Resolution: "720x1080",
|
|
1087
|
+
Framerate: "23.98"
|
|
1088
|
+
}
|
|
164
1089
|
}
|
|
165
1090
|
}
|
|
1091
|
+
},
|
|
1092
|
+
filename: {
|
|
1093
|
+
selected: { download: { language: "ENG", country: "US" } }
|
|
166
1094
|
}
|
|
167
1095
|
};
|
|
168
1096
|
let order = new Order();
|
|
169
1097
|
let watermarks = [1];
|
|
170
|
-
let ingest = Ingest
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
mediainfo,
|
|
174
|
-
order,
|
|
175
|
-
watermarks
|
|
176
|
-
});
|
|
177
|
-
expect(ingest.selected.preview.enabled).toBe(true);
|
|
1098
|
+
let ingest = new Ingest(original);
|
|
1099
|
+
let data = ingest.assemble({ order, watermarks });
|
|
1100
|
+
expect(data.selected.preview.enabled).toBe(true);
|
|
178
1101
|
});
|
|
179
1102
|
it("should prefer language and country from order over filename", () => {
|
|
180
|
-
let original = {
|
|
181
|
-
|
|
182
|
-
|
|
1103
|
+
let original = {
|
|
1104
|
+
context: {},
|
|
1105
|
+
filename: {
|
|
1106
|
+
selected: { download: { language: "ENG", country: "US" } }
|
|
1107
|
+
}
|
|
183
1108
|
};
|
|
184
|
-
let mediainfo = {};
|
|
185
1109
|
let order = new Order({
|
|
186
1110
|
territory: "FI",
|
|
187
1111
|
language: "FIN"
|
|
188
1112
|
});
|
|
189
|
-
let ingest = Ingest
|
|
190
|
-
|
|
191
|
-
expect(
|
|
1113
|
+
let ingest = new Ingest(original);
|
|
1114
|
+
let data = ingest.assemble({ order });
|
|
1115
|
+
expect(data.selected.download.language).toBe("FIN");
|
|
1116
|
+
expect(data.selected.download.country).toBe("FI");
|
|
192
1117
|
});
|
|
193
1118
|
it("should correctly merge tags from mediainfo over filename", () => {
|
|
194
|
-
let original = {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
1119
|
+
let original = {
|
|
1120
|
+
context: {},
|
|
1121
|
+
mediainfo: {
|
|
1122
|
+
selected: { download: { tags: { Codec: "h264", Aspect: "16:9" } } }
|
|
1123
|
+
},
|
|
1124
|
+
filename: {
|
|
1125
|
+
selected: { download: { tags: { Codec: "prores", Aspect: "4X3" } } }
|
|
1126
|
+
}
|
|
200
1127
|
};
|
|
201
1128
|
let order = new Order();
|
|
202
|
-
let ingest = Ingest
|
|
203
|
-
|
|
204
|
-
expect(
|
|
1129
|
+
let ingest = new Ingest(original);
|
|
1130
|
+
let data = ingest.assemble({ order });
|
|
1131
|
+
expect(data.selected.download.tags.Codec).toBe("h264");
|
|
1132
|
+
expect(data.selected.download.tags.Aspect).toBe("16:9");
|
|
205
1133
|
});
|
|
206
1134
|
it("should set preview.type=sub if order.isSub", () => {
|
|
207
|
-
let original = { context: {} };
|
|
208
|
-
let filename = {};
|
|
209
|
-
let mediainfo = {};
|
|
1135
|
+
let original = { context: {}, filename: {}, mediainfo: {} };
|
|
210
1136
|
let order = {
|
|
211
1137
|
isSub: jest.fn().mockReturnValue(true),
|
|
212
1138
|
isDub: jest.fn().mockReturnValue(null)
|
|
213
1139
|
};
|
|
214
|
-
let ingest = Ingest
|
|
215
|
-
|
|
1140
|
+
let ingest = new Ingest(original);
|
|
1141
|
+
let data = ingest.assemble({ order });
|
|
1142
|
+
expect(data.selected.preview.type).toBe("sub");
|
|
216
1143
|
});
|
|
217
1144
|
it("should set preview.type=dub if order.isDub", () => {
|
|
218
|
-
let original = { context: {} };
|
|
219
|
-
let filename = {};
|
|
220
|
-
let mediainfo = {};
|
|
1145
|
+
let original = { context: {}, filename: {}, mediainfo: {} };
|
|
221
1146
|
let order = {
|
|
222
1147
|
isSub: jest.fn().mockReturnValue(null),
|
|
223
1148
|
isDub: jest.fn().mockReturnValue(true)
|
|
224
1149
|
};
|
|
225
|
-
let ingest = Ingest
|
|
226
|
-
|
|
1150
|
+
let ingest = new Ingest(original);
|
|
1151
|
+
let data = ingest.assemble({ order });
|
|
1152
|
+
expect(data.selected.preview.type).toBe("dub");
|
|
227
1153
|
});
|
|
228
1154
|
it("should set preview.type=both if order.isDub and order.isDub", () => {
|
|
229
|
-
let original = { context: {} };
|
|
230
|
-
let filename = {};
|
|
231
|
-
let mediainfo = {};
|
|
1155
|
+
let original = { context: {}, filename: {}, mediainfo: {} };
|
|
232
1156
|
let order = {
|
|
233
1157
|
isSub: jest.fn().mockReturnValue(true),
|
|
234
1158
|
isDub: jest.fn().mockReturnValue(true)
|
|
235
1159
|
};
|
|
236
|
-
let ingest = Ingest
|
|
237
|
-
|
|
1160
|
+
let ingest = new Ingest(original);
|
|
1161
|
+
let data = ingest.assemble({ order });
|
|
1162
|
+
expect(data.selected.preview.type).toBe("both");
|
|
238
1163
|
});
|
|
239
1164
|
it("should retain Extra tags from order over filename", () => {
|
|
240
|
-
let original = {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
1165
|
+
let original = {
|
|
1166
|
+
context: { tag: "coming-soon" },
|
|
1167
|
+
mediainfo: {},
|
|
1168
|
+
filename: {
|
|
1169
|
+
selected: {
|
|
1170
|
+
download: {
|
|
1171
|
+
tags: ["friday"]
|
|
1172
|
+
}
|
|
245
1173
|
}
|
|
246
1174
|
}
|
|
247
1175
|
};
|
|
248
|
-
let mediainfo = {};
|
|
249
1176
|
let order = {
|
|
250
1177
|
isSub: jest.fn().mockReturnValue(true),
|
|
251
1178
|
isDub: jest.fn().mockReturnValue(true)
|
|
252
1179
|
};
|
|
253
|
-
let ingest = Ingest
|
|
254
|
-
|
|
1180
|
+
let ingest = new Ingest(original);
|
|
1181
|
+
let data = ingest.assemble({ order });
|
|
1182
|
+
expect(data.selected.download.tags.Extra).toEqual(["coming-soon"]);
|
|
255
1183
|
});
|
|
256
1184
|
});
|
|
257
1185
|
describe("mapFromMediainfo", () => {
|
|
258
1186
|
it("should throw exception if missing File object", () => {
|
|
259
1187
|
let meta = {};
|
|
260
1188
|
expect(() => {
|
|
261
|
-
let ingest = Ingest
|
|
1189
|
+
let ingest = new Ingest({
|
|
1190
|
+
asset: { mediaType: "video" },
|
|
1191
|
+
mediainfo: meta
|
|
1192
|
+
});
|
|
1193
|
+
let info = ingest.mapFromMediainfo();
|
|
262
1194
|
}).toThrow("missing info.File");
|
|
263
1195
|
});
|
|
264
1196
|
it("should throw exception if missing File.track object", () => {
|
|
265
1197
|
let meta = { File: {} };
|
|
266
1198
|
expect(() => {
|
|
267
|
-
let ingest = Ingest
|
|
1199
|
+
let ingest = new Ingest({
|
|
1200
|
+
asset: { mediaType: "video" },
|
|
1201
|
+
mediainfo: meta
|
|
1202
|
+
});
|
|
1203
|
+
let info = ingest.mapFromMediainfo();
|
|
268
1204
|
}).toThrow("missing info.File.track");
|
|
269
1205
|
});
|
|
270
1206
|
it("should return empty object of tags if no metadata supplied", () => {
|
|
271
1207
|
let meta = { File: { track: {} } };
|
|
272
|
-
let ingest = Ingest
|
|
273
|
-
|
|
1208
|
+
let ingest = new Ingest({
|
|
1209
|
+
asset: { mediaType: "video" },
|
|
1210
|
+
mediainfo: meta
|
|
1211
|
+
});
|
|
1212
|
+
let info = ingest.mapFromMediainfo();
|
|
1213
|
+
expect(info).toEqual({ selected: { download: { tags: {} } } });
|
|
274
1214
|
});
|
|
275
1215
|
it("should set usage to broadcast for mxf files", () => {
|
|
276
|
-
let
|
|
277
|
-
|
|
278
|
-
|
|
1216
|
+
let ingest = new Ingest({
|
|
1217
|
+
asset: { mediaType: "" },
|
|
1218
|
+
mediainfo: mxfMock
|
|
1219
|
+
});
|
|
1220
|
+
let info = ingest.mapFromMediainfo();
|
|
1221
|
+
expect(info).toEqual({
|
|
279
1222
|
Usage: "broadcast"
|
|
280
1223
|
});
|
|
281
1224
|
});
|
|
282
1225
|
it("should correctly map h264 metadata to tags", () => {
|
|
283
|
-
let
|
|
284
|
-
|
|
1226
|
+
let ingest = new Ingest({
|
|
1227
|
+
asset: { mediaType: "video" },
|
|
1228
|
+
mediainfo: mock
|
|
1229
|
+
});
|
|
1230
|
+
let info = ingest.mapFromMediainfo();
|
|
285
1231
|
let expected = {
|
|
286
1232
|
selected: {
|
|
287
1233
|
download: {
|
|
@@ -297,11 +1243,14 @@ describe("Ingest", () => {
|
|
|
297
1243
|
}
|
|
298
1244
|
}
|
|
299
1245
|
};
|
|
300
|
-
expect(
|
|
1246
|
+
expect(info).toEqual(expected);
|
|
301
1247
|
});
|
|
302
1248
|
it("should correctly map prores metadata to tags", () => {
|
|
303
|
-
let
|
|
304
|
-
|
|
1249
|
+
let ingest = new Ingest({
|
|
1250
|
+
asset: { mediaType: "video" },
|
|
1251
|
+
mediainfo: proresMock
|
|
1252
|
+
});
|
|
1253
|
+
let info = ingest.mapFromMediainfo();
|
|
305
1254
|
let expected = {
|
|
306
1255
|
selected: {
|
|
307
1256
|
download: {
|
|
@@ -317,15 +1266,18 @@ describe("Ingest", () => {
|
|
|
317
1266
|
}
|
|
318
1267
|
}
|
|
319
1268
|
};
|
|
320
|
-
expect(
|
|
1269
|
+
expect(info).toEqual(expected);
|
|
321
1270
|
});
|
|
322
1271
|
it("should correctly map png metadata to tags", () => {
|
|
323
|
-
let
|
|
324
|
-
|
|
1272
|
+
let ingest = new Ingest({
|
|
1273
|
+
asset: { mediaType: "image" },
|
|
1274
|
+
mediainfo: pngMock
|
|
1275
|
+
});
|
|
1276
|
+
let info = ingest.mapFromMediainfo();
|
|
325
1277
|
let expected = {
|
|
326
1278
|
selected: { download: { tags: { Resolution: "1240x859" } } }
|
|
327
1279
|
};
|
|
328
|
-
expect(
|
|
1280
|
+
expect(info).toEqual(expected);
|
|
329
1281
|
});
|
|
330
1282
|
});
|
|
331
1283
|
describe("mapFromFilename", () => {
|
|
@@ -335,8 +1287,9 @@ describe("Ingest", () => {
|
|
|
335
1287
|
file: { language: "ENG", country: "US", tags: ["sub", "dub", "txtd"] }
|
|
336
1288
|
};
|
|
337
1289
|
let allTags = mocks.tags;
|
|
338
|
-
let ingest = Ingest
|
|
339
|
-
|
|
1290
|
+
let ingest = new Ingest({ filename });
|
|
1291
|
+
let info = ingest.mapFromFilename({ allTags });
|
|
1292
|
+
expect(info).toEqual({
|
|
340
1293
|
selected: {
|
|
341
1294
|
download: {
|
|
342
1295
|
tags: {
|
|
@@ -360,8 +1313,9 @@ describe("Ingest", () => {
|
|
|
360
1313
|
file: { language: "ENG", country: "US", tags: ["sub", "txtd"] }
|
|
361
1314
|
};
|
|
362
1315
|
let allTags = mocks.tags;
|
|
363
|
-
let ingest = Ingest
|
|
364
|
-
|
|
1316
|
+
let ingest = new Ingest({ filename });
|
|
1317
|
+
let info = ingest.mapFromFilename({ allTags });
|
|
1318
|
+
expect(info.selected.preview.type).toEqual("sub");
|
|
365
1319
|
});
|
|
366
1320
|
it("should set preview type=dub based on filename", () => {
|
|
367
1321
|
let filename = {
|
|
@@ -369,8 +1323,9 @@ describe("Ingest", () => {
|
|
|
369
1323
|
file: { language: "ENG", country: "US", tags: ["dub", "txtd"] }
|
|
370
1324
|
};
|
|
371
1325
|
let allTags = mocks.tags;
|
|
372
|
-
let ingest = Ingest
|
|
373
|
-
|
|
1326
|
+
let ingest = new Ingest({ filename });
|
|
1327
|
+
let info = ingest.mapFromFilename({ allTags });
|
|
1328
|
+
expect(info.selected.preview.type).toEqual("dub");
|
|
374
1329
|
});
|
|
375
1330
|
});
|
|
376
1331
|
});
|