diff --git a/app/models/spree/shipping_method_decorator.rb b/app/models/spree/shipping_method_decorator.rb new file mode 100644 index 0000000000..661b7194c5 --- /dev/null +++ b/app/models/spree/shipping_method_decorator.rb @@ -0,0 +1,6 @@ +Spree::ShippingMethod.class_eval do + belongs_to :distributor, class_name: 'Enterprise' + attr_accessible :distributor_id + + validates_presence_of :distributor_id +end diff --git a/app/overrides/spree/admin/shipping_methods/_form/add_distributor.html.haml.deface b/app/overrides/spree/admin/shipping_methods/_form/add_distributor.html.haml.deface new file mode 100644 index 0000000000..a3d2455e00 --- /dev/null +++ b/app/overrides/spree/admin/shipping_methods/_form/add_distributor.html.haml.deface @@ -0,0 +1,5 @@ +/ insert_bottom "[data-hook='admin_shipping_method_form_availability_fields'] > fieldset" + += f.field_container :shipping_category do + = f.label :distributor_id, 'Distributor' + = f.collection_select :distributor_id, Enterprise.is_distributor, :id, :name, {include_blank: false}, {class: 'select2 fullwidth'} diff --git a/db/migrate/20130830012138_add_distributor_id_to_shipping_methods.rb b/db/migrate/20130830012138_add_distributor_id_to_shipping_methods.rb new file mode 100644 index 0000000000..3039475a10 --- /dev/null +++ b/db/migrate/20130830012138_add_distributor_id_to_shipping_methods.rb @@ -0,0 +1,6 @@ +class AddDistributorIdToShippingMethods < ActiveRecord::Migration + def change + add_column :spree_shipping_methods, :distributor_id, :integer + add_index :spree_shipping_methods, :distributor_id + end +end diff --git a/db/schema.rb b/db/schema.rb index dbedb06f59..9dfb974472 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130814010857) do +ActiveRecord::Schema.define(:version => 20130830012138) do create_table "adjustment_metadata", :force => true do |t| t.integer "adjustment_id" @@ -717,8 +717,11 @@ ActiveRecord::Schema.define(:version => 20130814010857) do t.boolean "match_all" t.boolean "match_one" t.datetime "deleted_at" + t.integer "distributor_id" end + add_index "spree_shipping_methods", ["distributor_id"], :name => "index_spree_shipping_methods_on_distributor_id" + create_table "spree_skrill_transactions", :force => true do |t| t.string "email" t.float "amount" diff --git a/spec/factories.rb b/spec/factories.rb index 7385352ac5..2bef999443 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -151,6 +151,7 @@ FactoryGirl.modify do end factory :shipping_method do + distributor { Enterprise.is_distributor.first || FactoryGirl.create(:distributor_enterprise) } display_on '' end diff --git a/spec/features/admin/shipping_methods_spec.rb b/spec/features/admin/shipping_methods_spec.rb index 789ebbfe9c..89889702e0 100644 --- a/spec/features/admin/shipping_methods_spec.rb +++ b/spec/features/admin/shipping_methods_spec.rb @@ -14,13 +14,14 @@ feature 'shipping methods' do distributor = create(:distributor_enterprise, name: 'Aeronautical Adventures') # When I create a shipping method and set the distributor - visit new_admin_shipping_method_path - fill_in :name, with: 'Carrier Pidgeon' + visit spree.new_admin_shipping_method_path + fill_in 'shipping_method_name', with: 'Carrier Pidgeon' select 'Aeronautical Adventures', from: 'shipping_method_distributor_id' click_button 'Create' # Then the shipping method should have its distributor set - flash_message.should == 'Your shipping method has been created' + flash_message.should == 'Shipping method "Carrier Pidgeon" has been successfully created!' + sm = Spree::ShippingMethod.last sm.name.should == 'Carrier Pidgeon' sm.distributor.should == distributor diff --git a/spec/models/shipping_method_spec.rb b/spec/models/shipping_method_spec.rb new file mode 100644 index 0000000000..77f68d7ad6 --- /dev/null +++ b/spec/models/shipping_method_spec.rb @@ -0,0 +1,13 @@ +require 'spec_helper' + +module Spree + describe ShippingMethod do + it "should be valid when built from factory" do + build(:shipping_method).should be_valid + end + + it "should require a distributor" do + build(:shipping_method, distributor: nil).should_not be_valid + end + end +end