FIX: Short URL resolution in cook-text (#10200)

FIX: Short URL resolution in cook-text (#10200)

Regressed in 3b51e05de2aeb0cff547befcfde442f5ceeb329d. Thanks to @romanrizzi for reporting!

diff --git a/app/assets/javascripts/discourse/app/components/cook-text.js b/app/assets/javascripts/discourse/app/components/cook-text.js
index be89fc8..27441d8 100644
--- a/app/assets/javascripts/discourse/app/components/cook-text.js
+++ b/app/assets/javascripts/discourse/app/components/cook-text.js
@@ -2,6 +2,7 @@ import Component from "@ember/component";
 import { cookAsync } from "discourse/lib/text";
 import { ajax } from "discourse/lib/ajax";
 import { resolveAllShortUrls } from "pretty-text/upload-short-url";
+import { afterRender } from "discourse-common/utils/decorators";
 
 const CookText = Component.extend({
   cooked: null,
@@ -10,11 +11,13 @@ const CookText = Component.extend({
     this._super(...arguments);
     cookAsync(this.rawText).then(cooked => {
       this.set("cooked", cooked);
-
-      if (this.element && !this.isDestroying && !this.isDestroyed) {
-        return resolveAllShortUrls(ajax, this.siteSettings, this.element);
-      }
+      this._resolveUrls();
     });
+  },
+
+  @afterRender
+  _resolveUrls() {
+    resolveAllShortUrls(ajax, this.siteSettings, this.element);
   }
 });
 
diff --git a/test/javascripts/components/cook-text-test.js b/test/javascripts/components/cook-text-test.js
new file mode 100644
index 0000000..b11019a
--- /dev/null
+++ b/test/javascripts/components/cook-text-test.js
@@ -0,0 +1,46 @@
+import componentTest from "helpers/component-test";
+import pretender from "helpers/create-pretender";
+import { resetCache } from "pretty-text/upload-short-url";
+
+moduleForComponent("cook-text", { integration: true });
+
+componentTest("renders markdown", {
+  template: '{{cook-text "_foo_" class="post-body"}}',
+
+  test(assert) {
+    const html = find(".post-body")[0].innerHTML.trim();
+    assert.equal(html, "<p><em>foo</em></p>");
+  }
+});
+
+componentTest("resolves short URLs", {
+  template: `{{cook-text "![an image](upload://a.png)" class="post-body"}}`,
+
+  beforeEach() {
+    pretender.post("/uploads/lookup-urls", () => {
+      return [
+        200,
+        { "Content-Type": "application/json" },
+        [
+          {
+            short_url: "upload://a.png",
+            url: "/uploads/default/original/3X/c/b/1.png",
+            short_path: "/uploads/short-url/a.png"
+          }
+        ]
+      ];
+    });
+  },
+
+  afterEach() {
+    resetCache();
+  },
+
+  test(assert) {
+    const html = find(".post-body")[0].innerHTML.trim();
+    assert.equal(
+      html,
+      '<p><img src="/uploads/default/original/3X/c/b/1.png" alt="an image"></p>'
+    );
+  }
+});

GitHub sha: 32ee9fae

1 Like

This commit appears in #10200 which was merged by CvX.

This commit has been mentioned on Discourse Meta. There might be relevant details there:

https://meta.discourse.org/t/404-link-to-files-in-the-moderation-review-queue/157596/3