From 69b8b90e5c3f4d7fa31825cf18ddca7420e35371 Mon Sep 17 00:00:00 2001 From: Tony Vincent Yesudas Date: Fri, 27 Dec 2024 11:03:11 +0100 Subject: [PATCH] fix: Bug creating duplicate category leads to crash screen --- app/controllers/categories_controller.rb | 1 + .../controllers/categories_controller_test.rb | 11 ++++++++ test/system/categories_test.rb | 26 +++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 test/system/categories_test.rb diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index 2d1882f44ae..cbd468ea553 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -21,6 +21,7 @@ def create redirect_back_or_to categories_path, notice: t(".success") else + @categories = Current.family.categories.alphabetically.where(parent_id: nil) render :new, status: :unprocessable_entity end end diff --git a/test/controllers/categories_controller_test.rb b/test/controllers/categories_controller_test.rb index 3809d38f901..22105ba2cdc 100644 --- a/test/controllers/categories_controller_test.rb +++ b/test/controllers/categories_controller_test.rb @@ -33,6 +33,17 @@ class CategoriesControllerTest < ActionDispatch::IntegrationTest assert_equal color, new_category.color end + test "create fails if name is not unique" do + assert_no_difference "Category.count" do + post categories_url, params: { + category: { + name: categories(:food_and_drink).name, + color: Category::COLORS.sample } } + end + + assert_response :unprocessable_entity + end + test "create and assign to transaction" do color = Category::COLORS.sample diff --git a/test/system/categories_test.rb b/test/system/categories_test.rb new file mode 100644 index 00000000000..5e92f1ad4bd --- /dev/null +++ b/test/system/categories_test.rb @@ -0,0 +1,26 @@ +require "application_system_test_case" + +class CategoriesTest < ApplicationSystemTestCase + setup do + sign_in @user = users(:family_admin) + end + + test "can create category" do + visit categories_url + click_link I18n.t("categories.new.new_category") + fill_in "Name", with: "My Shiny New Category" + click_button "Create Category" + + visit categories_url + assert_text "My Shiny New Category" + end + + test "trying to create a duplicate category fails" do + visit categories_url + click_link I18n.t("categories.new.new_category") + fill_in "Name", with: categories(:food_and_drink).name + click_button "Create Category" + + assert_text "Name has already been taken" + end +end