In Spree v2.0 the product attributes being sent were no longer valid.
Providing a shipping category and setting a stock location on the DB so
that a stock item can be created fixes them.
Remember `Variant#create_stock_item`, which is defined as an
`after_create` callback, relies on `StockLocation` to create the item.
We need to purposefully enable deliveries for the deliveries array to
list this email. Otherwise the delivery logic is not executed and thus
the deliveries array never filled.
The way we set up email sending completely changes with Spree 2. This
change encapsulates that code in a single method so that it can be
changed easily and doesn't create further merge conflicts while we are
still working on the master branch and the Spree upgrade.
This may lead to more error reports than we want to see. A not existing
email address may cause Bugsnag to be notified. If this happens, we can
rescue form these specific errors and only report the rest.
The most common failure would happen when sending the confirmation email
triggered by `user.save`. We rescue any errors here and give feedback to
the user.
This allows for immediate feedback when the user types an email address
that is not accepted by our mail server or the email setup is not
configured properly.
This conversion is done by Transpec 3.3.0 with the following command:
transpec spec/controllers/user_registrations_controller_spec.rb
* 10 conversions
from: obj.should
to: expect(obj).to
* 7 conversions
from: == expected
to: eq(expected)
For more details: https://github.com/yujinakayama/transpec#supported-conversions
Using deferred methods on the user model breaks delayed jobs when the
user is deleted while the job still exists. We could create a proper job
referencing a user id for sending these emails instead. But since the
user has to wait for the confirmation email anyway, we can send it
within the current request. This should be revised if performance
becomes an issue.
Sending the email directly also has the advantage that we can tell the
user if emailing failed. See the following commits.
This change impacts a bunch of specs as we now need a working email
setup to create unconfirmed users. This commit introduces a custom
matcher to unify testing for confirmation emails.