We will use this field to enter the position where the cards will be shown to the user in the homepage.
91 lines
2.5 KiB
Ruby
91 lines
2.5 KiB
Ruby
require "rails_helper"
|
|
|
|
describe Widget::Card do
|
|
let(:card) { build(:widget_card) }
|
|
|
|
it_behaves_like "globalizable", :widget_card
|
|
|
|
context "validations" do
|
|
it "is valid" do
|
|
expect(card).to be_valid
|
|
end
|
|
|
|
it "is valid with a header" do
|
|
expect(build(:widget_card, :header)).to be_valid
|
|
end
|
|
|
|
it "is not valid without a title" do
|
|
expect(build(:widget_card, title: "")).not_to be_valid
|
|
end
|
|
|
|
describe "order" do
|
|
it "is not valid without an order" do
|
|
expect(build(:widget_card, order: nil)).not_to be_valid
|
|
end
|
|
|
|
it "is not valid with an order less than 1" do
|
|
expect(build(:widget_card, order: 0)).not_to be_valid
|
|
end
|
|
end
|
|
|
|
context "regular cards" do
|
|
it "is not valid without a link_url" do
|
|
card = build(:widget_card, header: false, link_url: nil)
|
|
|
|
expect(card).not_to be_valid
|
|
end
|
|
end
|
|
|
|
context "header cards" do
|
|
it "is valid with no link_url and no link_text" do
|
|
header = build(:widget_card, :header, link_text: nil, link_url: nil)
|
|
|
|
expect(header).to be_valid
|
|
end
|
|
|
|
it "is not valid with link_text and no link_url" do
|
|
header = build(:widget_card, :header, link_text: "link text", link_url: nil)
|
|
|
|
expect(header).not_to be_valid
|
|
expect(header.errors.count).to be 1
|
|
expect(header.errors[:link_url].count).to be 1
|
|
expect(header.errors[:link_url].first).to eq "can't be blank"
|
|
end
|
|
|
|
it "is valid if link_text and link_url are both provided" do
|
|
header = build(:widget_card, :header, link_text: "Text link",
|
|
link_url: "https://consuldemocracy.org")
|
|
|
|
expect(header).to be_valid
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#header" do
|
|
it "returns header cards" do
|
|
header = create(:widget_card, header: true)
|
|
|
|
expect(Widget::Card.header).to eq([header])
|
|
end
|
|
|
|
it "does not return regular cards" do
|
|
create(:widget_card, header: false)
|
|
|
|
expect(Widget::Card.header).to be_empty
|
|
end
|
|
end
|
|
|
|
describe "#body" do
|
|
it "returns cards for the homepage body" do
|
|
header = create(:widget_card, header: true)
|
|
card1 = create(:widget_card, header: false)
|
|
card2 = create(:widget_card, header: false)
|
|
page_card = create(:widget_card, header: false, cardable: create(:site_customization_page))
|
|
|
|
expect(Widget::Card.body).to match_array [card1, card2]
|
|
expect(Widget::Card.body).not_to include(header)
|
|
expect(Widget::Card.body).not_to include(page_card)
|
|
end
|
|
end
|
|
end
|