@pixwel/pixwel-sdk 1.1.7 → 1.1.9

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.
@@ -1,8 +1,8 @@
1
1
  import Filename from "../src/Filename";
2
2
  let mocks = require("./mocks/mocks");
3
3
 
4
- describe("Filename", function() {
5
- describe("render", function() {
4
+ describe("Filename", () => {
5
+ describe("render", () => {
6
6
  it("renders tags as an underscore-separated string", function() {
7
7
  let asset = {
8
8
  name: "Test Asset A",
@@ -30,7 +30,61 @@ describe("Filename", function() {
30
30
  );
31
31
  });
32
32
 
33
- it("displays resolution for images", function () {
33
+ it("renders language and country", function() {
34
+ let asset = {
35
+ name: "Test Asset A",
36
+ slug: "test-asset-a",
37
+ type: "trailer.intl",
38
+ mediaType: "video",
39
+ project: {
40
+ filePrefix: "TESTPROJECT"
41
+ }
42
+ };
43
+ let options = {
44
+ language: "ENG",
45
+ country: "US",
46
+ tags: {
47
+ Text: "txtd",
48
+ Extra: ["COMING-SOON", "HOJE"],
49
+ Codec: "PRORES",
50
+ Resolution: "640x480",
51
+ Framerate: "23.98",
52
+ "Frame Mode": "progressive"
53
+ }
54
+ };
55
+ expect(Filename.render(mocks.tags, mocks.types, asset, options)).toBe(
56
+ "TESTPROJECT_ITR-TEST-ASSET-A_ENG-US_TXTD_COMING-SOON_HOJE_PRORES_480p2398"
57
+ );
58
+ });
59
+
60
+ it("renders language only for dual-language codes", function () {
61
+ let asset = {
62
+ name: "Test Asset A",
63
+ slug: "test-asset-a",
64
+ type: "trailer.intl",
65
+ mediaType: "video",
66
+ project: {
67
+ filePrefix: "TESTPROJECT"
68
+ }
69
+ };
70
+ let options = {
71
+ language: "PFR-FLE",
72
+ country: "US",
73
+ tags: {
74
+ Text: "txtd",
75
+ Extra: ["COMING-SOON", "HOJE"],
76
+ Codec: "PRORES",
77
+ Resolution: "640x480",
78
+ Framerate: "23.98",
79
+ "Frame Mode": "progressive"
80
+ }
81
+ };
82
+ expect(Filename.render(mocks.tags, mocks.types, asset, options)).toBe(
83
+ "TESTPROJECT_ITR-TEST-ASSET-A_PFR-FLE_TXTD_COMING-SOON_HOJE_PRORES_480p2398"
84
+ );
85
+ });
86
+
87
+ it("displays resolution for images", function() {
34
88
  let asset = {
35
89
  name: "Test Asset A",
36
90
  slug: "test-asset-a",
@@ -44,13 +98,13 @@ describe("Filename", function() {
44
98
  language: "ENG",
45
99
  country: "WW",
46
100
  tags: {
47
- Text: 'txtd',
101
+ Text: "txtd",
48
102
  Resolution: "640x480"
49
103
  }
50
104
  };
51
- expect(Filename.render(mocks.tags, mocks.types, asset, options, 'image')).toBe(
52
- "TESTPROJECT_ITR-TEST-ASSET-A_ENG_TXTD_640x480"
53
- );
105
+ expect(
106
+ Filename.render(mocks.tags, mocks.types, asset, options, "image")
107
+ ).toBe("TESTPROJECT_ITR-TEST-ASSET-A_ENG_TXTD_640x480");
54
108
  });
55
109
 
56
110
  it("renders asset names with contractions correctly", function() {
@@ -122,7 +176,7 @@ describe("Filename", function() {
122
176
  }).toThrow("missing asset.project");
123
177
  });
124
178
 
125
- it("throws exception if missing asset.length (film-clip)", function() {
179
+ xit("throws exception if missing asset.length (film-clip)", function() {
126
180
  let asset = {
127
181
  name: "Test Asset A",
128
182
  slug: "test-asset-a",
@@ -133,7 +187,10 @@ describe("Filename", function() {
133
187
  }
134
188
  };
135
189
  let options = {
136
- language: "ENG"
190
+ language: "ENG",
191
+ tags: {
192
+ Text: "txtd"
193
+ }
137
194
  };
138
195
  expect(() => {
139
196
  Filename.render(mocks.tags, mocks.types, asset, options);
@@ -168,30 +225,6 @@ describe("Filename", function() {
168
225
  // }).toThrow('conflicting options supplied: SubDub and Text');
169
226
  // });
170
227
 
171
- it("throws exception if both SubDub and Text is not supplied", function() {
172
- let asset = {
173
- name: "Test Asset A",
174
- slug: "test-asset-a",
175
- type: "trailer.intl",
176
- mediaType: "video",
177
- project: {
178
- filePrefix: "TESTPROJECT"
179
- }
180
- };
181
- let options = {
182
- language: "ENG",
183
- tags: {
184
- Codec: "prores",
185
- Resolution: "640x480",
186
- Framerate: "23.98",
187
- "Frame Mode": "progressive"
188
- }
189
- };
190
- expect(() => {
191
- Filename.render(mocks.tags, mocks.types, asset, options);
192
- }).toThrow("missing options.tags.Text or options.tags.SubDub");
193
- });
194
-
195
228
  // it("throws exception if mediaType=video is missing Codec", function() {
196
229
  // let asset = {
197
230
  // name: "Test Asset A",
@@ -238,7 +271,7 @@ describe("Filename", function() {
238
271
  }
239
272
  };
240
273
  expect(() => {
241
- Filename.render(mocks.tags, mocks.types, asset, options, 'video');
274
+ Filename.render(mocks.tags, mocks.types, asset, options, "video");
242
275
  }).toThrow("missing options.tags.Resolution");
243
276
  });
244
277
 
@@ -263,7 +296,7 @@ describe("Filename", function() {
263
296
  }
264
297
  };
265
298
  expect(() => {
266
- Filename.render(mocks.tags, mocks.types, asset, options, 'video');
299
+ Filename.render(mocks.tags, mocks.types, asset, options, "video");
267
300
  }).toThrow("missing options.tags.Framerate");
268
301
  });
269
302
 
@@ -288,11 +321,11 @@ describe("Filename", function() {
288
321
  }
289
322
  };
290
323
  expect(() => {
291
- Filename.render(mocks.tags, mocks.types, asset, options, 'video');
324
+ Filename.render(mocks.tags, mocks.types, asset, options, "video");
292
325
  }).toThrow("missing options.tags[Frame Mode]");
293
326
  });
294
327
 
295
- it("throws exception if missing asset.length (featurette)", function() {
328
+ xit("throws exception if missing asset.length (featurette)", function() {
296
329
  let asset = {
297
330
  name: "Test Asset A",
298
331
  slug: "test-asset-a",
@@ -303,7 +336,10 @@ describe("Filename", function() {
303
336
  }
304
337
  };
305
338
  let options = {
306
- language: "ENG"
339
+ language: "ENG",
340
+ tags: {
341
+ Text: "txtd"
342
+ }
307
343
  };
308
344
  expect(() => {
309
345
  Filename.render(mocks.tags, mocks.types, asset, options);
@@ -1,112 +1,350 @@
1
1
  import Ingest from "../src/Ingest";
2
+ import Order from "../src/Order";
2
3
 
3
4
  import mock from "./mocks/mediainfo.mock";
4
5
  import proresMock from "./mocks/prores.mock";
5
6
  import pngMock from "./mocks/mediainfo.png.mock";
6
7
  import mxfMock from "./mocks/mediainfo.mxf.mock";
8
+ import mocks from "./mocks/mocks";
7
9
 
8
10
  describe("Ingest", () => {
9
- describe("mapMetaToTags", () => {
11
+ describe("assemble", () => {
12
+ it("should set country and language from filename if not found in order", () => {
13
+ let original = {
14
+ context: {}
15
+ };
16
+ let filename = {
17
+ selected: {
18
+ download: {
19
+ language: "ENG",
20
+ country: "US"
21
+ }
22
+ }
23
+ };
24
+ let mediainfo = {};
25
+ let order = new Order();
26
+ let ingest = Ingest.assemble(original, filename, mediainfo, order);
27
+ expect(ingest.selected.download.language).toBe("ENG");
28
+ expect(ingest.selected.download.country).toBe("US");
29
+ });
30
+ it("should use asset from filename when there is no context", () => {
31
+ let original = {
32
+ context: {}
33
+ };
34
+ let filename = {
35
+ asset: { _id: "a1b2c3" },
36
+ };
37
+ let mediainfo = {};
38
+ let order = new Order();
39
+ let ingest = Ingest.assemble(original, filename, mediainfo, order);
40
+ expect(ingest.selected.asset).toBe("a1b2c3");
41
+ });
42
+ it("should use all context when coming from an order", () => {
43
+ let original = {
44
+ selected: {
45
+ download: {
46
+ tags: {
47
+ Extra: ['A', 'B']
48
+ }
49
+ }
50
+ },
51
+ context: {
52
+ "workRequest": "5c90dd39ab0e003b358b456d",
53
+ "asset": "5c804776bb65ce2e008b4568",
54
+ "assetType": "social",
55
+ "project": "5ada6930679eef010c8b45fc",
56
+ "group": 1553693108697,
57
+ "tag": "FRIDAY"
58
+ }
59
+ };
60
+ let filename = {
61
+ project: { _id: "a1b2c3"},
62
+ asset: { _id: "a1b2c3" }
63
+ };
64
+ let mediainfo = {};
65
+ let order = new Order({ _id: "5c90dd39ab0e003b358b456d" });
66
+ let ingest = Ingest.assemble(original, filename, mediainfo, order);
67
+ expect(ingest.selected.download.tags.Extra).toEqual(['FRIDAY']);
68
+ expect(ingest.selected.project).toBe("5ada6930679eef010c8b45fc");
69
+ expect(ingest.selected.asset).toBe("5c804776bb65ce2e008b4568");
70
+ expect(ingest.selected.assetType).toBe("social");
71
+ });
72
+ it("should set preview revision=Unfinished for creative assets", () => {
73
+ let original = {
74
+ asset: {
75
+ creative: true
76
+ },
77
+ context: {}
78
+ };
79
+ let filename = {
80
+ selected: {
81
+ download: {
82
+ language: "ENG",
83
+ country: "US"
84
+ }
85
+ }
86
+ };
87
+ let mediainfo = {};
88
+ let order = new Order();
89
+ let ingest = Ingest.assemble(original, filename, mediainfo, order);
90
+ expect(ingest.selected.preview.revision).toBe("Unfinished");
91
+ });
92
+ it("should keep tags from parsed filename when order is empty", () => {
93
+ let original = { asset: { creative: true }, context: {} };
94
+ let filename = {
95
+ selected: {
96
+ download: {
97
+ language: "ENG",
98
+ country: "US",
99
+ tags: {
100
+ Extra: ["coming-soon"],
101
+ SubDub: {
102
+ sub: true
103
+ }
104
+ }
105
+ }
106
+ }
107
+ };
108
+ let mediainfo = {};
109
+ let order = new Order();
110
+ let ingest = Ingest.assemble(original, filename, mediainfo, order);
111
+ expect(ingest.selected.download.tags).toEqual({
112
+ Extra: ["coming-soon"],
113
+ SubDub: { sub: true }
114
+ });
115
+ });
116
+ it("should set preview revision=Final for finished assets", () => {
117
+ let original = { asset: { creative: false }, context: {} };
118
+ let filename = {
119
+ selected: { download: { language: "ENG", country: "US" } }
120
+ };
121
+ let mediainfo = {};
122
+ let order = new Order();
123
+ let ingest = Ingest.assemble(original, filename, mediainfo, order);
124
+ expect(ingest.selected.preview.revision).toBe("Final");
125
+ });
126
+ it("should enable preview if file is prores 1080p 23.98/25", () => {
127
+ let original = { context: {} };
128
+ let filename = {
129
+ selected: { download: { language: "ENG", country: "US" } }
130
+ };
131
+ let mediainfo = {
132
+ selected: {
133
+ download: {
134
+ tags: {
135
+ Codec: "prores",
136
+ Resolution: "720x1080",
137
+ Framerate: "23.98"
138
+ }
139
+ }
140
+ }
141
+ };
142
+ let order = new Order();
143
+ let watermarks = [1];
144
+ let ingest = Ingest.assemble(
145
+ original,
146
+ filename,
147
+ mediainfo,
148
+ order,
149
+ watermarks
150
+ );
151
+ expect(ingest.selected.preview.enabled).toBe(true);
152
+ });
153
+ it("should prefer language and country from order over filename", () => {
154
+ let original = { context: {} };
155
+ let filename = {
156
+ selected: { download: { language: "ENG", country: "US" } }
157
+ };
158
+ let mediainfo = {};
159
+ let order = new Order({
160
+ territory: "FI",
161
+ language: "FIN"
162
+ });
163
+ let ingest = Ingest.assemble(original, filename, mediainfo, order);
164
+ expect(ingest.selected.download.language).toBe("FIN");
165
+ expect(ingest.selected.download.country).toBe("FI");
166
+ });
167
+ it("should correctly merge tags from mediainfo over filename", () => {
168
+ let original = { context: {} };
169
+ let filename = {
170
+ selected: { download: { tags: { Codec: "prores", Aspect: "4X3" } } }
171
+ };
172
+ let mediainfo = {
173
+ selected: { download: { tags: { Codec: "h264", Aspect: "16:9" } } }
174
+ };
175
+ let order = new Order();
176
+ let ingest = Ingest.assemble(original, filename, mediainfo, order);
177
+ expect(ingest.selected.download.tags.Codec).toBe("h264");
178
+ expect(ingest.selected.download.tags.Aspect).toBe("16:9");
179
+ });
180
+ it("should set preview.type=sub if order.isSub", () => {
181
+ let original = { context: {} };
182
+ let filename = {};
183
+ let mediainfo = {};
184
+ let order = {
185
+ isSub: jest.fn().mockReturnValue(true),
186
+ isDub: jest.fn().mockReturnValue(null)
187
+ };
188
+ let ingest = Ingest.assemble(original, filename, mediainfo, order);
189
+ expect(ingest.selected.preview.type).toBe("sub");
190
+ });
191
+ it("should set preview.type=dub if order.isDub", () => {
192
+ let original = { context: {} };
193
+ let filename = {};
194
+ let mediainfo = {};
195
+ let order = {
196
+ isSub: jest.fn().mockReturnValue(null),
197
+ isDub: jest.fn().mockReturnValue(true)
198
+ };
199
+ let ingest = Ingest.assemble(original, filename, mediainfo, order);
200
+ expect(ingest.selected.preview.type).toBe("dub");
201
+ });
202
+ it("should set preview.type=both if order.isDub and order.isDub", () => {
203
+ let original = { context: {} };
204
+ let filename = {};
205
+ let mediainfo = {};
206
+ let order = {
207
+ isSub: jest.fn().mockReturnValue(true),
208
+ isDub: jest.fn().mockReturnValue(true)
209
+ };
210
+ let ingest = Ingest.assemble(original, filename, mediainfo, order);
211
+ expect(ingest.selected.preview.type).toBe("both");
212
+ });
213
+ it("should retain Extra tags from order over filename", () => {
214
+ let original = { context: { tag: "coming-soon" } };
215
+ let filename = {
216
+ selected: {
217
+ download: {
218
+ tags: ["friday"]
219
+ }
220
+ }
221
+ };
222
+ let mediainfo = {};
223
+ let order = {
224
+ isSub: jest.fn().mockReturnValue(true),
225
+ isDub: jest.fn().mockReturnValue(true)
226
+ };
227
+ let ingest = Ingest.assemble(original, filename, mediainfo, order);
228
+ expect(ingest.selected.download.tags.Extra).toEqual(["coming-soon"]);
229
+ });
230
+ });
231
+ describe("mapFromMediainfo", () => {
10
232
  it("should throw exception if missing File object", () => {
11
233
  let meta = {};
12
234
  expect(() => {
13
- let ingest = Ingest.mapMetaToTags(meta, "video");
235
+ let ingest = Ingest.mapFromMediainfo(meta, "video");
14
236
  }).toThrow("missing info.File");
15
237
  });
16
238
  it("should throw exception if missing File.track object", () => {
17
- let meta = {
18
- File: {}
19
- };
239
+ let meta = { File: {} };
20
240
  expect(() => {
21
- let ingest = Ingest.mapMetaToTags(meta, "video");
241
+ let ingest = Ingest.mapFromMediainfo(meta, "video");
22
242
  }).toThrow("missing info.File.track");
23
243
  });
24
244
  it("should return empty object of tags if no metadata supplied", () => {
25
- let meta = {
26
- File: {
27
- track: {}
28
- }
29
- };
30
- let ingest = Ingest.mapMetaToTags(meta, "video");
31
- expect(ingest).toEqual({
32
- Aspect: "",
33
- Standard: "",
34
- Resolution: "",
35
- Codec: "",
36
- "Frame Mode": "",
37
- Text: "",
38
- Usage: "",
39
- Extra: [],
40
- Framerate: "",
41
- Duration: ""
42
- });
245
+ let meta = { File: { track: {} } };
246
+ let ingest = Ingest.mapFromMediainfo(meta, "video");
247
+ expect(ingest).toEqual({ selected: { download: { tags: {} } } });
43
248
  });
44
249
  it("should set usage to broadcast for mxf files", () => {
45
250
  let meta = mxfMock;
46
- let ingest = Ingest.mapMetaToTags(meta, "");
251
+ let ingest = Ingest.mapFromMediainfo(meta, "");
47
252
  expect(ingest).toEqual({
48
- Aspect: "",
49
- Standard: "",
50
- Resolution: "",
51
- Codec: "",
52
- "Frame Mode": "",
53
- Text: "",
54
- Usage: "broadcast",
55
- Extra: [],
56
- Framerate: "",
57
- Duration: ""
253
+ Usage: "broadcast"
58
254
  });
59
255
  });
60
256
  it("should correctly map h264 metadata to tags", () => {
61
257
  let meta = mock;
62
- let ingest = Ingest.mapMetaToTags(meta, "video");
258
+ let ingest = Ingest.mapFromMediainfo(meta, "video");
63
259
  let expected = {
64
- Aspect: "16:9",
65
- Codec: "h264",
66
- Duration: "",
67
- Extra: [],
68
- "Frame Mode": "progressive",
69
- Framerate: "23.98",
70
- Resolution: "640x360",
71
- Standard: "ntsc",
72
- Text: "",
73
- Usage: "online"
260
+ selected: {
261
+ download: {
262
+ tags: {
263
+ Aspect: "16:9",
264
+ Codec: "h264",
265
+ "Frame Mode": "progressive",
266
+ Framerate: "23.98",
267
+ Resolution: "640x360",
268
+ Standard: "ntsc",
269
+ Usage: "online"
270
+ }
271
+ }
272
+ }
74
273
  };
75
274
  expect(ingest).toEqual(expected);
76
275
  });
77
276
  it("should correctly map prores metadata to tags", () => {
78
277
  let meta = proresMock;
79
- let ingest = Ingest.mapMetaToTags(meta, "video");
278
+ let ingest = Ingest.mapFromMediainfo(meta, "video");
80
279
  let expected = {
81
- Aspect: "16:9",
82
- Codec: "prores",
83
- Duration: "",
84
- Extra: [],
85
- "Frame Mode": "progressive",
86
- Framerate: "23.98",
87
- Resolution: "1920x1080",
88
- Standard: "ntsc",
89
- Text: "",
90
- Usage: "broadcast"
280
+ selected: {
281
+ download: {
282
+ tags: {
283
+ Aspect: "16:9",
284
+ Codec: "prores",
285
+ "Frame Mode": "progressive",
286
+ Framerate: "23.98",
287
+ Resolution: "1920x1080",
288
+ Standard: "ntsc",
289
+ Usage: "broadcast"
290
+ }
291
+ }
292
+ }
91
293
  };
92
294
  expect(ingest).toEqual(expected);
93
295
  });
94
296
  it("should correctly map png metadata to tags", () => {
95
297
  let meta = pngMock;
96
- let ingest = Ingest.mapMetaToTags(meta, "image");
298
+ let ingest = Ingest.mapFromMediainfo(meta, "image");
97
299
  let expected = {
98
- Aspect: "",
99
- Codec: "",
100
- Duration: "",
101
- Extra: [],
102
- "Frame Mode": "",
103
- Framerate: "",
104
- Resolution: "1240x859",
105
- Standard: "",
106
- Text: "",
107
- Usage: ""
300
+ selected: { download: { tags: { Resolution: "1240x859" } } }
108
301
  };
109
302
  expect(ingest).toEqual(expected);
110
303
  });
111
304
  });
305
+ describe("mapFromFilename", () => {
306
+ it("should map filename data to ingest format", () => {
307
+ let filename = {
308
+ extra: ["coming-soon"],
309
+ file: { language: "ENG", country: "US", tags: ["sub", "dub", "txtd"] }
310
+ };
311
+ let allTags = mocks.tags;
312
+ let ingest = Ingest.mapFromFilename(filename, allTags);
313
+ expect(ingest).toEqual({
314
+ selected: {
315
+ download: {
316
+ tags: {
317
+ SubDub: {
318
+ dub: true,
319
+ sub: true
320
+ },
321
+ Extra: ["coming-soon"],
322
+ Text: "txtd"
323
+ },
324
+ language: "ENG",
325
+ country: "US"
326
+ },
327
+ preview: { language: "ENG", type: "both" }
328
+ }
329
+ });
330
+ });
331
+ it("should set preview type=sub based on filename", () => {
332
+ let filename = {
333
+ extra: ["coming-soon"],
334
+ file: { language: "ENG", country: "US", tags: ["sub", "txtd"] }
335
+ };
336
+ let allTags = mocks.tags;
337
+ let ingest = Ingest.mapFromFilename(filename, allTags);
338
+ expect(ingest.selected.preview.type).toEqual("sub");
339
+ });
340
+ it("should set preview type=dub based on filename", () => {
341
+ let filename = {
342
+ extra: ["coming-soon"],
343
+ file: { language: "ENG", country: "US", tags: ["dub", "txtd"] }
344
+ };
345
+ let allTags = mocks.tags;
346
+ let ingest = Ingest.mapFromFilename(filename, allTags);
347
+ expect(ingest.selected.preview.type).toEqual("dub");
348
+ });
349
+ });
112
350
  });