Note that we keep :created_at order as complement to new :order field. We do this so that current installations will not notice any change in the sorting of their cards when upgrading, as the default "order" field will always be 1, so it will continue to sort by the "created_at".
100 lines
2.9 KiB
Ruby
100 lines
2.9 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
|
|
|
|
it "returns cards sorted by defined order, then by 'created_at' when order is equal" do
|
|
card1 = create(:widget_card, order: 1)
|
|
card2 = create(:widget_card, order: 3)
|
|
card3 = create(:widget_card, order: 2)
|
|
card4 = create(:widget_card, order: 3)
|
|
|
|
expect(Widget::Card.body).to eq [card1, card3, card2, card4]
|
|
end
|
|
end
|
|
end
|