email_spec 1.0.1 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,4 +1,16 @@
1
- == 1.x (git)
1
+ == 1.2 (git)
2
+
3
+ == 1.1.1 2010-12-29
4
+ * Require "action_mailer" to avoid deprecation warnings. (Ryan Bigg)
5
+ * Relaxes pessimistic version dependency on RSpec. (GH-41 Dan Pickett)
6
+
7
+ == 1.1.0 2010-12-20
8
+
9
+ === Bugfixes
10
+ * anchor tags are no longer ignored when clicking links in emails (Anders Törnqist and Nicklas Ramhöj)
11
+ * set_current_email handles cases where To to blank but may contain CC, or BCC recipients (Murray Steele)
12
+ * Doc fixes (Florent Guilleux)
13
+
2
14
 
3
15
  == 1.0 2010-07-31 Rails 3.0 Release
4
16
  This release makes email-spec compatible with Rails 3 and RSpec 2.x.
@@ -39,7 +51,7 @@
39
51
  === Changes
40
52
  * Deprecated steps were removed. (Kieran Pilkington)
41
53
 
42
- === Bufixes
54
+ === Bugfixes
43
55
 
44
56
  == 0.5.0 2010-02-22
45
57
 
@@ -52,10 +64,10 @@
52
64
  * "save and open all html emails"
53
65
  * "save and open all raw emails"
54
66
 
55
- === Bufixes
67
+ === Bugfixes
56
68
  * Gracefully handle cases where emails do not have a 'to' value. (Kieran Pilkington)
57
69
 
58
- === Bufixes
70
+ === Bugfixes
59
71
 
60
72
  == 0.4.0 2010-01-07
61
73
 
@@ -63,12 +75,12 @@
63
75
  * Added support for action_mailer_cache_delivery plugin. (Dan Dofter)
64
76
  You must use the fork at: http://github.com/liangzan/action_mailer_cache_delivery
65
77
 
66
- === Bufixes
78
+ === Bugfixes
67
79
  * be_delivered_from matcher now compares both sender name and email address. (Dan Dofter)
68
80
 
69
81
  == 0.3.8 2009-12-23
70
82
 
71
- === Bufixes
83
+ === Bugfixes
72
84
  * Guard against cc and bcc fields being nil for ActionMailer. (Piotr Sarnacki)
73
85
 
74
86
  == 0.3.7 2009-12-17
@@ -128,7 +140,7 @@ Big shoutout to Kieran Pilkington who did the majority of work for this release.
128
140
  * Then /^I should not receive any emails?$/
129
141
  * When %r{^"([^"]*?)" opens? the email$} do |address|
130
142
 
131
- === Bufixes
143
+ === Bugfixes
132
144
 
133
145
  == 0.2.1 2009-5-29
134
146
 
@@ -144,19 +156,19 @@ No changes. Bumping version for RubyForge release.
144
156
 
145
157
  == 0.1.4 2009-5-29
146
158
 
147
- === Bufixes
159
+ === Bugfixes
148
160
  * Require deliveries in the helpers so it doesn't blow up with RSpec. (Craig Webster)
149
161
 
150
162
  == 0.1.3 2009-4-15
151
163
 
152
- === Bufixes
164
+ === Bugfixes
153
165
  * Fixed regular expressions in genertaed steps. (Ben Mabey)
154
166
  * World semantics changed in cucumber (0.2.3.2), email_spec now uses the new API. (Hector Morales)
155
167
 
156
168
  == 0.1.2 2009-4-05
157
169
 
158
170
  === New features
159
- === Bufixes
171
+ === Bugfixes
160
172
  * Actually added the renamed generators to the gem so people could use it! D'oh! (Ben Mabey)
161
173
  * You can either use "./script generate email_spec" or "rubigen rails email_spec"
162
174
  * Removed Rake tasks from example application to prevent conflicts when used as a plugin. (Ben Mabey)
@@ -165,7 +177,7 @@ No changes. Bumping version for RubyForge release.
165
177
  === New features
166
178
  * Switched dir structure over to support rubigen. (Dr. Nic)
167
179
 
168
- === Bufixes
180
+ === Bugfixes
169
181
 
170
182
  == 0.1.0 2009-3-25
171
183
  === New features
@@ -187,7 +199,7 @@ No changes. Bumping version for RubyForge release.
187
199
  end
188
200
  end
189
201
 
190
- === Bufixes
202
+ === Bugfixes
191
203
  * Revert parse_email_for_link helper method to allow for text links as well as explicit link finding. (Mischa Fierer)
192
204
  * Isolated variances between using email-spec with an ARMailer project. (Luke Melia)
193
205
 
data/README.rdoc CHANGED
@@ -32,6 +32,7 @@ you generally don't want to include those projects unless you need them in produ
32
32
  To use the steps in features put the following in your env.rb:
33
33
 
34
34
  # Make sure this require is after you require cucumber/rails/world.
35
+ require 'email_spec' # add this line if you use spork
35
36
  require 'email_spec/cucumber'
36
37
 
37
38
  This will load all the helpers that the steps rely on.
@@ -75,7 +76,7 @@ Otherwise, you will need to include them in the example groups you wish to use t
75
76
  And I press "Sign up"
76
77
  And I should receive an email
77
78
  When I open the email
78
- Then I should see "confirm" in the email
79
+ Then I should see "confirm" in the email body
79
80
  When I follow "confirm" in the email
80
81
  Then I should see "Confirm your new account"
81
82
 
@@ -113,11 +114,11 @@ Examples for the #signup method in UserMailer:
113
114
  end
114
115
 
115
116
  it "should contain the user's message in the mail body" do
116
- @email.should have_text(/Jojo Binks/)
117
+ @email.should have_body_text(/Jojo Binks/)
117
118
  end
118
119
 
119
120
  it "should contain a link to the confirmation link" do
120
- @email.should have_text(/#{confirm_account_url}/)
121
+ @email.should have_body_text(/#{confirm_account_url}/)
121
122
  end
122
123
 
123
124
  it "should have the correct subject" do
data/Rakefile CHANGED
@@ -22,7 +22,7 @@ begin
22
22
  s.has_rdoc = true
23
23
  s.extra_rdoc_files = %w(README.rdoc MIT-LICENSE.txt)
24
24
  s.rubyforge_project = 'email-spec'
25
- s.add_runtime_dependency 'rspec', '~> 2.0.0'
25
+ s.add_runtime_dependency "rspec", "~> 2.0"
26
26
  end
27
27
  rescue LoadError
28
28
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
@@ -52,8 +52,11 @@ task :default => [:features, :spec, 'example_app:spec']
52
52
  desc "Cleans the project of any tmp file that should not be included in the gemspec."
53
53
  task :clean do
54
54
  #remove stuff from example rails apps
55
+ FileUtils.rm_rf("examples/rails_root")
56
+ FileUtils.rm_rf("examples/sinatra")
55
57
  %w[ rails3 sinatra ].each do |ver|
56
58
  FileUtils.rm_f("examples/#{ver}_root/features/step_definitions/email_steps.rb")
59
+ FileUtils.rm_f("examples/#{ver}_root/rerun.txt")
57
60
  FileUtils.rm_rf("examples/#{ver}_root/log")
58
61
  FileUtils.rm_rf("examples/#{ver}_root/vendor")
59
62
  end
@@ -1,7 +1,8 @@
1
1
  PATH
2
- remote: /Users/bmabey/Programming/ruby/email-spec
2
+ remote: ../../
3
3
  specs:
4
- email_spec (0.6.2)
4
+ email_spec (1.0.0)
5
+ rspec (~> 2.0.0)
5
6
 
6
7
  GEM
7
8
  remote: http://gemcutter.org/
@@ -9,7 +9,11 @@ module EmailSpec
9
9
  end
10
10
 
11
11
  def reset_mailer
12
- deliveries.clear
12
+ if ActionMailer::Base.delivery_method == :cache
13
+ mailer.clear_cache
14
+ else
15
+ deliveries.clear
16
+ end
13
17
  end
14
18
 
15
19
  def mailbox_for(address)
@@ -13,14 +13,12 @@ module EmailSpec
13
13
  def click_email_link_matching(regex, email = current_email)
14
14
  url = links_in_email(email).detect { |link| link =~ regex }
15
15
  raise "No link found matching #{regex.inspect} in #{email.default_part_body}" unless url
16
- request_uri = URI::parse(url).request_uri
17
- visit request_uri
16
+ visit request_uri(url)
18
17
  end
19
18
 
20
19
  def click_first_link_in_email(email = current_email)
21
20
  link = links_in_email(email).first
22
- request_uri = URI::parse(link).request_uri
23
- visit request_uri
21
+ visit request_uri(link)
24
22
  end
25
23
 
26
24
  def open_email(address, opts={})
@@ -88,7 +86,7 @@ module EmailSpec
88
86
 
89
87
  def set_current_email(email)
90
88
  return unless email
91
- email.to.each do |to|
89
+ [email.to, email.cc, email.bcc].compact.flatten.each do |to|
92
90
  read_emails_for(to) << email
93
91
  email_spec_hash[:current_emails][to] = email
94
92
  end
@@ -105,11 +103,17 @@ module EmailSpec
105
103
  url
106
104
  end
107
105
 
106
+ def request_uri(link)
107
+ return unless link
108
+ url = URI::parse(link)
109
+ url.fragment ? (url.request_uri + "#" + url.fragment) : url.request_uri
110
+ end
111
+
108
112
  # e.g. confirm in http://confirm
109
113
  def parse_email_for_explicit_link(email, regex)
110
114
  regex = /#{Regexp.escape(regex)}/ unless regex.is_a?(Regexp)
111
115
  url = links_in_email(email).detect { |link| link =~ regex }
112
- URI::parse(url).request_uri if url
116
+ request_uri(url)
113
117
  end
114
118
 
115
119
  # e.g. Click here in <a href="http://confirm">Click here</a>
data/lib/email_spec.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  unless defined?(Pony) or defined?(ActionMailer)
2
2
  Kernel.warn("Neither Pony nor ActionMailer appear to be loaded so email-spec is requiring ActionMailer.")
3
- require 'actionmailer'
3
+ require 'action_mailer'
4
4
  end
5
5
 
6
6
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
@@ -57,7 +57,7 @@ Then /^(?:I|they|"([^"]*?)") should have (an|no|\d+) emails?$/ do |address, amou
57
57
  end
58
58
 
59
59
  Then /^(?:I|they|"([^"]*?)") should receive (an|no|\d+) emails? with subject "([^"]*?)"$/ do |address, amount, subject|
60
- unread_emails_for(address).select { |m| m.subject =~ Regexp.new(subject) }.size.should == parse_email_count(amount)
60
+ unread_emails_for(address).select { |m| m.subject =~ Regexp.new(Regexp.escape(subject)) }.size.should == parse_email_count(amount)
61
61
  end
62
62
 
63
63
  Then /^(?:I|they|"([^"]*?)") should receive an email with the following body:$/ do |address, expected_body|
@@ -18,4 +18,119 @@ describe EmailSpec::Helpers do
18
18
  lambda { parse_email_for_link(email, "non-existent text") }.should raise_error( RSpec::Expectations::ExpectationNotMetError)
19
19
  end
20
20
  end
21
+
22
+ describe "#set_current_email" do
23
+ it "should cope with a nil email" do
24
+ lambda do
25
+ out = set_current_email(nil)
26
+ out.should be_nil
27
+ email_spec_hash[:current_email].should be_nil
28
+ end.should_not raise_error
29
+ end
30
+
31
+ it "should cope with a real email" do
32
+ email = Mail.new
33
+ lambda do
34
+ out = set_current_email(email)
35
+ out.should == email
36
+ email_spec_hash[:current_email].should == email
37
+ end.should_not raise_error
38
+ end
39
+
40
+ shared_examples_for 'something that sets the current email for recipients' do
41
+ before do
42
+ @email = Mail.new(@recipient_type => 'dave@example.com')
43
+ end
44
+
45
+ it "should record that the email has been read for that recipient" do
46
+ set_current_email(@email)
47
+ email_spec_hash[:read_emails]['dave@example.com'].should include(@email)
48
+ end
49
+
50
+ it "should record that the email has been read for all the recipient of that type" do
51
+ @email.send(@recipient_type) << 'dave_2@example.com'
52
+ set_current_email(@email)
53
+ email_spec_hash[:read_emails]['dave@example.com'].should include(@email)
54
+ email_spec_hash[:read_emails]['dave_2@example.com'].should include(@email)
55
+ end
56
+
57
+ it "should record that the email is the current email for the recipient" do
58
+ set_current_email(@email)
59
+ email_spec_hash[:current_emails]['dave@example.com'].should == @email
60
+ end
61
+
62
+ it "should record that the email is the current email for all the recipients of that type" do
63
+ @email.send(@recipient_type) << 'dave_2@example.com'
64
+ set_current_email(@email)
65
+ email_spec_hash[:current_emails]['dave@example.com'].should == @email
66
+ email_spec_hash[:current_emails]['dave_2@example.com'].should == @email
67
+ end
68
+
69
+ it "should overwrite current email for the recipient with this one" do
70
+ other_mail = Mail.new
71
+ email_spec_hash[:current_emails]['dave@example.com'] = other_mail
72
+ set_current_email(@email)
73
+ email_spec_hash[:current_emails]['dave@example.com'].should == @email
74
+ end
75
+
76
+ it "should overwrite the current email for all the recipients of that type" do
77
+ other_mail = Mail.new
78
+ email_spec_hash[:current_emails]['dave@example.com'] = other_mail
79
+ email_spec_hash[:current_emails]['dave_2@example.com'] = other_mail
80
+ @email.send(@recipient_type) << 'dave_2@example.com'
81
+ set_current_email(@email)
82
+ email_spec_hash[:current_emails]['dave@example.com'].should == @email
83
+ email_spec_hash[:current_emails]['dave_2@example.com'].should == @email
84
+ end
85
+
86
+ it "should not complain when the email has recipients of that type" do
87
+ @email.send(:"#{@recipient_type}=", nil)
88
+ lambda { set_current_email(@email) }.should_not raise_error
89
+ end
90
+ end
91
+
92
+ describe "#request_uri(link)" do
93
+ context "without query and anchor" do
94
+ it "returns the path" do
95
+ request_uri('http://www.path.se/to/page').should == '/to/page'
96
+ end
97
+ end
98
+
99
+ context "with query and anchor" do
100
+ it "returns the path and query and the anchor" do
101
+ request_uri('http://www.path.se/to/page?q=adam#task').should == '/to/page?q=adam#task'
102
+ end
103
+ end
104
+
105
+ context "with anchor" do
106
+ it "returns the path and query and the anchor" do
107
+ request_uri('http://www.path.se/to/page#task').should == '/to/page#task'
108
+ end
109
+ end
110
+ end
111
+
112
+ describe 'for mails with recipients in the to address' do
113
+ before do
114
+ @recipient_type = :to
115
+ end
116
+
117
+ it_should_behave_like 'something that sets the current email for recipients'
118
+ end
119
+
120
+ describe 'for mails with recipients in the cc address' do
121
+ before do
122
+ @recipient_type = :cc
123
+ end
124
+
125
+ it_should_behave_like 'something that sets the current email for recipients'
126
+ end
127
+
128
+ describe 'for mails with recipients in the bcc address' do
129
+ before do
130
+ @recipient_type = :bcc
131
+ end
132
+
133
+ it_should_behave_like 'something that sets the current email for recipients'
134
+ end
135
+ end
21
136
  end
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: email_spec
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 1.0.1
4
+ hash: 17
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 1
9
+ - 1
10
+ version: 1.1.1
6
11
  platform: ruby
7
12
  authors:
8
13
  - Ben Mabey
@@ -12,7 +17,8 @@ autorequire:
12
17
  bindir: bin
13
18
  cert_chain: []
14
19
 
15
- date: 2012-01-13 00:00:00 Z
20
+ date: 2010-12-29 00:00:00 -07:00
21
+ default_executable:
16
22
  dependencies:
17
23
  - !ruby/object:Gem::Dependency
18
24
  name: rspec
@@ -22,7 +28,11 @@ dependencies:
22
28
  requirements:
23
29
  - - ~>
24
30
  - !ruby/object:Gem::Version
25
- version: 2.0.0
31
+ hash: 3
32
+ segments:
33
+ - 2
34
+ - 0
35
+ version: "2.0"
26
36
  type: :runtime
27
37
  version_requirements: *id001
28
38
  description: Easily test email in rspec and cucumber
@@ -140,6 +150,7 @@ files:
140
150
  - examples/sinatra_root/features/support/env.rb
141
151
  - examples/sinatra_root/features/support/paths.rb
142
152
  - examples/sinatra_root/lib/example_sinatra_app.rb
153
+ has_rdoc: true
143
154
  homepage: http://github.com/bmabey/email-spec/
144
155
  licenses: []
145
156
 
@@ -153,17 +164,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
153
164
  requirements:
154
165
  - - ">="
155
166
  - !ruby/object:Gem::Version
167
+ hash: 3
168
+ segments:
169
+ - 0
156
170
  version: "0"
157
171
  required_rubygems_version: !ruby/object:Gem::Requirement
158
172
  none: false
159
173
  requirements:
160
174
  - - ">="
161
175
  - !ruby/object:Gem::Version
176
+ hash: 3
177
+ segments:
178
+ - 0
162
179
  version: "0"
163
180
  requirements: []
164
181
 
165
182
  rubyforge_project: email-spec
166
- rubygems_version: 1.8.10
183
+ rubygems_version: 1.3.7
167
184
  signing_key:
168
185
  specification_version: 3
169
186
  summary: Easily test email in rspec and cucumber