2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-03-04 01:15:08 +08:00
discourse/spec/system/post_history_spec.rb
Natalie Tay dd7e91fa00
DEV: Post history spec with tags (#37012)
Backfilling tag-related tests, as part of extracting from
https://github.com/discourse/discourse/pull/36678 to make it smaller.

This test seeds with a post revision that involves tags (names) and
asserts that it can be seen. Having this test will ensure future tag
changes in this area will not cause issues in post revision histories.
2026-01-08 22:46:58 +08:00

66 lines
2.4 KiB
Ruby

# frozen_string_literal: true
describe "Post history with tag changes", type: :system do
fab!(:admin)
fab!(:tag1) { Fabricate(:tag, name: "alpha") }
fab!(:tag2) { Fabricate(:tag, name: "beta") }
fab!(:tag3) { Fabricate(:tag, name: "gamma") }
fab!(:tag4) { Fabricate(:tag, name: "delta") }
fab!(:topic) { Fabricate(:topic, user: admin, tags: [tag2, tag3]) }
fab!(:post) { Fabricate(:post, topic:, user: admin, version: 2) }
let(:topic_page) { PageObjects::Pages::Topic.new }
let(:post_history_modal) { PageObjects::Modals::PostHistory.new }
let(:mini_tag_chooser) { PageObjects::Components::SelectKit.new(".mini-tag-chooser") }
before do
SiteSetting.tagging_enabled = true
SiteSetting.tag_topic_allowed_groups = Group::AUTO_GROUPS[:trust_level_0]
SiteSetting.editing_grace_period = 0
# a 'legacy' revision with string-array format for tags
Fabricate(
:post_revision,
post: post,
user: admin,
number: 2,
modifications: {
"tags" => [[tag1.name], [tag2.name, tag3.name]],
},
)
end
it "shows tag changes from legacy format and new edits" do
sign_in(admin)
topic_page.visit_topic(topic)
expect(page).to have_css(".post-info.edits")
find(".post-info.edits").click
expect(post_history_modal).to have_tag_changes
expect(post_history_modal.deleted_tags).to contain_exactly(tag1.name)
expect(post_history_modal.inserted_tags).to contain_exactly(tag2.name, tag3.name)
post_history_modal.close
# make a new edit: remove beta, add delta
topic_page.click_topic_edit_title
mini_tag_chooser.expand
mini_tag_chooser.select_row_by_name(tag4.name)
mini_tag_chooser.unselect_by_name(tag2.name)
topic_page.click_topic_title_submit_edit
expect(topic_page.topic_tags).to contain_exactly(tag3.name, tag4.name)
expect(page).to have_css(".post-info.edits")
find(".post-info.edits").click
# verify new revision shows correctly (beta, gamma -> gamma, delta)
expect(post_history_modal).to have_tag_changes
expect(post_history_modal.deleted_tags).to contain_exactly(tag2.name)
expect(post_history_modal.inserted_tags).to contain_exactly(tag4.name)
# verify legacy format
post_history_modal.click_previous_revision
expect(post_history_modal.deleted_tags).to contain_exactly(tag1.name)
expect(post_history_modal.inserted_tags).to contain_exactly(tag2.name, tag3.name)
end
end