mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Merge branch 'master' into make-specs-accurate
This commit is contained in:
2
Gemfile
2
Gemfile
@@ -132,7 +132,7 @@ group :test, :development do
|
||||
gem 'bullet'
|
||||
gem 'capybara'
|
||||
gem 'database_cleaner', require: false
|
||||
gem "factory_bot_rails", '6.1.0', require: false
|
||||
gem "factory_bot_rails", '6.2.0', require: false
|
||||
gem 'fuubar', '~> 2.5.1'
|
||||
gem 'json_spec', '~> 1.1.4'
|
||||
gem 'knapsack'
|
||||
|
||||
@@ -223,10 +223,10 @@ GEM
|
||||
eventmachine (1.2.7)
|
||||
excon (0.79.0)
|
||||
execjs (2.7.0)
|
||||
factory_bot (6.1.0)
|
||||
factory_bot (6.2.0)
|
||||
activesupport (>= 5.0.0)
|
||||
factory_bot_rails (6.1.0)
|
||||
factory_bot (~> 6.1.0)
|
||||
factory_bot_rails (6.2.0)
|
||||
factory_bot (~> 6.2.0)
|
||||
railties (>= 5.0.0)
|
||||
faraday (1.3.0)
|
||||
faraday-net_http (~> 1.0)
|
||||
@@ -657,7 +657,7 @@ DEPENDENCIES
|
||||
devise-token_authenticatable
|
||||
dfc_provider!
|
||||
eventmachine (>= 1.2.3)
|
||||
factory_bot_rails (= 6.1.0)
|
||||
factory_bot_rails (= 6.2.0)
|
||||
ffaker
|
||||
figaro
|
||||
flipper
|
||||
|
||||
@@ -44,7 +44,7 @@ module Permissions
|
||||
def filtered_orders(orders)
|
||||
return orders unless filter_orders?
|
||||
|
||||
orders.complete.not_state(:canceled).search(search_params).result
|
||||
orders.complete.not_state(:canceled).ransack(search_params).result
|
||||
end
|
||||
|
||||
def filter_orders?
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
- if Rails.env.test?
|
||||
%script{type: "text/javascript"}
|
||||
= render file: "spec/support/fixtures/stripejs-mock.js"
|
||||
= raw render file: "spec/support/fixtures/stripejs-mock.js"
|
||||
- else
|
||||
%script{src: "https://js.stripe.com/v3/", type: "text/javascript"}
|
||||
|
||||
@@ -317,6 +317,8 @@ ca:
|
||||
height: "Alçada"
|
||||
width: "Amplada"
|
||||
depth: "Profunditat"
|
||||
payment_could_not_process: "No s'ha pogut processar el pagament"
|
||||
payment_could_not_complete: "No s'ha pogut completar el pagament"
|
||||
actions:
|
||||
create_and_add_another: "Crea i afegeix-ne una altra"
|
||||
create: "Crear"
|
||||
|
||||
@@ -317,6 +317,8 @@ de_DE:
|
||||
height: "Höhe"
|
||||
width: "Breite"
|
||||
depth: "Tiefe"
|
||||
payment_could_not_process: "Die Zahlung konnte nicht verarbeitet werden"
|
||||
payment_could_not_complete: "Die Zahlung konnte nicht abgeschlossen werden"
|
||||
actions:
|
||||
create_and_add_another: "Erstellen und weitere hinzufügen"
|
||||
create: "Neu"
|
||||
|
||||
@@ -317,6 +317,8 @@ en_FR:
|
||||
height: "Height"
|
||||
width: "Width"
|
||||
depth: "Depth"
|
||||
payment_could_not_process: "The payment could not be processed"
|
||||
payment_could_not_complete: "The payment could not be completed"
|
||||
actions:
|
||||
create_and_add_another: "Create and Add Another"
|
||||
create: "Create"
|
||||
|
||||
@@ -317,6 +317,8 @@ es:
|
||||
height: "Altura"
|
||||
width: "Anchura"
|
||||
depth: "Profundidad"
|
||||
payment_could_not_process: "No se pudo procesar el pago"
|
||||
payment_could_not_complete: "No se pudo completar el pago"
|
||||
actions:
|
||||
create_and_add_another: "Crear y agregar otro"
|
||||
create: "Crear"
|
||||
|
||||
@@ -317,6 +317,8 @@ fr:
|
||||
height: "Hauteur"
|
||||
width: "Largeur"
|
||||
depth: "Profondeur"
|
||||
payment_could_not_process: "Le paiement n'a pas pu être traité"
|
||||
payment_could_not_complete: "Le paiement n'a pas pu être finalisé"
|
||||
actions:
|
||||
create_and_add_another: "Créer et ajouter nouveau"
|
||||
create: "Créer"
|
||||
|
||||
@@ -93,8 +93,10 @@ Openfoodnetwork::Application.routes.draw do
|
||||
|
||||
get 'sitemap.xml', to: 'sitemap#index', defaults: { format: 'xml' }
|
||||
|
||||
# Mount DFC API endpoints
|
||||
mount DfcProvider::Engine, at: '/'
|
||||
unless Rails.env.production?
|
||||
# Mount DFC API endpoints
|
||||
mount DfcProvider::Engine, at: '/'
|
||||
end
|
||||
|
||||
# Mount Spree's routes
|
||||
mount Spree::Core::Engine, :at => '/'
|
||||
|
||||
@@ -17,7 +17,7 @@ describe OrderManagement::Reports::BulkCoopController, type: :controller do
|
||||
it "renders the report form" do
|
||||
get :new
|
||||
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(response).to render_template(new_template_path)
|
||||
end
|
||||
end
|
||||
@@ -32,7 +32,7 @@ describe OrderManagement::Reports::BulkCoopController, type: :controller do
|
||||
}, report_format: "csv"
|
||||
}
|
||||
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(response.body).not_to be_blank
|
||||
expect(response.header["Content-Type"]).to eq("text/csv")
|
||||
end
|
||||
|
||||
@@ -17,7 +17,7 @@ describe OrderManagement::Reports::EnterpriseFeeSummariesController, type: :cont
|
||||
it "renders the report form" do
|
||||
get :new
|
||||
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(response).to render_template(new_template_path)
|
||||
end
|
||||
end
|
||||
@@ -29,7 +29,7 @@ describe OrderManagement::Reports::EnterpriseFeeSummariesController, type: :cont
|
||||
report: { start_at: "2018-10-09 07:30:00" }, report_format: "csv"
|
||||
}
|
||||
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(response.body).not_to be_blank
|
||||
expect(response.header["Content-Type"]).to eq("text/csv")
|
||||
end
|
||||
|
||||
@@ -36,7 +36,7 @@ module OpenFoodNetwork
|
||||
def search
|
||||
@permissions.visible_orders.select("DISTINCT spree_orders.*").
|
||||
complete.not_state(:canceled).
|
||||
search(@params[:q])
|
||||
ransack(@params[:q])
|
||||
end
|
||||
|
||||
def table
|
||||
|
||||
@@ -51,7 +51,7 @@ module OpenFoodNetwork
|
||||
not_state(:canceled).
|
||||
distributed_by_user(@user).
|
||||
managed_by(@user).
|
||||
search(params[:q])
|
||||
ransack(params[:q])
|
||||
end
|
||||
|
||||
def orders
|
||||
|
||||
@@ -36,7 +36,7 @@ module OpenFoodNetwork
|
||||
end
|
||||
|
||||
def search
|
||||
Spree::Order.complete.not_state(:canceled).managed_by(@user).search(params[:q])
|
||||
Spree::Order.complete.not_state(:canceled).managed_by(@user).ransack(params[:q])
|
||||
end
|
||||
|
||||
def table_items
|
||||
|
||||
@@ -38,7 +38,7 @@ module OpenFoodNetwork
|
||||
attr_reader :orders_relation, :order_permissions
|
||||
|
||||
def search_orders
|
||||
orders_relation.search(@params[:q])
|
||||
orders_relation.ransack(@params[:q])
|
||||
end
|
||||
|
||||
# From the line_items given, returns the ones that are editable by the user
|
||||
|
||||
@@ -20,7 +20,7 @@ module OpenFoodNetwork
|
||||
|
||||
def search
|
||||
permissions = ::Permissions::Order.new(@user)
|
||||
permissions.editable_orders.complete.not_state(:canceled).search(@opts[:q])
|
||||
permissions.editable_orders.complete.not_state(:canceled).ransack(@opts[:q])
|
||||
end
|
||||
|
||||
def orders
|
||||
|
||||
@@ -31,7 +31,7 @@ describe Api::V0::EnterprisesController, type: :controller do
|
||||
|
||||
it "creates as sells=any when it is not a producer" do
|
||||
api_post :create, { enterprise: new_enterprise_params }
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 201
|
||||
|
||||
enterprise = Enterprise.last
|
||||
expect(enterprise.sells).to eq('any')
|
||||
@@ -44,7 +44,7 @@ describe Api::V0::EnterprisesController, type: :controller do
|
||||
enterprise: new_enterprise_params.
|
||||
merge({ user_ids: [enterprise_owner.id, manager1.id, manager2.id] })
|
||||
}
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 201
|
||||
|
||||
enterprise = Enterprise.last
|
||||
expect(enterprise.user_ids).to match_array([enterprise_owner.id, manager1.id, manager2.id])
|
||||
@@ -83,7 +83,7 @@ describe Api::V0::EnterprisesController, type: :controller do
|
||||
|
||||
it "I can update enterprise image" do
|
||||
api_post :update_image, logo: 'a logo', id: enterprise.id
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -30,7 +30,7 @@ module Api
|
||||
it "removes logo" do
|
||||
spree_delete :destroy, enterprise_id: enterprise
|
||||
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(json_response["id"]).to eq enterprise.id
|
||||
enterprise.reload
|
||||
expect(enterprise.logo?).to be false
|
||||
@@ -53,7 +53,7 @@ module Api
|
||||
|
||||
it "allows removal of logo" do
|
||||
spree_delete :destroy, enterprise_id: enterprise
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
end
|
||||
end
|
||||
|
||||
@@ -62,7 +62,7 @@ module Api
|
||||
|
||||
it "allows removal of logo" do
|
||||
spree_delete :destroy, enterprise_id: enterprise
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -164,6 +164,7 @@ describe Api::V0::ProductsController, type: :controller do
|
||||
|
||||
context 'as an enterprise user' do
|
||||
let(:current_api_user) { supplier_enterprise_user(supplier) }
|
||||
let!(:variant) { create(:variant, product_id: product.id) }
|
||||
|
||||
it 'responds with a successful response' do
|
||||
spree_post :clone, product_id: product.id, format: :json
|
||||
@@ -183,6 +184,27 @@ describe Api::V0::ProductsController, type: :controller do
|
||||
expect(response.status).to eq(201)
|
||||
expect(json_response['name']).to eq("COPY OF #{product_with_image.name}")
|
||||
end
|
||||
|
||||
# test cases related to bug #660: product duplication clones master variant
|
||||
|
||||
# stock info - clone is set to zero
|
||||
it '(does not) clone the stock info of the product' do
|
||||
spree_post :clone, product_id: product.id, format: :json
|
||||
expect(json_response['on_hand']).to eq(0)
|
||||
end
|
||||
|
||||
# variants: only the master variant of the product is cloned
|
||||
it '(does not) clone variants from a product with several variants' do
|
||||
spree_post :clone, product_id: product.id, format: :json
|
||||
expect(Spree::Product.second.variants.count).not_to eq Spree::Product.first.variants.count
|
||||
end
|
||||
|
||||
#price info: it does not consider price changes; it considers the price set upon product creation
|
||||
it '(does not) clone price which was updated' do
|
||||
product.update_attribute(:price, 2.22)
|
||||
spree_post :clone, product_id: product.id, format: :json
|
||||
expect(json_response['price']).not_to eq(2.22)
|
||||
end
|
||||
end
|
||||
|
||||
context 'as an administrator' do
|
||||
|
||||
@@ -30,7 +30,7 @@ module Api
|
||||
it "removes promo image" do
|
||||
spree_delete :destroy, enterprise_id: enterprise
|
||||
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(json_response["id"]).to eq enterprise.id
|
||||
enterprise.reload
|
||||
expect(enterprise.promo_image?).to be false
|
||||
@@ -53,7 +53,7 @@ module Api
|
||||
|
||||
it "allows removal of promo image" do
|
||||
spree_delete :destroy, enterprise_id: enterprise
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
end
|
||||
end
|
||||
|
||||
@@ -62,7 +62,7 @@ module Api
|
||||
|
||||
it "allows removal of promo image" do
|
||||
spree_delete :destroy, enterprise_id: enterprise
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -10,21 +10,21 @@ module Api
|
||||
it "returns alive when up to date" do
|
||||
Spree::Config.last_job_queue_heartbeat_at = Time.now.in_time_zone
|
||||
get :job_queue
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(response.body).to eq({ alive: true }.to_json)
|
||||
end
|
||||
|
||||
it "returns dead otherwise" do
|
||||
Spree::Config.last_job_queue_heartbeat_at = 10.minutes.ago
|
||||
get :job_queue
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(response.body).to eq({ alive: false }.to_json)
|
||||
end
|
||||
|
||||
it "returns dead when no heartbeat recorded" do
|
||||
Spree::Config.last_job_queue_heartbeat_at = nil
|
||||
get :job_queue
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(response.body).to eq({ alive: false }.to_json)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -26,7 +26,7 @@ module Api
|
||||
it "removes terms and conditions file" do
|
||||
spree_delete :destroy, enterprise_id: enterprise
|
||||
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(json_response["id"]).to eq enterprise.id
|
||||
enterprise.reload
|
||||
expect(enterprise.terms_and_conditions?).to be false
|
||||
|
||||
@@ -118,7 +118,7 @@ describe CheckoutController, type: :controller do
|
||||
|
||||
it "does not redirect" do
|
||||
get :edit
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
end
|
||||
|
||||
it "returns a specific flash message when Spree::Core::GatewayError occurs" do
|
||||
|
||||
@@ -36,7 +36,7 @@ describe ShopController, type: :controller do
|
||||
oc2 = create(:simple_order_cycle, distributors: [distributor])
|
||||
|
||||
spree_post :order_cycle, order_cycle_id: oc2.id
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(controller.current_order_cycle).to eq(oc2)
|
||||
end
|
||||
|
||||
@@ -48,7 +48,7 @@ describe ShopController, type: :controller do
|
||||
oc2 = create(:simple_order_cycle, distributors: [distributor])
|
||||
|
||||
spree_post :order_cycle, order_cycle_id: oc2.id
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(response.body).to have_content oc2.id
|
||||
end
|
||||
|
||||
@@ -68,7 +68,7 @@ describe ShopController, type: :controller do
|
||||
|
||||
it "returns the new order cycle details" do
|
||||
spree_post :order_cycle, order_cycle_id: oc2.id
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(response.body).to have_content oc2.id
|
||||
end
|
||||
end
|
||||
|
||||
@@ -24,7 +24,7 @@ describe Spree::OrdersController, type: :controller do
|
||||
|
||||
it "loads page" do
|
||||
get :show, params: { id: order.number, token: order.token }
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
end
|
||||
|
||||
it "stores order token in session as 'access_token'" do
|
||||
@@ -43,7 +43,7 @@ describe Spree::OrdersController, type: :controller do
|
||||
|
||||
it "loads page" do
|
||||
get :show, params: { id: order.number }
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
end
|
||||
end
|
||||
|
||||
@@ -52,7 +52,7 @@ describe Spree::OrdersController, type: :controller do
|
||||
|
||||
it "loads page" do
|
||||
get :show, params: { id: order.number }
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
end
|
||||
end
|
||||
|
||||
@@ -113,7 +113,7 @@ describe Spree::OrdersController, type: :controller do
|
||||
it "completes the payment" do
|
||||
get :show, params: { id: order.number, payment_intent: payment_intent }
|
||||
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
payment.reload
|
||||
expect(payment.cvv_response_message).to be nil
|
||||
expect(payment.state).to eq("completed")
|
||||
@@ -158,7 +158,7 @@ describe Spree::OrdersController, type: :controller do
|
||||
it "does not complete the payment" do
|
||||
get :show, params: { id: order.number, payment_intent: payment_intent }
|
||||
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(flash[:error]).to eq("#{I18n.t("payment_could_not_process")}. ")
|
||||
payment.reload
|
||||
expect(payment.cvv_response_message).to eq("https://stripe.com/redirect")
|
||||
|
||||
@@ -15,7 +15,7 @@ describe UserPasswordsController, type: :controller do
|
||||
describe "create" do
|
||||
it "returns errors" do
|
||||
spree_post :create, spree_user: {}
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
expect(response).to render_template "spree/user_passwords/new"
|
||||
end
|
||||
|
||||
|
||||
@@ -114,6 +114,70 @@ feature '
|
||||
expect(page).to have_content "Unit value can't be blank"
|
||||
end
|
||||
end
|
||||
|
||||
describe "deleting", js: true do
|
||||
let!(:product1) { create(:simple_product, name: 'a product to keep', supplier: @supplier) }
|
||||
|
||||
context 'a simple product' do
|
||||
let!(:product2) { create(:simple_product, name: 'a product to delete', supplier: @supplier) }
|
||||
|
||||
before do
|
||||
login_as_admin_and_visit spree.admin_products_path
|
||||
|
||||
within "#p_#{product2.id}" do
|
||||
accept_alert { page.find("[data-powertip=Remove]").click }
|
||||
end
|
||||
visit current_path
|
||||
end
|
||||
|
||||
it 'removes it from the product list' do
|
||||
expect(page).not_to have_selector "#p_#{product2.id}"
|
||||
expect(page).to have_selector "#p_#{product1.id}"
|
||||
end
|
||||
end
|
||||
|
||||
context 'a shipped product' do
|
||||
let!(:order) { create(:shipped_order, line_items_count: 1) }
|
||||
let!(:line_item) { order.reload.line_items.first }
|
||||
|
||||
before do
|
||||
login_as_admin_and_visit spree.admin_products_path
|
||||
|
||||
within "#p_#{order.variants.first.product_id}" do
|
||||
accept_alert { page.find("[data-powertip=Remove]").click }
|
||||
end
|
||||
visit current_path
|
||||
end
|
||||
it 'removes it from the product list' do
|
||||
expect(page).to have_selector "#p_#{product1.id}"
|
||||
expect(page).not_to have_selector "#p_#{order.variants.first.product_id}"
|
||||
end
|
||||
|
||||
it 'keeps the line item on the order (admin)' do
|
||||
visit spree.admin_orders_path
|
||||
find(".icon-edit").click
|
||||
expect(page).to have_content(line_item.product.name.to_s)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'cloning' do
|
||||
let!(:product1) { create(:simple_product, name: 'a weight product', supplier: @supplier, variant_unit: "weight") }
|
||||
|
||||
context 'products', js: true do
|
||||
before { login_as_admin_and_visit spree.admin_products_path }
|
||||
|
||||
it 'creates a copy of the product' do
|
||||
within "#p_#{product1.id}" do
|
||||
page.find("[data-powertip=Clone]").click
|
||||
end
|
||||
visit current_path
|
||||
within "#p_#{product1.id + 1}" do
|
||||
expect(page).to have_input "product_name", with: 'COPY OF a weight product'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "as an enterprise user" do
|
||||
let!(:tax_category) { create(:tax_category) }
|
||||
|
||||
@@ -192,7 +192,7 @@ feature "
|
||||
end
|
||||
end
|
||||
|
||||
xit "displays an error when unauthorised to access the page" do
|
||||
it "displays an error when unauthorised to access the page" do
|
||||
fill_in "variant-overrides-#{variant.id}-price", with: '777.77'
|
||||
fill_in "variant-overrides-#{variant.id}-count_on_hand", with: '123'
|
||||
expect(page).to have_content "Changes to one override remain unsaved."
|
||||
@@ -209,7 +209,7 @@ feature "
|
||||
end.to change(VariantOverride, :count).by(0)
|
||||
end
|
||||
|
||||
xit "displays an error when unauthorised to update a particular override" do
|
||||
it "displays an error when unauthorised to update a particular override" do
|
||||
fill_in "variant-overrides-#{variant_related.id}-price", with: '777.77'
|
||||
fill_in "variant-overrides-#{variant_related.id}-count_on_hand", with: '123'
|
||||
expect(page).to have_content "Changes to one override remain unsaved."
|
||||
|
||||
@@ -195,7 +195,7 @@ describe Enterprise do
|
||||
e2 = create(:enterprise, permalink: "not_taken")
|
||||
e2.permalink = "taken"
|
||||
e2.save
|
||||
expect(e2.permalink).to eq "not_taken"
|
||||
expect(e2.reload.permalink).to eq "not_taken"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1141,12 +1141,8 @@ describe Spree::Order do
|
||||
end
|
||||
|
||||
context "when finalized fee adjustments exist on the order" do
|
||||
let(:payment_fee_adjustment) { order.all_adjustments.payment_fee.first }
|
||||
let(:shipping_fee_adjustment) { order.shipment_adjustments.first }
|
||||
|
||||
before do
|
||||
payment_fee_adjustment.finalize!
|
||||
shipping_fee_adjustment.finalize!
|
||||
order.all_adjustments.each(&:finalize!)
|
||||
order.reload
|
||||
end
|
||||
|
||||
@@ -1155,6 +1151,7 @@ describe Spree::Order do
|
||||
|
||||
# Check if fees got updated
|
||||
order.reload
|
||||
|
||||
expect(order.adjustment_total).to eq expected_fees
|
||||
expect(order.shipment.adjustments.tax.inclusive.sum(:amount)).to eq 1.2
|
||||
expect(order.shipment.included_tax_total).to eq 1.2
|
||||
|
||||
@@ -38,7 +38,7 @@ describe ShopController, type: :controller, performance: true do
|
||||
it "returns products via json" do
|
||||
results = multi_benchmark(3, cache_key_patterns: cache_key_patterns) do
|
||||
get :products, xhr: true
|
||||
expect(response).to be_success
|
||||
expect(response.status).to eq 200
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user