From 8552571526a35d90cd90401759ad3dd34ac28e77 Mon Sep 17 00:00:00 2001 From: cryptogopher Date: Sat, 28 Dec 2024 23:57:47 +0100 Subject: [PATCH] Disable Unit destuction for base units with subunits Closes #40 --- app/controllers/default/units_controller.rb | 2 +- app/controllers/units_controller.rb | 2 +- app/views/default/units/_unit.html.erb | 2 +- app/views/units/_unit.html.erb | 4 ++-- config/locales/en.yml | 2 +- test/system/units_test.rb | 11 +++++++++-- 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/app/controllers/default/units_controller.rb b/app/controllers/default/units_controller.rb index 6ca2733..91fcdb7 100644 --- a/app/controllers/default/units_controller.rb +++ b/app/controllers/default/units_controller.rb @@ -12,7 +12,7 @@ class Default::UnitsController < ApplicationController end def index - @units = current_user.units.defaults_diff.includes(:base).ordered + @units = current_user.units.defaults_diff.includes(:base).includes(:subunits).ordered end def import diff --git a/app/controllers/units_controller.rb b/app/controllers/units_controller.rb index a973e37..81c4315 100644 --- a/app/controllers/units_controller.rb +++ b/app/controllers/units_controller.rb @@ -9,7 +9,7 @@ class UnitsController < ApplicationController end def index - @units = current_user.units.includes(:subunits).ordered + @units = current_user.units.includes(:base).includes(:subunits).ordered end def new diff --git a/app/views/default/units/_unit.html.erb b/app/views/default/units/_unit.html.erb index 83e605b..ddccdd4 100644 --- a/app/views/default/units/_unit.html.erb +++ b/app/views/default/units/_unit.html.erb @@ -12,7 +12,7 @@ <% if current_user.at_least(:admin) %> <% if unit.default? %> <%= image_button_to t('.delete'), 'delete-outline', default_unit_path(unit), - method: :delete %> + method: :delete, **disabled_attributes(!unit.movable?) %> <% else %> <%= image_button_to t('.export'), 'upload-outline', export_default_unit_path(unit), disabled_attributes(!unit.portable?) %> diff --git a/app/views/units/_unit.html.erb b/app/views/units/_unit.html.erb index 150dfa9..ed30e1e 100644 --- a/app/views/units/_unit.html.erb +++ b/app/views/units/_unit.html.erb @@ -17,8 +17,8 @@ id: dom_id(unit, :new, :link), onclick: 'this.blur();', data: {turbo_stream: true} %> <% end %> - <%= image_button_to t('.delete_unit'), 'delete-outline', unit_path(unit), - method: :delete %> + <%= image_button_to t('.destroy'), 'delete-outline', unit_path(unit), + method: :delete, **disabled_attributes(!unit.movable?) %> <% if unit.movable? %> ⠿ diff --git a/config/locales/en.yml b/config/locales/en.yml index 2724e5f..9133cc7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -59,7 +59,7 @@ en: no_items: There are no configured units. You can Add some or Import from defaults. unit: new_subunit: Subunit - delete_unit: Delete + destroy: Delete index: new_unit: Add unit import_units: Import diff --git a/test/system/units_test.rb b/test/system/units_test.rb index b005f02..0d411b0 100644 --- a/test/system/units_test.rb +++ b/test/system/units_test.rb @@ -162,6 +162,13 @@ class UnitsTest < ApplicationSystemTestCase assert_selector 'tbody > tr:has(input, textarea)' end - #test "destroy" do - #end + test "destroy" do + link = all(:link_or_button, exact_text: t('units.unit.destroy')).sample + label = link.ancestor('tr').first(:link)[:text] + assert_difference ->{ @user.units.count }, -1 do + link.click + end + assert_selector 'tbody tr', count: [@user.units.count, 1].max + assert_selector '.flash.notice', text: t('units.destroy.success', unit: label) + end end