From 108de86da574b7e4a93015f682b3bed0b6c67893 Mon Sep 17 00:00:00 2001 From: taitus Date: Fri, 25 Jun 2021 13:12:40 +0200 Subject: [PATCH] Add link_url validation for cards when are header cards Add link_url presence validation only when link_text is provided only for header cards. In this case it makes sense to allow creating a "header card" without link_url, since we can show the header without link text and without link url and it still does its function. --- app/models/widget/card.rb | 2 +- spec/models/widget/card_spec.rb | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/models/widget/card.rb b/app/models/widget/card.rb index 01b00a1c1..835defe6c 100644 --- a/app/models/widget/card.rb +++ b/app/models/widget/card.rb @@ -9,7 +9,7 @@ class Widget::Card < ApplicationRecord include Globalizable validates_translation :title, presence: true - validates :link_url, presence: true, if: -> { !header? } + validates :link_url, presence: true, if: -> { !header? || link_text.present? } def self.header where(header: true) diff --git a/spec/models/widget/card_spec.rb b/spec/models/widget/card_spec.rb index c031ed615..bb530cd50 100644 --- a/spec/models/widget/card_spec.rb +++ b/spec/models/widget/card_spec.rb @@ -25,6 +25,30 @@ describe Widget::Card do 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://consulproject.org") + + expect(header).to be_valid + end + end end describe "#header" do