File: performable_mailer_spec.rb

package info (click to toggle)
ruby-delayed-job 4.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 388 kB
  • sloc: ruby: 2,780; makefile: 8
file content (68 lines) | stat: -rw-r--r-- 2,421 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
require 'helper'

class MyMailer < ActionMailer::Base
  def signup(email)
    mail :to => email, :subject => 'Delaying Emails', :from => 'delayedjob@example.com', :body => 'Delaying Emails Body'
  end
end

describe ActionMailer::Base do
  describe 'delay' do
    it 'enqueues a PerformableEmail job' do
      expect do
        job = MyMailer.delay.signup('john@example.com')
        expect(job.payload_object.class).to eq(Delayed::PerformableMailer)
        expect(job.payload_object.method_name).to eq(:signup)
        expect(job.payload_object.args).to eq(['john@example.com'])
      end.to change { Delayed::Job.count }.by(1)
    end
  end

  describe 'delay on a mail object' do
    it 'raises an exception' do
      expect do
        MyMailer.signup('john@example.com').delay
      end.to raise_error(RuntimeError)
    end
  end

  describe Delayed::PerformableMailer do
    describe 'perform' do
      it 'calls the method and #deliver on the mailer' do
        email = double('email', :deliver => true)
        mailer_class = double('MailerClass', :signup => email)
        mailer = Delayed::PerformableMailer.new(mailer_class, :signup, ['john@example.com'])

        expect(mailer_class).to receive(:signup).with('john@example.com')
        expect(email).to receive(:deliver)
        mailer.perform
      end
    end
  end
end

if defined?(ActionMailer::Parameterized::Mailer)
  describe ActionMailer::Parameterized::Mailer do
    describe 'delay' do
      it 'enqueues a PerformableEmail job' do
        expect do
          job = MyMailer.with(:foo => 1, :bar => 2).delay.signup('john@example.com')
          expect(job.payload_object.class).to eq(Delayed::PerformableMailer)
          expect(job.payload_object.object.class).to eq(ActionMailer::Parameterized::Mailer)
          expect(job.payload_object.object.instance_variable_get('@mailer')).to eq(MyMailer)
          expect(job.payload_object.object.instance_variable_get('@params')).to eq(:foo => 1, :bar => 2)
          expect(job.payload_object.method_name).to eq(:signup)
          expect(job.payload_object.args).to eq(['john@example.com'])
        end.to change { Delayed::Job.count }.by(1)
      end
    end

    describe 'delay on a mail object' do
      it 'raises an exception' do
        expect do
          MyMailer.with(:foo => 1, :bar => 2).signup('john@example.com').delay
        end.to raise_error(RuntimeError)
      end
    end
  end
end