rainchen-email_spec 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +75 -0
- data/MIT-LICENSE.txt +19 -0
- data/README.rdoc +125 -0
- data/Rakefile +50 -0
- data/examples/rails_root/Rakefile +7 -0
- data/examples/rails_root/app/controllers/application.rb +15 -0
- data/examples/rails_root/app/controllers/welcome_controller.rb +9 -0
- data/examples/rails_root/app/helpers/application_helper.rb +3 -0
- data/examples/rails_root/app/helpers/welcome_helper.rb +2 -0
- data/examples/rails_root/app/models/user.rb +2 -0
- data/examples/rails_root/app/models/user_mailer.rb +12 -0
- data/examples/rails_root/app/views/user_mailer/signup.erb +3 -0
- data/examples/rails_root/app/views/welcome/confirm.html.erb +1 -0
- data/examples/rails_root/app/views/welcome/index.html.erb +8 -0
- data/examples/rails_root/app/views/welcome/signup.html.erb +1 -0
- data/examples/rails_root/config/boot.rb +109 -0
- data/examples/rails_root/config/database.yml +22 -0
- data/examples/rails_root/config/environment.rb +22 -0
- data/examples/rails_root/config/environments/development.rb +17 -0
- data/examples/rails_root/config/environments/production.rb +24 -0
- data/examples/rails_root/config/environments/test.rb +33 -0
- data/examples/rails_root/config/initializers/inflections.rb +10 -0
- data/examples/rails_root/config/initializers/mime_types.rb +5 -0
- data/examples/rails_root/config/initializers/new_rails_defaults.rb +17 -0
- data/examples/rails_root/config/routes.rb +43 -0
- data/examples/rails_root/cucumber.yml +1 -0
- data/examples/rails_root/db/migrate/20090125013728_create_users.rb +11 -0
- data/examples/rails_root/db/schema.rb +19 -0
- data/examples/rails_root/doc/README_FOR_APP +5 -0
- data/examples/rails_root/features/errors.feature +42 -0
- data/examples/rails_root/features/example.feature +59 -0
- data/examples/rails_root/features/step_definitions/email_steps.rb +74 -0
- data/examples/rails_root/features/step_definitions/user_steps.rb +23 -0
- data/examples/rails_root/features/step_definitions/webrat_steps.rb +104 -0
- data/examples/rails_root/features/support/env.rb +21 -0
- data/examples/rails_root/public/404.html +30 -0
- data/examples/rails_root/public/422.html +30 -0
- data/examples/rails_root/public/500.html +33 -0
- data/examples/rails_root/public/dispatch.rb +10 -0
- data/examples/rails_root/public/favicon.ico +0 -0
- data/examples/rails_root/public/images/rails.png +0 -0
- data/examples/rails_root/public/javascripts/application.js +2 -0
- data/examples/rails_root/public/javascripts/controls.js +963 -0
- data/examples/rails_root/public/javascripts/dragdrop.js +973 -0
- data/examples/rails_root/public/javascripts/effects.js +1128 -0
- data/examples/rails_root/public/javascripts/prototype.js +4320 -0
- data/examples/rails_root/public/robots.txt +5 -0
- data/examples/rails_root/script/about +4 -0
- data/examples/rails_root/script/autospec +5 -0
- data/examples/rails_root/script/console +3 -0
- data/examples/rails_root/script/cucumber +7 -0
- data/examples/rails_root/script/dbconsole +3 -0
- data/examples/rails_root/script/destroy +3 -0
- data/examples/rails_root/script/generate +3 -0
- data/examples/rails_root/script/performance/benchmarker +3 -0
- data/examples/rails_root/script/performance/profiler +3 -0
- data/examples/rails_root/script/performance/request +3 -0
- data/examples/rails_root/script/plugin +3 -0
- data/examples/rails_root/script/process/inspector +3 -0
- data/examples/rails_root/script/process/reaper +3 -0
- data/examples/rails_root/script/process/spawner +3 -0
- data/examples/rails_root/script/runner +3 -0
- data/examples/rails_root/script/server +3 -0
- data/examples/rails_root/script/spec +5 -0
- data/examples/rails_root/script/spec_server +125 -0
- data/examples/rails_root/spec/controllers/welcome_controller_spec.rb +15 -0
- data/examples/rails_root/spec/model_factory.rb +6 -0
- data/examples/rails_root/spec/models/user_mailer_spec.rb +58 -0
- data/examples/rails_root/spec/models/user_spec.rb +5 -0
- data/examples/rails_root/spec/rcov.opts +2 -0
- data/examples/rails_root/spec/spec.opts +4 -0
- data/examples/rails_root/spec/spec_helper.rb +51 -0
- data/examples/rails_root/stories/all.rb +4 -0
- data/examples/rails_root/stories/helper.rb +3 -0
- data/examples/rails_root/vendor/plugins/email_spec/rails_generators/email_spec/email_spec_generator.rb +17 -0
- data/examples/rails_root/vendor/plugins/email_spec/rails_generators/email_spec/templates/email_steps.rb +74 -0
- data/install.rb +0 -0
- data/lib/email_spec.rb +14 -0
- data/lib/email_spec/address_converter.rb +27 -0
- data/lib/email_spec/cucumber.rb +19 -0
- data/lib/email_spec/deliveries.rb +55 -0
- data/lib/email_spec/email_viewer.rb +70 -0
- data/lib/email_spec/helpers.rb +129 -0
- data/lib/email_spec/matchers.rb +122 -0
- data/rails_generators/email_spec/email_spec_generator.rb +17 -0
- data/rails_generators/email_spec/templates/email_steps.rb +74 -0
- data/spec/email_spec/matchers_spec.rb +159 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +4 -0
- metadata +176 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# SQLite version 3.x
|
|
2
|
+
# gem install sqlite3-ruby (not necessary on OS X Leopard)
|
|
3
|
+
development:
|
|
4
|
+
adapter: sqlite3
|
|
5
|
+
database: db/development.sqlite3
|
|
6
|
+
pool: 5
|
|
7
|
+
timeout: 5000
|
|
8
|
+
|
|
9
|
+
# Warning: The database defined as "test" will be erased and
|
|
10
|
+
# re-generated from your development database when you run "rake".
|
|
11
|
+
# Do not set this db to the same as development or production.
|
|
12
|
+
test:
|
|
13
|
+
adapter: sqlite3
|
|
14
|
+
database: db/test.sqlite3
|
|
15
|
+
pool: 5
|
|
16
|
+
timeout: 5000
|
|
17
|
+
|
|
18
|
+
production:
|
|
19
|
+
adapter: sqlite3
|
|
20
|
+
database: db/production.sqlite3
|
|
21
|
+
pool: 5
|
|
22
|
+
timeout: 5000
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Be sure to restart your server when you modify this file
|
|
2
|
+
|
|
3
|
+
# Uncomment below to force Rails into production mode when
|
|
4
|
+
# you don't control web/app server and can't set it the proper way
|
|
5
|
+
# ENV['RAILS_ENV'] ||= 'production'
|
|
6
|
+
|
|
7
|
+
# Specifies gem version of Rails to use when vendor/rails is not present
|
|
8
|
+
RAILS_GEM_VERSION = '2.2.2' unless defined? RAILS_GEM_VERSION
|
|
9
|
+
|
|
10
|
+
# Bootstrap the Rails environment, frameworks, and default configuration
|
|
11
|
+
require File.join(File.dirname(__FILE__), 'boot')
|
|
12
|
+
|
|
13
|
+
Rails::Initializer.run do |config|
|
|
14
|
+
|
|
15
|
+
config.time_zone = 'UTC'
|
|
16
|
+
|
|
17
|
+
config.action_controller.session = {
|
|
18
|
+
:session_key => '_es_session',
|
|
19
|
+
:secret => 'b9327c7967925fb36f8901e43f47e0a3e8fc7856ae1b4533ddeda776381548f9ac051721446fdbc4ccc88c7353124708e73d8b0950a30487571d8f8eb5b24732'
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Settings specified here will take precedence over those in config/environment.rb
|
|
2
|
+
|
|
3
|
+
# In the development environment your application's code is reloaded on
|
|
4
|
+
# every request. This slows down response time but is perfect for development
|
|
5
|
+
# since you don't have to restart the webserver when you make code changes.
|
|
6
|
+
config.cache_classes = false
|
|
7
|
+
|
|
8
|
+
# Log error messages when you accidentally call methods on nil.
|
|
9
|
+
config.whiny_nils = true
|
|
10
|
+
|
|
11
|
+
# Show full error reports and disable caching
|
|
12
|
+
config.action_controller.consider_all_requests_local = true
|
|
13
|
+
config.action_view.debug_rjs = true
|
|
14
|
+
config.action_controller.perform_caching = false
|
|
15
|
+
|
|
16
|
+
# Don't care if the mailer can't send
|
|
17
|
+
config.action_mailer.raise_delivery_errors = false
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Settings specified here will take precedence over those in config/environment.rb
|
|
2
|
+
|
|
3
|
+
# The production environment is meant for finished, "live" apps.
|
|
4
|
+
# Code is not reloaded between requests
|
|
5
|
+
config.cache_classes = true
|
|
6
|
+
|
|
7
|
+
# Enable threaded mode
|
|
8
|
+
# config.threadsafe!
|
|
9
|
+
|
|
10
|
+
# Use a different logger for distributed setups
|
|
11
|
+
# config.logger = SyslogLogger.new
|
|
12
|
+
|
|
13
|
+
# Full error reports are disabled and caching is turned on
|
|
14
|
+
config.action_controller.consider_all_requests_local = false
|
|
15
|
+
config.action_controller.perform_caching = true
|
|
16
|
+
|
|
17
|
+
# Use a different cache store in production
|
|
18
|
+
# config.cache_store = :mem_cache_store
|
|
19
|
+
|
|
20
|
+
# Enable serving of images, stylesheets, and javascripts from an asset server
|
|
21
|
+
# config.action_controller.asset_host = "http://assets.example.com"
|
|
22
|
+
|
|
23
|
+
# Disable delivery errors, bad email addresses will be ignored
|
|
24
|
+
# config.action_mailer.raise_delivery_errors = false
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Settings specified here will take precedence over those in config/environment.rb
|
|
2
|
+
|
|
3
|
+
# The test environment is used exclusively to run your application's
|
|
4
|
+
# test suite. You never need to work with it otherwise. Remember that
|
|
5
|
+
# your test database is "scratch space" for the test suite and is wiped
|
|
6
|
+
# and recreated between test runs. Don't rely on the data there!
|
|
7
|
+
config.cache_classes = true
|
|
8
|
+
|
|
9
|
+
# Log error messages when you accidentally call methods on nil.
|
|
10
|
+
config.whiny_nils = true
|
|
11
|
+
|
|
12
|
+
# Show full error reports and disable caching
|
|
13
|
+
config.action_controller.consider_all_requests_local = true
|
|
14
|
+
config.action_controller.perform_caching = false
|
|
15
|
+
|
|
16
|
+
# Disable request forgery protection in test environment
|
|
17
|
+
config.action_controller.allow_forgery_protection = false
|
|
18
|
+
|
|
19
|
+
# Tell Action Mailer not to deliver emails to the real world.
|
|
20
|
+
# The :test delivery method accumulates sent emails in the
|
|
21
|
+
# ActionMailer::Base.deliveries array.
|
|
22
|
+
config.action_mailer.delivery_method = :test
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# I HATE config.gem.. it doesn't work as advertised...
|
|
26
|
+
config.gem 'webrat', :source => "http://gems.github.com"
|
|
27
|
+
#config.gem 'rspec', :lib => 'spec'
|
|
28
|
+
#config.gem 'rspec-rails', :lib => 'spec/rails'
|
|
29
|
+
config.gem 'cucumber', :source => "http://gems.github.com" # aslakhellesoy-cucumber
|
|
30
|
+
config.gem 'nakajima-fixjour', :lib => 'fixjour', :source => "http://gems.github.com" # nakajima-fixjour
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
|
2
|
+
|
|
3
|
+
# Add new inflection rules using the following format
|
|
4
|
+
# (all these examples are active by default):
|
|
5
|
+
# ActiveSupport::Inflector.inflections do |inflect|
|
|
6
|
+
# inflect.plural /^(ox)$/i, '\1en'
|
|
7
|
+
# inflect.singular /^(ox)en/i, '\1'
|
|
8
|
+
# inflect.irregular 'person', 'people'
|
|
9
|
+
# inflect.uncountable %w( fish sheep )
|
|
10
|
+
# end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# These settings change the behavior of Rails 2 apps and will be defaults
|
|
2
|
+
# for Rails 3. You can remove this initializer when Rails 3 is released.
|
|
3
|
+
|
|
4
|
+
if defined?(ActiveRecord)
|
|
5
|
+
# Include Active Record class name as root for JSON serialized output.
|
|
6
|
+
ActiveRecord::Base.include_root_in_json = true
|
|
7
|
+
|
|
8
|
+
# Store the full class name (including module namespace) in STI type column.
|
|
9
|
+
ActiveRecord::Base.store_full_sti_class = true
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Use ISO 8601 format for JSON serialized times and dates.
|
|
13
|
+
ActiveSupport.use_standard_json_time_format = true
|
|
14
|
+
|
|
15
|
+
# Don't escape HTML entities in JSON, leave that for the #json_escape helper.
|
|
16
|
+
# if you're including raw json in an HTML page.
|
|
17
|
+
ActiveSupport.escape_html_entities_in_json = false
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
ActionController::Routing::Routes.draw do |map|
|
|
2
|
+
# The priority is based upon order of creation: first created -> highest priority.
|
|
3
|
+
|
|
4
|
+
# Sample of regular route:
|
|
5
|
+
# map.connect 'products/:id', :controller => 'catalog', :action => 'view'
|
|
6
|
+
# Keep in mind you can assign values other than :controller and :action
|
|
7
|
+
|
|
8
|
+
# Sample of named route:
|
|
9
|
+
# map.purchase 'products/:id/purchase', :controller => 'catalog', :action => 'purchase'
|
|
10
|
+
# This route can be invoked with purchase_url(:id => product.id)
|
|
11
|
+
|
|
12
|
+
# Sample resource route (maps HTTP verbs to controller actions automatically):
|
|
13
|
+
# map.resources :products
|
|
14
|
+
|
|
15
|
+
# Sample resource route with options:
|
|
16
|
+
# map.resources :products, :member => { :short => :get, :toggle => :post }, :collection => { :sold => :get }
|
|
17
|
+
|
|
18
|
+
# Sample resource route with sub-resources:
|
|
19
|
+
# map.resources :products, :has_many => [ :comments, :sales ], :has_one => :seller
|
|
20
|
+
|
|
21
|
+
# Sample resource route with more complex sub-resources
|
|
22
|
+
# map.resources :products do |products|
|
|
23
|
+
# products.resources :comments
|
|
24
|
+
# products.resources :sales, :collection => { :recent => :get }
|
|
25
|
+
# end
|
|
26
|
+
|
|
27
|
+
# Sample resource route within a namespace:
|
|
28
|
+
# map.namespace :admin do |admin|
|
|
29
|
+
# # Directs /admin/products/* to Admin::ProductsController (app/controllers/admin/products_controller.rb)
|
|
30
|
+
# admin.resources :products
|
|
31
|
+
# end
|
|
32
|
+
|
|
33
|
+
# You can have the root of your site routed with map.root -- just remember to delete public/index.html.
|
|
34
|
+
map.root :controller => "welcome", :action => "index"
|
|
35
|
+
map.confirm_account "/confirm", :controller => "welcome", :action => "confirm"
|
|
36
|
+
# See how all your routes lay out with "rake routes"
|
|
37
|
+
|
|
38
|
+
# Install the default routes as the lowest priority.
|
|
39
|
+
# Note: These default routes make all actions in every controller accessible via GET requests. You should
|
|
40
|
+
# consider removing the them or commenting them out if you're using named routes and resources.
|
|
41
|
+
map.connect ':controller/:action/:id'
|
|
42
|
+
map.connect ':controller/:action/:id.:format'
|
|
43
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
default: features/example.feature
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# This file is auto-generated from the current state of the database. Instead of editing this file,
|
|
2
|
+
# please use the migrations feature of Active Record to incrementally modify your database, and
|
|
3
|
+
# then regenerate this schema definition.
|
|
4
|
+
#
|
|
5
|
+
# Note that this schema.rb definition is the authoritative source for your database schema. If you need
|
|
6
|
+
# to create the application database on another system, you should be using db:schema:load, not running
|
|
7
|
+
# all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
|
8
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
|
9
|
+
#
|
|
10
|
+
# It's strongly recommended to check this file into your version control system.
|
|
11
|
+
|
|
12
|
+
ActiveRecord::Schema.define(:version => 20090125013728) do
|
|
13
|
+
|
|
14
|
+
create_table "users", :force => true do |t|
|
|
15
|
+
t.string "email"
|
|
16
|
+
t.string "name"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
Feature: Email-spec errors example
|
|
2
|
+
|
|
3
|
+
In order to help alleviate email testing in apps
|
|
4
|
+
As a email-spec contributor I a newcomer
|
|
5
|
+
Should be able to easily determine where I have gone wrong
|
|
6
|
+
These scenarios should fail with helpful messages
|
|
7
|
+
|
|
8
|
+
Scenario: I fail to receive an email
|
|
9
|
+
Given I am at "/"
|
|
10
|
+
And no emails have been sent
|
|
11
|
+
When I fill in "Email" with "quentin@example.com"
|
|
12
|
+
And I press "Sign up"
|
|
13
|
+
And I should receive an email
|
|
14
|
+
When "quentin@example.com" opens the email with subject "no email"
|
|
15
|
+
|
|
16
|
+
Scenario: I fail to receive an email with the expected link
|
|
17
|
+
Given I am at "/"
|
|
18
|
+
And no emails have been sent
|
|
19
|
+
When I fill in "Email" with "quentin@example.com"
|
|
20
|
+
And I press "Sign up"
|
|
21
|
+
And I should receive an email
|
|
22
|
+
When I open the email
|
|
23
|
+
When I follow "link that doesn't exist" in the email
|
|
24
|
+
|
|
25
|
+
Scenario: I attempt to operate on an email that is not opened
|
|
26
|
+
Given I am at "/"
|
|
27
|
+
And no emails have been sent
|
|
28
|
+
When I fill in "Email" with "quentin@example.com"
|
|
29
|
+
And I press "Sign up"
|
|
30
|
+
And I should receive an email
|
|
31
|
+
When I follow "confirm" in the email
|
|
32
|
+
|
|
33
|
+
Scenario: I attempt to check out an unopened email
|
|
34
|
+
Given I am at "/"
|
|
35
|
+
And no emails have been sent
|
|
36
|
+
When I fill in "Email" with "quentin@example.com"
|
|
37
|
+
And I press "Sign up"
|
|
38
|
+
Then I should see "confirm" in the email
|
|
39
|
+
And I should see "Account confirmation" in the subject
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
Feature: EmailSpec Example -- Prevent Bots from creating accounts
|
|
2
|
+
|
|
3
|
+
In order to help alleviate email testing in apps
|
|
4
|
+
As an email-spec contributor I want new users of the library
|
|
5
|
+
to easily adopt email-spec in their app by following this example
|
|
6
|
+
|
|
7
|
+
In order to prevent bots from setting up new accounts
|
|
8
|
+
As a site manager I want new users
|
|
9
|
+
to verify their email address with a confirmation link
|
|
10
|
+
|
|
11
|
+
Scenario: A new person signs up imperatively
|
|
12
|
+
Given I am a real person wanting to sign up for an account
|
|
13
|
+
And I am at "/"
|
|
14
|
+
|
|
15
|
+
When I fill in "Email" with "quentin@example.com"
|
|
16
|
+
And I fill in "Name" with "Quentin Jones"
|
|
17
|
+
And I press "Sign up"
|
|
18
|
+
|
|
19
|
+
Then "quentin@example.com" should receive 1 email
|
|
20
|
+
And "quentin@example.com" should have 1 email
|
|
21
|
+
And "foo@bar.com" should not receive an email
|
|
22
|
+
|
|
23
|
+
When "quentin@example.com" opens the email with subject "Account confirmation"
|
|
24
|
+
|
|
25
|
+
Then I should see "confirm" in the email
|
|
26
|
+
And I should see "Quentin Jones" in the email
|
|
27
|
+
And I should see "Account confirmation" in the subject
|
|
28
|
+
|
|
29
|
+
When I follow "Click here to confirm your account!" in the email
|
|
30
|
+
Then I should see "Confirm your new account"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
Scenario: slightly more declarative, but still mostly imperative
|
|
34
|
+
Given I am a real person wanting to sign up for an account
|
|
35
|
+
And I'm on the signup page
|
|
36
|
+
|
|
37
|
+
When I fill in "Email" with "quentin@example.com"
|
|
38
|
+
And I fill in "Name" with "Quentin Jones"
|
|
39
|
+
And I press "Sign up"
|
|
40
|
+
|
|
41
|
+
Then I should receive an email
|
|
42
|
+
|
|
43
|
+
When I open the email
|
|
44
|
+
Then I should see "Account confirmation" in the subject
|
|
45
|
+
|
|
46
|
+
When I follow "http:///confirm" in the email
|
|
47
|
+
Then I should see "Confirm your new account"
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
Scenario: declarative
|
|
51
|
+
Given I am a real person wanting to sign up for an account
|
|
52
|
+
And I'm on the signup page
|
|
53
|
+
|
|
54
|
+
When I submit my registration information
|
|
55
|
+
Then I should receive an email with a link to a confirmation page
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
@@ -0,0 +1,74 @@
|
|
|
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
|
+
# reset_mailer
|
|
7
|
+
# open_last_email
|
|
8
|
+
# visit_in_email
|
|
9
|
+
# unread_emails_for
|
|
10
|
+
# mailbox_for
|
|
11
|
+
# current_email
|
|
12
|
+
# open_email
|
|
13
|
+
# read_emails_for
|
|
14
|
+
# find_email
|
|
15
|
+
|
|
16
|
+
module EmailHelpers
|
|
17
|
+
def current_email_address
|
|
18
|
+
"quentin@example.com" # Replace with your a way to find your current_email. e.g current_user.email
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
World(EmailHelpers)
|
|
22
|
+
|
|
23
|
+
# Use this step to reset the e-mail queue within a scenario.
|
|
24
|
+
# This is done automatically before each scenario.
|
|
25
|
+
Given /^(?:a clear email queue|no emails have been sent)$/ do
|
|
26
|
+
reset_mailer
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Use this step to open the most recently sent e-mail.
|
|
30
|
+
When /^I open the email$/ do
|
|
31
|
+
open_email(current_email_address)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
When %r{^I follow "([^"]*?)" in the email$} do |link|
|
|
35
|
+
visit_in_email(link)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
Then /^I should receive (an|\d+) emails?$/ do |amount|
|
|
39
|
+
amount = 1 if amount == "an"
|
|
40
|
+
unread_emails_for(current_email_address).size.should == amount.to_i
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
Then %r{^"([^"]*?)" should receive (\d+) emails?$} do |address, n|
|
|
44
|
+
unread_emails_for(address).size.should == n.to_i
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
Then %r{^"([^"]*?)" should have (\d+) emails?$} do |address, n|
|
|
48
|
+
mailbox_for(address).size.should == n.to_i
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
Then %r{^"([^"]*?)" should not receive an email$} do |address|
|
|
52
|
+
find_email(address).should be_nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
Then %r{^I should see "([^"]*?)" in the subject$} do |text|
|
|
56
|
+
current_email.should have_subject(Regexp.new(text))
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
Then %r{^I should see "([^"]*?)" in the email$} do |text|
|
|
60
|
+
current_email.body.should =~ Regexp.new(text)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
When %r{^"([^"]*?)" opens? the email with subject "([^"]*?)"$} do |address, subject|
|
|
64
|
+
open_email(address, :with_subject => subject)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
When %r{^"([^"]*?)" opens? the email with text "([^"]*?)"$} do |address, text|
|
|
68
|
+
open_email(address, :with_text => text)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
When /^I click the first link in the email$/ do
|
|
72
|
+
click_first_link_in_email
|
|
73
|
+
end
|
|
74
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Given "I am a real person wanting to sign up for an account" do
|
|
2
|
+
# no-op.. for documentation purposes only!
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
When /^I submit my registration information$/ do
|
|
6
|
+
fill_in "Name", :with => valid_user_attributes[:name]
|
|
7
|
+
fill_in "Email", :with => valid_user_attributes[:email]
|
|
8
|
+
click_button
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
Then /^I should receive an email with a link to a confirmation page$/ do
|
|
12
|
+
unread_emails_for(valid_user_attributes[:email]).size.should == 1
|
|
13
|
+
|
|
14
|
+
# this call will store the email and you can access it with current_email
|
|
15
|
+
open_last_email_for(valid_user_attributes[:email])
|
|
16
|
+
current_email.should have_subject(/Account confirmation/)
|
|
17
|
+
current_email.should have_body_text(valid_user_attributes[:name])
|
|
18
|
+
|
|
19
|
+
click_email_link_matching /confirm/
|
|
20
|
+
response.should include_text("Confirm your new account")
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
|