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