Merge branch 'master' into make-specs-accurate

This commit is contained in:
Andy Brett
2021-05-10 16:10:33 -07:00
committed by GitHub
32 changed files with 145 additions and 50 deletions

View File

@@ -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'

View File

@@ -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

View File

@@ -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?

View File

@@ -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"}

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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 => '/'

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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")

View File

@@ -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

View File

@@ -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) }

View File

@@ -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."

View File

@@ -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

View File

@@ -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

View File

@@ -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