Updates the syntax to follow the recommended usage in the code comments of the ActiveModel #validates_with method.
Fixes:
12) Spree::PaymentMethod raises errors when required fields are missing
Failure/Error: expect(pm.errors.to_a).to eq(["Name can't be blank", "At least one hub must be selected"])
expected: ["Name can't be blank", "At least one hub must be selected"]
got: ["Name can't be blank", "At least one hub must be selected", "At least one hub must be selected"]
(compared using ==)
# ./spec/models/spree/payment_method_spec.rb:16:in `block (2 levels) in <module:Spree>'
Rails 4 now throws a fatal error if calling #touch on an object that hasn't been saved yet: c63cfc8722/activerecord/lib/active_record/persistence.rb (L957)
Fixes:
41) Stock::Package#shipping_methods does not return shipping methods not used by the package's order distributor
Failure/Error: distributors.each(&:touch)
ActiveRecord::ActiveRecordError:
can not touch on a new record object
# ./app/models/spree/shipping_method_decorator.rb:81:in `touch_distributors'
# ./spec/models/stock/package_spec.rb:39:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:17:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:32:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:7:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:44:in `block (3 levels) in <module:Stock>'
42) Stock::Package#shipping_categories returns shipping categories that are not shipping categories of the order's products
Failure/Error: distributors.each(&:touch)
ActiveRecord::ActiveRecordError:
can not touch on a new record object
# ./app/models/spree/shipping_method_decorator.rb:81:in `touch_distributors'
# ./spec/models/stock/package_spec.rb:39:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:17:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:32:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:7:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:50:in `block (3 levels) in <module:Stock>'
Responsibility for geocoding has moved from the `gmaps4rails` gem using `acts_as_taggable`, to the `geocoding` gem using `geocoded_by`. We already use this in the Address model.
For some reason some of the superfluous attributes being assigned here have started throwing fatal errors in Rails 4 instead of being silently ignored...
It looks like there are some issues with prepared statements here, where the resulting SQL contains something like: `WHERE "enterprise_roles"."user_id" = $1` in a subquery. The "$1" part is being lost somehow and isn't present if it's used in nested subqueries.
Example fixed spec (there are lots like this one):
59) Spree::Admin::ReportsController Supplier Bulk Coop where I have granted P-OC to the distributor only shows product line items that I am supplying
Failure/Error: produced_line_items.select("spree_line_items.id"))
ActiveRecord::StatementInvalid:
PG::ProtocolViolation: ERROR: bind message supplies 0 parameters, but prepared statement "" requires 1
: SELECT id FROM "spree_line_items" WHERE "spree_line_items"."order_id" IN (SELECT id FROM "spree_orders" WHERE (("spree_orders"."distributor_id" IN (SELECT enterprises.id FROM "enterprises" INNER JOIN "enterprise_roles" ON "enterprise_roles"."enterprise_id" = "enterprises"."id" WHERE (enterprise_roles.user_id = 947)) OR "spree_orders"."order_cycle_id" IN (SELECT id FROM "order_cycles" WHERE "order_cycles"."coordinator_id" IN (SELECT "enterprises"."id" FROM "enterprises" INNER JOIN "enterprise_roles" ON "enterprises"."id" = "enterprise_roles"."enterprise_id" WHERE "enterprise_roles"."user_id" = $1)))))
# ./app/services/permissions/order.rb:28:in `visible_line_items'
# ./lib/open_food_network/reports/line_items.rb:16:in `list'
# ./lib/open_food_network/bulk_coop_report.rb:54:in `table_items'
# ./app/controllers/spree/admin/reports_controller.rb:264:in `order_grouper_table'
# ./app/controllers/spree/admin/reports_controller.rb:101:in `bulk_coop'
# ./spec/controllers/spree/admin/reports_controller_spec.rb:168:in `block (5 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# PG::ProtocolViolation:
# ERROR: bind message supplies 0 parameters, but prepared statement "" requires 1
# ./app/services/permissions/order.rb:28:in `visible_line_items'
Rails 4 adds an extra layer of "default" headers that override any that are missing (or deleted). This was breaking embedded shopfront responses.
Fixes:
74) setting response headers for embedded shopfronts with embedded shopfronts enabled with a valid whitelist allows iframes on certain pages when enabled in configuration
Failure/Error: expect(response.headers['X-Frame-Options']).to be_nil
expected: nil
got: "SAMEORIGIN"
# ./spec/requests/embedded_shopfronts_headers_spec.rb:54:in `block (4 levels) in <top (required)>'
75) setting response headers for embedded shopfronts with embedded shopfronts enabled with www prefix matches the URL structure in the header
Failure/Error: expect(response.headers['X-Frame-Options']).to be_nil
expected: nil
got: "SAMEORIGIN"
# ./spec/requests/embedded_shopfronts_headers_spec.rb:75:in `block (4 levels) in <top (required)>'