Krzysztof Kotlarek db4395d70c
FIX: flaky flags specs when moving up or down (#28272)
Those are the steps to move the flag:
1. open menu;
2. click move up - `saving` CSS class is added;
3. request to backend;
4. `saving` CSS class is removed.

To check if the action was finished we are using this method:
```
def move_up(key)
  open_flag_menu(key)
  find(".admin-flag-item__move-up").click
  has_saved_flag?(key)
  self
end

def has_saved_flag?(key)
  has_css?(".admin-flag-item.#{key}.saving")
  has_no_css?(".admin-flag-item.#{key}.saving")
end
```

However, sometimes specs were failing with `expected to find CSS ".admin-flag-item.spam.saving" but there were no matches`

I think that the problem is with those 2 lines:
```
  find(".admin-flag-item__move-up").click
  has_closed_flag_menu?
```
If the save action is very fast, then the `saving` class is removed before the first check.

Therefore, to determine that the move action is finished, I am checking if the menu is closed.
2024-08-08 09:50:28 +08:00

112 lines
2.6 KiB
Ruby

# frozen_string_literal: true
module PageObjects
module Pages
class AdminFlags < PageObjects::Pages::Base
def visit
page.visit("/admin/config/flags")
self
end
def toggle(key)
PageObjects::Components::DToggleSwitch.new(".admin-flag-item__toggle.#{key}").toggle
has_saved_flag?(key)
self
end
def open_flag_menu(key)
find(".#{key} .flag-menu-trigger").click
self
end
def has_action_for_flag?(flag)
has_selector?(".#{flag} .flag-menu-trigger")
end
def has_no_action_for_flag?(flag)
has_no_selector?(".#{flag} .flag-menu-trigger")
end
def has_disabled_edit_for_flag?(flag)
has_selector?(".#{flag} .admin-flag-item__edit[disabled]")
end
def has_disabled_item_action?(action)
has_selector?(".admin-flag-item__#{action}[disabled]")
end
def has_item_action?(action)
has_selector?(".admin-flag-item__#{action}")
end
def has_no_item_action?(action)
has_no_selector?(".admin-flag-item__#{action}")
end
def has_flags?(*flags)
all(".admin-flag-item__name").map(&:text) == flags
end
def has_add_flag_button_enabled?
has_css?(".admin-flags__header-add-flag:not([disabled])")
end
def has_add_flag_button_disabled?
has_no_css?(".admin-flags__header-add-flag[disabled]")
end
def has_flag?(flag)
has_css?(".admin-flag-item.#{flag}")
end
def has_no_flag?(flag)
has_no_css?(".admin-flag-item.#{flag}")
end
def has_saved_flag?(key)
has_css?(".admin-flag-item.#{key}.saving")
has_no_css?(".admin-flag-item.#{key}.saving")
end
def has_closed_flag_menu?
has_no_css?(".flag-menu-content")
end
def move_down(key)
open_flag_menu(key)
find(".admin-flag-item__move-down").click
has_closed_flag_menu?
self
end
def move_up(key)
open_flag_menu(key)
find(".admin-flag-item__move-up").click
has_closed_flag_menu?
self
end
def click_add_flag
find(".admin-flags__header-add-flag").click
self
end
def click_edit_flag(key)
find(".#{key} .admin-flag-item__edit").click
self
end
def click_delete_flag(key)
find(".#{key} .flag-menu-trigger").click
find(".admin-flag-item__delete").click
self
end
def confirm_delete
find(".dialog-footer .btn-primary").click
self
end
end
end
end