From 831ba99a642fb31159bfb94c6a4b7de8e1e47c8b Mon Sep 17 00:00:00 2001 From: Vinicius Ferreira Negrisolo Date: Fri, 23 Sep 2016 13:48:13 -0400 Subject: [PATCH] Add tests for Mailer support --- decent_exposure.gemspec | 1 + spec/features/birds_mailer_spec.rb | 46 ++++++++++++++++++++++++++++++ spec/support/rails_app.rb | 4 +++ 3 files changed, 51 insertions(+) create mode 100644 spec/features/birds_mailer_spec.rb diff --git a/decent_exposure.gemspec b/decent_exposure.gemspec index 76067fd..6941dab 100644 --- a/decent_exposure.gemspec +++ b/decent_exposure.gemspec @@ -24,5 +24,6 @@ Gem::Specification.new do |spec| spec.add_dependency "activesupport", ">= 4.0" spec.add_development_dependency "railties", ">= 4.0" + spec.add_development_dependency "actionmailer" spec.add_development_dependency "rspec-rails", "~> 3.0" end diff --git a/spec/features/birds_mailer_spec.rb b/spec/features/birds_mailer_spec.rb new file mode 100644 index 0000000..a59d655 --- /dev/null +++ b/spec/features/birds_mailer_spec.rb @@ -0,0 +1,46 @@ +require "spec_helper" +require "support/rails_app" +require "rspec/rails" +require "action_mailer" + +class BirdsMailer < ActionMailer::Base +end + +RSpec.describe BirdsMailer, type: :mailer do + let(:bird){ double :bird } + let(:birds) { double :birds } + + context "when birds relation is exposed" do + class BirdsMailer + expose(:birds, -> { Bird.all }) + + def hello_birds + mail { |format| format.text { render plain: "Hello #{birds}" } } + end + end + + it "sends the email with exposed birds" do + expect(Bird).to receive(:all).and_return(birds) + expect(described_class.hello_birds.body.to_s) + .to include("Hello #{birds}") + end + end + + context "when bird is exposed" do + class BirdsMailer + attr_accessor :bird_id + expose(:bird, id: -> { bird_id }) + + def hello_bird(id) + self.bird_id = id + mail { |format| format.text { render plain: "Hello #{bird}" } } + end + end + + it "sends the email with exposed bird" do + expect(Bird).to receive(:find).with('some-id').and_return(bird) + expect(described_class.hello_bird('some-id').body.to_s) + .to include("Hello #{bird}") + end + end +end diff --git a/spec/support/rails_app.rb b/spec/support/rails_app.rb index c0f90f4..8d74530 100644 --- a/spec/support/rails_app.rb +++ b/spec/support/rails_app.rb @@ -23,6 +23,10 @@ def routes end end + def self.root + '' + end + def self.application @app ||= App.new end