Fixes 5 specs, including:
11) Spree::CreditCardsController#update when the specified credit card is found and the card is owned by the user when the update completes successfully renders a serialized copy of the updated card
Failure/Error: object.cc_type.capitalize
NoMethodError:
undefined method `capitalize' for nil:NilClass
# ./app/serializers/api/credit_card_serializer.rb:6:in `brand'
# (eval):4:in `_fast_attributes'
# ./app/controllers/spree/credit_cards_controller.rb:26:in `update'
# ./spec/controllers/spree/credit_cards_controller_spec.rb:100:in `block (7 levels) in <top (required)>'
# ./spec/controllers/spree/credit_cards_controller_spec.rb:100:in `block (6 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# NoMethodError:
# undefined method `capitalize' for nil:NilClass
# ./app/serializers/api/credit_card_serializer.rb:6:in `brand'
Fixes:
11) Order Management viewing a completed order when checking out as an anonymous guest allows the user to see the details
Failure/Error:
order.update_attributes!(
bill_address: bill_address,
ship_address: ship_address,
shipping_method_id: shipping_method.id
)
ActiveRecord::UnknownAttributeError:
unknown attribute: shipping_method_id
# ./spec/features/consumer/shopping/orders_spec.rb:30:in `block (3 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# NoMethodError:
# undefined method `shipping_method_id=' for #<Spree::Order:0x00007f5e82a94d80>
# ./spec/features/consumer/shopping/orders_spec.rb:30:in `block (3 levels) in <top (required)>'
12) Order Management viewing a completed order when logged in as the customer allows the user to see order details
Failure/Error:
order.update_attributes!(
bill_address: bill_address,
ship_address: ship_address,
shipping_method_id: shipping_method.id
)
ActiveRecord::UnknownAttributeError:
unknown attribute: shipping_method_id
# ./spec/features/consumer/shopping/orders_spec.rb:30:in `block (3 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# NoMethodError:
# undefined method `shipping_method_id=' for #<Spree::Order:0x00007f5e83382708>
# ./spec/features/consumer/shopping/orders_spec.rb:30:in `block (3 levels) in <top (required)>'
13) Order Management viewing a completed order when not logged in allows the user to see order details after login
Failure/Error:
order.update_attributes!(
bill_address: bill_address,
ship_address: ship_address,
shipping_method_id: shipping_method.id
)
ActiveRecord::UnknownAttributeError:
unknown attribute: shipping_method_id
# ./spec/features/consumer/shopping/orders_spec.rb:30:in `block (3 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# NoMethodError:
# undefined method `shipping_method_id=' for #<Spree::Order:0x00007f5e8bafe6f0>
# ./spec/features/consumer/shopping/orders_spec.rb:30:in `block (3 levels) in <top (required)>'
The output of this link helper has changed slightly. All the attributes are the same as before, but they seem to be in alphabetical order now.
Fixes:
69) Spree::BaseHelper#link_to_remove_fields returns an `a` tag followed by a hidden `input` tag
Failure/Error: expect(subject).to eq("<a href=\"#\" class=\"remove_fields icon_link with-tip icon-trash\" data-action=\"remove\" title=\"Remove\"><span class='text'>Hola</span></a><input type="hidden" name="_method" value="destroy">")
expected: "<a href=\"#\" class=\"remove_fields icon_link with-tip icon-trash\" data-action=\"remove\" title=\"...</span></a><input type="hidden" name="_method" value="destroy">"
got: "<a class=\"remove_fields icon_link with-tip icon-trash\" data-action=\"remove\" href=\"#\" title=\"...</span></a><input type="hidden" name="_method" value="destroy">"
(compared using ==)
# ./spec/helpers/spree/admin/base_helper_spec.rb:12:in `block (3 levels) in <top (required)>'
ActionController doesn't accept nil values for :id as a valid route request in Rails 4.
Fixes:
2) Api::OrdersController#show Resource not found when no order number is given
Failure/Error: get :show, id: nil
ActionController::UrlGenerationError:
No route matches {:action=>"show", :controller=>"api/orders", :id=>nil}
# ./spec/controllers/api/orders_controller_spec.rb:168:in `block (4 levels) in <module:Api>'
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...
This uses the `2-1-0-stable` branch of the paypal gem. It's the 2-1-stable branch plus a couple of old OFN modifications (from 2-0-stable), plus a minor modification to the gemspec to allow it to be used with spree_core `2.1.0`
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'
Fixes several errors such as:
104) UserRegistrationsController via ajax sets user.locale from cookie on create
Failure/Error: I18n.locale = spree_current_user.andand.locale || cookies[:locale] || I18n.default_locale
I18n::InvalidLocale:
"pt" is not a valid locale
# ./app/helpers/i18n_helper.rb:14:in `set_locale'
# ./spec/controllers/user_registrations_controller_spec.rb:56:in `block (3 levels) in <top (required)>'