Files
grecia/spec/features/admin/widgets/cards_spec.rb
Julian Herrero ddca825f9f Update spec after adding default pages
The spec was assuming there was only 1 custom page created in the
DB. With this change the spec will pass no matter how many  custom
pages there are in the DB.
2019-03-14 18:35:51 +01:00

244 lines
7.4 KiB
Ruby

require "rails_helper"
feature "Cards" do
background do
admin = create(:administrator).user
login_as(admin)
end
it_behaves_like "translatable",
"widget_card",
"edit_admin_widget_card_path",
%w[title description link_text label]
scenario "Create", :js do
visit admin_homepage_path
click_link "Create card"
fill_in "Label (optional)", with: "Card label"
fill_in "Title", with: "Card text"
fill_in "Description", with: "Card description"
fill_in "Link text", with: "Link text"
fill_in "widget_card_link_url", with: "consul.dev"
attach_image_to_card
click_button "Create card"
expect(page).to have_content "Card created successfully!"
expect(page).to have_css(".homepage-card", count: 1)
card = Widget::Card.last
within("#widget_card_#{card.id}") do
expect(page).to have_content "Card label"
expect(page).to have_content "Card text"
expect(page).to have_content "Card description"
expect(page).to have_content "Link text"
expect(page).to have_content "consul.dev"
expect(page).to have_link("Show image", href: card.image_url(:large))
end
end
scenario "Index" do
3.times { create(:widget_card) }
visit admin_homepage_path
expect(page).to have_css(".homepage-card", count: 3)
cards = Widget::Card.all
cards.each do |card|
expect(page).to have_content card.title
expect(page).to have_content card.description
expect(page).to have_content card.link_text
expect(page).to have_content card.link_url
expect(page).to have_link("Show image", href: card.image_url(:large))
end
end
scenario "Show" do
card_1 = create(:widget_card, title: "Card homepage large", columns: 8)
card_2 = create(:widget_card, title: "Card homepage medium", columns: 4)
card_3 = create(:widget_card, title: "Card homepage small", columns: 2)
visit root_path
expect(page).to have_css("#widget_card_#{card_1.id}.medium-8")
expect(page).to have_css("#widget_card_#{card_2.id}.medium-4")
expect(page).to have_css("#widget_card_#{card_3.id}.medium-2")
end
scenario "Edit" do
card = create(:widget_card)
visit admin_homepage_path
within("#widget_card_#{card.id}") do
click_link "Edit"
end
within(".translatable-fields") do
fill_in "Label (optional)", with: "Card label updated"
fill_in "Title", with: "Card text updated"
fill_in "Description", with: "Card description updated"
fill_in "Link text", with: "Link text updated"
end
fill_in "widget_card_link_url", with: "consul.dev updated"
click_button "Save card"
expect(page).to have_content "Card updated successfully"
expect(page).to have_css(".homepage-card", count: 1)
within("#widget_card_#{Widget::Card.last.id}") do
expect(page).to have_content "Card label updated"
expect(page).to have_content "Card text updated"
expect(page).to have_content "Card description updated"
expect(page).to have_content "Link text updated"
expect(page).to have_content "consul.dev updated"
end
end
scenario "Remove", :js do
card = create(:widget_card)
visit admin_homepage_path
within("#widget_card_#{card.id}") do
accept_confirm do
click_link "Delete"
end
end
expect(page).to have_content "Card removed successfully"
expect(page).to have_css(".homepage-card", count: 0)
end
context "Header Card" do
scenario "Create" do
visit admin_homepage_path
click_link "Create header"
fill_in "Label (optional)", with: "Header label"
fill_in "Title", with: "Header text"
fill_in "Description", with: "Header description"
fill_in "Link text", with: "Link text"
fill_in "widget_card_link_url", with: "consul.dev"
click_button "Create header"
expect(page).to have_content "Card created successfully!"
within("#header") do
expect(page).to have_css(".homepage-card", count: 1)
expect(page).to have_content "Header label"
expect(page).to have_content "Header text"
expect(page).to have_content "Header description"
expect(page).to have_content "Link text"
expect(page).to have_content "consul.dev"
end
within("#cards") do
expect(page).to have_css(".homepage-card", count: 0)
end
end
context "Page card" do
let!(:custom_page) { create(:site_customization_page, :published) }
scenario "Create", :js do
visit admin_site_customization_pages_path
within "#site_customization_page_#{custom_page.id}" do
click_link "See Cards"
end
click_link "Create card"
fill_in "Title", with: "Card for a custom page"
click_button "Create card"
expect(page).to have_current_path admin_site_customization_page_cards_path(custom_page)
expect(page).to have_content "Card for a custom page"
end
scenario "Show" do
card_1 = create(:widget_card, page: custom_page, title: "Card large", columns: 8)
card_2 = create(:widget_card, page: custom_page, title: "Card medium", columns: 4)
card_3 = create(:widget_card, page: custom_page, title: "Card small", columns: 2)
visit (custom_page).url
expect(page).to have_css(".card", count: 3)
expect(page).to have_css("#widget_card_#{card_1.id}.medium-8")
expect(page).to have_css("#widget_card_#{card_2.id}.medium-4")
expect(page).to have_css("#widget_card_#{card_3.id}.medium-2")
end
scenario "Show label only if it is present" do
card_1 = create(:widget_card, page: custom_page, title: "Card one", label: "My label")
card_2 = create(:widget_card, page: custom_page, title: "Card two")
visit (custom_page).url
within("#widget_card_#{card_1.id}") do
expect(page).to have_selector("span", text: "My label")
end
within("#widget_card_#{card_2.id}") do
expect(page).not_to have_selector("span")
end
end
scenario "Edit", :js do
create(:widget_card, page: custom_page, title: "Original title")
visit admin_site_customization_page_cards_path(custom_page)
expect(page).to have_content("Original title")
click_link "Edit"
within(".translatable-fields") do
fill_in "Title", with: "Updated title"
end
click_button "Save card"
expect(page).to have_current_path admin_site_customization_page_cards_path(custom_page)
expect(page).to have_content "Updated title"
expect(page).not_to have_content "Original title"
end
scenario "Destroy", :js do
create(:widget_card, page: custom_page, title: "Card title")
visit admin_site_customization_page_cards_path(custom_page)
expect(page).to have_content("Card title")
accept_confirm do
click_link "Delete"
end
expect(page).to have_current_path admin_site_customization_page_cards_path(custom_page)
expect(page).not_to have_content "Card title"
end
end
end
pending "add image expectactions"
def attach_image_to_card
click_link "Add image"
image_input = all(".image").last.find("input[type=file]", visible: false)
attach_file(
image_input[:id],
Rails.root.join("spec/fixtures/files/clippy.jpg"),
make_visible: true)
expect(page).to have_field("widget_card_image_attributes_title", with: "clippy.jpg")
end
end