From 544e6e074a3df1af83ed313ca4282426a4327a50 Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Fri, 19 Sep 2014 14:38:59 +1000 Subject: [PATCH 1/3] Stop being lazy --- spec/features/admin/orders_spec.rb | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/spec/features/admin/orders_spec.rb b/spec/features/admin/orders_spec.rb index d45778635a..3ed4c4ca2f 100644 --- a/spec/features/admin/orders_spec.rb +++ b/spec/features/admin/orders_spec.rb @@ -110,10 +110,10 @@ feature %q{ let(:coordinator2) { create(:distributor_enterprise) } let!(:order_cycle1) { create(:order_cycle, coordinator: coordinator1) } let!(:order_cycle2) { create(:simple_order_cycle, coordinator: coordinator2) } - let(:supplier1) { order_cycle1.suppliers.first } - let(:supplier2) { order_cycle1.suppliers.last } - let(:distributor1) { order_cycle1.distributors.first } - let(:distributor2) { order_cycle1.distributors.last } + let!(:supplier1) { order_cycle1.suppliers.first } + let!(:supplier2) { order_cycle1.suppliers.last } + let!(:distributor1) { order_cycle1.distributors.first } + let!(:distributor2) { order_cycle1.distributors.last } let(:product) { order_cycle1.products.first } before(:each) do @@ -132,19 +132,6 @@ feature %q{ expect(page).to have_content 'ADD PRODUCT' targetted_select2_search product.name, from: '#add_variant_id', dropdown_css: '.select2-drop' - puts "c1: " + coordinator1.id.to_s + " "+ coordinator1.name - puts "c2: " + coordinator2.id.to_s + " "+ coordinator2.name - puts "s1: " + supplier1.id.to_s + " "+ supplier1.name - puts "s2: " + supplier2.id.to_s + " "+ supplier2.name - puts "d1: " + distributor1.id.to_s + " "+ distributor1.name - puts "d2: " + distributor2.id.to_s + " "+ distributor2.name - order_cycle1.distributors.each do |distributor| - puts "oc1d: " + distributor.id.to_s + " "+ distributor.name - end - Enterprise.is_distributor.managed_by(@enterprise_user).each do |distributor| - puts "eud: " + distributor.id.to_s + " "+ distributor.name - end - click_link 'Add' page.has_selector? "table.index tbody[data-hook='admin_order_form_line_items'] tr" # Wait for JS expect(page).to have_selector 'td', text: product.name From eeb54f3f76d781a24f39ffe114a312c683532c7d Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Fri, 19 Sep 2014 15:30:53 +1000 Subject: [PATCH 2/3] Allow new user to create enterprises --- app/models/spree/ability_decorator.rb | 8 ++++++++ spec/models/spree/ability_spec.rb | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/app/models/spree/ability_decorator.rb b/app/models/spree/ability_decorator.rb index 5ded33f463..08fc4407ce 100644 --- a/app/models/spree/ability_decorator.rb +++ b/app/models/spree/ability_decorator.rb @@ -2,12 +2,17 @@ class AbilityDecorator include CanCan::Ability def initialize(user) + add_base_abilities user if is_new_user? user add_enterprise_management_abilities user if can_manage_enterprises? user add_product_management_abilities user if can_manage_products? user add_relationship_management_abilities user if can_manage_relationships? user end + def is_new_user?(user) + user.enterprises.blank? + end + def can_manage_enterprises?(user) user.enterprises.present? end @@ -22,6 +27,9 @@ class AbilityDecorator can_manage_enterprises? user end + def add_base_abilities(user) + can [:create], Enterprise + end def add_enterprise_management_abilities(user) # Spree performs authorize! on (:create, nil) when creating a new order from admin, and also (:search, nil) diff --git a/spec/models/spree/ability_spec.rb b/spec/models/spree/ability_spec.rb index cf17d7fe3a..78ca1db909 100644 --- a/spec/models/spree/ability_spec.rb +++ b/spec/models/spree/ability_spec.rb @@ -13,6 +13,13 @@ module Spree let(:enterprise_single) { create(:enterprise, type: 'single') } let(:enterprise_profile) { create(:enterprise, type: 'profile') } + describe "creating enterprises" do + it "can create enterprises straight off the bat" do + subject.is_new_user?(user).should be_true + expect(user).to have_ability :create, for: Enterprise + end + end + describe "managing enterprises" do it "can manage enterprises when the user has at least one enterprise assigned" do user.enterprise_roles.create! enterprise: enterprise_full From c6acbc6810a8875290c14932629736fa0741ddb3 Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Fri, 19 Sep 2014 16:09:26 +1000 Subject: [PATCH 3/3] Assigning @spree_api_key for store --- app/controllers/registration_controller.rb | 2 +- app/views/layouts/registration.html.haml | 2 +- lib/open_food_network/spree_api_key_loader.rb | 2 +- .../registration_controller_spec.rb | 24 +++++++++++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/app/controllers/registration_controller.rb b/app/controllers/registration_controller.rb index d58b10bd0b..47a1537b57 100644 --- a/app/controllers/registration_controller.rb +++ b/app/controllers/registration_controller.rb @@ -2,7 +2,7 @@ require 'open_food_network/spree_api_key_loader' class RegistrationController < BaseController include OpenFoodNetwork::SpreeApiKeyLoader - before_filter :load_spree_api_key, only: :index + before_filter :load_spree_api_key, only: [:index, :store] before_filter :check_user, except: :authenticate layout 'registration' diff --git a/app/views/layouts/registration.html.haml b/app/views/layouts/registration.html.haml index 8946a27de1..d6122cdc3b 100644 --- a/app/views/layouts/registration.html.haml +++ b/app/views/layouts/registration.html.haml @@ -31,6 +31,6 @@ %section{ role: "main" } = yield - + #footer %loading diff --git a/lib/open_food_network/spree_api_key_loader.rb b/lib/open_food_network/spree_api_key_loader.rb index 36fa4b9961..5eb7236221 100644 --- a/lib/open_food_network/spree_api_key_loader.rb +++ b/lib/open_food_network/spree_api_key_loader.rb @@ -9,4 +9,4 @@ module OpenFoodNetwork end end end -end \ No newline at end of file +end diff --git a/spec/controllers/registration_controller_spec.rb b/spec/controllers/registration_controller_spec.rb index 49efc005f6..13babdf89e 100644 --- a/spec/controllers/registration_controller_spec.rb +++ b/spec/controllers/registration_controller_spec.rb @@ -12,4 +12,28 @@ describe RegistrationController do response.should redirect_to registration_auth_path(anchor: "signup?after_login=/register/store") end end + + describe "loading data when user is logged in" do + let!(:user) { double(:user) } + + before do + controller.stub spree_current_user: user + user.stub spree_api_key: '12345' + user.stub last_incomplete_spree_order: nil + end + + describe "index" do + it "loads the spree api key" do + get :index + expect(assigns(:spree_api_key)).to eq '12345' + end + end + + describe "store" do + it "loads the spree api key" do + get :store + expect(assigns(:spree_api_key)).to eq '12345' + end + end + end end