This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/tests/unit/lib/uppy-media-optimization-plugin-test.js
Jarek Radosz 87a6cf0133
DEV: Try reducing RSVP usage
Native Promises ftw?
2022-08-17 12:54:35 +02:00

181 lines
5.9 KiB
JavaScript

import UppyMediaOptimization from "discourse/lib/uppy-media-optimization-plugin";
import { module, test } from "qunit";
class FakeUppy {
constructor() {
this.preprocessors = [];
this.emitted = [];
this.files = {
"uppy-test/file/vv2/xvejg5w/blah/jpg-1d-1d-2v-1d-1e-image/jpeg-9043429-1624921727764":
{
data: "old file state",
},
"uppy-test/file/blah1/ads37x2/blah1/jpg-1d-1d-2v-1d-1e-image/jpeg-99999-1837921727764":
{
data: "old file state 1",
},
};
}
addPreProcessor(fn) {
this.preprocessors.push(fn);
}
getFile(id) {
return this.files[id];
}
emit(event, file, data) {
this.emitted.push({ event, file, data });
}
setFileState(fileId, state) {
this.files[fileId] = state;
}
}
module("Unit | Utility | UppyMediaOptimization Plugin", function () {
test("sets the options passed in", function (assert) {
const fakeUppy = new FakeUppy();
const plugin = new UppyMediaOptimization(fakeUppy, {
runParallel: true,
optimizeFn: function () {
return "wow such optimized";
},
});
assert.strictEqual(plugin.id, "uppy-media-optimization");
assert.strictEqual(plugin.runParallel, true);
assert.strictEqual(plugin.optimizeFn(), "wow such optimized");
});
test("installation uses the correct function", function (assert) {
const fakeUppy = new FakeUppy();
const plugin = new UppyMediaOptimization(fakeUppy, {
runParallel: true,
});
Object.defineProperty(plugin, "_optimizeParallel", {
value: () => "using parallel",
});
Object.defineProperty(plugin, "_optimizeSerial", {
value: () => "using serial",
});
plugin.install();
assert.strictEqual(plugin.uppy.preprocessors[0](), "using parallel");
plugin.runParallel = false;
plugin.uppy.preprocessors = [];
plugin.install();
assert.strictEqual(plugin.uppy.preprocessors[0](), "using serial");
});
test("sets the file state when successfully optimizing the file and emits events", function (assert) {
const fakeUppy = new FakeUppy();
const plugin = new UppyMediaOptimization(fakeUppy, {
runParallel: true,
optimizeFn: () => {
return Promise.resolve("new file state");
},
});
plugin.install();
const done = assert.async();
const fileId =
"uppy-test/file/vv2/xvejg5w/blah/jpg-1d-1d-2v-1d-1e-image/jpeg-9043429-1624921727764";
plugin.uppy.preprocessors[0]([fileId]).then(() => {
assert.strictEqual(plugin.uppy.emitted[0].event, "preprocess-progress");
assert.strictEqual(plugin.uppy.emitted[1].event, "preprocess-complete");
assert.strictEqual(plugin.uppy.getFile(fileId).data, "new file state");
done();
});
});
test("handles optimizer errors gracefully by leaving old file state and calling preprocess-complete", function (assert) {
const fakeUppy = new FakeUppy();
const plugin = new UppyMediaOptimization(fakeUppy, {
runParallel: true,
optimizeFn: () => {
return new Promise(() => {
throw new Error("bad stuff");
});
},
});
plugin.install();
const done = assert.async();
const fileId =
"uppy-test/file/vv2/xvejg5w/blah/jpg-1d-1d-2v-1d-1e-image/jpeg-9043429-1624921727764";
plugin.uppy.preprocessors[0]([fileId]).then(() => {
assert.strictEqual(plugin.uppy.emitted[0].event, "preprocess-progress");
assert.strictEqual(plugin.uppy.emitted[1].event, "preprocess-complete");
assert.strictEqual(plugin.uppy.getFile(fileId).data, "old file state");
done();
});
});
test("handles serial file optimization successfully", function (assert) {
const fakeUppy = new FakeUppy();
const plugin = new UppyMediaOptimization(fakeUppy, {
runParallel: false,
optimizeFn: () => {
return Promise.resolve("new file state");
},
});
plugin.install();
const done = assert.async();
const fileIds = [
"uppy-test/file/vv2/xvejg5w/blah/jpg-1d-1d-2v-1d-1e-image/jpeg-9043429-1624921727764",
"uppy-test/file/blah1/ads37x2/blah1/jpg-1d-1d-2v-1d-1e-image/jpeg-99999-1837921727764",
];
plugin.uppy.preprocessors[0](fileIds).then(() => {
assert.strictEqual(plugin.uppy.emitted[0].event, "preprocess-progress");
assert.strictEqual(plugin.uppy.emitted[1].event, "preprocess-complete");
assert.strictEqual(plugin.uppy.emitted[2].event, "preprocess-progress");
assert.strictEqual(plugin.uppy.emitted[3].event, "preprocess-complete");
assert.strictEqual(
plugin.uppy.getFile(fileIds[0]).data,
"new file state"
);
assert.strictEqual(
plugin.uppy.getFile(fileIds[1]).data,
"new file state"
);
done();
});
});
test("handles parallel file optimization successfully", function (assert) {
const fakeUppy = new FakeUppy();
const plugin = new UppyMediaOptimization(fakeUppy, {
runParallel: true,
optimizeFn: () => {
return Promise.resolve("new file state");
},
});
plugin.install();
const done = assert.async();
const fileIds = [
"uppy-test/file/vv2/xvejg5w/blah/jpg-1d-1d-2v-1d-1e-image/jpeg-9043429-1624921727764",
"uppy-test/file/blah1/ads37x2/blah1/jpg-1d-1d-2v-1d-1e-image/jpeg-99999-1837921727764",
];
plugin.uppy.preprocessors[0](fileIds).then(() => {
assert.strictEqual(plugin.uppy.emitted[0].event, "preprocess-progress");
assert.strictEqual(plugin.uppy.emitted[1].event, "preprocess-progress");
assert.strictEqual(plugin.uppy.emitted[2].event, "preprocess-complete");
assert.strictEqual(plugin.uppy.emitted[3].event, "preprocess-complete");
assert.strictEqual(
plugin.uppy.getFile(fileIds[0]).data,
"new file state"
);
assert.strictEqual(
plugin.uppy.getFile(fileIds[1]).data,
"new file state"
);
done();
});
});
});