mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-23 11:23:27 +08:00
This commit is replacing the system specs driver (selenium) by Playwright: https://playwright.dev/ We are still using Capybara to write the specs but they will now be run by Playwright. To achieve this we are using the non official ruby driver: https://github.com/YusukeIwaki/capybara-playwright-driver ### Notable changes - `CHROME_DEV_TOOLS` has been removed, it's not working well with playwright use `pause_test` and inspect browser for now. - `fill_in` is not generating key events in playwright, use `send_keys` if you need this. ### New spec options #### trace Allows to capture a trace in a zip file which you can load at https://trace.playwright.dev or locally through `npx playwright show-trace /path/to/trace.zip` _Example usage:_ ```ruby it "shows bar", trace: true do visit("/") find(".foo").click expect(page).to have_css(".bar") end ``` #### video Allows to capture a video of your spec. _Example usage:_ ```ruby it "shows bar", video: true do visit("/") find(".foo").click expect(page).to have_css(".bar") end ``` ### New env variable #### PLAYWRIGHT_SLOW_MO_MS Allow to force playwright to wait DURATION (in ms) at each action. _Example usage:_ ``` PLAYWRIGHT_SLOW_MO_MS=1000 rspec foo_spec.rb ``` #### PLAYWRIGHT_HEADLESS Allow to be in headless mode or not. Default will be headless. _Example usage:_ ``` PLAYWRIGHT_HEADLESS=0 rspec foo_spec.rb # will show the browser ``` ### New helpers #### with_logs Allows to access the browser logs and check if something specific has been logged. _Example usage:_ ```ruby with_logs do |logger| # do something expect(logger.logs.map { |log| log[:message] }).to include("foo") end ``` #### add_cookie Allows to add a cookie on the browser session. _Example usage:_ ```ruby add_cookie(name: "destination_url", value: "/new") ``` #### get_style Get the property style value of an element. _Example usage:_ ```ruby expect(get_style(find(".foo"), "height")).to eq("200px") ``` #### get_rgb_color Get the rgb color of an element. _Example usage:_ ```ruby expect(get_rgb_color(find("html"), "backgroundColor")).to eq("rgb(170, 51, 159)") ```
83 lines
2.4 KiB
Ruby
Vendored
83 lines
2.4 KiB
Ruby
Vendored
# frozen_string_literal: true
|
|
|
|
RSpec.describe "Admin Chat CSV exports", type: :system do
|
|
let(:dialog) { PageObjects::Components::Dialog.new }
|
|
let(:csv_export_pm_page) { PageObjects::Pages::CSVExportPM.new }
|
|
fab!(:current_user) { Fabricate(:admin) }
|
|
|
|
before do
|
|
Jobs.run_immediately!
|
|
sign_in(current_user)
|
|
chat_system_bootstrap
|
|
end
|
|
|
|
it "exports chat messages" do
|
|
orignal_save_path = Capybara.save_path
|
|
Capybara.save_path = Downloads::FOLDER
|
|
|
|
Jobs.run_immediately!
|
|
message_1 = Fabricate(:chat_message, created_at: 12.months.ago)
|
|
message_2 = Fabricate(:chat_message, created_at: 6.months.ago)
|
|
message_3 = Fabricate(:chat_message, created_at: 1.months.ago)
|
|
message_4 = Fabricate(:chat_message, created_at: Time.now)
|
|
|
|
visit "/admin/plugins/chat"
|
|
click_button I18n.t("js.chat.admin.export_messages.create_export")
|
|
dialog.click_yes
|
|
|
|
visit "/u/#{current_user.username}/messages"
|
|
click_link I18n.t(
|
|
"system_messages.csv_export_succeeded.subject_template",
|
|
export_title: "Chat Message",
|
|
)
|
|
expect(csv_export_pm_page).to have_download_link
|
|
exported_data = csv_export_pm_page.download_and_extract
|
|
|
|
expect(exported_data.first).to eq(
|
|
%w[
|
|
id
|
|
chat_channel_id
|
|
chat_channel_name
|
|
user_id
|
|
username
|
|
message
|
|
cooked
|
|
created_at
|
|
updated_at
|
|
deleted_at
|
|
in_reply_to_id
|
|
last_editor_id
|
|
last_editor_username
|
|
],
|
|
)
|
|
|
|
assert_message(exported_data.second, message_1)
|
|
assert_message(exported_data.third, message_2)
|
|
assert_message(exported_data.fourth, message_3)
|
|
assert_message(exported_data.fifth, message_4)
|
|
ensure
|
|
Capybara.save_path = orignal_save_path
|
|
csv_export_pm_page.clear_downloads
|
|
end
|
|
|
|
def assert_message(exported_message, message)
|
|
time_format = "%Y-%m-%d %H:%M:%S UTC"
|
|
expect(exported_message).to eq(
|
|
[
|
|
message.id.to_s,
|
|
message.chat_channel.id.to_s,
|
|
message.chat_channel.name,
|
|
message.user.id.to_s,
|
|
message.user.username,
|
|
message.message,
|
|
message.cooked,
|
|
message.created_at.strftime(time_format),
|
|
message.updated_at.strftime(time_format),
|
|
nil,
|
|
nil,
|
|
message.last_editor.id.to_s,
|
|
message.last_editor.username,
|
|
],
|
|
)
|
|
end
|
|
end
|