mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-02 21:57:17 +00:00
Merge decorators with original classes brought from spree and merge order_mailer specs
This commit is contained in:
@@ -1,5 +1,11 @@
|
||||
module Spree
|
||||
class BaseMailer < ActionMailer::Base
|
||||
# Inline stylesheets
|
||||
include Roadie::Rails::Automatic
|
||||
|
||||
# Define layout
|
||||
layout 'mailer'
|
||||
|
||||
def from_address
|
||||
Spree::Config[:mails_from]
|
||||
end
|
||||
@@ -8,5 +14,12 @@ module Spree
|
||||
Spree::Money.new(amount).to_s
|
||||
end
|
||||
helper_method :money
|
||||
|
||||
protected
|
||||
|
||||
def roadie_options
|
||||
# This lets us specify assets using relative paths in email templates
|
||||
super.merge(url_options: { host: URI(main_app.root_url).host })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
Spree::BaseMailer.class_eval do
|
||||
# Inline stylesheets
|
||||
include Roadie::Rails::Automatic
|
||||
|
||||
# Define layout
|
||||
layout 'mailer'
|
||||
|
||||
protected
|
||||
|
||||
def roadie_options
|
||||
# This lets us specify assets using relative paths in email templates
|
||||
super.merge(url_options: { host: URI(main_app.root_url).host })
|
||||
end
|
||||
end
|
||||
@@ -1,17 +1,66 @@
|
||||
module Spree
|
||||
class OrderMailer < BaseMailer
|
||||
def confirm_email(order, resend = false)
|
||||
@order = order.respond_to?(:id) ? order : Spree::Order.find(order)
|
||||
subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
|
||||
subject += "#{Spree::Config[:site_name]} #{Spree.t('order_mailer.confirm_email.subject')} ##{@order.number}"
|
||||
mail(to: @order.email, from: from_address, subject: subject)
|
||||
helper HtmlHelper
|
||||
helper CheckoutHelper
|
||||
helper SpreeCurrencyHelper
|
||||
helper OrderHelper
|
||||
include I18nHelper
|
||||
|
||||
def cancel_email(order_or_order_id, resend = false)
|
||||
@order = find_order(order_or_order_id)
|
||||
I18n.with_locale valid_locale(@order.user) do
|
||||
mail(to: @order.email,
|
||||
from: from_address,
|
||||
subject: mail_subject(t('spree.order_mailer.cancel_email.subject'), resend))
|
||||
end
|
||||
end
|
||||
|
||||
def cancel_email(order, resend = false)
|
||||
@order = order.respond_to?(:id) ? order : Spree::Order.find(order)
|
||||
subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
|
||||
subject += "#{Spree::Config[:site_name]} #{Spree.t('order_mailer.cancel_email.subject')} ##{@order.number}"
|
||||
mail(to: @order.email, from: from_address, subject: subject)
|
||||
def confirm_email_for_customer(order_or_order_id, resend = false)
|
||||
@order = find_order(order_or_order_id)
|
||||
I18n.with_locale valid_locale(@order.user) do
|
||||
subject = mail_subject(t('spree.order_mailer.confirm_email.subject'), resend)
|
||||
mail(to: @order.email,
|
||||
from: from_address,
|
||||
subject: subject,
|
||||
reply_to: @order.distributor.contact.email)
|
||||
end
|
||||
end
|
||||
|
||||
def confirm_email_for_shop(order_or_order_id, resend = false)
|
||||
@order = find_order(order_or_order_id)
|
||||
I18n.with_locale valid_locale(@order.user) do
|
||||
subject = mail_subject(t('spree.order_mailer.confirm_email.subject'), resend)
|
||||
mail(to: @order.distributor.contact.email,
|
||||
from: from_address,
|
||||
subject: subject)
|
||||
end
|
||||
end
|
||||
|
||||
def invoice_email(order_or_order_id, pdf)
|
||||
@order = find_order(order_or_order_id)
|
||||
attach_file("invoice-#{@order.number}.pdf", pdf)
|
||||
I18n.with_locale valid_locale(@order.user) do
|
||||
mail(to: @order.email,
|
||||
from: from_address,
|
||||
subject: mail_subject(t(:invoice), false),
|
||||
reply_to: @order.distributor.contact.email)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Finds an order instance from an order or from an order id
|
||||
def find_order(order_or_order_id)
|
||||
order_or_order_id.respond_to?(:id) ? order_or_order_id : Spree::Order.find(order_or_order_id)
|
||||
end
|
||||
|
||||
def mail_subject(base_subject, resend)
|
||||
resend_prefix = (resend ? "[#{t(:resend).upcase}] " : '')
|
||||
"#{resend_prefix}#{Spree::Config[:site_name]} #{base_subject} ##{@order.number}"
|
||||
end
|
||||
|
||||
def attach_file(filename, file)
|
||||
attachments[filename] = file if file.present?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
Spree::OrderMailer.class_eval do
|
||||
helper HtmlHelper
|
||||
helper CheckoutHelper
|
||||
helper SpreeCurrencyHelper
|
||||
helper OrderHelper
|
||||
include I18nHelper
|
||||
|
||||
def cancel_email(order_or_order_id, resend = false)
|
||||
@order = find_order(order_or_order_id)
|
||||
I18n.with_locale valid_locale(@order.user) do
|
||||
mail(to: @order.email,
|
||||
from: from_address,
|
||||
subject: mail_subject(t('spree.order_mailer.cancel_email.subject'), resend))
|
||||
end
|
||||
end
|
||||
|
||||
def confirm_email_for_customer(order_or_order_id, resend = false)
|
||||
@order = find_order(order_or_order_id)
|
||||
I18n.with_locale valid_locale(@order.user) do
|
||||
subject = mail_subject(t('spree.order_mailer.confirm_email.subject'), resend)
|
||||
mail(to: @order.email,
|
||||
from: from_address,
|
||||
subject: subject,
|
||||
reply_to: @order.distributor.contact.email)
|
||||
end
|
||||
end
|
||||
|
||||
def confirm_email_for_shop(order_or_order_id, resend = false)
|
||||
@order = find_order(order_or_order_id)
|
||||
I18n.with_locale valid_locale(@order.user) do
|
||||
subject = mail_subject(t('spree.order_mailer.confirm_email.subject'), resend)
|
||||
mail(to: @order.distributor.contact.email,
|
||||
from: from_address,
|
||||
subject: subject)
|
||||
end
|
||||
end
|
||||
|
||||
def invoice_email(order_or_order_id, pdf)
|
||||
@order = find_order(order_or_order_id)
|
||||
attach_file("invoice-#{@order.number}.pdf", pdf)
|
||||
I18n.with_locale valid_locale(@order.user) do
|
||||
mail(to: @order.email,
|
||||
from: from_address,
|
||||
subject: mail_subject(t(:invoice), false),
|
||||
reply_to: @order.distributor.contact.email)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Finds an order instance from an order or from an order id
|
||||
def find_order(order_or_order_id)
|
||||
order_or_order_id.respond_to?(:id) ? order_or_order_id : Spree::Order.find(order_or_order_id)
|
||||
end
|
||||
|
||||
def mail_subject(base_subject, resend)
|
||||
resend_prefix = (resend ? "[#{t(:resend).upcase}] " : '')
|
||||
"#{resend_prefix}#{Spree::Config[:site_name]} #{base_subject} ##{@order.number}"
|
||||
end
|
||||
|
||||
def attach_file(filename, file)
|
||||
attachments[filename] = file if file.present?
|
||||
end
|
||||
end
|
||||
@@ -1,120 +0,0 @@
|
||||
require 'spec_helper'
|
||||
require 'email_spec'
|
||||
|
||||
describe Spree::OrderMailer do
|
||||
include EmailSpec::Helpers
|
||||
include EmailSpec::Matchers
|
||||
|
||||
let(:order) do
|
||||
order = stub_model(Spree::Order)
|
||||
product = stub_model(Spree::Product, :name => %Q{The "BEST" product})
|
||||
variant = stub_model(Spree::Variant, :product => product)
|
||||
price = stub_model(Spree::Price, :variant => variant, :amount => 5.00)
|
||||
line_item = stub_model(Spree::LineItem, :variant => variant, :order => order, :quantity => 1, :price => 4.99)
|
||||
variant.stub(:default_price => price)
|
||||
order.stub(:line_items => [line_item])
|
||||
order
|
||||
end
|
||||
|
||||
context ":from not set explicitly" do
|
||||
it "falls back to spree config" do
|
||||
message = Spree::OrderMailer.confirm_email(order)
|
||||
message.from.should == [Spree::Config[:mails_from]]
|
||||
end
|
||||
end
|
||||
|
||||
it "doesn't aggressively escape double quotes in confirmation body" do
|
||||
confirmation_email = Spree::OrderMailer.confirm_email(order)
|
||||
confirmation_email.body.should_not include(""")
|
||||
end
|
||||
|
||||
it "confirm_email accepts an order id as an alternative to an Order object" do
|
||||
Spree::Order.should_receive(:find).with(order.id).and_return(order)
|
||||
lambda {
|
||||
confirmation_email = Spree::OrderMailer.confirm_email(order.id)
|
||||
}.should_not raise_error
|
||||
end
|
||||
|
||||
it "cancel_email accepts an order id as an alternative to an Order object" do
|
||||
Spree::Order.should_receive(:find).with(order.id).and_return(order)
|
||||
lambda {
|
||||
cancel_email = Spree::OrderMailer.cancel_email(order.id)
|
||||
}.should_not raise_error
|
||||
end
|
||||
|
||||
context "only shows eligible adjustments in emails" do
|
||||
before do
|
||||
order.adjustments.create(
|
||||
:label => "Eligible Adjustment",
|
||||
:amount => 10,
|
||||
:eligible => true
|
||||
)
|
||||
|
||||
order.adjustments.create!(
|
||||
:label => "Ineligible Adjustment",
|
||||
:amount => -10,
|
||||
:eligible => false
|
||||
)
|
||||
end
|
||||
|
||||
let!(:confirmation_email) { Spree::OrderMailer.confirm_email(order) }
|
||||
let!(:cancel_email) { Spree::OrderMailer.cancel_email(order) }
|
||||
|
||||
specify do
|
||||
confirmation_email.body.should_not include("Ineligible Adjustment")
|
||||
end
|
||||
|
||||
specify do
|
||||
cancel_email.body.should_not include("Ineligible Adjustment")
|
||||
end
|
||||
end
|
||||
|
||||
context "displays unit costs from line item" do
|
||||
# Regression test for #2772
|
||||
|
||||
# Tests mailer view spree/order_mailer/confirm_email.text.erb
|
||||
specify do
|
||||
confirmation_email = Spree::OrderMailer.confirm_email(order)
|
||||
confirmation_email.body.should include("4.99")
|
||||
confirmation_email.body.should_not include("5.00")
|
||||
end
|
||||
|
||||
# Tests mailer view spree/order_mailer/cancel_email.text.erb
|
||||
specify do
|
||||
cancel_email = Spree::OrderMailer.cancel_email(order)
|
||||
cancel_email.body.should include("4.99")
|
||||
cancel_email.body.should_not include("5.00")
|
||||
end
|
||||
end
|
||||
|
||||
context "emails must be translatable" do
|
||||
|
||||
context "pt-BR locale" do
|
||||
before do
|
||||
pt_br_confirm_mail = { :spree => { :order_mailer => { :confirm_email => { :dear_customer => 'Caro Cliente,' } } } }
|
||||
pt_br_cancel_mail = { :spree => { :order_mailer => { :cancel_email => { :order_summary_canceled => 'Resumo da Pedido [CANCELADA]' } } } }
|
||||
I18n.backend.store_translations :'pt-BR', pt_br_confirm_mail
|
||||
I18n.backend.store_translations :'pt-BR', pt_br_cancel_mail
|
||||
I18n.locale = :'pt-BR'
|
||||
end
|
||||
|
||||
after do
|
||||
I18n.locale = I18n.default_locale
|
||||
end
|
||||
|
||||
context "confirm_email" do
|
||||
specify do
|
||||
confirmation_email = Spree::OrderMailer.confirm_email(order)
|
||||
confirmation_email.body.should include("Caro Cliente,")
|
||||
end
|
||||
end
|
||||
|
||||
context "cancel_email" do
|
||||
specify do
|
||||
cancel_email = Spree::OrderMailer.cancel_email(order)
|
||||
cancel_email.body.should include("Resumo da Pedido [CANCELADA]")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -3,6 +3,116 @@ require 'spec_helper'
|
||||
describe Spree::OrderMailer do
|
||||
include OpenFoodNetwork::EmailHelper
|
||||
|
||||
contect "original spree specs" do
|
||||
let(:order) do
|
||||
order = stub_model(Spree::Order)
|
||||
product = stub_model(Spree::Product, :name => %Q{The "BEST" product})
|
||||
variant = stub_model(Spree::Variant, :product => product)
|
||||
price = stub_model(Spree::Price, :variant => variant, :amount => 5.00)
|
||||
line_item = stub_model(Spree::LineItem, :variant => variant, :order => order, :quantity => 1, :price => 4.99)
|
||||
variant.stub(:default_price => price)
|
||||
order.stub(:line_items => [line_item])
|
||||
order
|
||||
end
|
||||
|
||||
context ":from not set explicitly" do
|
||||
it "falls back to spree config" do
|
||||
message = Spree::OrderMailer.confirm_email_for_customer(order)
|
||||
message.from.should == [Spree::Config[:mails_from]]
|
||||
end
|
||||
end
|
||||
|
||||
it "doesn't aggressively escape double quotes in confirmation body" do
|
||||
confirmation_email = Spree::OrderMailer.confirm_email_for_customer(order)
|
||||
confirmation_email.body.should_not include(""")
|
||||
end
|
||||
|
||||
it "confirm_email_for_customer accepts an order id as an alternative to an Order object" do
|
||||
Spree::Order.should_receive(:find).with(order.id).and_return(order)
|
||||
lambda {
|
||||
confirmation_email = Spree::OrderMailer.confirm_email_for_customer(order.id)
|
||||
}.should_not raise_error
|
||||
end
|
||||
|
||||
it "cancel_email accepts an order id as an alternative to an Order object" do
|
||||
Spree::Order.should_receive(:find).with(order.id).and_return(order)
|
||||
lambda {
|
||||
cancel_email = Spree::OrderMailer.cancel_email(order.id)
|
||||
}.should_not raise_error
|
||||
end
|
||||
|
||||
context "only shows eligible adjustments in emails" do
|
||||
before do
|
||||
order.adjustments.create(
|
||||
:label => "Eligible Adjustment",
|
||||
:amount => 10,
|
||||
:eligible => true
|
||||
)
|
||||
|
||||
order.adjustments.create!(
|
||||
:label => "Ineligible Adjustment",
|
||||
:amount => -10,
|
||||
:eligible => false
|
||||
)
|
||||
end
|
||||
|
||||
let!(:confirmation_email) { Spree::OrderMailer.confirm_email(order) }
|
||||
let!(:cancel_email) { Spree::OrderMailer.cancel_email(order) }
|
||||
|
||||
specify do
|
||||
confirmation_email.body.should_not include("Ineligible Adjustment")
|
||||
end
|
||||
|
||||
specify do
|
||||
cancel_email.body.should_not include("Ineligible Adjustment")
|
||||
end
|
||||
end
|
||||
|
||||
context "displays unit costs from line item" do
|
||||
specify do
|
||||
confirmation_email = Spree::OrderMailer.confirm_email_for_customer(order)
|
||||
confirmation_email.body.should include("4.99")
|
||||
confirmation_email.body.should_not include("5.00")
|
||||
end
|
||||
|
||||
specify do
|
||||
cancel_email = Spree::OrderMailer.cancel_email(order)
|
||||
cancel_email.body.should include("4.99")
|
||||
cancel_email.body.should_not include("5.00")
|
||||
end
|
||||
end
|
||||
|
||||
context "emails must be translatable" do
|
||||
context "pt-BR locale" do
|
||||
before do
|
||||
pt_br_confirm_mail = { :spree => { :order_mailer => { :confirm_email => { :dear_customer => 'Caro Cliente,' } } } }
|
||||
pt_br_cancel_mail = { :spree => { :order_mailer => { :cancel_email => { :order_summary_canceled => 'Resumo da Pedido [CANCELADA]' } } } }
|
||||
I18n.backend.store_translations :'pt-BR', pt_br_confirm_mail
|
||||
I18n.backend.store_translations :'pt-BR', pt_br_cancel_mail
|
||||
I18n.locale = :'pt-BR'
|
||||
end
|
||||
|
||||
after do
|
||||
I18n.locale = I18n.default_locale
|
||||
end
|
||||
|
||||
context "confirm_email" do
|
||||
specify do
|
||||
confirmation_email = Spree::OrderMailer.confirm_email_for_customer(order)
|
||||
confirmation_email.body.should include("Caro Cliente,")
|
||||
end
|
||||
end
|
||||
|
||||
context "cancel_email" do
|
||||
specify do
|
||||
cancel_email = Spree::OrderMailer.cancel_email(order)
|
||||
cancel_email.body.should include("Resumo da Pedido [CANCELADA]")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "order confimation" do
|
||||
let(:bill_address) { create(:address) }
|
||||
let(:distributor_address) { create(:address, address1: "distributor address", city: 'The Shire', zipcode: "1234") }
|
||||
|
||||
Reference in New Issue
Block a user