mirror of
https://github.com/discourse/discourse.git
synced 2024-11-26 12:23:37 +08:00
7c12b75a5c
There's currently a race condition in the following spec:
65be7a7880/spec/system/admin_about_config_area_spec.rb (L70-L95)
where the form can be saved before the image uploader field has finished uploading the selected image and causing the assertion at line 94 to fail with the following error:
```
Failure/Error: expect(SiteSetting.about_banner_image.sha1).to eq(Upload.generate_digest(image_file))
NoMethodError:
undefined method `sha1' for nil
[Screenshot Image]: /__w/discourse/discourse/tmp/capybara/failures_r_spec_example_groups_admin_about_config_area_page_the_general_settings_card_can_saves_its_fields_to_their_corresponding_site_settings_312.png
~~~~~~~ JS LOGS ~~~~~~~
http://localhost:31338/assets/vendor.js 15902:14 "WARNING: uppy needs a unique id, pass one in to the component implementing this mixin"
~~~~~ END JS LOGS ~~~~~
./spec/system/admin_about_config_area_spec.rb:94:in `block (3 levels) in <main>'
./spec/rails_helper.rb:552:in `block (3 levels) in <top (required)>'
./spec/rails_helper.rb:552:in `block (2 levels) in <top (required)>'
./spec/rails_helper.rb:513:in `block (3 levels) in <top (required)>'
./spec/rails_helper.rb:503:in `block (2 levels) in <top (required)>'
./spec/rails_helper.rb:460:in `block (2 levels) in <top (required)>'
./vendor/bundle/ruby/3.3.0/gems/webmock-3.23.1/lib/webmock/rspec.rb:39:in `block (2 levels) in <top (required)>'
```
This PR fixes the problem by making the system test wait for the image to finish uploading (with 10 seconds timeout) before carrying out the rest of the system test.
152 lines
6.2 KiB
Ruby
152 lines
6.2 KiB
Ruby
# frozen_string_literal: true
|
||
|
||
describe "Admin About Config Area Page", type: :system do
|
||
fab!(:admin)
|
||
fab!(:image_upload)
|
||
|
||
let(:config_area) { PageObjects::Pages::AdminAboutConfigArea.new }
|
||
|
||
before { sign_in(admin) }
|
||
|
||
context "when all fields have existing values" do
|
||
before do
|
||
SiteSetting.title = "my forums title"
|
||
SiteSetting.site_description = "this is a description for my forums"
|
||
SiteSetting.about_banner_image = image_upload
|
||
SiteSetting.extended_site_description = "this is an extended description for my forums"
|
||
|
||
SiteSetting.community_owner = "kitty"
|
||
SiteSetting.contact_email = "kitty@litterbox.com"
|
||
SiteSetting.contact_url = "https://hello.com"
|
||
SiteSetting.site_contact_username = admin.username
|
||
SiteSetting.site_contact_group_name = admin.groups.first.name
|
||
|
||
SiteSetting.company_name = "kitty company inc."
|
||
SiteSetting.governing_law = "kitty jurisdiction"
|
||
SiteSetting.city_for_disputes = "no disputes allowed"
|
||
end
|
||
|
||
it "populates all input fields correctly" do
|
||
config_area.visit
|
||
|
||
expect(config_area.general_settings_section.community_name_input.value).to eq(
|
||
"my forums title",
|
||
)
|
||
expect(config_area.general_settings_section.community_summary_input.value).to eq(
|
||
"this is a description for my forums",
|
||
)
|
||
expect(config_area.general_settings_section.community_description_editor.value).to eq(
|
||
"this is an extended description for my forums",
|
||
)
|
||
expect(config_area.general_settings_section.banner_image_uploader).to have_uploaded_image
|
||
|
||
expect(config_area.contact_information_section.community_owner_input.value).to eq("kitty")
|
||
expect(config_area.contact_information_section.contact_email_input.value).to eq(
|
||
"kitty@litterbox.com",
|
||
)
|
||
expect(config_area.contact_information_section.contact_url_input.value).to eq(
|
||
"https://hello.com",
|
||
)
|
||
expect(
|
||
config_area.contact_information_section.site_contact_user_selector,
|
||
).to have_selected_value(admin.username)
|
||
expect(
|
||
config_area.contact_information_section.site_contact_group_selector,
|
||
).to have_selected_value(admin.groups.first.id)
|
||
|
||
expect(config_area.your_organization_section.company_name_input.value).to eq(
|
||
"kitty company inc.",
|
||
)
|
||
expect(config_area.your_organization_section.governing_law_input.value).to eq(
|
||
"kitty jurisdiction",
|
||
)
|
||
expect(config_area.your_organization_section.city_for_disputes_input.value).to eq(
|
||
"no disputes allowed",
|
||
)
|
||
end
|
||
end
|
||
|
||
describe "the general settings card" do
|
||
it "can saves its fields to their corresponding site settings" do
|
||
config_area.visit
|
||
|
||
image_file = file_from_fixtures("logo.png", "images")
|
||
config_area.general_settings_section.community_name_input.fill_in(with: "my community name")
|
||
config_area.general_settings_section.community_summary_input.fill_in(
|
||
with: "here's a bit of a summary",
|
||
)
|
||
config_area.general_settings_section.community_description_editor.fill_in(
|
||
with: "here's an extended description for the **community**",
|
||
)
|
||
config_area.general_settings_section.banner_image_uploader.select_image(image_file.path)
|
||
expect(config_area.general_settings_section.banner_image_uploader).to have_uploaded_image
|
||
|
||
config_area.general_settings_section.save_button.click
|
||
expect(config_area.general_settings_section).to have_saved_successfully
|
||
|
||
expect(SiteSetting.title).to eq("my community name")
|
||
expect(SiteSetting.site_description).to eq("here's a bit of a summary")
|
||
expect(SiteSetting.extended_site_description).to eq(
|
||
"here's an extended description for the **community**",
|
||
)
|
||
expect(SiteSetting.extended_site_description_cooked).to eq(
|
||
"<p>here’s an extended description for the <strong>community</strong></p>",
|
||
)
|
||
expect(SiteSetting.about_banner_image.sha1).to eq(Upload.generate_digest(image_file))
|
||
end
|
||
end
|
||
|
||
describe "the contact information card" do
|
||
it "can saves its fields to their corresponding site settings" do
|
||
config_area.visit
|
||
|
||
config_area.contact_information_section.community_owner_input.fill_in(with: "awesome owner")
|
||
config_area.contact_information_section.contact_email_input.fill_in(
|
||
with: "owneremail@owner.com",
|
||
)
|
||
config_area.contact_information_section.contact_url_input.fill_in(
|
||
with: "https://website.owner.com/blah",
|
||
)
|
||
|
||
user_select_kit = config_area.contact_information_section.site_contact_user_selector
|
||
user_select_kit.expand
|
||
user_select_kit.search(admin.username)
|
||
user_select_kit.select_row_by_value(admin.username)
|
||
user_select_kit.collapse
|
||
|
||
group_select_kit = config_area.contact_information_section.site_contact_group_selector
|
||
group = admin.groups.first
|
||
group_select_kit.expand
|
||
group_select_kit.search(group.name)
|
||
group_select_kit.select_row_by_value(group.id)
|
||
group_select_kit.collapse
|
||
|
||
config_area.contact_information_section.save_button.click
|
||
expect(config_area.contact_information_section).to have_saved_successfully
|
||
|
||
expect(SiteSetting.community_owner).to eq("awesome owner")
|
||
expect(SiteSetting.contact_email).to eq("owneremail@owner.com")
|
||
expect(SiteSetting.contact_url).to eq("https://website.owner.com/blah")
|
||
expect(SiteSetting.site_contact_username).to eq(admin.username)
|
||
expect(SiteSetting.site_contact_group_name).to eq(group.name)
|
||
end
|
||
end
|
||
|
||
describe "the your organization card" do
|
||
it "can saves its fields to their corresponding site settings" do
|
||
config_area.visit
|
||
|
||
config_area.your_organization_section.company_name_input.fill_in(with: "lil' company")
|
||
config_area.your_organization_section.governing_law_input.fill_in(with: "wild west law")
|
||
config_area.your_organization_section.city_for_disputes_input.fill_in(with: "teeb el shouq")
|
||
|
||
config_area.your_organization_section.save_button.click
|
||
expect(config_area.your_organization_section).to have_saved_successfully
|
||
|
||
expect(SiteSetting.company_name).to eq("lil' company")
|
||
expect(SiteSetting.governing_law).to eq("wild west law")
|
||
expect(SiteSetting.city_for_disputes).to eq("teeb el shouq")
|
||
end
|
||
end
|
||
end
|