DEV: adds test for image-short-url (#6642)

This commit is contained in:
Joffrey JAFFEUX 2018-11-21 21:48:52 +01:00 committed by Sam
parent a0f0bac752
commit 58c795ef30
2 changed files with 72 additions and 9 deletions

View File

@ -9,8 +9,12 @@ export function lookupUncachedUploadUrls(urls, ajax) {
method: "POST",
data: { short_urls: urls }
}).then(uploads => {
uploads.forEach(upload => (_cache[upload.short_url] = upload.url));
urls.forEach(url => (_cache[url] = _cache[url] || "missing"));
uploads.forEach(upload =>
cacheShortUploadUrl(upload.short_url, upload.url)
);
urls.forEach(url =>
cacheShortUploadUrl(url, lookupCachedUploadUrl(url) || "missing")
);
return uploads;
});
}
@ -19,10 +23,15 @@ export function cacheShortUploadUrl(shortUrl, url) {
_cache[shortUrl] = url;
}
export function resetCache() {
_cache = {};
}
function _loadCachedShortUrls($images) {
$images.each((idx, image) => {
let $image = $(image);
let url = lookupCachedUploadUrl($image.data("orig-src"));
const $image = $(image);
const url = lookupCachedUploadUrl($image.data("orig-src"));
if (url) {
$image.removeAttr("data-orig-src");
if (url !== "missing") {
@ -34,7 +43,7 @@ function _loadCachedShortUrls($images) {
function _loadShortUrls($images, ajax) {
const urls = $images.toArray().map(img => $(img).data("orig-src"));
lookupUncachedUploadUrls(urls, ajax).then(() =>
return lookupUncachedUploadUrls(urls, ajax).then(() =>
_loadCachedShortUrls($images)
);
}
@ -48,11 +57,9 @@ export function resolveAllShortUrls(ajax) {
$shortUploadUrls = $("img[data-orig-src]");
if ($shortUploadUrls.length > 0) {
// this is carefully batched so we can do a leading debounce (trigger right away)
Ember.run.debounce(
return Ember.run.debounce(
null,
() => {
_loadShortUrls($shortUploadUrls, ajax);
},
() => _loadShortUrls($shortUploadUrls, ajax),
450,
true
);

View File

@ -0,0 +1,56 @@
import {
lookupCachedUploadUrl,
resolveAllShortUrls,
resetCache
} from "pretty-text/image-short-url";
import { ajax } from "discourse/lib/ajax";
QUnit.module("lib:pretty-text/image-short-url", {
beforeEach() {
const response = object => {
return [200, { "Content-Type": "application/json" }, object];
};
const srcs = [
{
short_url: "upload://a.jpeg",
url: "/uploads/default/original/3X/c/b/1.jpeg"
},
{
short_url: "upload://b.jpeg",
url: "/uploads/default/original/3X/c/b/2.jpeg"
}
];
// prettier-ignore
server.post("/uploads/lookup-urls", () => { //eslint-disable-line
return response(srcs);
});
fixture().html(
srcs.map(src => `<img data-orig-src="${src.url}">`).join("")
);
},
afterEach() {
resetCache();
}
});
QUnit.test("resolveAllShortUrls", async assert => {
let lookup;
lookup = lookupCachedUploadUrl("upload://a.jpeg");
assert.notOk(lookup);
await resolveAllShortUrls(ajax);
lookup = lookupCachedUploadUrl("upload://a.jpeg");
assert.equal(lookup, "/uploads/default/original/3X/c/b/1.jpeg");
lookup = lookupCachedUploadUrl("upload://b.jpeg");
assert.equal(lookup, "/uploads/default/original/3X/c/b/2.jpeg");
lookup = lookupCachedUploadUrl("upload://c.jpeg");
assert.notOk(lookup);
});