From 65617e0e77fb4e37ac85f05a878303ee170c6a12 Mon Sep 17 00:00:00 2001 From: Andrew Spinks Date: Thu, 1 Aug 2013 10:16:20 +1000 Subject: [PATCH] Add enterprise roles for a user and wire up interface. --- app/models/spree/user_decorator.rb | 12 ++++ .../users_add_enterprise_management.rb | 6 ++ .../admin/users/_enterprises_form.html.haml | 14 ++++ spec/features/admin/enterprise_user_spec.rb | 65 +++++++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 app/overrides/users_add_enterprise_management.rb create mode 100644 app/views/spree/admin/users/_enterprises_form.html.haml create mode 100644 spec/features/admin/enterprise_user_spec.rb diff --git a/app/models/spree/user_decorator.rb b/app/models/spree/user_decorator.rb index 58870b787b..bbd4c30177 100644 --- a/app/models/spree/user_decorator.rb +++ b/app/models/spree/user_decorator.rb @@ -1,4 +1,16 @@ Spree.user_class.class_eval do has_many :enterprise_roles, :dependent => :destroy has_many :enterprises, through: :enterprise_roles + + accepts_nested_attributes_for :enterprise_roles, :allow_destroy => true + + attr_accessible :enterprise_ids, :enterprise_roles_attributes + + def build_enterprise_roles + Enterprise.all.each do |enterprise| + unless self.enterprise_roles.find_by_enterprise_id enterprise.id + self.enterprise_roles.build(:enterprise => enterprise) + end + end + end end diff --git a/app/overrides/users_add_enterprise_management.rb b/app/overrides/users_add_enterprise_management.rb new file mode 100644 index 0000000000..4ca1dd9e49 --- /dev/null +++ b/app/overrides/users_add_enterprise_management.rb @@ -0,0 +1,6 @@ +Deface::Override.new(:virtual_path => "spree/admin/users/_form", + :insert_after => "[data-hook='admin_user_form_fields']", + :partial => "spree/admin/users/enterprises_form", + :name => "add_enterprises_to_user" + ) + diff --git a/app/views/spree/admin/users/_enterprises_form.html.haml b/app/views/spree/admin/users/_enterprises_form.html.haml new file mode 100644 index 0000000000..411f7657d0 --- /dev/null +++ b/app/views/spree/admin/users/_enterprises_form.html.haml @@ -0,0 +1,14 @@ +%fieldset + %legend 'Manage Enterprises' + = f.field_container :enterprise_roles do + - f.object.build_enterprise_roles + %table + = f.fields_for :enterprise_roles do |enterprise_form| + %tr + %td + = hidden_field_tag "#{enterprise_form.object_name}[_destroy]", 1, :id => nil + = check_box_tag "#{enterprise_form.object_name}[_destroy]", 0, !enterprise_form.object.new_record? + %td + = label_tag "#{enterprise_form.object_name}[_destroy]", enterprise_form.object.enterprise.name + = enterprise_form.hidden_field :enterprise_id + diff --git a/spec/features/admin/enterprise_user_spec.rb b/spec/features/admin/enterprise_user_spec.rb new file mode 100644 index 0000000000..281e32e47c --- /dev/null +++ b/spec/features/admin/enterprise_user_spec.rb @@ -0,0 +1,65 @@ +require "spec_helper" + +feature %q{ + As a Super User + I want to setup users to manage an enterprise +} do + include AuthenticationWorkflow + include WebHelper + + background do + @new_user = create(:user, :email => 'enterprise@hub.com') + @enterprise1 = create(:enterprise, name: 'Enterprise 1') + @enterprise2 = create(:enterprise, name: 'Enterprise 2') + @enterprise3 = create(:enterprise, name: 'Enterprise 3') + @enterprise4 = create(:enterprise, name: 'Enterprise 4') + end + + context "creating an Enterprise User" do + context 'with no enterprises' do + scenario "assigning a user to an Enterprise" do + login_to_admin_section + + click_link 'Users' + click_link @new_user.email + click_link 'Edit' + + check @enterprise2.name + + click_button 'Update' + + @new_user.enterprises.count.should == 1 + @new_user.enterprises.first.name.should == @enterprise2.name + end + + end + + context 'with existing enterprises' do + + before(:each) do + @new_user.enterprise_roles.build(enterprise: @enterprise1).save + @new_user.enterprise_roles.build(enterprise: @enterprise3).save + end + + scenario "removing and add enterprises for a user" do + login_to_admin_section + + click_link 'Users' + click_link @new_user.email + click_link 'Edit' + + uncheck @enterprise3.name # remove + check @enterprise4.name # add + + click_button 'Update' + + @new_user.enterprises.count.should == 2 + @new_user.enterprises.should include(@enterprise1) + @new_user.enterprises.should include(@enterprise4) + end + + end + + + end +end