From 27fa93dbb470409ec9f454d1f8365ab115deef67 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Wed, 18 Jun 2014 14:45:43 +1000 Subject: [PATCH] Admin can remove producer properties --- .../admin/producer_properties_controller.rb | 16 ++++++++++----- .../spree/admin/base_helper_decorator.rb | 20 +++++++++++++++++++ .../_producer_property_fields.html.haml | 2 +- spec/features/admin/enterprises_spec.rb | 19 ++++++++++++++++++ 4 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 app/helpers/spree/admin/base_helper_decorator.rb diff --git a/app/controllers/admin/producer_properties_controller.rb b/app/controllers/admin/producer_properties_controller.rb index bc12141b52..b297e74ff2 100644 --- a/app/controllers/admin/producer_properties_controller.rb +++ b/app/controllers/admin/producer_properties_controller.rb @@ -1,19 +1,25 @@ module Admin class ProducerPropertiesController < ResourceController - before_filter :find_properties - + before_filter :load_enterprise + before_filter :load_properties before_filter :setup_property, only: [:index] - private - def find_properties + def collection_url + main_app.admin_enterprise_producer_properties_url(@enterprise) + end + + def load_enterprise + @enterprise = Enterprise.find params[:enterprise_id] + end + + def load_properties @properties = Spree::Property.pluck(:name) end def setup_property - @enterprise = Enterprise.find params[:enterprise_id] @enterprise.producer_properties.build end end diff --git a/app/helpers/spree/admin/base_helper_decorator.rb b/app/helpers/spree/admin/base_helper_decorator.rb new file mode 100644 index 0000000000..e278626c5c --- /dev/null +++ b/app/helpers/spree/admin/base_helper_decorator.rb @@ -0,0 +1,20 @@ +module Spree + module Admin + module BaseHelper + # Add url option to pass in link URL + def link_to_remove_fields(name, f, options = {}) + name = '' if options[:no_text] + options[:class] = '' unless options[:class] + options[:class] += 'no-text with-tip' if options[:no_text] + + url = if f.object.persisted? + options[:url] || [:admin, f.object] + else + '#' + end + + link_to_with_icon('icon-trash', name, url, :class => "remove_fields #{options[:class]}", :data => {:action => 'remove'}, :title => t(:remove)) + f.hidden_field(:_destroy) + end + end + end +end diff --git a/app/views/admin/producer_properties/_producer_property_fields.html.haml b/app/views/admin/producer_properties/_producer_property_fields.html.haml index 0732bffa75..242172d9e0 100644 --- a/app/views/admin/producer_properties/_producer_property_fields.html.haml +++ b/app/views/admin/producer_properties/_producer_property_fields.html.haml @@ -8,4 +8,4 @@ = f.text_field :value, :class => 'autocomplete' %td.actions - unless @enterprise.producer_properties.empty? - -#= link_to_remove_fields t(:remove), f, :no_text => true + = link_to_remove_fields t(:remove), f, no_text: true, url: (f.object.persisted? && main_app.admin_enterprise_producer_property_path(@enterprise, f.object)) diff --git a/spec/features/admin/enterprises_spec.rb b/spec/features/admin/enterprises_spec.rb index b868434952..e07949aeca 100644 --- a/spec/features/admin/enterprises_spec.rb +++ b/spec/features/admin/enterprises_spec.rb @@ -206,6 +206,25 @@ feature %q{ s.producer_properties.first.property.presentation.should == "Biodynamic" s.producer_properties.first.value.should == "Shininess" end + + it "removes producer properties", js: true do + # Given a producer enterprise with a property + s = create(:supplier_enterprise) + pp = s.producer_properties.create! property_name: 'Certified Organic', value: 'NASAA 12345' + + # When I go to its properties page + login_to_admin_section + visit main_app.admin_enterprise_producer_properties_path(s) + + # And I remove the property + page.should have_field 'enterprise_producer_properties_attributes_0_property_name', with: 'Certified Organic' + within("#producer_property_#{pp.id}") { page.find('a.remove_fields').click } + + # Then the property should have been removed + page.should_not have_field 'enterprise_producer_properties_attributes_0_property_name', with: 'Certified Organic' + page.should_not have_selector '#progress' + s.producer_properties(true).should be_empty + end end