From 055ff803c6f227750655805f9868946a81178ede Mon Sep 17 00:00:00 2001 From: Pierre Mesure Date: Wed, 8 May 2019 22:53:20 +0200 Subject: [PATCH 1/2] Fix a bug where a category can't be created if it already exists as a tag (+ spec) --- app/controllers/admin/tags_controller.rb | 8 +++++++- spec/features/admin/tags_spec.rb | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/tags_controller.rb b/app/controllers/admin/tags_controller.rb index 7c49561c4..07704bd32 100644 --- a/app/controllers/admin/tags_controller.rb +++ b/app/controllers/admin/tags_controller.rb @@ -9,7 +9,13 @@ class Admin::TagsController < Admin::BaseController end def create - Tag.category.create!(tag_params) + @existing_tag = Tag.where(name: tag_params.first).first + if @existing_tag + @existing_tag.kind = "category" + @existing_tag.save + else + Tag.category.create(tag_params) + end redirect_to admin_tags_path end diff --git a/spec/features/admin/tags_spec.rb b/spec/features/admin/tags_spec.rb index 2dec574f3..942487d2e 100644 --- a/spec/features/admin/tags_spec.rb +++ b/spec/features/admin/tags_spec.rb @@ -88,4 +88,18 @@ describe "Admin tags" do expect(Tag.category.where(name: "wow_category")).to exist end end + + scenario "Upgrade tag to category" do + not_category_tag = create(:tag, name: "Soon a category") + + visit admin_tags_path + + within("form.new_tag") do + fill_in "tag_name", with: "Soon a category" + click_button "Create topic" + end + + expect(page).to have_content "Soon a category" + end + end From 67911b4e35d06828395a1713bdb2216dbf7358de Mon Sep 17 00:00:00 2001 From: Pierre Mesure Date: Mon, 30 Mar 2020 21:40:10 +0200 Subject: [PATCH 2/2] Simplify the method and fix Rubocop warnings --- app/controllers/admin/tags_controller.rb | 9 ++------- spec/features/admin/tags_spec.rb | 3 +-- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/app/controllers/admin/tags_controller.rb b/app/controllers/admin/tags_controller.rb index 07704bd32..6ab6d1260 100644 --- a/app/controllers/admin/tags_controller.rb +++ b/app/controllers/admin/tags_controller.rb @@ -9,13 +9,8 @@ class Admin::TagsController < Admin::BaseController end def create - @existing_tag = Tag.where(name: tag_params.first).first - if @existing_tag - @existing_tag.kind = "category" - @existing_tag.save - else - Tag.category.create(tag_params) - end + Tag.find_or_create_by!(name: tag_params["name"]).update!(kind: "category") + redirect_to admin_tags_path end diff --git a/spec/features/admin/tags_spec.rb b/spec/features/admin/tags_spec.rb index 942487d2e..6cda5cd2a 100644 --- a/spec/features/admin/tags_spec.rb +++ b/spec/features/admin/tags_spec.rb @@ -90,7 +90,7 @@ describe "Admin tags" do end scenario "Upgrade tag to category" do - not_category_tag = create(:tag, name: "Soon a category") + create(:tag, name: "Soon a category") visit admin_tags_path @@ -101,5 +101,4 @@ describe "Admin tags" do expect(page).to have_content "Soon a category" end - end