From 9dd10cac19185abfad7160f33105aec85e38c9b0 Mon Sep 17 00:00:00 2001 From: taitus Date: Tue, 10 Oct 2023 08:33:03 +0200 Subject: [PATCH] Add order field to widget cards We will use this field to enter the position where the cards will be shown to the user in the homepage. --- app/models/widget/card.rb | 1 + db/migrate/20231009143355_add_order_to_widget_cards.rb | 5 +++++ db/schema.rb | 1 + spec/models/widget/card_spec.rb | 10 ++++++++++ 4 files changed, 17 insertions(+) create mode 100644 db/migrate/20231009143355_add_order_to_widget_cards.rb diff --git a/app/models/widget/card.rb b/app/models/widget/card.rb index cdf28776b..bd5ed98ea 100644 --- a/app/models/widget/card.rb +++ b/app/models/widget/card.rb @@ -10,6 +10,7 @@ class Widget::Card < ApplicationRecord validates_translation :title, presence: true validates :link_url, presence: true, if: -> { !header? || link_text.present? } + validates :order, numericality: { greater_than_or_equal_to: 1 } def self.header where(header: true) diff --git a/db/migrate/20231009143355_add_order_to_widget_cards.rb b/db/migrate/20231009143355_add_order_to_widget_cards.rb new file mode 100644 index 000000000..484592b37 --- /dev/null +++ b/db/migrate/20231009143355_add_order_to_widget_cards.rb @@ -0,0 +1,5 @@ +class AddOrderToWidgetCards < ActiveRecord::Migration[6.1] + def change + add_column :widget_cards, :order, :integer, null: false, default: 1 + end +end diff --git a/db/schema.rb b/db/schema.rb index db35e4c6c..f416da10e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1768,6 +1768,7 @@ ActiveRecord::Schema.define(version: 2023_10_12_141318) do t.integer "cardable_id" t.integer "columns", default: 4 t.string "cardable_type", default: "SiteCustomization::Page" + t.integer "order", default: 1, null: false t.index ["cardable_id"], name: "index_widget_cards_on_cardable_id" end diff --git a/spec/models/widget/card_spec.rb b/spec/models/widget/card_spec.rb index 9fab80e40..f953fcb1e 100644 --- a/spec/models/widget/card_spec.rb +++ b/spec/models/widget/card_spec.rb @@ -18,6 +18,16 @@ describe Widget::Card 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)