Merge pull request #7185 from openfoodfoundation/rails-5-2

Rails 5.2 upgrade
This commit is contained in:
Matt-Yorkley
2021-05-04 17:21:03 +02:00
committed by GitHub
28 changed files with 155 additions and 120 deletions

View File

@@ -931,7 +931,6 @@ Style/FrozenStringLiteralComment:
- 'app/helpers/spree/admin/base_helper.rb'
- 'app/helpers/spree/admin/general_settings_helper.rb'
- 'app/helpers/spree/admin/orders_helper.rb'
- 'app/helpers/spree/admin/payments_helper.rb'
- 'app/helpers/spree/admin/taxons_helper.rb'
- 'app/helpers/spree/admin/zones_helper.rb'
- 'app/helpers/spree/orders_helper.rb'

View File

@@ -4,7 +4,7 @@ source 'https://rubygems.org'
ruby "2.5.8"
git_source(:github) { |repo_name| "https://github.com/#{repo_name}.git" }
gem 'rails', '~> 5.0.0'
gem 'rails', '~> 5.2'
gem 'activemerchant', '>= 1.78.0'
gem 'angular-rails-templates', '>= 0.3.0'
@@ -75,6 +75,7 @@ gem 'dalli'
gem 'figaro'
gem 'geocoder'
gem 'gmaps4rails'
gem 'mimemagic', '> 0.3.5'
gem 'paper_trail', '~> 10.3.1'
gem 'paperclip', '~> 3.4.1'
gem 'rack-rewrite'

View File

@@ -47,47 +47,47 @@ PATH
GEM
remote: https://rubygems.org/
specs:
actioncable (5.0.7.2)
actionpack (= 5.0.7.2)
nio4r (>= 1.2, < 3.0)
websocket-driver (~> 0.6.1)
actionmailer (5.0.7.2)
actionpack (= 5.0.7.2)
actionview (= 5.0.7.2)
activejob (= 5.0.7.2)
actioncable (5.2.4.5)
actionpack (= 5.2.4.5)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailer (5.2.4.5)
actionpack (= 5.2.4.5)
actionview (= 5.2.4.5)
activejob (= 5.2.4.5)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (5.0.7.2)
actionview (= 5.0.7.2)
activesupport (= 5.0.7.2)
rack (~> 2.0)
rack-test (~> 0.6.3)
actionpack (5.2.4.5)
actionview (= 5.2.4.5)
activesupport (= 5.2.4.5)
rack (~> 2.0, >= 2.0.8)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionpack-action_caching (1.2.1)
actionpack (>= 4.0.0)
actionview (5.0.7.2)
activesupport (= 5.0.7.2)
actionview (5.2.4.5)
activesupport (= 5.2.4.5)
builder (~> 3.1)
erubis (~> 2.7.0)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
active_model_serializers (0.8.4)
activemodel (>= 3.0)
activejob (5.0.7.2)
activesupport (= 5.0.7.2)
activejob (5.2.4.5)
activesupport (= 5.2.4.5)
globalid (>= 0.3.6)
activemerchant (1.119.0)
activesupport (>= 4.2)
builder (>= 2.1.2, < 4.0.0)
i18n (>= 0.6.9)
nokogiri (~> 1.4)
activemodel (5.0.7.2)
activesupport (= 5.0.7.2)
activerecord (5.0.7.2)
activemodel (= 5.0.7.2)
activesupport (= 5.0.7.2)
arel (~> 7.0)
activemodel (5.2.4.5)
activesupport (= 5.2.4.5)
activerecord (5.2.4.5)
activemodel (= 5.2.4.5)
activesupport (= 5.2.4.5)
arel (>= 9.0)
activerecord-import (1.0.8)
activerecord (>= 3.2)
activerecord-postgresql-adapter (0.0.1)
@@ -98,7 +98,11 @@ GEM
multi_json (~> 1.11, >= 1.11.2)
rack (>= 1.5.2, < 3)
railties (>= 4.0)
activesupport (5.0.7.2)
activestorage (5.2.4.5)
actionpack (= 5.2.4.5)
activerecord (= 5.2.4.5)
marcel (~> 0.3.1)
activesupport (5.2.4.5)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
@@ -118,7 +122,7 @@ GEM
railties (>= 3, < 7)
angularjs-file-upload-rails (2.4.1)
angularjs-rails (1.5.5)
arel (7.1.4)
arel (9.0.0)
ast (2.4.2)
atomic (1.1.101)
awesome_nested_set (3.4.0)
@@ -216,7 +220,6 @@ GEM
diff-lcs (1.4.4)
docile (1.3.5)
erubi (1.10.0)
erubis (2.7.0)
eventmachine (1.2.7)
excon (0.79.0)
execjs (2.7.0)
@@ -328,10 +331,15 @@ GEM
nokogiri (>= 1.5.9)
mail (2.7.1)
mini_mime (>= 0.1.1)
marcel (0.3.3)
mimemagic (~> 0.3.2)
method_source (1.0.0)
mime-types (3.3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2020.1104)
mimemagic (0.3.10)
nokogiri (~> 1)
rake
mini_mime (1.0.3)
mini_portile2 (2.5.1)
mini_racer (0.4.0)
@@ -347,7 +355,7 @@ GEM
multipart-post (2.1.1)
mustermann (1.1.1)
ruby2_keywords (~> 0.0.1)
nio4r (2.5.2)
nio4r (2.5.7)
nokogiri (1.11.3)
mini_portile2 (~> 2.5.0)
racc (~> 1.4)
@@ -397,19 +405,20 @@ GEM
rack-rewrite (1.5.1)
rack-ssl (1.4.1)
rack
rack-test (0.6.3)
rack (>= 1.0)
rails (5.0.7.2)
actioncable (= 5.0.7.2)
actionmailer (= 5.0.7.2)
actionpack (= 5.0.7.2)
actionview (= 5.0.7.2)
activejob (= 5.0.7.2)
activemodel (= 5.0.7.2)
activerecord (= 5.0.7.2)
activesupport (= 5.0.7.2)
rack-test (1.1.0)
rack (>= 1.0, < 3)
rails (5.2.4.5)
actioncable (= 5.2.4.5)
actionmailer (= 5.2.4.5)
actionpack (= 5.2.4.5)
actionview (= 5.2.4.5)
activejob (= 5.2.4.5)
activemodel (= 5.2.4.5)
activerecord (= 5.2.4.5)
activestorage (= 5.2.4.5)
activesupport (= 5.2.4.5)
bundler (>= 1.3.0)
railties (= 5.0.7.2)
railties (= 5.2.4.5)
sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
@@ -424,12 +433,12 @@ GEM
i18n (>= 0.7, < 2)
railties (>= 5.0, < 6)
rails_safe_tasks (1.0.0)
railties (5.0.7.2)
actionpack (= 5.0.7.2)
activesupport (= 5.0.7.2)
railties (5.2.4.5)
actionpack (= 5.2.4.5)
activesupport (= 5.2.4.5)
method_source
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
thor (>= 0.19.0, < 2.0)
rainbow (3.0.0)
raindrops (0.19.1)
rake (13.0.3)
@@ -551,12 +560,12 @@ GEM
activesupport (>= 4.0)
sprockets (>= 3.0.0)
state_machines (0.5.0)
state_machines-activemodel (0.7.1)
activemodel (>= 4.1)
state_machines-activemodel (0.8.0)
activemodel (>= 5.1)
state_machines (>= 0.5.0)
state_machines-activerecord (0.6.0)
activerecord (>= 4.1)
state_machines-activemodel (>= 0.5.0)
state_machines-activerecord (0.8.0)
activerecord (>= 5.1)
state_machines-activemodel (>= 0.8.0)
stringex (2.8.5)
stripe (5.30.0)
temple (0.8.2)
@@ -596,7 +605,7 @@ GEM
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
websocket-driver (0.6.5)
websocket-driver (0.7.3)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
whenever (1.0.0)
@@ -680,6 +689,7 @@ DEPENDENCIES
kaminari (~> 1.2.1)
knapsack
letter_opener (>= 1.4.1)
mimemagic (> 0.3.5)
mini_racer (= 0.4.0)
monetize (~> 1.11)
oauth2 (~> 1.4.7)
@@ -695,7 +705,7 @@ DEPENDENCIES
rack-mini-profiler (< 3.0.0)
rack-rewrite
rack-ssl
rails (~> 5.0.0)
rails (~> 5.2)
rails-controller-testing
rails-i18n
rails_safe_tasks (~> 1.0)

View File

@@ -13,6 +13,20 @@ class ApplicationController < ActionController::Base
self.responder = ApplicationResponder
respond_to :html
helper 'spree/base'
helper 'spree/orders'
helper 'spree/payment_methods'
helper 'shared'
helper 'enterprises'
helper 'order_cycles'
helper 'order'
helper 'shop'
helper 'injection'
helper 'markdown'
helper 'footer_links'
helper 'discourse'
helper 'checkout'
protect_from_forgery
include Spree::Core::ControllerHelpers::Auth

View File

@@ -13,8 +13,6 @@ class BaseController < ApplicationController
include I18nHelper
include OrderCyclesHelper
helper 'spree/base'
before_action :set_locale
before_action :check_order_cycle_expiry

View File

@@ -2,9 +2,12 @@ require 'open_food_network/spree_api_key_loader'
class RegistrationController < BaseController
include OpenFoodNetwork::SpreeApiKeyLoader
layout 'registration'
helper 'map'
before_action :load_spree_api_key, only: [:index]
before_action :check_user, except: :authenticate
layout 'registration'
def index
@enterprise_attributes = { sells: 'none' }

View File

@@ -3,7 +3,15 @@ module Spree
class BaseController < ApplicationController
ssl_required
helper 'shared'
helper 'spree/admin/navigation'
helper 'spree/admin/orders'
helper 'admin/injection'
helper 'admin/orders'
helper 'admin/enterprises'
helper 'enterprise_fees'
helper 'angular_form'
layout '/spree/layouts/admin'
include I18nHelper

View File

@@ -68,14 +68,16 @@ module Spree
rescue Spree::Core::GatewayError => e
flash[:error] = e.message.to_s
ensure
redirect_to :back
redirect_back fallback_location: spree.admin_dashboard_path
end
def resend
Spree::OrderMailer.confirm_email_for_customer(@order.id, true).deliver_later
flash[:success] = t('admin.orders.order_email_resent')
respond_with(@order) { |format| format.html { redirect_to :back } }
respond_with(@order) do |format|
format.html { redirect_back(fallback_location: spree.admin_dashboard_path) }
end
end
def invoice

View File

@@ -8,7 +8,7 @@ module Spree
def fire
@return_authorization.public_send("#{params[:e]}!")
flash[:success] = Spree.t(:return_authorization_updated)
redirect_to :back
redirect_back fallback_location: spree.admin_dashboard_path
end
protected

View File

@@ -1,11 +0,0 @@
module Spree
module Admin
module PaymentsHelper
def payment_method_name(payment)
# hack to allow us to retrieve the name of a "deleted" payment method
id = payment.payment_method_id
Spree::PaymentMethod.find_with_destroyed(id).name
end
end
end
end

View File

@@ -0,0 +1,9 @@
module Spree
module PaymentMethodsHelper
def payment_method_name(payment)
# hack to allow us to retrieve the name of a "deleted" payment method
id = payment.payment_method_id
Spree::PaymentMethod.find_with_destroyed(id).name
end
end
end

View File

@@ -4,7 +4,7 @@ module Spree
class OrderMailer < BaseMailer
helper 'checkout'
helper SpreeCurrencyHelper
helper Spree::Admin::PaymentsHelper
helper Spree::PaymentMethodsHelper
helper OrderHelper
helper MailerHelper
include I18nHelper

View File

@@ -3,7 +3,7 @@ class SubscriptionMailer < Spree::BaseMailer
helper MailerHelper
helper ShopMailHelper
helper OrderHelper
helper Spree::Admin::PaymentsHelper
helper Spree::PaymentMethodsHelper
include I18nHelper
def confirmation_email(order)

View File

@@ -147,7 +147,7 @@ module Spree
end
def default_card_needs_updating?
is_default_changed? || gateway_customer_profile_id_changed?
saved_change_to_is_default? || saved_change_to_gateway_customer_profile_id?
end
def ensure_single_default_card

View File

@@ -226,7 +226,7 @@ module Spree
end
def update_order
return unless changed? || destroyed?
return unless saved_changes.present? || destroyed?
# update the order totals, etc.
order.create_tax_charge!

View File

@@ -201,7 +201,7 @@ module Spree
end
def update_order
order.reload.update!
order.update!
end
# Necessary because some payment gateways will refuse payments with

View File

@@ -433,7 +433,7 @@ module Spree
end
def update_units
return unless variant_unit_changed?
return unless saved_change_to_variant_unit?
option_types.delete self.class.all_variant_unit_option_types
option_types << variant_unit_option_type if variant_unit.present?
@@ -449,9 +449,9 @@ module Spree
end
def remove_previous_primary_taxon_from_taxons
return unless primary_taxon_id_changed? && primary_taxon_id_was
return unless saved_change_to_primary_taxon_id? && primary_taxon_id_before_last_save
taxons.destroy(primary_taxon_id_was)
taxons.destroy(primary_taxon_id_before_last_save)
end
def ensure_standard_variant
@@ -465,7 +465,7 @@ module Spree
# Spree creates a permalink already but our implementation fixes an edge case.
def sanitize_permalink
return unless permalink.blank? || permalink_changed?
return unless permalink.blank? || saved_change_to_permalink? || permalink_changed?
requested = permalink.presence || permalink_was.presence || name.presence || 'product'
self.permalink = create_unique_permalink(requested.parameterize)

View File

@@ -35,23 +35,8 @@ module PermittedAttributes
:tag_list,
tags: [:text],
enterprise_fee_ids: [],
variants: permitted_variant_ids
variants: {}
]
end
# In rails 5 we will be able to permit random hash keys simply with :variants => {}
# See https://github.com/rails/rails/commit/e86524c0c5a26ceec92895c830d1355ae47a7034
#
# Until then, we need to create an array of variant IDs in order to permit them
def permitted_variant_ids
variant_ids(@params[:order_cycle][:incoming_exchanges]) +
variant_ids(@params[:order_cycle][:outgoing_exchanges])
end
def variant_ids(exchange_params)
return [] unless exchange_params
exchange_params.map { |exchange| exchange[:variants].map { |key, _value| key } }.flatten
end
end
end

View File

@@ -198,6 +198,8 @@ module Openfoodnetwork
config.active_job.queue_adapter = :delayed_job
config.action_controller.include_all_helpers = false
config.generators.template_engine = :haml
end
end

View File

@@ -25,10 +25,12 @@ describe OrderManagement::Reports::BulkCoopController, type: :controller do
describe "#create" do
context "when the parameters are valid" do
it "sends the generated report in the correct format" do
post :create, report: {
start_at: "2018-10-09 07:30:00",
report_type: "bulk_coop_supplier_report"
}, report_format: "csv"
post :create, params: {
report: {
start_at: "2018-10-09 07:30:00",
report_type: "bulk_coop_supplier_report"
}, report_format: "csv"
}
expect(response).to be_success
expect(response.body).not_to be_blank
@@ -38,10 +40,12 @@ describe OrderManagement::Reports::BulkCoopController, type: :controller do
context "when the parameters are invalid" do
it "renders the report form with an error" do
post :create, report: {
start_at: "invalid_date",
report_type: "bulk_coop_supplier_report"
}, report_format: "csv"
post :create, params: {
report: {
start_at: "invalid_date",
report_type: "bulk_coop_supplier_report"
}, report_format: "csv"
}
expect(flash[:error]).to eq(I18n.t("invalid_filter_parameters", scope: i18n_scope))
expect(response).to render_template(new_template_path)
@@ -55,10 +59,12 @@ describe OrderManagement::Reports::BulkCoopController, type: :controller do
let(:current_user) { distributor.owner }
it "renders the report form with an error" do
post :create, report: {
distributor_ids: [other_distributor.id],
report_type: "bulk_coop_supplier_report"
}, report_format: "csv"
post :create, params: {
report: {
distributor_ids: [other_distributor.id],
report_type: "bulk_coop_supplier_report"
}, report_format: "csv"
}
expect(flash[:error]).to eq(report_klass::Authorizer.parameter_not_allowed_error_message)
expect(response).to render_template(new_template_path)
@@ -72,7 +78,7 @@ describe OrderManagement::Reports::BulkCoopController, type: :controller do
let(:current_user) { distributor.owner }
it "applies permissions to report" do
post :create, report: {}, report_format: "csv"
post :create, params: { report: {}, report_format: "csv" }
expect(assigns(:permissions).allowed_distributors.to_a).to eq([distributor])
end

View File

@@ -25,7 +25,9 @@ describe OrderManagement::Reports::EnterpriseFeeSummariesController, type: :cont
describe "#create" do
context "when the parameters are valid" do
it "sends the generated report in the correct format" do
post :create, report: { start_at: "2018-10-09 07:30:00" }, report_format: "csv"
post :create, params: {
report: { start_at: "2018-10-09 07:30:00" }, report_format: "csv"
}
expect(response).to be_success
expect(response.body).not_to be_blank
@@ -35,7 +37,9 @@ describe OrderManagement::Reports::EnterpriseFeeSummariesController, type: :cont
context "when the parameters are invalid" do
it "renders the report form with an error" do
post :create, report: { start_at: "invalid date" }, report_format: "csv"
post :create, params: {
report: { start_at: "invalid date" }, report_format: "csv"
}
expect(flash[:error]).to eq(I18n.t("invalid_filter_parameters", scope: i18n_scope))
expect(response).to render_template(new_template_path)
@@ -49,7 +53,9 @@ describe OrderManagement::Reports::EnterpriseFeeSummariesController, type: :cont
let(:current_user) { distributor.owner }
it "renders the report form with an error" do
post :create, report: { distributor_ids: [other_distributor.id] }, report_format: "csv"
post :create, params: {
report: { distributor_ids: [other_distributor.id] }, report_format: "csv"
}
expect(flash[:error]).to eq(report_klass::Authorizer.parameter_not_allowed_error_message)
expect(response).to render_template(new_template_path)
@@ -66,7 +72,7 @@ describe OrderManagement::Reports::EnterpriseFeeSummariesController, type: :cont
let(:current_user) { distributor.owner }
it "applies permissions to report" do
post :create, report: {}, report_format: "csv"
post :create, params: { report: {}, report_format: "csv" }
expect(assigns(:permissions).allowed_order_cycles.to_a).to eq([order_cycle])
end

View File

@@ -56,7 +56,7 @@ describe "Payments Reports" do
order.ship_total.to_f + other_order.ship_total.to_f,
order.outstanding_balance.to_f + other_order.outstanding_balance.to_f,
order.total.to_f + other_order.total.to_f
].join(" "))
].compact.join(" "))
end
end

View File

@@ -7,7 +7,7 @@ require 'spec_helper'
RSpec.describe 'A very large request', type: :request do
it 'should not overflow cookies' do
get '/admin', foo: 'x' * ActionDispatch::Cookies::MAX_COOKIE_SIZE
get '/admin', params: { foo: 'x' * ActionDispatch::Cookies::MAX_COOKIE_SIZE }
expect(response.status).to eq(302) # HTTP status 302 - Found
## Use the newer syntax if rspec gets upgraded
# expect(response).to have_http_status(:redirect)

View File

@@ -1,11 +1,11 @@
# frozen_string_literal: false
require 'spec_helper'
require 'spree/admin/payments_helper'
require 'spree/payment_methods_helper'
describe BulkInvoiceService do
include ActiveJob::TestHelper
include Spree::Admin::PaymentsHelper
include Spree::PaymentMethodsHelper
let(:service) { BulkInvoiceService.new }

View File

@@ -38,6 +38,8 @@ describe Checkout::StripeRedirect do
it "returns the redirect path" do
stripe_payment = create(:payment, payment_method_id: payment_method.id)
order.payments << stripe_payment
allow(OrderPaymentFinder).to receive_message_chain(:new, :last_pending_payment).
and_return(stripe_payment)
allow(stripe_payment).to receive(:authorize!) do
# Authorization moves the payment state from checkout/processing to pending
stripe_payment.state = 'pending'

View File

@@ -6,7 +6,7 @@ describe EmbeddedPageService do
let(:enterprise_slug) { 'test-enterprise' }
let(:params) { { controller: 'enterprises', action: 'shop', id: enterprise_slug, embedded_shopfront: true } }
let(:session) { {} }
let(:request) { ActionController::TestRequest.new({'HTTP_HOST' => 'ofn-instance.com', 'HTTP_REFERER' => 'https://embedding-enterprise.com'}, nil) }
let(:request) { ActionController::TestRequest.new({'HTTP_HOST' => 'ofn-instance.com', 'HTTP_REFERER' => 'https://embedding-enterprise.com'}, nil, nil) }
let(:response) { ActionDispatch::TestResponse.new(200, 'X-Frame-Options' => 'DENY', 'Content-Security-Policy' => "frame-ancestors 'none'") }
let(:service) { EmbeddedPageService.new(params, session, request, response) }
@@ -63,7 +63,7 @@ describe EmbeddedPageService do
end
context "when the request's referer is malformed" do
let(:request) { ActionController::TestRequest.new({'HTTP_HOST' => 'ofn-instance.com', 'HTTP_REFERER' => 'hello'}, nil) }
let(:request) { ActionController::TestRequest.new({'HTTP_HOST' => 'ofn-instance.com', 'HTTP_REFERER' => 'hello'}, nil, nil) }
before do
service.embed!
end

View File

@@ -1,10 +1,10 @@
# frozen_string_literal: true
require 'spec_helper'
require 'spree/admin/payments_helper'
require 'spree/payment_methods_helper'
describe InvoiceRenderer do
include Spree::Admin::PaymentsHelper
include Spree::PaymentMethodsHelper
let(:service) { described_class.new }
let(:order) do

View File

@@ -4,6 +4,7 @@ require "spec_helper"
describe "spree/admin/shared/_order_links.html.haml" do
helper Spree::BaseHelper # required to make pretty_time work
helper Spree::Admin::OrdersHelper
before do
order = create(:order)