import { lookupCachedUploadUrl, resolveAllShortUrls, resetCache } from "pretty-text/upload-short-url"; import { ajax } from "discourse/lib/ajax"; import { fixture } from "helpers/qunit-helpers"; import pretender from "helpers/create-pretender"; function stubUrls(imageSrcs, attachmentSrcs, otherMediaSrcs) { const response = object => { return [200, { "Content-Type": "application/json" }, object]; }; if (!imageSrcs) { imageSrcs = [ { short_url: "upload://a.jpeg", url: "/images/avatar.png?a", short_path: "/uploads/short-url/a.jpeg" }, { short_url: "upload://b.jpeg", url: "/images/avatar.png?b", short_path: "/uploads/short-url/b.jpeg" }, { short_url: "upload://z.jpeg", url: "/images/avatar.png?z", short_path: "/uploads/short-url/z.jpeg" } ]; } if (!attachmentSrcs) { attachmentSrcs = [ { short_url: "upload://c.pdf", url: "/uploads/default/original/3X/c/b/3.pdf", short_path: "/uploads/short-url/c.pdf" } ]; } if (!otherMediaSrcs) { otherMediaSrcs = [ { short_url: "upload://d.mp4", url: "/uploads/default/original/3X/c/b/4.mp4", short_path: "/uploads/short-url/d.mp4" }, { short_url: "upload://e.mp3", url: "/uploads/default/original/3X/c/b/5.mp3", short_path: "/uploads/short-url/e.mp3" }, { short_url: "upload://f.mp4", url: "http://localhost:3000/uploads/default/original/3X/c/b/6.mp4", short_path: "/uploads/short-url/f.mp4" } ]; } // prettier-ignore pretender.post("/uploads/lookup-urls", () => { //eslint-disable-line return response(imageSrcs.concat(attachmentSrcs.concat(otherMediaSrcs))); }); fixture().html( imageSrcs.map(src => ``).join("") + attachmentSrcs .map( src => `big enterprise contract.pdf` ) .join("") + `
` + otherMediaSrcs .map(src => { if (src.short_url.indexOf("mp3") > -1) { return ``; } else { return ``; } }) .join("") ); } QUnit.module("lib:pretty-text/upload-short-url", { afterEach() { resetCache(); } }); QUnit.test("resolveAllShortUrls", async assert => { stubUrls(); let lookup; lookup = lookupCachedUploadUrl("upload://a.jpeg"); assert.deepEqual(lookup, {}); await resolveAllShortUrls(ajax, { secure_media: false }, fixture()[0]); lookup = lookupCachedUploadUrl("upload://a.jpeg"); assert.deepEqual(lookup, { url: "/images/avatar.png?a", short_path: "/uploads/short-url/a.jpeg" }); lookup = lookupCachedUploadUrl("upload://b.jpeg"); assert.deepEqual(lookup, { url: "/images/avatar.png?b", short_path: "/uploads/short-url/b.jpeg" }); lookup = lookupCachedUploadUrl("upload://c.jpeg"); assert.deepEqual(lookup, {}); lookup = lookupCachedUploadUrl("upload://c.pdf"); assert.deepEqual(lookup, { url: "/uploads/default/original/3X/c/b/3.pdf", short_path: "/uploads/short-url/c.pdf" }); lookup = lookupCachedUploadUrl("upload://d.mp4"); assert.deepEqual(lookup, { url: "/uploads/default/original/3X/c/b/4.mp4", short_path: "/uploads/short-url/d.mp4" }); lookup = lookupCachedUploadUrl("upload://e.mp3"); assert.deepEqual(lookup, { url: "/uploads/default/original/3X/c/b/5.mp3", short_path: "/uploads/short-url/e.mp3" }); lookup = lookupCachedUploadUrl("upload://f.mp4"); assert.deepEqual(lookup, { url: "http://localhost:3000/uploads/default/original/3X/c/b/6.mp4", short_path: "/uploads/short-url/f.mp4" }); }); QUnit.test( "resolveAllShortUrls - href + src replaced correctly", async assert => { stubUrls(); await resolveAllShortUrls(ajax, { secure_media: false }, fixture()[0]); let image1 = fixture() .find("img") .eq(0); let image2 = fixture() .find("img") .eq(1); let link = fixture().find("a"); let audio = fixture() .find("audio") .eq(0); let video = fixture() .find("video") .eq(0); assert.equal(image1.attr("src"), "/images/avatar.png?a"); assert.equal(image2.attr("src"), "/images/avatar.png?b"); assert.equal(link.attr("href"), "/uploads/short-url/c.pdf"); assert.equal( video.find("source").attr("src"), "/uploads/default/original/3X/c/b/4.mp4" ); assert.equal( audio.find("source").attr("src"), "/uploads/default/original/3X/c/b/5.mp3" ); } ); QUnit.test( "resolveAllShortUrls - url with full origin replaced correctly", async assert => { stubUrls(); await resolveAllShortUrls(ajax, { secure_media: false }, fixture()[0]); let video = fixture() .find("video") .eq(1); assert.equal( video.find("source").attr("src"), "http://localhost:3000/uploads/default/original/3X/c/b/6.mp4" ); } ); QUnit.test( "resolveAllShortUrls - when secure media is enabled use the attachment full URL", async assert => { stubUrls( null, [ { short_url: "upload://c.pdf", url: "/secure-media-uploads/default/original/3X/c/b/3.pdf", short_path: "/uploads/short-url/c.pdf" } ], null ); await resolveAllShortUrls(ajax, { secure_media: true }, fixture()[0]); let link = fixture().find("a"); assert.equal( link.attr("href"), "/secure-media-uploads/default/original/3X/c/b/3.pdf" ); } ); QUnit.test("resolveAllShortUrls - scoped", async assert => { stubUrls(); let lookup; let scopedElement = fixture()[0].querySelector(".scoped-area"); await resolveAllShortUrls(ajax, {}, scopedElement); lookup = lookupCachedUploadUrl("upload://z.jpeg"); assert.deepEqual(lookup, { url: "/images/avatar.png?z", short_path: "/uploads/short-url/z.jpeg" }); // do this because the pretender caches ALL the urls, not // just the ones being looked up (like the normal behaviour) resetCache(); await resolveAllShortUrls(ajax, {}, scopedElement); lookup = lookupCachedUploadUrl("upload://a.jpeg"); assert.deepEqual(lookup, {}); });