mirror of
https://github.com/discourse/discourse.git
synced 2024-12-30 07:03:47 +08:00
7ab7e6bb23
Previous to this change there is no clean way to apply keyboard shortcuts to things such as "add poll" and other hidden options in the toolbar This allows shortcuts to be specified similar to how they are on the toolbar Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
185 lines
6.5 KiB
Ruby
185 lines
6.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe "Table Builder", type: :system do
|
|
fab!(:user) { Fabricate(:user, refresh_auto_groups: true) }
|
|
let(:composer) { PageObjects::Components::Composer.new }
|
|
let(:insert_table_modal) { PageObjects::Modals::InsertTable.new }
|
|
fab!(:topic) { Fabricate(:topic, user: user) }
|
|
fab!(:topic2) { Fabricate(:topic, user: user) }
|
|
fab!(:post1) { create_post(user: user, topic: topic, raw: <<~RAW) }
|
|
|Make | Model | Year|
|
|
|--- | --- | ---|
|
|
|Toyota | Supra | 1998|
|
|
|Nissan | Skyline | 1999|
|
|
|Honda | S2000 | 2001|
|
|
RAW
|
|
fab!(:post2) { create_post(user: user, topic: topic2, raw: <<~RAW) }
|
|
| | | |
|
|
|--- | --- | ---|
|
|
|Some | content | here|
|
|
|1 | 2 | 3|
|
|
RAW
|
|
|
|
let(:topic_page) { PageObjects::Pages::Topic.new }
|
|
|
|
before { sign_in(user) }
|
|
|
|
def normalize_value(content)
|
|
content.strip.gsub(/\s+/, " ").gsub(/\r\n/, "\n")
|
|
end
|
|
|
|
context "when creating a new table" do
|
|
it "should add table items created in spreadsheet to composer input" do
|
|
visit("/latest")
|
|
page.find("#create-topic").click
|
|
page.find(".toolbar-popup-menu-options").click
|
|
page.find(".select-kit-row[data-name='toggle-spreadsheet']").click
|
|
insert_table_modal.type_in_cell(0, 0, "Item 1")
|
|
insert_table_modal.type_in_cell(0, 1, "Item 2")
|
|
insert_table_modal.type_in_cell(0, 2, "Item 3")
|
|
insert_table_modal.type_in_cell(0, 3, "Item 4")
|
|
insert_table_modal.click_insert_table
|
|
|
|
created_table = <<~TABLE
|
|
|Column 1 | Column 2 | Column 3 | Column 4|
|
|
|--- | --- | --- | ---|
|
|
|Item 1 | Item 2 | Item 3 | Item 4|
|
|
| | | | |
|
|
| | | | |
|
|
| | | | |
|
|
| | | | |
|
|
| | | | |
|
|
TABLE
|
|
|
|
expect(normalize_value(composer.composer_input.value)).to eq(normalize_value(created_table))
|
|
end
|
|
|
|
context "when cancelling table creation" do
|
|
it "should close the modal if there are no changes made" do
|
|
visit("/latest")
|
|
page.find("#create-topic").click
|
|
page.find(".toolbar-popup-menu-options").click
|
|
page.find(".select-kit-row[data-name='toggle-spreadsheet']").click
|
|
insert_table_modal.cancel
|
|
expect(page).to have_no_css(".insert-table-modal")
|
|
end
|
|
|
|
it "should show a warning popup if there are unsaved changes" do
|
|
visit("/latest")
|
|
page.find("#create-topic").click
|
|
page.find(".toolbar-popup-menu-options").click
|
|
page.find(".select-kit-row[data-name='toggle-spreadsheet']").click
|
|
insert_table_modal.type_in_cell(0, 0, "Item 1")
|
|
insert_table_modal.cancel
|
|
expect(page).to have_css(".dialog-container .dialog-content")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when editing a table" do
|
|
it "should prefill the spreadsheet with the markdown table items from the post" do
|
|
topic_page.visit_topic(topic)
|
|
topic_page.find(".btn-edit-table", visible: :all).click
|
|
expect(page).to have_selector(".insert-table-modal")
|
|
|
|
expected_table_content = [
|
|
%w[Toyota Supra 1998],
|
|
%w[Nissan Skyline 1999],
|
|
%w[Honda S2000 2001],
|
|
]
|
|
|
|
expected_table_content.each_with_index do |row, row_index|
|
|
row.each_with_index do |content, col_index|
|
|
expect(insert_table_modal).to have_content_in_cell(row_index, col_index, content)
|
|
end
|
|
end
|
|
end
|
|
|
|
it "should update the post with the new table content" do
|
|
topic_page.visit_topic(topic)
|
|
topic_page.find(".btn-edit-table", visible: :all).click
|
|
expect(page).to have_selector(".insert-table-modal")
|
|
insert_table_modal.type_in_cell(1, 1, " GTR")
|
|
insert_table_modal.click_insert_table
|
|
|
|
updated_post = <<~RAW
|
|
|Make | Model | Year|
|
|
|--- | --- | ---|
|
|
|Toyota | Supra | 1998|
|
|
|Nissan | Skyline GTR | 1999|
|
|
|Honda | S2000 | 2001|
|
|
RAW
|
|
|
|
try_until_success do
|
|
expect(normalize_value(post1.reload.raw)).to eq(normalize_value(updated_post))
|
|
end
|
|
end
|
|
|
|
it "should respect the original empty header" do
|
|
topic_page.visit_topic(topic2)
|
|
topic_page.find(".btn-edit-table", visible: :all).click
|
|
expect(page).to have_selector(".insert-table-modal")
|
|
insert_table_modal.type_in_cell(0, 0, " updated")
|
|
insert_table_modal.click_insert_table
|
|
|
|
updated_post = <<~RAW
|
|
| | | |
|
|
|--- | --- | ---|
|
|
|Some updated | content | here|
|
|
|1 | 2 | 3|
|
|
RAW
|
|
|
|
try_until_success do
|
|
expect(normalize_value(post2.reload.raw)).to eq(normalize_value(updated_post))
|
|
end
|
|
end
|
|
|
|
context "when adding an edit reason" do
|
|
it "should add the edit reason to the edit history" do
|
|
edit_reason = "Updated Nissan model"
|
|
|
|
topic_page.visit_topic(topic)
|
|
topic_page.find(".btn-edit-table", visible: :all).click
|
|
expect(page).to have_selector(".insert-table-modal")
|
|
insert_table_modal.type_in_cell(1, 1, " GTR")
|
|
insert_table_modal.click_edit_reason
|
|
insert_table_modal.type_edit_reason(edit_reason)
|
|
insert_table_modal.click_insert_table
|
|
wait_for { post1.reload.edit_reason == edit_reason }
|
|
expect(post1.reload.edit_reason).to eq(edit_reason)
|
|
end
|
|
end
|
|
|
|
context "when cancelling table creation" do
|
|
it "should close the modal if there are no changes made" do
|
|
topic_page.visit_topic(topic)
|
|
topic_page.find(".btn-edit-table", visible: :all).click
|
|
expect(page).to have_selector(".insert-table-modal")
|
|
insert_table_modal.cancel
|
|
expect(page).to have_no_css(".insert-table-modal")
|
|
end
|
|
|
|
it "should show a warning popup if there are unsaved changes" do
|
|
topic_page.visit_topic(topic)
|
|
topic_page.find(".btn-edit-table", visible: :all).click
|
|
expect(page).to have_selector(".insert-table-modal")
|
|
insert_table_modal.type_in_cell(1, 1, " GTR")
|
|
insert_table_modal.cancel
|
|
expect(page).to have_css(".dialog-container .dialog-content")
|
|
end
|
|
end
|
|
|
|
it "should not accept default Discourse keyboard shortcuts" do
|
|
# Some default keyboard shortcuts like Shift + S bring up a modal overriding
|
|
# the table builder modal and therefore should not be accepted
|
|
|
|
topic_page.visit_topic(topic)
|
|
topic_page.find(".btn-edit-table", visible: :all).click
|
|
insert_table_modal.find_cell(0, 0)
|
|
insert_table_modal.send_keys(:shift, "s")
|
|
expect(page).to have_css(".insert-table-modal")
|
|
expect(page).to have_no_css(".share-topic-modal")
|
|
end
|
|
end
|
|
end
|