email_spec 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/../spec_helper'
2
2
 
3
3
  # These two example groups are specifying the exact same behavior. However, the documentation style is different
4
- # and the value that each one provides is different with various trade-offs. Run these examples with the specdoc
4
+ # and the value that each one provides is different with various trade-offs. Run these examples with the specdoc
5
5
  # formatter to get an idea of how they differ.
6
6
  # Example of documenting the behaviour explicitly and expressing the intent in the example's sentence.
7
7
  describe "Signup Email", :type => :model do
@@ -10,11 +10,11 @@ describe "Signup Email", :type => :model do
10
10
  include ::Rails.application.routes.url_helpers
11
11
 
12
12
  subject { UserMailer.signup("jojo@yahoo.com", "Jojo Binks") }
13
-
13
+
14
14
  it "should be delivered to the email passed in" do
15
15
  is_expected.to deliver_to("jojo@yahoo.com")
16
16
  end
17
-
17
+
18
18
  it "should contain the user's name in the mail body" do
19
19
  is_expected.to have_body_text(/Jojo Binks/)
20
20
  end
@@ -22,10 +22,8 @@ describe "Signup Email", :type => :model do
22
22
  it "should contain a link to the confirmation page" do
23
23
  is_expected.to have_body_text(/#{confirm_account_url(:host => 'example.com')}/)
24
24
  end
25
-
25
+
26
26
  it { is_expected.to have_subject(/Account confirmation/) }
27
-
28
-
29
27
  end
30
28
 
31
29
  # In this example group more of the documentation is placed in the context trying to allow for more concise specs.
@@ -44,4 +42,12 @@ describe "Signup Email", :type => :model do
44
42
  it { is_expected.to deliver_to("jojo@yahoo.com") }
45
43
  it { is_expected.to have_body_text(/Jojo Binks/) }
46
44
  end
45
+
46
+ describe "sent with email address of 'jermain@yahoo.com', and users name 'Jermain O'Keefe'" do
47
+ let(:user_name) { "Jermain O'Keefe" }
48
+ subject { UserMailer.signup("jermain@yahoo.com", user_name) }
49
+
50
+ it { is_expected.to deliver_to("jermain@yahoo.com") }
51
+ it { is_expected.to have_body_text(user_name) }
52
+ end
47
53
  end
@@ -105,20 +105,36 @@ Then /^(?:I|they) should see \/([^"]*?)\/ in the email subject$/ do |text|
105
105
  expect(current_email).to have_subject(Regexp.new(text))
106
106
  end
107
107
 
108
+ Then /^(?:I|they) should not see "([^"]*?)" in the email subject$/ do |text|
109
+ expect(current_email).not_to have_subject(text)
110
+ end
111
+
112
+ Then /^(?:I|they) should not see \/([^"]*?)\/ in the email subject$/ do |text|
113
+ expect(current_email).not_to have_subject(Regexp.new(text))
114
+ end
115
+
108
116
  Then /^(?:I|they) should see "([^"]*?)" in the email body$/ do |text|
109
117
  expect(current_email.default_part_body.to_s).to include(text)
110
118
  end
111
119
 
120
+ Then /^(?:I|they) should not see "([^"]*?)" in the email body$/ do |text|
121
+ expect(current_email.default_part_body.to_s).not_to include(text)
122
+ end
123
+
112
124
  Then /^(?:I|they) should see \/([^"]*?)\/ in the email body$/ do |text|
113
125
  expect(current_email.default_part_body.to_s).to match Regexp.new(text)
114
126
  end
115
127
 
128
+ Then /^(?:I|they) should not see \/([^"]*?)\/ in the email body$/ do |text|
129
+ expect(current_email.default_part_body.to_s).not_to match Regexp.new(text)
130
+ end
131
+
116
132
  Then /^(?:I|they) should see the email delivered from "([^"]*?)"$/ do |text|
117
133
  expect(current_email).to be_delivered_from(text)
118
134
  end
119
135
 
120
136
  Then /^(?:I|they) should see the email reply to "([^"]*?)"$/ do |text|
121
- current_email.should have_reply_to(text)
137
+ expect(current_email).to have_reply_to(text)
122
138
  end
123
139
 
124
140
  Then /^(?:I|they) should see "([^\"]*)" in the email "([^"]*?)" header$/ do |text, name|
@@ -22,7 +22,7 @@ I want to verify that the example rails 4 app runs all of it's features as expec
22
22
  When I run "bundle exec rake spec RAILS_ENV=test" in the rails4 app
23
23
  Then I should see the following summary report:
24
24
  """
25
- 9 examples, 0 failures
25
+ 11 examples, 0 failures
26
26
  """
27
27
 
28
28
  When I run "bundle exec rake test RAILS_ENV=test" in the rails4 app
@@ -6,6 +6,9 @@ module EmailSpec
6
6
  module Helpers
7
7
  include Deliveries
8
8
 
9
+ A_TAG_BEGIN_REGEX = %r{<a[^>]*href=['"]?([^'"]*)['"]?[^>]*>(?:(?!</a>).)*?}
10
+ A_TAG_END_REGEX = %r{(?:(?!</a>).)*?</a>}
11
+
9
12
  def visit_in_email(link_text, address = '')
10
13
  if address.nil? || address.empty?
11
14
  email = current_email
@@ -97,7 +100,7 @@ module EmailSpec
97
100
  if current_email_address.nil?
98
101
  raise EmailSpec::NoEmailAddressProvided, "No email address has been provided. Make sure current_email_address is returning something."
99
102
  elsif email.nil?
100
- error = "#{opts.keys.first.to_s.humanize.downcase unless opts.empty?} #{('"' + opts.values.first.to_s + '"') unless opts.empty?}"
103
+ error = "#{opts.keys.first.to_s.gsub("_", " ").downcase unless opts.empty?} #{('"' + opts.values.first.to_s + '"') unless opts.empty?}"
101
104
  raise EmailSpec::CouldNotFindEmailError, "Could not find email #{error} in the mailbox for #{current_email_address}. \n Found the following emails:\n\n #{all_emails.to_s}"
102
105
  end
103
106
  email
@@ -142,7 +145,7 @@ module EmailSpec
142
145
 
143
146
  # e.g. Click here in <a href="http://confirm">Click here</a>
144
147
  def parse_email_for_anchor_text_link(email, link_text)
145
- if textify_images(email.default_part_body) =~ %r{<a[^>]*href=['"]?([^'"]*)['"]?[^>]*?>[^<]*?(.*?)#{link_text}(.*?)[^<]*?</a>}
148
+ if textify_images(email.default_part_body) =~ %r{#{A_TAG_BEGIN_REGEX}#{link_text}#{A_TAG_END_REGEX}}
146
149
  URI.split($1)[5..-1].compact!.join("?").gsub("&amp;", "&")
147
150
  # sub correct ampersand after rails switches it (http://dev.rubyonrails.org/ticket/4002)
148
151
  else
@@ -4,7 +4,11 @@ module EmailSpec::MailExt
4
4
  end
5
5
 
6
6
  def default_part_body
7
- default_part.body
7
+ HTMLEntities.new.decode(default_part.body)
8
+ end
9
+
10
+ def html
11
+ html_part ? html_part.body.raw_source : nil
8
12
  end
9
13
  end
10
14
 
@@ -0,0 +1,8 @@
1
+ RSpec.configure do |config|
2
+ config.include(EmailSpec::Helpers)
3
+ config.include(EmailSpec::Matchers)
4
+
5
+ config.before(:each) do |group|
6
+ reset_mailer
7
+ end
8
+ end
@@ -1,3 +1,3 @@
1
1
  module EmailSpec
2
- VERSION = '2.0.0'
2
+ VERSION = '2.1.0'
3
3
  end
@@ -105,14 +105,30 @@ Then /^(?:I|they) should see \/([^"]*?)\/ in the email subject$/ do |text|
105
105
  expect(current_email).to have_subject(Regexp.new(text))
106
106
  end
107
107
 
108
+ Then /^(?:I|they) should not see "([^"]*?)" in the email subject$/ do |text|
109
+ expect(current_email).not_to have_subject(text)
110
+ end
111
+
112
+ Then /^(?:I|they) should not see \/([^"]*?)\/ in the email subject$/ do |text|
113
+ expect(current_email).not_to have_subject(Regexp.new(text))
114
+ end
115
+
108
116
  Then /^(?:I|they) should see "([^"]*?)" in the email body$/ do |text|
109
117
  expect(current_email.default_part_body.to_s).to include(text)
110
118
  end
111
119
 
120
+ Then /^(?:I|they) should not see "([^"]*?)" in the email body$/ do |text|
121
+ expect(current_email.default_part_body.to_s).not_to include(text)
122
+ end
123
+
112
124
  Then /^(?:I|they) should see \/([^"]*?)\/ in the email body$/ do |text|
113
125
  expect(current_email.default_part_body.to_s).to match Regexp.new(text)
114
126
  end
115
127
 
128
+ Then /^(?:I|they) should not see \/([^"]*?)\/ in the email body$/ do |text|
129
+ expect(current_email.default_part_body.to_s).not_to match Regexp.new(text)
130
+ end
131
+
116
132
  Then /^(?:I|they) should see the email delivered from "([^"]*?)"$/ do |text|
117
133
  expect(current_email).to be_delivered_from(text)
118
134
  end
@@ -31,7 +31,9 @@ describe EmailSpec::Helpers do
31
31
  end
32
32
 
33
33
  it "properly finds links with text surrounded by tags" do
34
- email = Mail.new(:body => %(<a href="/path/to/page"><strong>Click Here</strong></a>))
34
+ email = Mail.new(:body => %(
35
+ <a href="/path/to/app">Welcome</a><a href="/path/to/page"><strong>Click Here</strong></a>))
36
+
35
37
  expect(parse_email_for_link(email, "Click Here")).to eq("/path/to/page")
36
38
  end
37
39
 
@@ -31,4 +31,27 @@ describe EmailSpec::MailExt do
31
31
  expect(email.default_part.body).to eq(email.default_part_body)
32
32
  end
33
33
  end
34
+
35
+ describe "#html" do
36
+ it "returns the html part body" do
37
+ email = Mail.new do
38
+ html_part { body "This is html" }
39
+ end
40
+
41
+ expect(email.html).to eq("This is html")
42
+ end
43
+
44
+ it "returns a String" do
45
+ email = Mail.new do
46
+ html_part { body "This is html" }
47
+ end
48
+
49
+ expect(email.html).to be_a(String)
50
+ end
51
+
52
+ it "returns nil for mail with no html part" do
53
+ email = Mail.new
54
+ expect(email.html).to be_nil
55
+ end
56
+ end
34
57
  end
@@ -402,6 +402,13 @@ describe EmailSpec::Matchers do
402
402
  end
403
403
 
404
404
  describe "when strings are used" do
405
+ it "should match when the body includes text with symbols" do
406
+ full_name = "Jermain O'Keefe"
407
+ email = Mail::Message.new(body: full_name)
408
+
409
+ expect(have_body_text(full_name)).to match(email)
410
+ end
411
+
405
412
  it "should match when the body includes the text" do
406
413
  email = Mail::Message.new(:body => 'foo bar baz')
407
414
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: email_spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Mabey
@@ -10,174 +10,160 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-01-15 00:00:00.000000000 Z
13
+ date: 2016-05-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: htmlentities
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - "~>"
19
+ - - ~>
20
20
  - !ruby/object:Gem::Version
21
21
  version: 4.3.3
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - "~>"
26
+ - - ~>
27
27
  - !ruby/object:Gem::Version
28
28
  version: 4.3.3
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: launchy
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - "~>"
33
+ - - ~>
34
34
  - !ruby/object:Gem::Version
35
35
  version: '2.1'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - "~>"
40
+ - - ~>
41
41
  - !ruby/object:Gem::Version
42
42
  version: '2.1'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: mail
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - "~>"
47
+ - - ~>
48
48
  - !ruby/object:Gem::Version
49
49
  version: 2.6.3
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - "~>"
54
+ - - ~>
55
55
  - !ruby/object:Gem::Version
56
56
  version: 2.6.3
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: rake
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - ">="
61
+ - - ! '>='
62
62
  - !ruby/object:Gem::Version
63
63
  version: 0.8.7
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - ">="
68
+ - - ! '>='
69
69
  - !ruby/object:Gem::Version
70
70
  version: 0.8.7
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: cucumber
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - "~>"
75
+ - - ~>
76
76
  - !ruby/object:Gem::Version
77
77
  version: 1.3.17
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - "~>"
82
+ - - ~>
83
83
  - !ruby/object:Gem::Version
84
84
  version: 1.3.17
85
85
  - !ruby/object:Gem::Dependency
86
- name: cucumber-rails
86
+ name: actionmailer
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - "~>"
89
+ - - ~>
90
90
  - !ruby/object:Gem::Version
91
- version: 1.4.2
91
+ version: '4.2'
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - "~>"
96
+ - - ~>
97
97
  - !ruby/object:Gem::Version
98
- version: 1.4.2
99
- - !ruby/object:Gem::Dependency
100
- name: cucumber-sinatra
101
- requirement: !ruby/object:Gem::Requirement
102
- requirements:
103
- - - "~>"
104
- - !ruby/object:Gem::Version
105
- version: 0.5.0
106
- type: :development
107
- prerelease: false
108
- version_requirements: !ruby/object:Gem::Requirement
109
- requirements:
110
- - - "~>"
111
- - !ruby/object:Gem::Version
112
- version: 0.5.0
98
+ version: '4.2'
113
99
  - !ruby/object:Gem::Dependency
114
100
  name: rack-test
115
101
  requirement: !ruby/object:Gem::Requirement
116
102
  requirements:
117
- - - ">="
103
+ - - ! '>='
118
104
  - !ruby/object:Gem::Version
119
105
  version: '0'
120
106
  type: :development
121
107
  prerelease: false
122
108
  version_requirements: !ruby/object:Gem::Requirement
123
109
  requirements:
124
- - - ">="
110
+ - - ! '>='
125
111
  - !ruby/object:Gem::Version
126
112
  version: '0'
127
113
  - !ruby/object:Gem::Dependency
128
114
  name: rspec
129
115
  requirement: !ruby/object:Gem::Requirement
130
116
  requirements:
131
- - - "~>"
117
+ - - ~>
132
118
  - !ruby/object:Gem::Version
133
119
  version: '3.1'
134
120
  type: :development
135
121
  prerelease: false
136
122
  version_requirements: !ruby/object:Gem::Requirement
137
123
  requirements:
138
- - - "~>"
124
+ - - ~>
139
125
  - !ruby/object:Gem::Version
140
126
  version: '3.1'
141
127
  - !ruby/object:Gem::Dependency
142
128
  name: capybara
143
129
  requirement: !ruby/object:Gem::Requirement
144
130
  requirements:
145
- - - ">="
131
+ - - ! '>='
146
132
  - !ruby/object:Gem::Version
147
133
  version: '0'
148
134
  type: :development
149
135
  prerelease: false
150
136
  version_requirements: !ruby/object:Gem::Requirement
151
137
  requirements:
152
- - - ">="
138
+ - - ! '>='
153
139
  - !ruby/object:Gem::Version
154
140
  version: '0'
155
141
  - !ruby/object:Gem::Dependency
156
142
  name: database_cleaner
157
143
  requirement: !ruby/object:Gem::Requirement
158
144
  requirements:
159
- - - ">="
145
+ - - ! '>='
160
146
  - !ruby/object:Gem::Version
161
147
  version: '0'
162
148
  type: :development
163
149
  prerelease: false
164
150
  version_requirements: !ruby/object:Gem::Requirement
165
151
  requirements:
166
- - - ">="
152
+ - - ! '>='
167
153
  - !ruby/object:Gem::Version
168
154
  version: '0'
169
155
  - !ruby/object:Gem::Dependency
170
156
  name: test-unit
171
157
  requirement: !ruby/object:Gem::Requirement
172
158
  requirements:
173
- - - ">="
159
+ - - ! '>='
174
160
  - !ruby/object:Gem::Version
175
161
  version: '0'
176
162
  type: :development
177
163
  prerelease: false
178
164
  version_requirements: !ruby/object:Gem::Requirement
179
165
  requirements:
180
- - - ">="
166
+ - - ! '>='
181
167
  - !ruby/object:Gem::Version
182
168
  version: '0'
183
169
  description: Easily test email in RSpec, Cucumber, and MiniTest
@@ -188,7 +174,7 @@ extra_rdoc_files:
188
174
  - README.md
189
175
  - MIT-LICENSE.txt
190
176
  files:
191
- - History.txt
177
+ - Changelog.md
192
178
  - MIT-LICENSE.txt
193
179
  - README.md
194
180
  - Rakefile
@@ -302,6 +288,7 @@ files:
302
288
  - lib/email_spec/helpers.rb
303
289
  - lib/email_spec/mail_ext.rb
304
290
  - lib/email_spec/matchers.rb
291
+ - lib/email_spec/rspec.rb
305
292
  - lib/email_spec/test_observer.rb
306
293
  - lib/email_spec/version.rb
307
294
  - lib/generators/email_spec/steps/steps_generator.rb
@@ -311,7 +298,7 @@ files:
311
298
  - spec/email_spec/mail_ext_spec.rb
312
299
  - spec/email_spec/matchers_spec.rb
313
300
  - spec/spec_helper.rb
314
- homepage: http://github.com/bmabey/email-spec/
301
+ homepage: http://github.com/email-spec/email-spec/
315
302
  licenses:
316
303
  - MIT
317
304
  metadata: {}
@@ -321,18 +308,18 @@ require_paths:
321
308
  - lib
322
309
  required_ruby_version: !ruby/object:Gem::Requirement
323
310
  requirements:
324
- - - ">="
311
+ - - ! '>='
325
312
  - !ruby/object:Gem::Version
326
313
  version: '0'
327
314
  required_rubygems_version: !ruby/object:Gem::Requirement
328
315
  requirements:
329
- - - ">="
316
+ - - ! '>='
330
317
  - !ruby/object:Gem::Version
331
318
  version: '0'
332
319
  requirements: []
333
320
  rubyforge_project: email-spec
334
- rubygems_version: 2.4.6
321
+ rubygems_version: 2.4.8
335
322
  signing_key:
336
323
  specification_version: 4
337
- summary: Easily test email in rspec and cucumber and minitest
324
+ summary: Easily test email in RSpec, Cucumber or Minitest
338
325
  test_files: []