Fix test failures on Ubuntu and other platforms (issue #486)

Fixes test suite to run cleanly across different platforms (macOS, Linux, Windows)
after the Rails 5→8 upgrade and UI/UX overhaul.

## Issues Fixed

1. **Firefox/Selenium driver errors**: Removed deprecated Poltergeist/PhantomJS
   configuration and properly configured Selenium with headless Chrome. This
   works across all platforms without requiring Firefox.

2. **CSS selector errors** ('Unable to find css ".signup"'): The UI/UX overhaul
   removed the .signup CSS class. Updated the login helper to work with the
   new login form structure.

3. **Ambiguous Login button**: The new UI has both a Login button and Login link.
   Changed from `click_on "Login"` to `click_button "Login"` to be specific.

4. **Deprecation warning**: Opted into Rails 8.1 behavior for to_time timezone
   preservation to eliminate deprecation warnings.

## Changes

- spec/support/capybara_shared.rb:
  * Removed deprecated Poltergeist/PhantomJS configuration
  * Configured Selenium with headless Chrome
  * Updated login helper to work with new UI (removed .signup/.actions selectors)
  * Changed click_on to click_button for specificity

- spec/spec_helper.rb:
  * Removed conflicting Capybara.javascript_driver override that was forcing
    selenium_headless (which tried to use Firefox)

- config/application.rb:
  * Added config.active_support.to_time_preserves_timezone = :zone to opt into
    Rails 8.1 behavior and eliminate deprecation warning

## Test Results

Before: 43 failures (driver errors, CSS selector errors)
After: 46 examples, 0 failures, 14 pending 

The 14 pending specs are expected - they verify vulnerabilities still exist.

## Platform Requirements

JavaScript tests now require Chrome/Chromium to be installed:
- macOS: Chrome is usually installed
- Ubuntu: `sudo apt-get install chromium-browser chromium-chromedriver`
- Windows: Chrome is usually installed

Fixes #486

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ken Johnson
2026-01-04 11:09:14 -05:00
parent 716fe29015
commit 7712f5867f
3 changed files with 19 additions and 57 deletions
+14 -56
View File
@@ -37,64 +37,22 @@ end
def login(user)
visit "/"
within(".signup") do
fill_in "email", with: user.email
fill_in "password", with: user.clear_password
end
within(".actions") do
click_on "Login"
end
fill_in "email", with: user.email
fill_in "password", with: user.clear_password
click_button "Login"
end
##Hack to fix PhantomJS errors on Mavericks - https://gist.github.com/ericboehs/7125105
module Capybara::Poltergeist
class Client
private
def redirect_stdout
prev = STDOUT.dup
prev.autoclose = false
$stdout = @write_io
STDOUT.reopen(@write_io)
# Configure Selenium with headless Chrome for JavaScript testing
# This works across macOS, Linux, and Windows without requiring Firefox
Capybara.register_driver :selenium_chrome_headless do |app|
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument("--headless")
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--window-size=1920,1080")
prev = STDERR.dup
prev.autoclose = false
$stderr = @write_io
STDERR.reopen(@write_io)
yield
ensure
STDOUT.reopen(prev)
$stdout = STDOUT
STDERR.reopen(prev)
$stderr = STDERR
end
end
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end
class WarningSuppressor
IGNORE_PATTERNS = [
/QFont::setPixelSize: Pixel size <= 0/,
/CoreText performance note:/,
/WARNING: Method userSpaceScaleFactor/
]
def write(message)
if ignore?(message)
0
else
puts(message)
1
end
end
private
def ignore?(message)
IGNORE_PATTERNS.any? { |regexp| message =~ regexp }
end
end
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, phantomjs_logger: WarningSuppressor.new, timeout: 60)
end
Capybara.javascript_driver = :poltergeist
Capybara.javascript_driver = :selenium_chrome_headless