From b2b634137402a82a7dfd60b5646dbd0860a822ca Mon Sep 17 00:00:00 2001 From: George Claghorn Date: Mon, 13 May 2019 12:44:06 -0400 Subject: Add ActionDispatch::SystemTestCase#fill_in_rich_text_area --- actiontext/lib/action_text/engine.rb | 7 ++++ actiontext/lib/action_text/system_test_helper.rb | 47 ++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 actiontext/lib/action_text/system_test_helper.rb (limited to 'actiontext/lib') diff --git a/actiontext/lib/action_text/engine.rb b/actiontext/lib/action_text/engine.rb index 51ff5b575b..0c2aebfd08 100644 --- a/actiontext/lib/action_text/engine.rb +++ b/actiontext/lib/action_text/engine.rb @@ -46,5 +46,12 @@ module ActionText before_action { ActionText::Content.renderer = ApplicationController.renderer.new(request.env) } end end + + initializer "action_text.system_test_helper" do + ActiveSupport.on_load(:action_dispatch_system_test_case) do + require "action_text/system_test_helper" + include ActionText::SystemTestHelper + end + end end end diff --git a/actiontext/lib/action_text/system_test_helper.rb b/actiontext/lib/action_text/system_test_helper.rb new file mode 100644 index 0000000000..6c9dcc11a7 --- /dev/null +++ b/actiontext/lib/action_text/system_test_helper.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +module ActionText + module SystemTestHelper + # Locates a Trix editor and fills it in with the given HTML. + # + # The editor can be found by: + # * its +id+ + # * its +placeholder+ + # * its +aria-label+ + # * the +name+ of its input + # + # Examples: + # + # # + # fill_in_rich_text_area "message_content", with: "Hello world!" + # + # # + # fill_in_rich_text_area "Your message here", with: "Hello world!" + # + # # + # fill_in_rich_text_area "Message content", with: "Hello world!" + # + # # + # # + # fill_in_rich_text_area "message[content]", with: "Hello world!" + def fill_in_rich_text_area(locator, with:) + page.execute_script(<<~JS, find(:rich_text_area, locator).native, with.to_s) + const [element, html] = arguments; + element.editor.loadHTML(html); + JS + end + end +end + +Capybara.add_selector :rich_text_area do + label "rich-text area" + xpath do |locator| + input_located_by_name = XPath.anywhere(:input).where(XPath.attr(:name) == locator).attr(:id) + + XPath.descendant(:"trix-editor").where \ + XPath.attr(:id).equals(locator) | + XPath.attr(:placeholder).equals(locator) | + XPath.attr(:"aria-label").equals(locator) | + XPath.attr(:input).equals(input_located_by_name) + end +end -- cgit v1.2.3