Skip to content

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

Merged
compwron merged 1 commit intorubyforgood:mainfrom
hexdevs:sb-case-contacts-6701
Mar 20, 2026
Merged

Race Condition Check: spec/system/case_contacts/#6785
compwron merged 1 commit intorubyforgood:mainfrom
hexdevs:sb-case-contacts-6701

Conversation

@stefannibrasil
Copy link
Copy Markdown
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
Copy Markdown
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
Copy link
Copy Markdown
Collaborator

@compwron compwron left a comment

Choose a reason for hiding this comment

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

nice :)

@compwron compwron merged commit 944ef60 into rubyforgood:main Mar 20, 2026
11 checks passed
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/

2 participants