email_spec 0.6.6 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +21 -26
- data/README.rdoc +5 -3
- data/Rakefile +16 -27
- data/examples/rails3_root/Gemfile +17 -0
- data/examples/rails3_root/Gemfile.lock +138 -0
- data/examples/rails3_root/README +5 -0
- data/examples/rails3_root/Rakefile +11 -0
- data/examples/rails3_root/app/controllers/application_controller.rb +3 -0
- data/examples/rails3_root/app/controllers/welcome_controller.rb +16 -0
- data/examples/rails3_root/app/helpers/application_helper.rb +2 -0
- data/examples/rails3_root/app/mailers/user_mailer.rb +39 -0
- data/examples/{rails_root → rails3_root}/app/models/user.rb +0 -0
- data/examples/{rails_root/app/views/user_mailer/attachments.erb → rails3_root/app/views/user_mailer/attachments.html.erb} +0 -0
- data/examples/{rails_root/app/views/user_mailer/newsletter.erb → rails3_root/app/views/user_mailer/newsletter.html.erb} +0 -0
- data/examples/{rails_root/app/views/user_mailer/signup.erb → rails3_root/app/views/user_mailer/signup.html.erb} +1 -0
- data/examples/rails3_root/app/views/user_mailer/signup.text.erb +4 -0
- data/examples/{rails_root → rails3_root}/app/views/welcome/attachments.html.erb +0 -0
- data/examples/{rails_root → rails3_root}/app/views/welcome/confirm.html.erb +0 -0
- data/examples/{rails_root → rails3_root}/app/views/welcome/index.html.erb +1 -1
- data/examples/{rails_root → rails3_root}/app/views/welcome/newsletter.html.erb +0 -0
- data/examples/{rails_root → rails3_root}/app/views/welcome/signup.html.erb +0 -0
- data/examples/{rails_root → rails3_root}/attachments/document.pdf +0 -0
- data/examples/{rails_root → rails3_root}/attachments/image.png +0 -0
- data/examples/rails3_root/config.ru +4 -0
- data/examples/rails3_root/config/application.rb +43 -0
- data/examples/rails3_root/config/boot.rb +14 -0
- data/examples/rails3_root/config/cucumber.yml +8 -0
- data/examples/{rails_root → rails3_root}/config/database.yml +0 -0
- data/examples/rails3_root/config/environment.rb +6 -0
- data/examples/rails3_root/config/environments/development.rb +20 -0
- data/examples/rails3_root/config/environments/production.rb +42 -0
- data/examples/rails3_root/config/environments/test.rb +30 -0
- data/examples/rails3_root/config/initializers/backtrace_silencers.rb +7 -0
- data/examples/rails3_root/config/initializers/cookie_verification_secret.rb +7 -0
- data/examples/rails3_root/config/initializers/delayed_job.rb +1 -0
- data/examples/{rails_root → rails3_root}/config/initializers/inflections.rb +0 -0
- data/examples/{rails_root → rails3_root}/config/initializers/mime_types.rb +0 -0
- data/examples/rails3_root/config/initializers/notifier_job.rb +1 -0
- data/examples/rails3_root/config/initializers/rspec_generator.rb +6 -0
- data/examples/rails3_root/config/initializers/session_store.rb +10 -0
- data/examples/rails3_root/config/locales/en.yml +5 -0
- data/examples/rails3_root/config/routes.rb +7 -0
- data/examples/{rails_root → rails3_root}/db/migrate/20090125013728_create_users.rb +0 -0
- data/examples/{rails_root → rails3_root}/db/migrate/20090908054656_create_delayed_jobs.rb +0 -0
- data/examples/{rails_root → rails3_root}/db/schema.rb +7 -6
- data/examples/rails3_root/db/seeds.rb +7 -0
- data/examples/rails3_root/doc/README_FOR_APP +2 -0
- data/examples/{rails_root → rails3_root}/features/attachments.feature +0 -0
- data/examples/{rails_root → rails3_root}/features/delayed_job.feature +0 -0
- data/examples/{rails_root → rails3_root}/features/errors.feature +0 -0
- data/examples/{sinatra → rails3_root}/features/example.feature +9 -0
- data/examples/{rails_root → rails3_root}/features/step_definitions/user_steps.rb +2 -2
- data/examples/rails3_root/features/step_definitions/web_steps.rb +219 -0
- data/examples/{rails_root → rails3_root}/features/support/env.rb +10 -10
- data/examples/rails3_root/features/support/env_ext.rb +2 -0
- data/examples/{rails_root → rails3_root}/features/support/paths.rb +2 -2
- data/examples/rails3_root/lib/notifier_job.rb +5 -0
- data/examples/{rails_root → rails3_root}/lib/tasks/cucumber.rake +6 -0
- data/examples/rails3_root/lib/tasks/rspec.rake +69 -0
- data/examples/rails3_root/public/404.html +26 -0
- data/examples/rails3_root/public/422.html +26 -0
- data/examples/rails3_root/public/500.html +26 -0
- data/examples/{rails_root → rails3_root}/public/favicon.ico +0 -0
- data/examples/{rails_root → rails3_root}/public/images/rails.png +0 -0
- data/examples/{rails_root → rails3_root}/public/javascripts/application.js +0 -0
- data/examples/{rails_root → rails3_root}/public/javascripts/controls.js +5 -3
- data/examples/{rails_root → rails3_root}/public/javascripts/dragdrop.js +7 -6
- data/examples/{rails_root → rails3_root}/public/javascripts/effects.js +8 -13
- data/examples/{rails_root → rails3_root}/public/javascripts/prototype.js +1573 -1019
- data/examples/rails3_root/public/javascripts/rails.js +109 -0
- data/examples/{rails_root → rails3_root}/public/robots.txt +0 -0
- data/examples/{rails_root → rails3_root}/script/cucumber +0 -0
- data/examples/rails3_root/script/rails +9 -0
- data/examples/rails3_root/spec/controllers/welcome_controller_spec.rb +20 -0
- data/examples/{rails_root → rails3_root}/spec/models/user_mailer_spec.rb +7 -18
- data/examples/rails3_root/spec/spec_helper.rb +19 -0
- data/examples/sinatra_root/config.ru +4 -0
- data/examples/{sinatra → sinatra_root}/features/errors.feature +0 -0
- data/examples/{rails_root → sinatra_root}/features/example.feature +0 -0
- data/examples/{sinatra → sinatra_root}/features/step_definitions/user_steps.rb +2 -2
- data/examples/sinatra_root/features/step_definitions/web_steps.rb +219 -0
- data/examples/sinatra_root/features/support/env.rb +21 -0
- data/examples/{sinatra → sinatra_root}/features/support/paths.rb +9 -4
- data/examples/sinatra_root/lib/example_sinatra_app.rb +35 -0
- data/lib/email_spec.rb +2 -2
- data/lib/email_spec/deliveries.rb +7 -11
- data/lib/email_spec/email_viewer.rb +1 -1
- data/lib/email_spec/helpers.rb +7 -7
- data/lib/email_spec/mail_ext.rb +11 -0
- data/lib/email_spec/matchers.rb +31 -26
- data/lib/generators/email_spec/steps/USAGE +5 -0
- data/lib/generators/email_spec/steps/steps_generator.rb +14 -0
- data/{examples/rails3_root/features/step_definitions → lib/generators/email_spec/steps/templates}/email_steps.rb +0 -0
- data/spec/email_spec/helpers_spec.rb +4 -6
- data/spec/email_spec/mail_ext_spec.rb +34 -0
- data/spec/email_spec/matchers_spec.rb +227 -37
- data/spec/spec_helper.rb +14 -2
- metadata +174 -207
- data/examples/rails_root/Rakefile +0 -13
- data/examples/rails_root/app/controllers/application_controller.rb +0 -15
- data/examples/rails_root/app/controllers/welcome_controller.rb +0 -16
- data/examples/rails_root/app/helpers/application_helper.rb +0 -3
- data/examples/rails_root/app/helpers/welcome_helper.rb +0 -2
- data/examples/rails_root/app/models/user_mailer.rb +0 -39
- data/examples/rails_root/config/boot.rb +0 -110
- data/examples/rails_root/config/cucumber.yml +0 -7
- data/examples/rails_root/config/environment.rb +0 -28
- data/examples/rails_root/config/environments/cucumber.rb +0 -29
- data/examples/rails_root/config/environments/development.rb +0 -17
- data/examples/rails_root/config/environments/production.rb +0 -28
- data/examples/rails_root/config/environments/test.rb +0 -28
- data/examples/rails_root/config/initializers/new_rails_defaults.rb +0 -17
- data/examples/rails_root/config/routes.rb +0 -45
- data/examples/rails_root/doc/README_FOR_APP +0 -5
- data/examples/rails_root/features/step_definitions/web_steps.rb +0 -273
- data/examples/rails_root/features/support/env_ext.rb +0 -6
- data/examples/rails_root/public/404.html +0 -30
- data/examples/rails_root/public/422.html +0 -30
- data/examples/rails_root/public/500.html +0 -33
- data/examples/rails_root/public/dispatch.rb +0 -10
- data/examples/rails_root/script/about +0 -4
- data/examples/rails_root/script/autospec +0 -5
- data/examples/rails_root/script/console +0 -3
- data/examples/rails_root/script/dbconsole +0 -3
- data/examples/rails_root/script/delayed_job +0 -5
- data/examples/rails_root/script/destroy +0 -3
- data/examples/rails_root/script/generate +0 -3
- data/examples/rails_root/script/performance/benchmarker +0 -3
- data/examples/rails_root/script/performance/profiler +0 -3
- data/examples/rails_root/script/performance/request +0 -3
- data/examples/rails_root/script/plugin +0 -3
- data/examples/rails_root/script/process/inspector +0 -3
- data/examples/rails_root/script/process/reaper +0 -3
- data/examples/rails_root/script/process/spawner +0 -3
- data/examples/rails_root/script/runner +0 -3
- data/examples/rails_root/script/server +0 -3
- data/examples/rails_root/script/spec +0 -5
- data/examples/rails_root/script/spec_server +0 -125
- data/examples/rails_root/spec/controllers/welcome_controller_spec.rb +0 -15
- data/examples/rails_root/spec/model_factory.rb +0 -6
- data/examples/rails_root/spec/models/user_spec.rb +0 -5
- data/examples/rails_root/spec/rcov.opts +0 -2
- data/examples/rails_root/spec/spec.opts +0 -4
- data/examples/rails_root/spec/spec_helper.rb +0 -51
- data/examples/sinatra/app.rb +0 -33
- data/examples/sinatra/features/step_definitions/email_steps.rb +0 -182
- data/examples/sinatra/features/step_definitions/web_steps.rb +0 -273
- data/examples/sinatra/features/support/env.rb +0 -39
- data/examples/sinatra_root/features/step_definitions/email_steps.rb +0 -194
- data/lib/email_spec/#helpers.rb# +0 -168
- data/spec/spec.opts +0 -4
@@ -1,39 +0,0 @@
|
|
1
|
-
# Sinatra configuration - http://wiki.github.com/aslakhellesoy/cucumber/sinatra
|
2
|
-
ENV["RAILS_ENV"] ||= "cucumber"
|
3
|
-
app_file = File.expand_path(File.dirname(__FILE__) + '/../../app.rb')
|
4
|
-
require app_file
|
5
|
-
# Force the application name because polyglot breaks the auto-detection logic.
|
6
|
-
Sinatra::Application.app_file = app_file
|
7
|
-
|
8
|
-
require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support
|
9
|
-
require 'cucumber/web/tableish'
|
10
|
-
|
11
|
-
require 'spec/expectations'
|
12
|
-
require 'rack/test'
|
13
|
-
require 'test/unit'
|
14
|
-
require 'webrat'
|
15
|
-
|
16
|
-
Webrat.configure do |config|
|
17
|
-
config.mode = :rack
|
18
|
-
config.open_error_files = false # Set to true if you want error pages to pop up in the browser
|
19
|
-
end
|
20
|
-
|
21
|
-
# email testing in cucumber
|
22
|
-
require 'activesupport'
|
23
|
-
require File.expand_path(File.dirname(__FILE__) + '../../../../../lib/email_spec')
|
24
|
-
require 'email_spec/cucumber'
|
25
|
-
|
26
|
-
class AppWorld
|
27
|
-
include Rack::Test::Methods
|
28
|
-
include Test::Unit::Assertions
|
29
|
-
include Webrat::Methods
|
30
|
-
include Webrat::Matchers
|
31
|
-
|
32
|
-
Webrat::Methods.delegate_to_session :response_code, :response_body
|
33
|
-
|
34
|
-
def app
|
35
|
-
Sinatra::Application.new
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
World { AppWorld.new }
|
@@ -1,194 +0,0 @@
|
|
1
|
-
# Commonly used email steps
|
2
|
-
#
|
3
|
-
# To add your own steps make a custom_email_steps.rb
|
4
|
-
# The provided methods are:
|
5
|
-
#
|
6
|
-
# last_email_address
|
7
|
-
# reset_mailer
|
8
|
-
# open_last_email
|
9
|
-
# visit_in_email
|
10
|
-
# unread_emails_for
|
11
|
-
# mailbox_for
|
12
|
-
# current_email
|
13
|
-
# open_email
|
14
|
-
# read_emails_for
|
15
|
-
# find_email
|
16
|
-
#
|
17
|
-
# General form for email scenarios are:
|
18
|
-
# - clear the email queue (done automatically by email_spec)
|
19
|
-
# - execute steps that sends an email
|
20
|
-
# - check the user received an/no/[0-9] emails
|
21
|
-
# - open the email
|
22
|
-
# - inspect the email contents
|
23
|
-
# - interact with the email (e.g. click links)
|
24
|
-
#
|
25
|
-
# The Cucumber steps below are setup in this order.
|
26
|
-
|
27
|
-
module EmailHelpers
|
28
|
-
def current_email_address
|
29
|
-
# Replace with your a way to find your current email. e.g @current_user.email
|
30
|
-
# last_email_address will return the last email address used by email spec to find an email.
|
31
|
-
# Note that last_email_address will be reset after each Scenario.
|
32
|
-
last_email_address || "example@example.com"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
World(EmailHelpers)
|
37
|
-
|
38
|
-
#
|
39
|
-
# Reset the e-mail queue within a scenario.
|
40
|
-
# This is done automatically before each scenario.
|
41
|
-
#
|
42
|
-
|
43
|
-
Given /^(?:a clear email queue|no emails have been sent)$/ do
|
44
|
-
reset_mailer
|
45
|
-
end
|
46
|
-
|
47
|
-
#
|
48
|
-
# Check how many emails have been sent/received
|
49
|
-
#
|
50
|
-
|
51
|
-
Then /^(?:I|they|"([^"]*?)") should receive (an|no|\d+) emails?$/ do |address, amount|
|
52
|
-
unread_emails_for(address).size.should == parse_email_count(amount)
|
53
|
-
end
|
54
|
-
|
55
|
-
Then /^(?:I|they|"([^"]*?)") should have (an|no|\d+) emails?$/ do |address, amount|
|
56
|
-
mailbox_for(address).size.should == parse_email_count(amount)
|
57
|
-
end
|
58
|
-
|
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)
|
61
|
-
end
|
62
|
-
|
63
|
-
Then /^(?:I|they|"([^"]*?)") should receive an email with the following body:$/ do |address, expected_body|
|
64
|
-
open_email(address, :with_text => expected_body)
|
65
|
-
end
|
66
|
-
|
67
|
-
#
|
68
|
-
# Accessing emails
|
69
|
-
#
|
70
|
-
|
71
|
-
# Opens the most recently received email
|
72
|
-
When /^(?:I|they|"([^"]*?)") opens? the email$/ do |address|
|
73
|
-
open_email(address)
|
74
|
-
end
|
75
|
-
|
76
|
-
When /^(?:I|they|"([^"]*?)") opens? the email with subject "([^"]*?)"$/ do |address, subject|
|
77
|
-
open_email(address, :with_subject => subject)
|
78
|
-
end
|
79
|
-
|
80
|
-
When /^(?:I|they|"([^"]*?)") opens? the email with text "([^"]*?)"$/ do |address, text|
|
81
|
-
open_email(address, :with_text => text)
|
82
|
-
end
|
83
|
-
|
84
|
-
#
|
85
|
-
# Inspect the Email Contents
|
86
|
-
#
|
87
|
-
|
88
|
-
Then /^(?:I|they) should see "([^"]*?)" in the email subject$/ do |text|
|
89
|
-
current_email.should have_subject(text)
|
90
|
-
end
|
91
|
-
|
92
|
-
Then /^(?:I|they) should see \/([^"]*?)\/ in the email subject$/ do |text|
|
93
|
-
current_email.should have_subject(Regexp.new(text))
|
94
|
-
end
|
95
|
-
|
96
|
-
Then /^(?:I|they) should see "([^"]*?)" in the email body$/ do |text|
|
97
|
-
current_email.default_part_body.to_s.should include(text)
|
98
|
-
end
|
99
|
-
|
100
|
-
Then /^(?:I|they) should see \/([^"]*?)\/ in the email body$/ do |text|
|
101
|
-
current_email.default_part_body.to_s.should =~ Regexp.new(text)
|
102
|
-
end
|
103
|
-
|
104
|
-
Then /^(?:I|they) should see the email delivered from "([^"]*?)"$/ do |text|
|
105
|
-
current_email.should be_delivered_from(text)
|
106
|
-
end
|
107
|
-
|
108
|
-
Then /^(?:I|they) should see "([^\"]*)" in the email "([^"]*?)" header$/ do |text, name|
|
109
|
-
current_email.should have_header(name, text)
|
110
|
-
end
|
111
|
-
|
112
|
-
Then /^(?:I|they) should see \/([^\"]*)\/ in the email "([^"]*?)" header$/ do |text, name|
|
113
|
-
current_email.should have_header(name, Regexp.new(text))
|
114
|
-
end
|
115
|
-
|
116
|
-
Then /^I should see it is a multi\-part email$/ do
|
117
|
-
current_email.should be_multipart
|
118
|
-
end
|
119
|
-
|
120
|
-
Then /^(?:I|they) should see "([^"]*?)" in the email html part body$/ do |text|
|
121
|
-
current_email.html_part.body.to_s.should include(text)
|
122
|
-
end
|
123
|
-
|
124
|
-
Then /^(?:I|they) should see "([^"]*?)" in the email text part body$/ do |text|
|
125
|
-
current_email.text_part.body.to_s.should include(text)
|
126
|
-
end
|
127
|
-
|
128
|
-
#
|
129
|
-
# Inspect the Email Attachments
|
130
|
-
#
|
131
|
-
|
132
|
-
Then /^(?:I|they) should see (an|no|\d+) attachments? with the email$/ do |amount|
|
133
|
-
current_email_attachments.size.should == parse_email_count(amount)
|
134
|
-
end
|
135
|
-
|
136
|
-
Then /^there should be (an|no|\d+) attachments? named "([^"]*?)"$/ do |amount, filename|
|
137
|
-
current_email_attachments.select { |a| a.filename == filename }.size.should == parse_email_count(amount)
|
138
|
-
end
|
139
|
-
|
140
|
-
Then /^attachment (\d+) should be named "([^"]*?)"$/ do |index, filename|
|
141
|
-
current_email_attachments[(index.to_i - 1)].filename.should == filename
|
142
|
-
end
|
143
|
-
|
144
|
-
Then /^there should be (an|no|\d+) attachments? of type "([^"]*?)"$/ do |amount, content_type|
|
145
|
-
current_email_attachments.select { |a| a.content_type.include?(content_type) }.size.should == parse_email_count(amount)
|
146
|
-
end
|
147
|
-
|
148
|
-
Then /^attachment (\d+) should be of type "([^"]*?)"$/ do |index, content_type|
|
149
|
-
current_email_attachments[(index.to_i - 1)].content_type.should include(content_type)
|
150
|
-
end
|
151
|
-
|
152
|
-
Then /^all attachments should not be blank$/ do
|
153
|
-
current_email_attachments.each do |attachment|
|
154
|
-
attachment.read.size.should_not == 0
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
Then /^show me a list of email attachments$/ do
|
159
|
-
EmailSpec::EmailViewer::save_and_open_email_attachments_list(current_email)
|
160
|
-
end
|
161
|
-
|
162
|
-
#
|
163
|
-
# Interact with Email Contents
|
164
|
-
#
|
165
|
-
|
166
|
-
When /^(?:I|they) follow "([^"]*?)" in the email$/ do |link|
|
167
|
-
visit_in_email(link)
|
168
|
-
end
|
169
|
-
|
170
|
-
When /^(?:I|they) click the first link in the email$/ do
|
171
|
-
click_first_link_in_email
|
172
|
-
end
|
173
|
-
|
174
|
-
#
|
175
|
-
# Debugging
|
176
|
-
# These only work with Rails and OSx ATM since EmailViewer uses RAILS_ROOT and OSx's 'open' command.
|
177
|
-
# Patches accepted. ;)
|
178
|
-
#
|
179
|
-
|
180
|
-
Then /^save and open current email$/ do
|
181
|
-
EmailSpec::EmailViewer::save_and_open_email(current_email)
|
182
|
-
end
|
183
|
-
|
184
|
-
Then /^save and open all text emails$/ do
|
185
|
-
EmailSpec::EmailViewer::save_and_open_all_text_emails
|
186
|
-
end
|
187
|
-
|
188
|
-
Then /^save and open all html emails$/ do
|
189
|
-
EmailSpec::EmailViewer::save_and_open_all_html_emails
|
190
|
-
end
|
191
|
-
|
192
|
-
Then /^save and open all raw emails$/ do
|
193
|
-
EmailSpec::EmailViewer::save_and_open_all_raw_emails
|
194
|
-
end
|
data/lib/email_spec/#helpers.rb#
DELETED
@@ -1,168 +0,0 @@
|
|
1
|
-
require 'uri'
|
2
|
-
require 'email_spec/deliveries'
|
3
|
-
|
4
|
-
module EmailSpec
|
5
|
-
|
6
|
-
module Helpers
|
7
|
-
include Deliveries
|
8
|
-
|
9
|
-
def visit_in_email(link_text, opts={})
|
10
|
-
visit(parse_email_for_link(current_email, link_text, opts))
|
11
|
-
end
|
12
|
-
|
13
|
-
def click_email_link_matching(regex, email = current_email)
|
14
|
-
url = links_in_email(email).detect { |link| link =~ regex }
|
15
|
-
raise "No link found matching #{regex.inspect} in #{email.default_part_body}" unless url
|
16
|
-
visit request_uri(url)
|
17
|
-
end
|
18
|
-
|
19
|
-
def click_first_link_in_email(email = current_email, opts={})
|
20
|
-
link = links_in_email(email).first
|
21
|
-
visit request_uri(link, opts)
|
22
|
-
end
|
23
|
-
|
24
|
-
def open_email(address, opts={})
|
25
|
-
set_current_email(find_email!(address, opts))
|
26
|
-
end
|
27
|
-
|
28
|
-
alias_method :open_email_for, :open_email
|
29
|
-
|
30
|
-
def open_last_email
|
31
|
-
set_current_email(last_email_sent)
|
32
|
-
end
|
33
|
-
|
34
|
-
def open_last_email_for(address)
|
35
|
-
set_current_email(mailbox_for(address).last)
|
36
|
-
end
|
37
|
-
|
38
|
-
def current_email(address=nil)
|
39
|
-
address = convert_address(address)
|
40
|
-
email = address ? email_spec_hash[:current_emails][address] : email_spec_hash[:current_email]
|
41
|
-
raise RSpec::Expectations::ExpectationNotMetError, "Expected an open email but none was found. Did you forget to call open_email?" unless email
|
42
|
-
email
|
43
|
-
end
|
44
|
-
|
45
|
-
def current_email_attachments(address=nil)
|
46
|
-
current_email(address).attachments || Array.new
|
47
|
-
end
|
48
|
-
|
49
|
-
def unread_emails_for(address)
|
50
|
-
mailbox_for(address) - read_emails_for(address)
|
51
|
-
end
|
52
|
-
|
53
|
-
def read_emails_for(address)
|
54
|
-
email_spec_hash[:read_emails][convert_address(address)] ||= []
|
55
|
-
end
|
56
|
-
|
57
|
-
def find_email(address, opts={})
|
58
|
-
address = convert_address(address)
|
59
|
-
if opts[:with_subject]
|
60
|
-
mailbox_for(address).find { |m| m.subject =~ Regexp.new(opts[:with_subject]) }
|
61
|
-
elsif opts[:with_text]
|
62
|
-
mailbox_for(address).find { |m| m.default_part_body =~ Regexp.new(opts[:with_text]) }
|
63
|
-
else
|
64
|
-
mailbox_for(address).first
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def links_in_email(email)
|
69
|
-
URI.extract(email.default_part_body.to_s, ['http', 'https'])
|
70
|
-
end
|
71
|
-
|
72
|
-
private
|
73
|
-
|
74
|
-
def email_spec_hash
|
75
|
-
@email_spec_hash ||= {:read_emails => {}, :unread_emails => {}, :current_emails => {}, :current_email => nil}
|
76
|
-
end
|
77
|
-
|
78
|
-
def find_email!(address, opts={})
|
79
|
-
email = find_email(address, opts)
|
80
|
-
if email.nil?
|
81
|
-
error = "#{opts.keys.first.to_s.humanize unless opts.empty?} #{('"' + opts.values.first.to_s.humanize + '"') unless opts.empty?}"
|
82
|
-
raise RSpec::Expectations::ExpectationNotMetError, "Could not find email #{error}. \n Found the following emails:\n\n #{all_emails.to_s}"
|
83
|
-
end
|
84
|
-
email
|
85
|
-
end
|
86
|
-
|
87
|
-
def set_current_email(email)
|
88
|
-
return unless email
|
89
|
-
[email.to, email.cc, email.bcc].compact.flatten.each do |to|
|
90
|
-
read_emails_for(to) << email
|
91
|
-
email_spec_hash[:current_emails][to] = email
|
92
|
-
end
|
93
|
-
email_spec_hash[:current_email] = email
|
94
|
-
end
|
95
|
-
|
96
|
-
def parse_email_for_link(email, text_or_regex, opts={})
|
97
|
-
email.should have_body_text(text_or_regex)
|
98
|
-
|
99
|
-
url = parse_email_for_explicit_link(email, text_or_regex, opts)
|
100
|
-
url ||= parse_email_for_anchor_text_link(email, text_or_regex, opts)
|
101
|
-
|
102
|
-
raise "No link found matching #{text_or_regex.inspect} in #{email}" unless url
|
103
|
-
url
|
104
|
-
end
|
105
|
-
|
106
|
-
def request_uri(link, opts={})
|
107
|
-
return unless link
|
108
|
-
url = URI::parse(link)
|
109
|
-
# url.fragment ? (url.request_uri + "#" + url.fragment) : url.request_uri
|
110
|
-
path = url.fragment ? (url.request_uri + "#" + url.fragment) : url.request_uri
|
111
|
-
opts[:path_only] != false ? path : url.to_s
|
112
|
-
end
|
113
|
-
|
114
|
-
# e.g. confirm in http://confirm
|
115
|
-
def parse_email_for_explicit_link(email, regex, opts={})
|
116
|
-
regex = /#{Regexp.escape(regex)}/ unless regex.is_a?(Regexp)
|
117
|
-
url = links_in_email(email).detect { |link| link =~ regex }
|
118
|
-
request_uri(url, opts)
|
119
|
-
end
|
120
|
-
|
121
|
-
# e.g. Click here in <a href="http://confirm">Click here</a>
|
122
|
-
def parse_email_for_anchor_text_link(email, link_text, opts={})
|
123
|
-
if textify_images(email.default_part_body) =~ %r{<a[^>]*href=['"]?([^'"]*)['"]?[^>]*?>[^<]*?#{link_text}[^<]*?</a>}
|
124
|
-
url = $1
|
125
|
-
path = URI.split(url)[5..-1].compact!.join("?").gsub("&", "&")
|
126
|
-
opts[:path_only] ? path : url.to_s
|
127
|
-
# sub correct ampersand after rails switches it (http://dev.rubyonrails.org/ticket/4002)
|
128
|
-
else
|
129
|
-
return nil
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
def textify_images(email_body)
|
134
|
-
email_body.to_s.gsub(%r{<img[^>]*alt=['"]?([^'"]*)['"]?[^>]*?/>}) { $1 }
|
135
|
-
end
|
136
|
-
|
137
|
-
def parse_email_count(amount)
|
138
|
-
case amount
|
139
|
-
when "no"
|
140
|
-
0
|
141
|
-
when "an"
|
142
|
-
1
|
143
|
-
else
|
144
|
-
amount.to_i
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
attr_reader :last_email_address
|
149
|
-
|
150
|
-
def convert_address(address)
|
151
|
-
@last_email_address = (address || current_email_address)
|
152
|
-
AddressConverter.instance.convert(@last_email_address)
|
153
|
-
end
|
154
|
-
|
155
|
-
|
156
|
-
def mailbox_for(address)
|
157
|
-
super(convert_address(address)) # super resides in Deliveries
|
158
|
-
end
|
159
|
-
|
160
|
-
def email_spec_deprecate(text)
|
161
|
-
puts ""
|
162
|
-
puts "DEPRECATION: #{text.split.join(' ')}"
|
163
|
-
puts ""
|
164
|
-
end
|
165
|
-
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
data/spec/spec.opts
DELETED