Skip to content

Race Condition Check: spec/system/case_contacts/#6785

Open
stefannibrasil wants to merge 1 commit intorubyforgood:mainfrom
hexdevs:sb-case-contacts-6701
Open

Race Condition Check: spec/system/case_contacts/#6785
stefannibrasil wants to merge 1 commit intorubyforgood:mainfrom
hexdevs:sb-case-contacts-6701

Conversation

@stefannibrasil
Copy link
Contributor

What github issue is this PR for, if any?

Resolves #6701

What changed, and why?

When github's free CI servers are under heavy load, a race condition between the page loading and checking the database causes tests to flake. This is caused by a system test inputting data into a form then immediately checking the database without waiting for the form to finish submitting.

For every database check in the system files, this ensures it's preceded by a capybara matcher with automatic waiting, such as checking for assertions after the page loads before checking for DB values, or replaced the database
check with a check for something to appear on the page.

I also took the opportunity to refactor some small things to save up test setup time:

  • build factories instead of creating as much as possible
  • require :js only when necessary
  • remove unused variables and factories
  • keep necessary factories close to where they are used to avoid creating extra factories when not needed
  • updates Date string to Date objects (these were flaky locally) - similar to Replace date string with Date object #6764

@github-actions github-actions bot added ruby Pull requests that update Ruby code Tests! 🎉💖👏 labels Mar 18, 2026
let!(:case_assignment) { create(:case_assignment, volunteer: volunteer, casa_case: casa_case) }

context "without filter" do
let(:case_contacts) do
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of creating 4 factories for all scenarios, only create the necessary ones for each scenario.

Resolves rubyforgood#6701

When github's free CI servers are under heavy load, a race condition
between the page loading and checking the database causes tests to flake.
This is caused by a system test inputting data into a form then
immediately checking the database without waiting for the form to finish submitting.

For every database check in the system files, this ensures it's preceded
by a capybara matcher with automatic waiting, such as
checking for assertions after the page loads before
checking for DB values, or replaced the database
check with a check for something to appear on the page.

I also took the opportunity to refactor some small things to save
up test setup time:

- build factories instead of creating as much as possible
- require `:js` only when necessary
- remove unused variables and factories
- keep necessary factories close to where they are used to avoid
  creating extra factories when not needed
- update Date string to Date objects (these were flaky locally),
  similar to rubyforgood#6764
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ruby Pull requests that update Ruby code Tests! 🎉💖👏

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Race Condition Check: spec/system/case_contacts/

1 participant