Files
Christophe Bliard 7c72f0c3a5 Fix slow tests when checking date visible in date picker
941096114c introduced `Components::Datepicker#displays_date?(date)` to
check if a date is visible in the date picker before doing some
assertions on it. Then 84bbf8d549 doubled down on it by calling it
inside each `#expect_non_working(date)`, `#expect_working(date)`,
`#expect_disabled(date)`, `#expect_not_disabled(date)` methods.

The problem is that `#displays_date?(date)` uses `has_css?` so it
returns immediately if the check is positive, but waits for 3 seconds
for the date to become visible if it's not yet. It's missing a `wait:
0`. And the css selector is wrong to: it searches for
`.flatpickr-day.flatpickr-disabled` instead of `.flatpickr-day`, so it
was returning false when the date was visible and enabled.

This commit fixes the problem by:
- Adding `wait: 0` to `has_css?`
- Changing the css selector to `.flatpickr-day`
- Add some `#expect_visible` calls to be sure the date picker is visible
  before doing assertions with `wait: 0`

And same for `#has_previous_month_toggle?`: it missed a `wait: 0` for
the same reasons.

This makes for instance the 2 specs in
`spec/features/work_packages/datepicker/datepicker_follows_relation_spec.rb:84`
run in 11 seconds instead of 1 minute 27 seconds.
2026-01-26 18:29:32 +01:00

63 lines
2.2 KiB
Ruby

# frozen_string_literal: true
# -- copyright
# OpenProject is an open source project management software.
# Copyright (C) the OpenProject GmbH
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2013 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See COPYRIGHT and LICENSE files for more details.
# ++
#
# A Cuprite edge-case with our use of select
# fields causes a Ferrum::JavaScriptError to be raised
# when an option HTMLElement is removed from its select field
#
# Use this as a temporary patch
require "ferrum/errors"
def ignore_ferrum_javascript_error
yield
rescue Ferrum::JavaScriptError
end
# Override Ferrum::Network#pending_connections to only consider connections for current
# page. Any pending connection from previous loaded pages will be ignored as
# they have most likely be aborted anyway.
module Ferrum
class Network
def pending_connections
main_frame_id = @traffic.first&.request&.frame_id
current_navigation = @traffic.reverse.find { |conn| conn.navigation_request?(main_frame_id) }
current_traffic = @traffic.filter do |exchange|
next unless exchange.request && current_navigation
exchange.request.loader_id == current_navigation.request.loader_id
end
current_traffic.count(&:pending?)
end
end
end