Merge pull request #5547 from luisramos0/ctrl_hacks

Bring the spree_get spec helpers from spree and move them together with the api_get spec helpers
This commit is contained in:
Pau Pérez Fabregat
2020-06-05 17:34:16 +02:00
committed by GitHub
7 changed files with 79 additions and 53 deletions

View File

@@ -142,7 +142,6 @@ Layout/LineLength:
- spec/controllers/api/product_images_controller_spec.rb
- spec/controllers/api/products_controller_spec.rb
- spec/controllers/api/promo_images_controller_spec.rb
- spec/controllers/api/shipments_controller_spec.rb
- spec/controllers/api/variants_controller_spec.rb
- spec/controllers/cart_controller_spec.rb
- spec/controllers/checkout_controller_spec.rb

View File

@@ -4,8 +4,9 @@ describe Api::ShipmentsController, type: :controller do
render_views
let!(:shipment) { create(:shipment) }
let!(:attributes) { [:id, :tracking, :number, :cost, :shipped_at, :stock_location_name, :order_id] }
let!(:resource_scoping) { { order_id: shipment.order.to_param, id: shipment.to_param } }
let!(:attributes) do
[:id, :tracking, :number, :cost, :shipped_at, :stock_location_name, :order_id]
end
let(:current_api_user) { build(:user) }
before do
@@ -14,12 +15,12 @@ describe Api::ShipmentsController, type: :controller do
context "as a non-admin" do
it "cannot make a shipment ready" do
api_put :ready
api_put :ready, order_id: shipment.order.to_param, id: shipment.to_param
assert_unauthorized!
end
it "cannot make a shipment shipped" do
api_put :ship
api_put :ship, order_id: shipment.order.to_param, id: shipment.to_param
assert_unauthorized!
end
end
@@ -92,7 +93,7 @@ describe Api::ShipmentsController, type: :controller do
it "can make a shipment ready" do
allow_any_instance_of(Spree::Order).to receive_messages(paid?: true, complete?: true)
api_put :ready
api_put :ready, order_id: shipment.order.to_param, id: shipment.to_param
expect(attributes.all?{ |attr| json_response.key? attr.to_s }).to be_truthy
expect(json_response["state"]).to eq("ready")
@@ -101,7 +102,7 @@ describe Api::ShipmentsController, type: :controller do
it "cannot make a shipment ready if the order is unpaid" do
allow_any_instance_of(Spree::Order).to receive_messages(paid?: false)
api_put :ready
api_put :ready, order_id: shipment.order.to_param, id: shipment.to_param
expect(json_response["error"]).to eq("Cannot ready shipment.")
expect(response.status).to eq(422)
@@ -109,21 +110,26 @@ describe Api::ShipmentsController, type: :controller do
context 'for completed shipments' do
let(:order) { create :completed_order_with_totals }
let!(:resource_scoping) { { order_id: order.to_param, id: order.shipments.first.to_param } }
it 'adds a variant to a shipment' do
api_put :add, variant_id: variant.to_param, quantity: 2
api_put :add, variant_id: variant.to_param,
quantity: 2,
order_id: order.to_param,
id: order.shipments.first.to_param
expect(response.status).to eq(200)
expect(order.shipment.reload.inventory_units.select { |h| h['variant_id'] == variant.id }.size).to eq 2
expect(inventory_units_for(variant).size).to eq 2
end
it 'removes a variant from a shipment' do
order.contents.add(variant, 2)
api_put :remove, variant_id: variant.to_param, quantity: 1
api_put :remove, variant_id: variant.to_param,
quantity: 1,
order_id: order.to_param,
id: order.shipments.first.to_param
expect(response.status).to eq(200)
expect(order.shipment.reload.inventory_units.select { |h| h['variant_id'] == variant.id }.size).to eq(1)
expect(inventory_units_for(variant).size).to eq(1)
end
end
@@ -140,7 +146,9 @@ describe Api::ShipmentsController, type: :controller do
it "can transition a shipment from ready to ship" do
shipment.reload
api_put :ship, order_id: shipment.order.to_param, id: shipment.to_param, shipment: { tracking: "123123" }
api_put :ship, order_id: shipment.order.to_param,
id: shipment.to_param,
shipment: { tracking: "123123" }
expect(attributes.all?{ |attr| json_response.key? attr.to_s }).to be_truthy
expect(json_response["state"]).to eq("shipped")

View File

@@ -34,7 +34,7 @@ module Api
describe "#closed_shops" do
it "returns data for all closed shops" do
spree_get :closed_shops, nil
spree_get :closed_shops, {}
expect(json_response).not_to match hub.name

View File

@@ -113,7 +113,6 @@ describe Api::VariantsController, type: :controller do
let(:product) { create(:product) }
let(:variant) { product.master }
let(:resource_scoping) { { product_id: variant.product.to_param } }
context "deleted variants" do
before do
@@ -121,7 +120,7 @@ describe Api::VariantsController, type: :controller do
end
it "are visible by admin" do
api_get :index, show_deleted: 1
api_get :index, show_deleted: 1, product_id: variant.product.to_param
expect(json_response.count).to eq(2)
end
@@ -129,7 +128,7 @@ describe Api::VariantsController, type: :controller do
it "can create a new variant" do
original_number_of_variants = variant.product.variants.count
api_post :create, variant: { sku: "12345", unit_value: "weight", unit_description: "L" }
api_post :create, variant: { sku: "12345", unit_value: "weight", unit_description: "L" }, product_id: variant.product.to_param
expect(attributes.all?{ |attr| json_response.include? attr.to_s }).to eq(true)
expect(response.status).to eq(201)

View File

@@ -36,7 +36,6 @@ WebMock.disable_net_connect!(
# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
require 'spree/testing_support/controller_requests'
require 'spree/testing_support/capybara_ext'
require 'spree/api/testing_support/setup'
require 'spree/testing_support/authorization_helpers'
@@ -148,8 +147,8 @@ RSpec.configure do |config|
config.include Spree::UrlHelpers
config.include Spree::CheckoutHelpers
config.include Spree::MoneyHelper
config.include Spree::TestingSupport::ControllerRequests, type: :controller
config.include Spree::TestingSupport::Preferences
config.include ControllerRequestsHelper, type: :controller
config.include Devise::TestHelpers, type: :controller
config.extend Spree::Api::TestingSupport::Setup, type: :controller
config.include OpenFoodNetwork::ApiHelper, type: :controller

View File

@@ -1,34 +0,0 @@
require 'active_support/all'
module ControllerHacks
def api_get(action, params = {}, session = nil, flash = nil)
api_process(action, params, session, flash, "GET")
end
def api_post(action, params = {}, session = nil, flash = nil)
api_process(action, params, session, flash, "POST")
end
def api_put(action, params = {}, session = nil, flash = nil)
api_process(action, params, session, flash, "PUT")
end
def api_delete(action, params = {}, session = nil, flash = nil)
api_process(action, params, session, flash, "DELETE")
end
def api_process(action, params = {}, session = nil, flash = nil, method = "get")
scoping = respond_to?(:resource_scoping) ? resource_scoping : {}
process(action,
params.
merge(scoping).
reverse_merge!(use_route: :spree, format: :json),
session,
flash,
method)
end
end
RSpec.configure do |config|
config.include ControllerHacks, type: :controller
end

View File

@@ -0,0 +1,55 @@
# frozen_string_literal: true
require 'active_support/all'
module ControllerRequestsHelper
def api_get(action, params = {}, session = nil, flash = nil)
process_json_action(action, params, session, flash, "GET")
end
def api_post(action, params = {}, session = nil, flash = nil)
process_json_action(action, params, session, flash, "POST")
end
def api_put(action, params = {}, session = nil, flash = nil)
process_json_action(action, params, session, flash, "PUT")
end
def api_delete(action, params = {}, session = nil, flash = nil)
process_json_action(action, params, session, flash, "DELETE")
end
def spree_get(action, params = {}, session = nil, flash = nil)
process_action_with_route(action, params, session, flash, "GET")
end
def spree_post(action, params = {}, session = nil, flash = nil)
process_action_with_route(action, params, session, flash, "POST")
end
def spree_put(action, params = {}, session = nil, flash = nil)
process_action_with_route(action, params, session, flash, "PUT")
end
def spree_delete(action, params = {}, session = nil, flash = nil)
process_action_with_route(action, params, session, flash, "DELETE")
end
private
def process_json_action(action, params = {}, session = nil, flash = nil, method = "get")
process_action_with_route(action,
params.reverse_merge!(format: :json),
session,
flash,
method)
end
def process_action_with_route(action, params = {}, session = nil, flash = nil, method = "GET")
process(action,
params.reverse_merge!(use_route: :main_app),
session,
flash,
method)
end
end