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 testHello 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 testHello 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" + ); + }); + } +);