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
Martin Brennan b06c5dde94
FIX: Emoji group not actually saving (#15602)
Follow up to 48f70dcd5f. The group
_appeared_ to be saved in the UI until a refresh when it became
clear that the group wasn't actually sent to the DB. This is because
of the way the per-file data was being set with a computed property.
This commit fixes the computed property by changing it to a regular
function and also makes sure the name resetting after the first upload
in multiple uploads works too.
2022-01-17 10:29:06 +10:00

144 lines
4.0 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=(action "emojiUploaded")
id="emoji-uploader"
}}`;
hooks.beforeEach(function () {
requestNumber = 1;
this.setProperties({
emojiGroups: ["default", "coolemojis"],
actions: {
emojiUploaded: (upload, group) => {
this.doneUpload(upload, group);
},
},
});
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]);
},
}
);
});