From 198ff0cd1f7e2e5e68b7a810166b0b8fbdff5a71 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Sun, 4 Feb 2018 22:39:26 +0100 Subject: [PATCH] Use updatable slug factory trait to sluggable concern Slugs should only be updated on certain conditions, we need a trait that meets that conditions and the name of the trait passed as a mandatory & named argument on the sluggable concern --- spec/models/budget/group_spec.rb | 2 +- spec/models/budget/heading_spec.rb | 2 +- spec/models/budget_spec.rb | 2 +- spec/models/concerns/sluggable.rb | 17 ++++++++++++++++- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/spec/models/budget/group_spec.rb b/spec/models/budget/group_spec.rb index 099700c4e..27392e81f 100644 --- a/spec/models/budget/group_spec.rb +++ b/spec/models/budget/group_spec.rb @@ -4,7 +4,7 @@ describe Budget::Group do let(:budget) { create(:budget) } - it_behaves_like "sluggable" + it_behaves_like "sluggable", updatable_slug_trait: :drafting_budget describe "name" do before do diff --git a/spec/models/budget/heading_spec.rb b/spec/models/budget/heading_spec.rb index 655a77b4f..b2a09cb55 100644 --- a/spec/models/budget/heading_spec.rb +++ b/spec/models/budget/heading_spec.rb @@ -5,7 +5,7 @@ describe Budget::Heading do let(:budget) { create(:budget) } let(:group) { create(:budget_group, budget: budget) } - it_behaves_like "sluggable" + it_behaves_like "sluggable", updatable_slug_trait: :drafting_budget describe "name" do before do diff --git a/spec/models/budget_spec.rb b/spec/models/budget_spec.rb index c41182bdd..80f0a0c94 100644 --- a/spec/models/budget_spec.rb +++ b/spec/models/budget_spec.rb @@ -4,7 +4,7 @@ describe Budget do let(:budget) { create(:budget) } - it_behaves_like "sluggable" + it_behaves_like "sluggable", updatable_slug_trait: :drafting describe "name" do before do diff --git a/spec/models/concerns/sluggable.rb b/spec/models/concerns/sluggable.rb index c319d55d8..1b5038d71 100644 --- a/spec/models/concerns/sluggable.rb +++ b/spec/models/concerns/sluggable.rb @@ -1,6 +1,6 @@ require 'spec_helper' -shared_examples_for 'sluggable' do +shared_examples_for 'sluggable' do |updatable_slug_trait:| describe 'generate_slug' do let(:factory_name) { described_class.name.parameterize('_').to_sym } @@ -11,5 +11,20 @@ shared_examples_for 'sluggable' do expect(sluggable.slug).to eq("marlo-branido-carlo") end end + + context "slug updating condition is true" do + it "slug is updated" do + updatable = create(factory_name, updatable_slug_trait, name: 'Old Name') + expect{updatable.update_attributes(name: 'New Name')} + .to change{ updatable.slug }.from('old-name').to('new-name') + end + end + + context "slug updating condition is false" do + it "slug isn't updated" do + expect{sluggable.update_attributes(name: 'New Name')} + .not_to (change{ sluggable.slug }) + end + end end end