mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-27 01:43:22 +00:00
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:
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
55
spec/support/controller_requests_helper.rb
Normal file
55
spec/support/controller_requests_helper.rb
Normal 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
|
||||
Reference in New Issue
Block a user