capybara-email 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,12 +1,16 @@
1
1
  # CapybaraEmail #
2
2
 
3
- Easily test ActionMailer and Mail emails in your Capybara integration tests
3
+ [![Build Status](http://travis-ci.org/dockyard/capybara-email.png)](http://travis-ci.org/dockyard/capybara-email)
4
+
5
+ Easily test [ActionMailer](https://github.com/rails/rails/tree/master/actionmailer) and [Mail](https://github.com/mikel/mail) messages in your Capybara integration tests
4
6
 
5
7
  ## Installation ##
6
8
 
7
9
  Add this line to your application's Gemfile:
8
10
 
9
- gem 'capybara-email'
11
+ ```ruby
12
+ gem 'capybara-email'
13
+ ```
10
14
 
11
15
  And then execute:
12
16
 
@@ -18,16 +22,20 @@ Or install it yourself as:
18
22
 
19
23
  ## Usage ##
20
24
 
21
- ```ruby
22
- # rspec example
25
+ ### RSpec ###
26
+
27
+ Require `capybara/email/rspec` in your `spec_helper`
23
28
 
29
+ Example:
30
+
31
+ ```ruby
24
32
  feature 'Emailer' do
25
33
  background do
26
- # will clear the mail queue
34
+ # will clear the message queue
27
35
  clear_emails
28
36
  visit email_trigger_path
29
37
  # Will find an email sent to test@example.com
30
- # and set the `current_email` helper
38
+ # and set `current_email`
31
39
  open_email('test@example.com')
32
40
  end
33
41
 
@@ -39,6 +47,51 @@ feature 'Emailer' do
39
47
  scenario 'testing for content' do
40
48
  current_email.should have_content 'Hello Joe!'
41
49
  end
50
+
51
+ scenario 'view the email body in your browser' do
52
+ # the `launchy` gem is required
53
+ current_email.save_and_open
54
+ end
55
+ end
56
+ ```
57
+
58
+ ### Test::Unit ###
59
+
60
+ Include `Capybara::Email::DSL` in your test class
61
+
62
+ ```ruby
63
+ class ActionController::IntegrationTest
64
+ include Capybara::Email::DSL
65
+ end
66
+ ```
67
+
68
+ Example:
69
+
70
+ ```ruby
71
+ class EmailTriggerControllerTest < ActionController::IntegrationTest
72
+ def setup
73
+ # will clear the message queue
74
+ clear_emails
75
+ visit email_trigger_path
76
+
77
+ # Will find an email sent to `test@example.com`
78
+ # and set `current_email`
79
+ open_email('test@example.com')
80
+ end
81
+
82
+ test 'following a link' do
83
+ current_email.click_link 'your profile'
84
+ page.should have_content 'Profile page'
85
+ end
86
+
87
+ test 'testing for content' do
88
+ current_email.should have_content 'Hello Joe!'
89
+ end
90
+
91
+ test 'view the email body in your browser' do
92
+ # the `launchy` gem is required
93
+ current_email.save_and_open
94
+ end
42
95
  end
43
96
  ```
44
97
 
@@ -1,6 +1,3 @@
1
- require 'capybara/email/version'
2
-
3
1
  module Capybara
4
- module Email
5
- end
2
+ autoload :Email, 'capybara/email'
6
3
  end
@@ -4,6 +4,7 @@ module Capybara
4
4
  end
5
5
 
6
6
  module Email
7
+ autoload :DSL, 'capybara/email/dsl'
7
8
  autoload :Node, 'capybara/email/node'
8
9
  autoload :Driver, 'capybara/email/driver'
9
10
  autoload :Version, 'capybara/email/version'
@@ -1,10 +1,24 @@
1
- module Capybara::Email::RSpecHelpers
2
- attr_accessor :current_email, :current_emails
1
+ module Capybara::Email::DSL
3
2
 
3
+ # Returns the currently set email.
4
+ # If no email set will return nil.
5
+ #
6
+ # @return [Mail::Message, nil]
7
+ attr_accessor :current_email
8
+ attr_accessor :current_emails
9
+
10
+ # Access all emails
11
+ #
12
+ # @return [Array]
4
13
  def all_emails
5
14
  Mail::TestMailer.deliveries
6
15
  end
7
16
 
17
+ # Access all emails for a recipient.
18
+ #
19
+ # @param [String]
20
+ #
21
+ # @return [Array<Mail::Message>]
8
22
  def emails_sent_to(recipient)
9
23
  self.current_emails = all_emails.select { |email| email.to.include?(recipient) }.map do |email|
10
24
  driver = Capybara::Email::Driver.new(email)
@@ -12,15 +26,24 @@ module Capybara::Email::RSpecHelpers
12
26
  end
13
27
  end
14
28
 
29
+ # Access the first email for a recipient and set it to.
30
+ #
31
+ # @param [String]
32
+ #
33
+ # @return [Mail::Message]
15
34
  def first_email_sent_to(recipient)
16
35
  self.current_email = emails_sent_to(recipient).first
17
36
  end
18
37
  alias :open_email :first_email_sent_to
19
38
 
39
+ # Returns a collection of all current emails retrieved
40
+ #
41
+ # @return [Array<Mail::Message>]
20
42
  def current_emails
21
43
  @current_emails || []
22
44
  end
23
45
 
46
+ # Clear the email queue
24
47
  def clear_emails
25
48
  all_emails.clear
26
49
  self.current_emails = nil
@@ -1,7 +1,6 @@
1
1
  require 'capybara/email'
2
- require 'capybara/email/rspec/helpers'
3
2
 
4
3
  RSpec.configure do |config|
5
- config.include Capybara::Email::RSpecHelpers, :type => :request
6
- config.include Capybara::Email::RSpecHelpers, :type => :acceptance
4
+ config.include Capybara::Email::DSL, :type => :request
5
+ config.include Capybara::Email::DSL, :type => :acceptance
7
6
  end
@@ -1,5 +1,5 @@
1
1
  module Capybara
2
2
  module Email
3
- VERSION = '0.0.2'
3
+ VERSION = '0.1.0'
4
4
  end
5
5
  end
@@ -1,21 +1,34 @@
1
1
  class Capybara::Node::Email < Capybara::Node::Document
2
2
 
3
+ # Delgate to the email body
4
+ #
5
+ # @return [Mail::Message#body]
3
6
  def body
4
7
  base.raw
5
8
  end
6
9
 
10
+ # Delgate to the email subject
11
+ #
12
+ # @return [Mail::Message#subject]
7
13
  def subject
8
14
  base.subject
9
15
  end
10
16
 
17
+ # Delgate to the email to
18
+ #
19
+ # @return [Mail::Message#to]
11
20
  def to
12
21
  base.to
13
22
  end
14
23
 
24
+ # Delgate to the email from
25
+ #
26
+ # @return [Mail::Message#from]
15
27
  def from
16
28
  base.from
17
29
  end
18
30
 
31
+ # Will open the email body in your browser
19
32
  def save_and_open
20
33
  require 'capybara/util/save_and_open_page'
21
34
  ::Capybara.save_and_open_page(body)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capybara-email
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-04 00:00:00.000000000Z
12
+ date: 2012-03-05 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mail
16
- requirement: &70133949377220 !ruby/object:Gem::Requirement
16
+ requirement: &70105786630540 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70133949377220
24
+ version_requirements: *70105786630540
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: actionmailer
27
- requirement: &70133949376800 !ruby/object:Gem::Requirement
27
+ requirement: &70105786630120 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,21 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70133949376800
36
- - !ruby/object:Gem::Dependency
37
- name: sinatra
38
- requirement: &70133949376380 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ! '>='
42
- - !ruby/object:Gem::Version
43
- version: '0'
44
- type: :development
45
- prerelease: false
46
- version_requirements: *70133949376380
35
+ version_requirements: *70105786630120
47
36
  - !ruby/object:Gem::Dependency
48
37
  name: capybara
49
- requirement: &70133949375960 !ruby/object:Gem::Requirement
38
+ requirement: &70105786629700 !ruby/object:Gem::Requirement
50
39
  none: false
51
40
  requirements:
52
41
  - - ! '>='
@@ -54,10 +43,10 @@ dependencies:
54
43
  version: '0'
55
44
  type: :development
56
45
  prerelease: false
57
- version_requirements: *70133949375960
46
+ version_requirements: *70105786629700
58
47
  - !ruby/object:Gem::Dependency
59
48
  name: bourne
60
- requirement: &70133949375540 !ruby/object:Gem::Requirement
49
+ requirement: &70105774149520 !ruby/object:Gem::Requirement
61
50
  none: false
62
51
  requirements:
63
52
  - - ! '>='
@@ -65,10 +54,10 @@ dependencies:
65
54
  version: '0'
66
55
  type: :development
67
56
  prerelease: false
68
- version_requirements: *70133949375540
57
+ version_requirements: *70105774149520
69
58
  - !ruby/object:Gem::Dependency
70
59
  name: rspec
71
- requirement: &70133949375120 !ruby/object:Gem::Requirement
60
+ requirement: &70105774149100 !ruby/object:Gem::Requirement
72
61
  none: false
73
62
  requirements:
74
63
  - - ! '>='
@@ -76,8 +65,8 @@ dependencies:
76
65
  version: '0'
77
66
  type: :development
78
67
  prerelease: false
79
- version_requirements: *70133949375120
80
- description: Test your ActionMailer emails in Capybara
68
+ version_requirements: *70105774149100
69
+ description: Test your ActionMailer and Mailer messages in Capybara
81
70
  email:
82
71
  - bcardarella@gmail.com
83
72
  - brian@dockyard.com
@@ -85,24 +74,16 @@ executables: []
85
74
  extensions: []
86
75
  extra_rdoc_files: []
87
76
  files:
88
- - .gitignore
89
- - .rspec
90
- - Gemfile
91
77
  - LICENSE
92
78
  - README.md
93
- - Rakefile
94
- - capybara-email.gemspec
95
79
  - lib/capybara-email.rb
96
80
  - lib/capybara/email.rb
97
81
  - lib/capybara/email/driver.rb
82
+ - lib/capybara/email/dsl.rb
98
83
  - lib/capybara/email/node.rb
99
84
  - lib/capybara/email/rspec.rb
100
- - lib/capybara/email/rspec/helpers.rb
101
85
  - lib/capybara/email/version.rb
102
86
  - lib/capybara/node/email.rb
103
- - spec/email/driver_spec.rb
104
- - spec/node/email_spec.rb
105
- - spec/spec_helper.rb
106
87
  homepage: https://github.com/dockyard/capybara-email
107
88
  licenses: []
108
89
  post_install_message:
@@ -126,5 +107,6 @@ rubyforge_project:
126
107
  rubygems_version: 1.8.15
127
108
  signing_key:
128
109
  specification_version: 3
129
- summary: Test your ActionMailer emails in Capybara
110
+ summary: Test your ActionMailer and Mailer messages in Capybara
130
111
  test_files: []
112
+ has_rdoc:
data/.gitignore DELETED
@@ -1,18 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- *.sw?
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --colour
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in capybara-email.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
@@ -1,24 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/capybara/email/version', __FILE__)
3
-
4
- Gem::Specification.new do |gem|
5
- gem.authors = ['Brian Cardarella']
6
- gem.email = ['bcardarella@gmail.com', 'brian@dockyard.com']
7
- gem.description = %q{Test your ActionMailer emails in Capybara}
8
- gem.summary = %q{Test your ActionMailer emails in Capybara}
9
- gem.homepage = 'https://github.com/dockyard/capybara-email'
10
-
11
- gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
- gem.files = `git ls-files`.split("\n")
13
- gem.test_files = `git ls-files -- {spec}/*`.split("\n")
14
- gem.name = 'capybara-email'
15
- gem.require_paths = ['lib']
16
- gem.version = Capybara::Email::VERSION
17
-
18
- gem.add_development_dependency 'mail'
19
- gem.add_development_dependency 'actionmailer'
20
- gem.add_development_dependency 'sinatra'
21
- gem.add_development_dependency 'capybara'
22
- gem.add_development_dependency 'bourne'
23
- gem.add_development_dependency 'rspec'
24
- end
@@ -1,86 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class TestApp
4
- def self.call(env)
5
- [200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
6
- end
7
- end
8
-
9
- feature 'Integration test' do
10
- background do
11
- clear_email
12
- Capybara.app = ::TestApp
13
- end
14
-
15
- scenario 'html email' do
16
- email = deliver(html_email)
17
-
18
- open_email('test@example.com')
19
- current_email.click_link 'example'
20
- page.should have_content 'Hello world!'
21
- current_email.should have_content 'This is only a html test'
22
-
23
- all_emails.first.should == email
24
-
25
- clear_emails()
26
- all_emails.should be_empty
27
-
28
- end
29
-
30
- scenario 'plain text email' do
31
- email = deliver(plain_email)
32
-
33
- open_email('test@example.com')
34
- current_email.click_link 'http://example.com'
35
- page.should have_content 'Hello world!'
36
- current_email.should have_content 'This is only a plain test.'
37
-
38
- all_emails.first.should == email
39
-
40
- clear_emails()
41
- all_emails.should be_empty
42
- end
43
-
44
- scenario 'via ActionMailer' do
45
- email = deliver(plain_email)
46
-
47
- all_emails.first.should == email
48
-
49
- clear_emails
50
- all_emails.should be_empty
51
- end
52
-
53
- scenario 'via Mail' do
54
- email = plain_email.deliver!
55
-
56
- all_emails.first.should == email
57
-
58
- clear_emails
59
- all_emails.should be_empty
60
- end
61
- end
62
-
63
- def deliver(email)
64
- ActionMailer::Base.deliveries << email
65
- email
66
- end
67
-
68
- def html_email
69
- Mail::Message.new(:body => <<-HTML, :content_type => 'text/html', :to => 'test@example.com')
70
- <html>
71
- <body>
72
- <p>
73
- This is only a html test.
74
- <a href="http://example.com">example</a>
75
- </p>
76
- </body>
77
- </html>
78
- HTML
79
- end
80
-
81
- def plain_email
82
- Mail::Message.new(:body => <<-PLAIN, :content_type => 'text/plain', :to => 'test@example.com')
83
- This is only a plain test.
84
- http://example.com
85
- PLAIN
86
- end
@@ -1,73 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Capybara::Node::Email do
4
- let(:message) { Mail::Message.new }
5
- let(:email) { Capybara::Node::Email.new(nil, Capybara::Email::Driver.new(message)) }
6
-
7
- describe '#body' do
8
- context 'html' do
9
- before do
10
- message.content_type = 'text/html'
11
- message.body = '<a href="http://example.com">example</a>'
12
- end
13
-
14
- it 'delegates to the base' do
15
- email.body.should eq '<a href="http://example.com">example</a>'
16
- end
17
- end
18
-
19
- context 'plain' do
20
- before do
21
- message.content_type = 'text/plain'
22
- message.body = 'http://example.com'
23
- end
24
-
25
- it 'delegates to the base' do
26
- email.body.should eq 'http://example.com'
27
- end
28
- end
29
- end
30
-
31
- describe '#subject' do
32
- before do
33
- message.subject = 'Test subject'
34
- end
35
-
36
- it 'delegates to the base' do
37
- email.subject.should eq 'Test subject'
38
- end
39
- end
40
-
41
- describe '#to' do
42
- before do
43
- message.to = 'test@example.com'
44
- end
45
-
46
- it 'delegates to the base' do
47
- email.to.should include 'test@example.com'
48
- end
49
- end
50
-
51
- describe '#from' do
52
- before do
53
- message.from = 'test@example.com'
54
- end
55
-
56
- it 'delegates to the base' do
57
- email.from.should include 'test@example.com'
58
- end
59
- end
60
-
61
- describe '#save_and_open' do
62
- before do
63
- require 'capybara/util/save_and_open_page'
64
- message.body = 'Test message'
65
- ::Capybara.stubs(:save_and_open_page)
66
- end
67
-
68
- it 'delegates to Capybara.save_and_open_page' do
69
- email.save_and_open
70
- Capybara.should have_received(:save_and_open_page).with('Test message')
71
- end
72
- end
73
- end
data/spec/spec_helper.rb DELETED
@@ -1,14 +0,0 @@
1
- require 'rspec'
2
- require 'mail'
3
- require 'bourne'
4
- require 'action_mailer'
5
- require 'capybara/rspec'
6
- require 'capybara/email/rspec'
7
-
8
- Mail.defaults do
9
- delivery_method :test
10
- end
11
-
12
- RSpec.configure do |config|
13
- config.mock_with :mocha
14
- end