# frozen_string_literal: true module PublishingCukeHelpers def write_in_publisher(txt) fill_in "status_message_text", with: txt end def append_to_publisher(txt) update_publisher_with(txt) do |input| fill_in id: "status_message_text", with: "#{input.value} #{txt}" end end def type_into_publisher(txt) update_publisher_with(txt) {|input| input.send_keys txt } end def update_publisher_with(txt) input = find("#status_message_text") yield input # trigger JavaScript event listeners input.native.send_key(:end) expect(input).to have_value(txt) # Wait for all key presses being processed end def upload_file_with_publisher(path) page.execute_script(%q{$("input[name='qqfile']").css("opacity", '1');}) image_count = all(".publisher_photo img", wait: false).count with_scope("#publisher-textarea-wrapper") do attach_file("qqfile", Rails.root.join(path).to_s) # wait for the image to be ready page.assert_selector(".publisher_photo.loading", count: 0) page.assert_selector(".publisher_photo img", count: image_count + 1) page.assert_selector(".publisher_photo img.hidden", count: 0) end end def make_post(text) write_in_publisher(text) submit_publisher end def visible_text_from_markdown(text) CGI.unescapeHTML(ActionController::Base.helpers.strip_tags(Diaspora::MessageRenderer.new(text).markdownified)).strip end def submit_publisher txt = find("#publisher #status_message_text").value find("#publisher .btn-primary").click # wait for the publisher to be closed expect(find("#publisher")["class"]).to include("closed") # wait for the content to appear expect(find("#main-stream")).to have_content(visible_text_from_markdown(txt)) end def click_and_post(text) click_publisher make_post(text) end def click_publisher find("#status_message_text").click expect(find("#publisher")).to have_css(".publisher-textarea-wrapper.active") end def publisher_submittable? submit_btn = find("#publisher button#submit") !submit_btn[:disabled] end def expand_first_post within(".stream-element", match: :first) do find(".expander").click expect(page).to have_no_css(".expander") end end def first_post_collapsed? expect(find(".stream-element .collapsible", match: :first)).to have_css(".expander") expect(page).to have_css(".stream-element .collapsible.collapsed", match: :first) end def first_post_expanded? expect(page).to have_no_css(".stream-element .expander", match: :first) expect(page).to have_no_css(".stream-element .collapsible.collapsed", match: :first) expect(page).to have_css(".stream-element .collapsible.opened", match: :first) end def first_post_text find(".stream-element .post-content", match: :first).text end def frame_numbers_content(position) find(".stream-frame:nth-child(#{position}) .content") end def find_frame_by_text(text) find(".stream-frame:contains('#{text}')") end def stream_element_numbers_content(position) find(".stream-element:nth-child(#{position}) .post-content") end def find_post_by_text(text) expect(page).to have_text(text) find(".stream-element", text: text) end def within_post(post_text) within find_post_by_text(post_text) do yield end end def like_stream_post(post_text) within_post(post_text) do action = find(:css, "a.like").text find(:css, "a.like").click expect(find(:css, "a.like")).not_to have_text(action) end end def like_show_page_post within("#single-post-actions") do find(:css, 'a.like').click end end def comment_on_show_page(comment_text) within("#single-post-interactions") do make_comment(comment_text) end end def make_comment(text, elem="text") fill_in elem, :with => text click_button "Comment" end def focus_comment_box(elem="a.focus_comment_textarea") find(elem).click end def assert_nsfw(text) post = find_post_by_text(text) expect(post.find(".nsfw-shield")).to be_present end end World(PublishingCukeHelpers)