# frozen_string_literal: true require "rails_helper" RSpec.describe "Backend - Widgets (HTML)", type: :feature do def fill_in_widget_form_with(name = "", slug = "", content = "") fill_in "Name", with: name fill_in "Slug", with: slug fill_in "Content", with: content end describe "creation" do before { stub_authorization! } describe "with Designs in select" do before do create(:design, name: "My Full Design") create(:design, :partial, name: "My Partial Design") end it "has only partial Designs in select" do visit "/backend/widgets/new" expect(page).to have_select "Design", options: ["Select design", "My Partial Design"] end it "does not contain non-partial Designs in select" do visit "/backend/widgets/new" expect(page).not_to have_select "Design", options: ["Select design", "My Full Design"] end it "is A-Z alphabetized" do create(:design, :partial, name: "Good Partial Design") visit "/backend/widgets/new" expect(page).to have_select "Design", options: ["Select design", "Good Partial Design", "My Partial Design"] end end describe "with valid data" do before { create(:design, :partial, name: "My Partial Design") } it "is successful" do visit "/backend/widgets/new" fill_in_widget_form_with("Great Title", "amazing", "

Content

") click_button "Create Widget" expect(page).to have_content("Widget was successfully created.") end it "with valid data with Design" do visit "/backend/widgets/new" fill_in_widget_form_with("Amazing Title", "amazing", "

Content

") select "My Partial Design", from: "Design" click_button "Create Widget" expect(page).to have_content("Widget was successfully created.") end end context "with invalid data" do it "fails without name" do visit "/backend/widgets/new" fill_in_widget_form_with("", "amazing", "

Content of the widget

") click_button "Create Widget" expect(page.find(".form-group.widget_name")) .to have_content("Name can't be blank") end it "fails without slug" do visit "/backend/widgets/new" fill_in_widget_form_with("Amazing", "", "

Content of the widget

") click_button "Create Widget" expect(page.find(".form-group.widget_slug")) .to have_content("Slug can't be blank") end it "fails without content" do visit "/backend/widgets/new" fill_in_widget_form_with("Amazing", "amazing", "") click_button "Create Widget" expect(page.find(".form-group.widget_content")) .to have_content("Content can't be blank") end it "fails with invalid Liquid data in Content" do visit "/backend/widgets/new" fill_in_widget_form_with("Amazing", "amazing", "{% widget %}") click_button "Create Widget" expect(page.find(".form-group.widget_content")) .to have_content("Content contains invalid Liquid formatting") end end end end