mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-07 17:36:22 +08:00
The category tags page and webhooks form were using `@form.Container` and `field.Custom` to wrap the select-kit TagChooser component. These wrappers are simple visual containers that don't participate in FormKit's field lifecycle — they silently ignore props like `@optional` and don't support validation, error display, or consistent field styling. This commit introduces a proper `field.TagChooser` FormKit control that wraps the select-kit TagChooser, mapping `@field.value` to `@tags` and `@field.set` to `@onChange`. It follows the same pattern as the existing `field.Icon` control. Changes: - New `fk/control/tag-chooser.gjs` with pass-through args for TagChooser-specific options (`@everyTag`, `@excludeSynonyms`, etc.) - Register the control in `fk/field.gjs` and add pass-through args to `fk/control-wrapper.gjs` - Convert `upsert-category/tags.gjs` allowed_tags from Container to `field.TagChooser` - Convert `webhooks-form.gjs` tag_names from `field.Custom` to `field.TagChooser` - Add `tag-chooser` support to the FormKit Ruby page object for system specs - Update simplified_category_creation_spec to use FormKit page objects - Add integration tests and styleguide example - Add webhook tag filter system spec Ref - t/174117
100 lines
2.2 KiB
Ruby
100 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module PageObjects
|
|
module Pages
|
|
class AdminWebhooks < PageObjects::Pages::Base
|
|
def visit_page
|
|
page.visit("/admin/api/web_hooks")
|
|
self
|
|
end
|
|
|
|
def has_webhook_listed?(url)
|
|
page.has_css?(table_selector, text: url)
|
|
end
|
|
|
|
def has_no_webhook_listed?(url)
|
|
page.has_no_css?(table_selector, text: url)
|
|
end
|
|
|
|
def has_webhook_details?(url)
|
|
page.has_css?(summary_selector, text: url)
|
|
end
|
|
|
|
def click_add
|
|
page.find(header_actions_selector, text: I18n.t("admin_js.admin.web_hooks.add")).click
|
|
self
|
|
end
|
|
|
|
def fill_payload_url(payload_url)
|
|
page.find(form_selector).find(payload_url_field_selector).fill_in(with: payload_url)
|
|
self
|
|
end
|
|
|
|
def add_webhook(payload_url:)
|
|
click_add
|
|
fill_payload_url(payload_url)
|
|
click_save
|
|
end
|
|
|
|
def edit_payload_url(payload_url)
|
|
form = page.find(form_selector)
|
|
form.find(payload_url_field_selector).fill_in(with: payload_url)
|
|
|
|
click_save
|
|
end
|
|
|
|
def click_back
|
|
page.find(back_button_selector).click
|
|
end
|
|
|
|
def click_save
|
|
page.find(save_button_selector).click
|
|
end
|
|
|
|
def click_edit(payload_url)
|
|
row = page.find(row_selector, text: payload_url)
|
|
row.find("button", text: I18n.t("admin_js.admin.web_hooks.edit")).click
|
|
end
|
|
|
|
def click_delete(payload_url)
|
|
row = page.find(row_selector, text: payload_url)
|
|
row.find(".webhook-menu-trigger").click
|
|
page.find(".admin-web-hook__delete").click
|
|
end
|
|
|
|
private
|
|
|
|
def table_selector
|
|
".admin-web_hooks__items"
|
|
end
|
|
|
|
def row_selector
|
|
".d-table__row"
|
|
end
|
|
|
|
def form_selector
|
|
".form-kit"
|
|
end
|
|
|
|
def summary_selector
|
|
".admin-webhooks__summary"
|
|
end
|
|
|
|
def header_actions_selector
|
|
".d-page-header__actions"
|
|
end
|
|
|
|
def payload_url_field_selector
|
|
"input[name='payload_url']"
|
|
end
|
|
|
|
def save_button_selector
|
|
".save"
|
|
end
|
|
|
|
def back_button_selector
|
|
".go-back"
|
|
end
|
|
end
|
|
end
|
|
end
|