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/integration/components/emoji-uploader-test.js
Dan Ungureanu d0f4f408af
DEV: Simplify emoji-uploader tests (#15672)
Removes one layer of indirection in the tests. `emoji-uploader`'s
`uploadDone` can call the test handler directly without going through
an additional action method.
2022-01-21 19:51:04 +02:00

139 lines
3.8 KiB
JavaScript

import componentTest, {
setupRenderingTest,
} from "discourse/tests/helpers/component-test";
import selectKit from "discourse/tests/helpers/select-kit-helper";
import {
createFile,
discourseModule,
} from "discourse/tests/helpers/qunit-helpers";
import hbs from "htmlbars-inline-precompile";
import pretender from "discourse/tests/helpers/create-pretender";
import { fillIn } from "@ember/test-helpers";
let requestNumber = 1;
discourseModule("Integration | Component | emoji-uploader", function (hooks) {
setupRenderingTest(hooks);
const template = hbs` {{emoji-uploader
emojiGroups=emojiGroups
done=doneUpload
id="emoji-uploader"
}}`;
hooks.beforeEach(function () {
requestNumber = 1;
this.setProperties({
emojiGroups: ["default", "coolemojis"],
});
pretender.post("/admin/customize/emojis.json", () => {
if (requestNumber === 1) {
return [
200,
{ "Content-Type": "application/json" },
{
group: "coolemojis",
name: "okey",
url:
"//upload.s3.dualstack.us-east-2.amazonaws.com/original/1X/123.png",
},
];
requestNumber += 1;
} else if (requestNumber === 2) {
return [
200,
{ "Content-Type": "application/json" },
{
group: "coolemojis",
name: null,
url:
"//upload.s3.dualstack.us-east-2.amazonaws.com/original/1X/456.png",
},
];
}
});
});
componentTest("uses the selected group for the upload", {
template,
async test(assert) {
const done = assert.async();
await selectKit("#emoji-group-selector").expand();
await selectKit("#emoji-group-selector").selectRowByValue("coolemojis");
this.set("doneUpload", (upload, group) => {
assert.equal("coolemojis", group);
done();
});
const image = createFile("avatar.png");
await this.container
.lookup("service:app-events")
.trigger("upload-mixin:emoji-uploader:add-files", image);
},
});
componentTest("does not clear the selected group between multiple uploads", {
template,
async test(assert) {
const done = assert.async();
await selectKit("#emoji-group-selector").expand();
await selectKit("#emoji-group-selector").selectRowByValue("coolemojis");
let uploadDoneCount = 0;
this.set("doneUpload", (upload, group) => {
uploadDoneCount += 1;
assert.equal("coolemojis", group);
if (uploadDoneCount === 2) {
done();
}
});
const image = createFile("avatar.png");
const image2 = createFile("avatar2.png");
await this.container
.lookup("service:app-events")
.trigger("upload-mixin:emoji-uploader:add-files", [image, image2]);
},
});
componentTest(
"clears the name after the first upload to avoid duplicate names",
{
template,
async test(assert) {
const done = assert.async();
await selectKit("#emoji-group-selector").expand();
await selectKit("#emoji-group-selector").selectRowByValue("coolemojis");
await fillIn("#emoji-name", "okey");
let uploadDoneCount = 0;
this.set("doneUpload", (upload) => {
if (uploadDoneCount === 0) {
assert.equal(upload.name, "okey");
}
uploadDoneCount += 1;
if (uploadDoneCount === 1) {
assert.equal(this.name, null);
}
if (uploadDoneCount === 2) {
done();
}
});
const image = createFile("avatar.png");
const image2 = createFile("avatar2.png");
await this.container
.lookup("service:app-events")
.trigger("upload-mixin:emoji-uploader:add-files", [image, image2]);
},
}
);
});