diff --git a/app/assets/javascripts/discourse/app/controllers/topic.js b/app/assets/javascripts/discourse/app/controllers/topic.js
index ab711b56a17..f2f6bc08349 100644
--- a/app/assets/javascripts/discourse/app/controllers/topic.js
+++ b/app/assets/javascripts/discourse/app/controllers/topic.js
@@ -172,11 +172,10 @@ export default Controller.extend(bufferedProperty("model"), {
_showRevision(postNumber, revision) {
const post = this.model.get("postStream").postForPostNumber(postNumber);
- if (!post) {
- return;
- }
- schedule("afterRender", () => this.send("showHistory", post, revision));
+ if (post && post.version > 1 && post.can_view_edit_history) {
+ schedule("afterRender", () => this.send("showHistory", post, revision));
+ }
},
showCategoryChooser: not("model.isPrivateMessage"),
diff --git a/app/assets/javascripts/discourse/tests/acceptance/edit-notification-click-test.js b/app/assets/javascripts/discourse/tests/acceptance/edit-notification-click-test.js
index 59be2694324..040f7aa6902 100644
--- a/app/assets/javascripts/discourse/tests/acceptance/edit-notification-click-test.js
+++ b/app/assets/javascripts/discourse/tests/acceptance/edit-notification-click-test.js
@@ -1,59 +1,129 @@
import { click, visit } from "@ember/test-helpers";
import { test } from "qunit";
+import topicFixtures from "discourse/tests/fixtures/topic";
import { acceptance, queryAll } from "discourse/tests/helpers/qunit-helpers";
+import { cloneJSON } from "discourse-common/lib/object";
-acceptance("Edit Notification Click", function (needs) {
- needs.user();
- needs.pretender((server, helper) => {
- server.get("/posts/133/revisions/1.json", () => {
- return helper.response({
- created_at: "2021-07-30T11:19:59.549Z",
- post_id: 133,
- previous_hidden: false,
- current_hidden: false,
- first_revision: 2,
- previous_revision: null,
- current_revision: 2,
- next_revision: null,
- last_revision: 2,
- current_version: 2,
- version_count: 2,
- username: "velesin",
- display_username: "velesin",
- avatar_template: "/letter_avatar_proxy/v4/letter/j/13edae/{size}.png",
- edit_reason: null,
- body_changes: {
- inline:
- '
Hello world this is a test
another edit!
',
- side_by_side:
- 'Hello world this is a test
Hello world this is a test
This is an edit!
',
- side_by_side_markdown:
- 'Hello world this is a test | Hello world this is a test\n\nThis is an edit! |
',
- },
- title_changes: null,
- user_changes: null,
- wiki: false,
- can_edit: true,
+const revisionResponse = {
+ created_at: "2021-07-30T11:19:59.549Z",
+ post_id: 133,
+ previous_hidden: false,
+ current_hidden: false,
+ first_revision: 2,
+ previous_revision: null,
+ current_revision: 2,
+ next_revision: null,
+ last_revision: 2,
+ current_version: 2,
+ version_count: 2,
+ username: "velesin",
+ display_username: "velesin",
+ avatar_template: "/letter_avatar_proxy/v4/letter/j/13edae/{size}.png",
+ edit_reason: null,
+ body_changes: {
+ inline:
+ 'Hello world this is a test
another edit!
',
+ side_by_side:
+ 'Hello world this is a test
Hello world this is a test
This is an edit!
',
+ side_by_side_markdown:
+ 'Hello world this is a test | Hello world this is a test\n\nThis is an edit! |
',
+ },
+ title_changes: null,
+ user_changes: null,
+ wiki: false,
+ can_edit: true,
+};
+acceptance(
+ "Edit Notification Click - when post revisions are present",
+ function (needs) {
+ needs.user();
+ needs.pretender((server, helper) => {
+ const topicRef = "/t/130.json";
+ const topicResponse = cloneJSON(topicFixtures[topicRef]);
+ const originalPost = topicResponse.post_stream.posts[0];
+ originalPost.version = 2;
+ server.get(topicRef, () => helper.response(topicResponse));
+
+ server.get(`/posts/${originalPost.id}/revisions/1.json`, () => {
+ return helper.response(revisionResponse);
});
});
- });
- test("history modal is shown when navigating from a non-topic page", async function (assert) {
- await visit("/");
- await click(".header-dropdown-toggle.current-user");
- await click(".notification.edited a");
- const [v1, v2] = queryAll(".history-modal .revision-content");
+ test("history modal is shown when navigating from a non-topic page", async function (assert) {
+ await visit("/");
+ await click(".header-dropdown-toggle.current-user");
+ await click(".notification.edited a");
+ const [v1, v2] = queryAll(".history-modal .revision-content");
- assert.strictEqual(
- v1.textContent.trim(),
- "Hello world this is a test",
- "history modal for the edited post is shown"
- );
+ assert.strictEqual(
+ v1.textContent.trim(),
+ "Hello world this is a test",
+ "history modal for the edited post is shown"
+ );
- assert.strictEqual(
- v2.textContent.trim(),
- "Hello world this is a testThis is an edit!",
- "history modal for the edited post is shown"
- );
- });
-});
+ assert.strictEqual(
+ v2.textContent.trim(),
+ "Hello world this is a testThis is an edit!",
+ "history modal for the edited post is shown"
+ );
+ });
+ }
+);
+
+acceptance(
+ "Edit Notification Click - when post has no revisions",
+ function (needs) {
+ needs.user();
+ needs.pretender((server, helper) => {
+ const topicRef = "/t/130.json";
+ const topicResponse = cloneJSON(topicFixtures[topicRef]);
+ const originalPost = topicResponse.post_stream.posts[0];
+ originalPost.version = 1;
+ originalPost.can_view_edit_history = true;
+ server.get(topicRef, () => helper.response(topicResponse));
+ server.get(`/posts/${originalPost.id}/revisions/1.json`, () => {
+ return helper.response(revisionResponse);
+ });
+ });
+
+ test("history modal is not shown when navigating from a non-topic page", async function (assert) {
+ await visit("/");
+ await click(".header-dropdown-toggle.current-user");
+ await click(".notification.edited a");
+ assert
+ .dom(".history-modal")
+ .doesNotExist(
+ "history modal should not open for post on its first version"
+ );
+ });
+ }
+);
+
+acceptance(
+ "Edit Notification Click - when post edit history cannot be viewed",
+ function (needs) {
+ needs.user();
+ needs.pretender((server, helper) => {
+ const topicRef = "/t/130.json";
+ const topicResponse = cloneJSON(topicFixtures[topicRef]);
+ const originalPost = topicResponse.post_stream.posts[0];
+ originalPost.version = 2;
+ originalPost.can_view_edit_history = false;
+ server.get(topicRef, () => helper.response(topicResponse));
+ server.get(`/posts/${originalPost.id}/revisions/1.json`, () => {
+ return helper.response(revisionResponse);
+ });
+ });
+
+ test("history modal is not shown when navigating from a non-topic page", async function (assert) {
+ await visit("/");
+ await click(".header-dropdown-toggle.current-user");
+ await click(".notification.edited a");
+ assert
+ .dom(".history-modal")
+ .doesNotExist(
+ "history modal should not open for post which cannot have edit history viewed"
+ );
+ });
+ }
+);