bmabey-email_spec 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. data/History.txt +6 -3
  2. data/README.rdoc +4 -5
  3. data/Rakefile +6 -6
  4. data/{spec → examples}/rails_root/Rakefile +0 -0
  5. data/{spec → examples}/rails_root/app/controllers/application.rb +0 -0
  6. data/{spec → examples}/rails_root/app/controllers/welcome_controller.rb +0 -0
  7. data/{spec → examples}/rails_root/app/helpers/application_helper.rb +0 -0
  8. data/{spec → examples}/rails_root/app/helpers/welcome_helper.rb +0 -0
  9. data/{spec → examples}/rails_root/app/models/user_mailer.rb +0 -0
  10. data/{spec → examples}/rails_root/app/views/user_mailer/signup.erb +0 -0
  11. data/{spec → examples}/rails_root/app/views/welcome/confirm.html.erb +0 -0
  12. data/{spec → examples}/rails_root/app/views/welcome/index.html.erb +0 -0
  13. data/{spec → examples}/rails_root/app/views/welcome/signup.html.erb +0 -0
  14. data/{spec → examples}/rails_root/config/boot.rb +0 -0
  15. data/{spec → examples}/rails_root/config/database.yml +0 -0
  16. data/{spec → examples}/rails_root/config/environment.rb +0 -0
  17. data/{spec → examples}/rails_root/config/environments/development.rb +0 -0
  18. data/{spec → examples}/rails_root/config/environments/production.rb +0 -0
  19. data/{spec → examples}/rails_root/config/environments/test.rb +0 -0
  20. data/{spec → examples}/rails_root/config/initializers/inflections.rb +0 -0
  21. data/{spec → examples}/rails_root/config/initializers/mime_types.rb +0 -0
  22. data/{spec → examples}/rails_root/config/initializers/new_rails_defaults.rb +0 -0
  23. data/{spec → examples}/rails_root/config/routes.rb +0 -0
  24. data/{spec → examples}/rails_root/db/schema.rb +0 -0
  25. data/{spec → examples}/rails_root/doc/README_FOR_APP +0 -0
  26. data/{spec → examples}/rails_root/features/errors.feature +0 -0
  27. data/{spec → examples}/rails_root/features/example.feature +0 -0
  28. data/{spec/rails_root/vendor/plugins/email_spec/generators/email_spec/templates → examples/rails_root/features/step_definitions}/email_steps.rb +1 -1
  29. data/{spec → examples}/rails_root/features/step_definitions/webrat_steps.rb +0 -0
  30. data/{spec → examples}/rails_root/features/support/env.rb +0 -0
  31. data/examples/rails_root/lib/tasks/rspec.rake +158 -0
  32. data/{spec → examples}/rails_root/public/404.html +0 -0
  33. data/{spec → examples}/rails_root/public/422.html +0 -0
  34. data/{spec → examples}/rails_root/public/500.html +0 -0
  35. data/{spec → examples}/rails_root/public/dispatch.rb +0 -0
  36. data/{spec → examples}/rails_root/public/favicon.ico +0 -0
  37. data/{spec → examples}/rails_root/public/images/rails.png +0 -0
  38. data/{spec → examples}/rails_root/public/javascripts/application.js +0 -0
  39. data/{spec → examples}/rails_root/public/javascripts/controls.js +0 -0
  40. data/{spec → examples}/rails_root/public/javascripts/dragdrop.js +0 -0
  41. data/{spec → examples}/rails_root/public/javascripts/effects.js +0 -0
  42. data/{spec → examples}/rails_root/public/javascripts/prototype.js +0 -0
  43. data/{spec → examples}/rails_root/public/robots.txt +0 -0
  44. data/{spec → examples}/rails_root/script/about +0 -0
  45. data/{spec → examples}/rails_root/script/autospec +0 -0
  46. data/{spec → examples}/rails_root/script/console +0 -0
  47. data/{spec → examples}/rails_root/script/cucumber +0 -0
  48. data/{spec → examples}/rails_root/script/dbconsole +0 -0
  49. data/{spec → examples}/rails_root/script/destroy +0 -0
  50. data/{spec → examples}/rails_root/script/generate +0 -0
  51. data/{spec → examples}/rails_root/script/performance/benchmarker +0 -0
  52. data/{spec → examples}/rails_root/script/performance/profiler +0 -0
  53. data/{spec → examples}/rails_root/script/performance/request +0 -0
  54. data/{spec → examples}/rails_root/script/plugin +0 -0
  55. data/{spec → examples}/rails_root/script/process/inspector +0 -0
  56. data/{spec → examples}/rails_root/script/process/reaper +0 -0
  57. data/{spec → examples}/rails_root/script/process/spawner +0 -0
  58. data/{spec → examples}/rails_root/script/runner +0 -0
  59. data/{spec → examples}/rails_root/script/server +0 -0
  60. data/{spec → examples}/rails_root/script/spec +0 -0
  61. data/{spec → examples}/rails_root/script/spec_server +17 -8
  62. data/{spec → examples}/rails_root/spec/controllers/welcome_controller_spec.rb +0 -0
  63. data/{spec → examples}/rails_root/spec/models/user_mailer_spec.rb +8 -6
  64. data/{spec → examples}/rails_root/spec/rcov.opts +0 -0
  65. data/{spec → examples}/rails_root/spec/spec.opts +1 -1
  66. data/{spec → examples}/rails_root/spec/spec_helper.rb +6 -6
  67. data/examples/rails_root/stories/all.rb +4 -0
  68. data/examples/rails_root/stories/helper.rb +3 -0
  69. data/{spec → examples}/rails_root/vendor/plugins/email_spec/generators/email_spec/email_spec_generator.rb +0 -0
  70. data/{spec/rails_root/features/step_definitions → examples/rails_root/vendor/plugins/email_spec/generators/email_spec/templates}/email_steps.rb +1 -1
  71. data/examples/rails_root/vendor/plugins/rspec-rails +1 -0
  72. data/generators/email_spec/templates/email_steps.rb +1 -1
  73. data/lib/email_spec.rb +1 -1
  74. data/lib/email_spec/helpers.rb +3 -0
  75. data/lib/email_spec/matchers.rb +29 -8
  76. data/spec/email_spec/matchers_spec.rb +105 -0
  77. data/spec/spec.opts +4 -0
  78. data/spec/spec_helper.rb +4 -0
  79. metadata +114 -106
  80. data/spec/email_spec_helpers_spec.rb +0 -28
data/History.txt CHANGED
@@ -1,12 +1,15 @@
1
1
  (In Git)
2
- === New features
2
+ === New features
3
3
 
4
+ == 0.0.7 2008-1-20
5
+ === New features
6
+ * have_subject matcher
4
7
 
5
8
  == 0.0.6 2008-12-23
6
9
  === New features
7
- * Improved RSpec documentaioni and refactorings. (Ben Mabey)
10
+ * Improved RSpec documentation and refactorings. (Ben Mabey)
8
11
  === Bugfixes
9
12
  * Removed sample app Rake Tasks to have it play nice with environments that use Cucumber as plugin- not gem. (Ben Mabey, Ivor- on github)
10
13
 
11
14
  == 0.0.5 2008-12-18
12
- * Initial release - see this post for full history and contributos: http://www.benmabey.com/2008/12/18/github-rocks/
15
+ * Initial release - see this post for full history and contributors: http://www.benmabey.com/2008/12/18/github-rocks/
data/README.rdoc CHANGED
@@ -7,7 +7,7 @@ A collection of RSpec matchers and Cucumber steps to make testing emails go smoo
7
7
 
8
8
  script/plugin install git://github.com/bmabey/email-spec.git
9
9
 
10
- === Gem Setup (may or may not work atm)
10
+ === Gem Setup
11
11
 
12
12
  gem install bmabey-email_spec
13
13
 
@@ -101,15 +101,15 @@ For more examples, check out spec/rails_root in the source for a small example a
101
101
  end
102
102
 
103
103
  it "should contain the user's message in the mail body" do
104
- @email.body.should have_text(/Jojo Binks/)
104
+ @email.should have_text(/Jojo Binks/)
105
105
  end
106
106
 
107
107
  it "should contain a link to the confirmation link" do
108
- @email.body.should have_text(/#{confirm_account_url}/)
108
+ @email.should have_text(/#{confirm_account_url}/)
109
109
  end
110
110
 
111
111
  it "should have the correct subject" do
112
- @email.subject.should =~ /Account confirmation/
112
+ @email.should have_subject(/Account confirmation/)
113
113
  end
114
114
 
115
115
  end
@@ -124,4 +124,3 @@ For more examples, check out spec/rails_root in the source for a small example a
124
124
  Ben Mabey, Aaron Gibralter, Mischa Fierer
125
125
 
126
126
  Please see History.txt for upcoming changsets and other contributors.
127
-
data/Rakefile CHANGED
@@ -5,14 +5,14 @@ spec = Gem::Specification.new do |s|
5
5
  s.name = "email_spec"
6
6
  s.version = EmailSpec::VERSION
7
7
  s.platform = Gem::Platform::RUBY
8
- s.authors = ['Ben Mabrey', 'Aaron Gibralter', 'Mischa Fierer']
8
+ s.authors = ['Ben Mabey', 'Aaron Gibralter', 'Mischa Fierer']
9
9
  s.email = "ben@benmabey.com"
10
10
  s.homepage = "http://github.com/bmabey/email-spec/"
11
11
  s.summary = "Easily test email in rspec and cucumber"
12
12
  s.bindir = "bin"
13
13
  s.description = s.summary
14
14
  s.require_path = "lib"
15
- s.files = %w(History.txt install.rb MIT-LICENSE.txt README.rdoc Rakefile) + Dir["lib/**/*"] + Dir["generators/**/*"] + Dir["spec/**/*"]
15
+ s.files = %w(History.txt install.rb MIT-LICENSE.txt README.rdoc Rakefile) + Dir["lib/**/*"] + Dir["generators/**/*"] + Dir["spec/**/*"] + Dir["examples/**/*"]
16
16
  # rdoc
17
17
  s.has_rdoc = true
18
18
  s.extra_rdoc_files = %w(README.rdoc MIT-LICENSE.txt)
@@ -44,13 +44,13 @@ end
44
44
 
45
45
  desc "Run the generator on the tests"
46
46
  task :generate do
47
- system "mkdir -p spec/rails_root/vendor/plugins/email_spec"
48
- system "cp -R generators spec/rails_root/vendor/plugins/email_spec"
49
- system "cd spec/rails_root; ./script/generate email_spec"
47
+ system "mkdir -p examples/rails_root/vendor/plugins/email_spec"
48
+ system "cp -R generators examples/rails_root/vendor/plugins/email_spec"
49
+ system "cd examples/rails_root; ./script/generate email_spec"
50
50
  end
51
51
 
52
52
  task :features => [:generate] do
53
- system("cucumber spec/rails_root/features")
53
+ system("cucumber examples/rails_root/features")
54
54
  end
55
55
 
56
56
  task :default => :features
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -53,7 +53,7 @@ Then /^"([^']*?)" should not receive an email$/ do |address|
53
53
  end
54
54
 
55
55
  Then /^I should see "(.*)" in the subject$/ do |text|
56
- current_email.subject.should =~ Regexp.new(text)
56
+ current_email.should have_subject(Regexp.new(text))
57
57
  end
58
58
 
59
59
  Then /^I should see "(.*)" in the email$/ do |text|
@@ -0,0 +1,158 @@
1
+ rspec_gem_dir = nil
2
+ Dir["#{RAILS_ROOT}/vendor/gems/*"].each do |subdir|
3
+ rspec_gem_dir = subdir if subdir.gsub("#{RAILS_ROOT}/vendor/gems/","") =~ /^(\w+-)?rspec-(\d+)/ && File.exist?("#{subdir}/lib/spec/rake/spectask.rb")
4
+ end
5
+ rspec_plugin_dir = File.expand_path(File.dirname(__FILE__) + '/../../vendor/plugins/rspec')
6
+
7
+ if rspec_gem_dir && (test ?d, rspec_plugin_dir)
8
+ raise "\n#{'*'*50}\nYou have rspec installed in both vendor/gems and vendor/plugins\nPlease pick one and dispose of the other.\n#{'*'*50}\n\n"
9
+ end
10
+
11
+ if rspec_gem_dir
12
+ $LOAD_PATH.unshift("#{rspec_gem_dir}/lib")
13
+ elsif File.exist?(rspec_plugin_dir)
14
+ $LOAD_PATH.unshift("#{rspec_plugin_dir}/lib")
15
+ end
16
+
17
+ begin
18
+ require 'spec/rake/spectask'
19
+ Rake.application.instance_variable_get('@tasks').delete('default')
20
+
21
+ spec_prereq = File.exist?(File.join(RAILS_ROOT, 'config', 'database.yml')) ? "db:test:prepare" : :noop
22
+ task :noop do
23
+ end
24
+
25
+ task :default => :spec
26
+ task :stats => "spec:statsetup"
27
+
28
+ desc "Run all specs in spec directory (excluding plugin specs)"
29
+ Spec::Rake::SpecTask.new(:spec => spec_prereq) do |t|
30
+ t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
31
+ t.spec_files = FileList['spec/**/*/*_spec.rb']
32
+ end
33
+
34
+ namespace :spec do
35
+ desc "Run all specs in spec directory with RCov (excluding plugin specs)"
36
+ Spec::Rake::SpecTask.new(:rcov) do |t|
37
+ t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
38
+ t.spec_files = FileList['spec/**/*/*_spec.rb']
39
+ t.rcov = true
40
+ t.rcov_opts = lambda do
41
+ IO.readlines("#{RAILS_ROOT}/spec/rcov.opts").map {|l| l.chomp.split " "}.flatten
42
+ end
43
+ end
44
+
45
+ desc "Print Specdoc for all specs (excluding plugin specs)"
46
+ Spec::Rake::SpecTask.new(:doc) do |t|
47
+ t.spec_opts = ["--format", "specdoc", "--dry-run"]
48
+ t.spec_files = FileList['spec/**/*/*_spec.rb']
49
+ end
50
+
51
+ desc "Print Specdoc for all plugin examples"
52
+ Spec::Rake::SpecTask.new(:plugin_doc) do |t|
53
+ t.spec_opts = ["--format", "specdoc", "--dry-run"]
54
+ t.spec_files = FileList['vendor/plugins/**/spec/**/*/*_spec.rb'].exclude('vendor/plugins/rspec/*')
55
+ end
56
+
57
+ [:models, :controllers, :views, :helpers, :lib].each do |sub|
58
+ desc "Run the code examples in spec/#{sub}"
59
+ Spec::Rake::SpecTask.new(sub => spec_prereq) do |t|
60
+ t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
61
+ t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"]
62
+ end
63
+ end
64
+
65
+ desc "Run the code examples in vendor/plugins (except RSpec's own)"
66
+ Spec::Rake::SpecTask.new(:plugins => spec_prereq) do |t|
67
+ t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
68
+ t.spec_files = FileList['vendor/plugins/**/spec/**/*/*_spec.rb'].exclude('vendor/plugins/rspec/*').exclude("vendor/plugins/rspec-rails/*")
69
+ end
70
+
71
+ namespace :plugins do
72
+ desc "Runs the examples for rspec_on_rails"
73
+ Spec::Rake::SpecTask.new(:rspec_on_rails) do |t|
74
+ t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
75
+ t.spec_files = FileList['vendor/plugins/rspec-rails/spec/**/*/*_spec.rb']
76
+ end
77
+ end
78
+
79
+ # Setup specs for stats
80
+ task :statsetup do
81
+ require 'code_statistics'
82
+ ::STATS_DIRECTORIES << %w(Model\ specs spec/models) if File.exist?('spec/models')
83
+ ::STATS_DIRECTORIES << %w(View\ specs spec/views) if File.exist?('spec/views')
84
+ ::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers) if File.exist?('spec/controllers')
85
+ ::STATS_DIRECTORIES << %w(Helper\ specs spec/helpers) if File.exist?('spec/helpers')
86
+ ::STATS_DIRECTORIES << %w(Library\ specs spec/lib) if File.exist?('spec/lib')
87
+ ::CodeStatistics::TEST_TYPES << "Model specs" if File.exist?('spec/models')
88
+ ::CodeStatistics::TEST_TYPES << "View specs" if File.exist?('spec/views')
89
+ ::CodeStatistics::TEST_TYPES << "Controller specs" if File.exist?('spec/controllers')
90
+ ::CodeStatistics::TEST_TYPES << "Helper specs" if File.exist?('spec/helpers')
91
+ ::CodeStatistics::TEST_TYPES << "Library specs" if File.exist?('spec/lib')
92
+ ::STATS_DIRECTORIES.delete_if {|a| a[0] =~ /test/}
93
+ end
94
+
95
+ namespace :db do
96
+ namespace :fixtures do
97
+ desc "Load fixtures (from spec/fixtures) into the current environment's database. Load specific fixtures using FIXTURES=x,y. Load from subdirectory in test/fixtures using FIXTURES_DIR=z."
98
+ task :load => :environment do
99
+ ActiveRecord::Base.establish_connection(Rails.env)
100
+ base_dir = File.join(Rails.root, 'spec', 'fixtures')
101
+ fixtures_dir = ENV['FIXTURES_DIR'] ? File.join(base_dir, ENV['FIXTURES_DIR']) : base_dir
102
+
103
+ (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/).map {|f| File.join(fixtures_dir, f) } : Dir.glob(File.join(fixtures_dir, '*.{yml,csv}'))).each do |fixture_file|
104
+ Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*'))
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+ namespace :server do
111
+ daemonized_server_pid = File.expand_path("spec_server.pid", RAILS_ROOT + "/tmp")
112
+
113
+ desc "start spec_server."
114
+ task :start do
115
+ if File.exist?(daemonized_server_pid)
116
+ $stderr.puts "spec_server is already running."
117
+ else
118
+ $stderr.puts "Starting up spec server."
119
+ system("ruby", "script/spec_server", "--daemon", "--pid", daemonized_server_pid)
120
+ end
121
+ end
122
+
123
+ desc "stop spec_server."
124
+ task :stop do
125
+ unless File.exist?(daemonized_server_pid)
126
+ $stderr.puts "No server running."
127
+ else
128
+ $stderr.puts "Shutting down spec_server."
129
+ system("kill", "-s", "TERM", File.read(daemonized_server_pid).strip) &&
130
+ File.delete(daemonized_server_pid)
131
+ end
132
+ end
133
+
134
+ desc "reload spec_server."
135
+ task :restart do
136
+ unless File.exist?(daemonized_server_pid)
137
+ $stderr.puts "No server running."
138
+ else
139
+ $stderr.puts "Reloading down spec_server."
140
+ system("kill", "-s", "USR2", File.read(daemonized_server_pid).strip)
141
+ end
142
+ end
143
+ end
144
+ end
145
+ rescue MissingSourceFile
146
+ # if rspec-rails is a configured gem, this will output helpful material and exit ...
147
+ require File.expand_path(File.dirname(__FILE__) + "/../../config/environment")
148
+
149
+ # ... otherwise, do this:
150
+ raise <<-MSG
151
+
152
+ You have rspec rake tasks installed in
153
+ #{__FILE__},
154
+ but rspec can not be found in vendor/gems, vendor/plugins or on the system.
155
+
156
+ MSG
157
+ end
158
+
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -13,17 +13,21 @@ module Spec
13
13
  def run(argv, stderr, stdout)
14
14
  $stdout = stdout
15
15
  $stderr = stderr
16
-
17
- base = ActiveRecord::Base
18
- def base.clear_reloadable_connections!
19
- active_connections.each do |name, conn|
20
- if conn.requires_reloading?
21
- conn.disconnect!
22
- active_connections.delete(name)
16
+
17
+ unless ActiveRecord::Base.respond_to?(:clear_reloadable_connections!)
18
+ base = ActiveRecord::Base
19
+ def base.clear_reloadable_connections!
20
+ active_connections.each do |name, conn|
21
+ if conn.requires_reloading?
22
+ conn.disconnect!
23
+ active_connections.delete(name)
24
+ end
23
25
  end
24
26
  end
25
27
  end
26
28
 
29
+ ActiveRecord::Base.clear_reloadable_connections!
30
+
27
31
  if ActionController.const_defined?(:Dispatcher)
28
32
  dispatcher = ::ActionController::Dispatcher.new($stdout)
29
33
  dispatcher.cleanup_application
@@ -35,8 +39,13 @@ module Spec
35
39
  if Object.const_defined?(:Fixtures) && Fixtures.respond_to?(:reset_cache)
36
40
  Fixtures.reset_cache
37
41
  end
42
+
43
+ if ::ActiveSupport.const_defined?(:Dependencies)
44
+ ::ActiveSupport::Dependencies.mechanism = :load
45
+ else
46
+ ::Dependencies.mechanism = :load
47
+ end
38
48
 
39
- ::Dependencies.mechanism = :load
40
49
  require_dependency('application.rb') unless Object.const_defined?(:ApplicationController)
41
50
  load File.dirname(__FILE__) + '/../spec/spec_helper.rb'
42
51
 
@@ -8,22 +8,24 @@ describe "Signup Email" do
8
8
  before(:all) do
9
9
  @email = UserMailer.create_signup("jojo@yahoo.com", "Jojo Binks")
10
10
  end
11
+
12
+ subject { @email }
11
13
 
12
14
  it "should be set to be delivered to the email passed in" do
13
- @email.should deliver_to("jojo@yahoo.com")
15
+ should deliver_to("jojo@yahoo.com")
14
16
  end
15
17
 
16
18
  it "should contain the user's message in the mail body" do
17
- @email.body.should have_text(/Jojo Binks/)
19
+ @email.should have_text(/Jojo Binks/)
18
20
  end
19
21
 
22
+ it { should have_text(/Jojo Binks/) }
23
+
20
24
  it "should contain a link to the confirmation link" do
21
- @email.body.should have_text(/#{confirm_account_url}/)
25
+ @email.should have_text(/#{confirm_account_url}/)
22
26
  end
23
27
 
24
- it "should have the correct subject" do
25
- @email.subject.should =~ /Account confirmation/
26
- end
28
+ it { should have_subject(/Account confirmation/) }
27
29
 
28
30
 
29
31
  end
File without changes
@@ -1,4 +1,4 @@
1
1
  --colour
2
- --format progress
2
+ --format s
3
3
  --loadby mtime
4
4
  --reverse
@@ -5,16 +5,16 @@ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
5
5
  require 'spec'
6
6
  require 'spec/rails'
7
7
 
8
- require File.expand_path(File.dirname(__FILE__) + '/../../../lib/email_spec/helpers.rb')
9
- require File.expand_path(File.dirname(__FILE__) + '/../../../lib/email_spec/matchers.rb')
8
+ require (Rails.root + '/../../lib/email_spec/helpers.rb')
9
+ require (Rails.root + '/../../lib/email_spec/matchers.rb')
10
10
 
11
11
  Spec::Runner.configure do |config|
12
12
  # If you're not using ActiveRecord you should remove these
13
13
  # lines, delete config/database.yml and disable :active_record
14
14
  # in your config/boot.rb
15
- config.use_transactional_fixtures = true
16
- config.use_instantiated_fixtures = false
17
- config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
15
+ #config.use_transactional_fixtures = true
16
+ #config.use_instantiated_fixtures = false
17
+ #config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
18
18
 
19
19
  # == Fixtures
20
20
  #
@@ -46,5 +46,5 @@ Spec::Runner.configure do |config|
46
46
  #
47
47
  # == Notes
48
48
  #
49
- # For more information take a look at Spec::Example::Configuration and Spec::Runner
49
+ # For more information take a look at Spec::Runner::Configuration and Spec::Runner
50
50
  end
@@ -0,0 +1,4 @@
1
+ dir = File.dirname(__FILE__)
2
+ Dir[File.expand_path("#{dir}/**/*.rb")].uniq.each do |file|
3
+ require file
4
+ end
@@ -0,0 +1,3 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
3
+ require 'spec/rails/story_adapter'
@@ -53,7 +53,7 @@ Then /^"([^']*?)" should not receive an email$/ do |address|
53
53
  end
54
54
 
55
55
  Then /^I should see "(.*)" in the subject$/ do |text|
56
- current_email.subject.should =~ Regexp.new(text)
56
+ current_email.should have_subject(Regexp.new(text))
57
57
  end
58
58
 
59
59
  Then /^I should see "(.*)" in the email$/ do |text|
@@ -0,0 +1 @@
1
+ /Users/bmabey/p/ruby/rspec-dev/example_rails_app/vendor/plugins/rspec-rails
@@ -53,7 +53,7 @@ Then /^"([^']*?)" should not receive an email$/ do |address|
53
53
  end
54
54
 
55
55
  Then /^I should see "(.*)" in the subject$/ do |text|
56
- current_email.subject.should =~ Regexp.new(text)
56
+ current_email.should have_subject(Regexp.new(text))
57
57
  end
58
58
 
59
59
  Then /^I should see "(.*)" in the email$/ do |text|
data/lib/email_spec.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module EmailSpec
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
@@ -8,6 +8,9 @@ module EmailSpec
8
8
  ActionMailer::Base.deliveries.clear
9
9
  end
10
10
 
11
+ def last_email_sent
12
+ ActionMailer::Base.deliveries.last || raise("No email has been sent!")
13
+ end
11
14
 
12
15
  def visit_in_email(link_text)
13
16
  visit(parse_email_for_link(current_email, link_text))
@@ -4,15 +4,18 @@ module EmailSpec
4
4
 
5
5
  class DeliverTo
6
6
 
7
- def initialize(expected_email_addresses)
8
- @expected_email_addresses = expected_email_addresses.sort
7
+ def initialize(expected_email_addresses_or_objects_that_respond_to_email)
8
+ emails = expected_email_addresses_or_objects_that_respond_to_email.map do |email_or_object|
9
+ email_or_object.kind_of?(String) ? email_or_object : email_or_object.email
10
+ end
11
+
12
+ @expected_email_addresses = emails.sort
9
13
  end
10
14
 
11
15
  def matches?(email)
12
16
  @email = email
13
17
  @actual_recipients = (email.to || []).sort
14
- @actual_recipients.should == @expected_email_addresses
15
- true
18
+ @actual_recipients == @expected_email_addresses
16
19
  end
17
20
 
18
21
  def failure_message
@@ -25,10 +28,28 @@ module EmailSpec
25
28
  end
26
29
 
27
30
  def deliver_to(*expected_email_addresses_or_objects_that_respond_to_email)
28
- emails = expected_email_addresses_or_objects_that_respond_to_email.map do |email_or_object|
29
- email_or_object.kind_of?(String) ? email_or_object : email_or_object.email
30
- end
31
- DeliverTo.new(emails)
31
+ DeliverTo.new(expected_email_addresses_or_objects_that_respond_to_email)
32
32
  end
33
+
34
+ def have_subject(expected)
35
+ simple_matcher do |given, matcher|
36
+ given_subject = given.subject
37
+
38
+ if expected.is_a?(String)
39
+ matcher.description = "have subject of #{expected.inspect}"
40
+ matcher.failure_message = "expected the subject to be #{expected.inspect} but was #{given_subject.inspect}"
41
+ matcher.negative_failure_message = "expected the subject not to be #{expected.inspect} but was"
42
+
43
+ given_subject == expected
44
+ else
45
+ matcher.description = "have subject matching #{expected.inspect}"
46
+ matcher.failure_message = "expected the subject to match #{expected.inspect}, but did not. Actual subject was: #{given_subject.inspect}"
47
+ matcher.negative_failure_message = "expected the subject not to match #{expected.inspect} but #{given_subject.inspect} does match it."
48
+
49
+ !!(given_subject =~ expected)
50
+ end
51
+ end
52
+ end
53
+
33
54
  end
34
55
  end
@@ -0,0 +1,105 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+
4
+ describe EmailSpec::Matchers do
5
+
6
+ include EmailSpec::Matchers
7
+
8
+ def mock_email(stubs)
9
+ mock("email", stubs)
10
+ end
11
+
12
+ describe "#deliver_to" do
13
+
14
+ it "should match when the email is set to deliver to the specidied address" do
15
+ email = mock_email(:to => "jimmy_bean@yahoo.com")
16
+
17
+ deliver_to("jimmy_bean@yahoo.com").matches?(email).should be_true
18
+ end
19
+
20
+ it "should match when a list of emails is exact same as all of the email's recipients" do
21
+ email = mock_email(:to => ["james@yahoo.com", "karen@yahoo.com"])
22
+
23
+ deliver_to("karen@yahoo.com", "james@yahoo.com").matches?(email).should be_true
24
+ deliver_to("karen@yahoo.com").matches?(email).should be_false
25
+ end
26
+
27
+ it "should use the passed in objects :email method if not a string" do
28
+ email = mock_email(:to => "jimmy_bean@yahoo.com")
29
+ user = mock("user", :email => "jimmy_bean@yahoo.com")
30
+
31
+ deliver_to(user).matches?(email).should be_true
32
+ end
33
+
34
+ end
35
+
36
+ describe "#have_subject" do
37
+
38
+ describe "when regexps are used" do
39
+
40
+ it "should match when the subject mathches regexp" do
41
+ email = mock_email(:subject => ' -- The Subject --')
42
+
43
+ have_subject(/The Subject/).matches?(email).should be_true
44
+ have_subject(/The Subject/).matches?(email).should be_true
45
+ have_subject(/foo/).matches?(email).should be_false
46
+ end
47
+
48
+ it "should have a helpful description" do
49
+ matcher = have_subject(/foo/)
50
+ matcher.matches?(mock_email(:subject => "bar"))
51
+
52
+ matcher.description.should == "have subject matching /foo/"
53
+ end
54
+
55
+ it "should offer helpful failing messages" do
56
+ matcher = have_subject(/foo/)
57
+ matcher.matches?(mock_email(:subject => "bar"))
58
+
59
+ matcher.failure_message.should == 'expected the subject to match /foo/, but did not. Actual subject was: "bar"'
60
+ end
61
+
62
+ it "should offer helpful negative failing messages" do
63
+ matcher = have_subject(/b/)
64
+ matcher.matches?(mock_email(:subject => "bar"))
65
+
66
+ matcher.negative_failure_message.should == 'expected the subject not to match /b/ but "bar" does match it.'
67
+ end
68
+
69
+ end
70
+
71
+ describe "when strings are used" do
72
+
73
+ it "should match when the subject equals the passed in string exactly" do
74
+ email = mock_email(:subject => 'foo')
75
+
76
+ have_subject("foo").matches?(email).should be_true
77
+ have_subject(" - foo -").matches?(email).should be_false
78
+ end
79
+
80
+ it "should have a helpful description" do
81
+ matcher = have_subject("foo")
82
+ matcher.matches?(mock_email(:subject => "bar"))
83
+
84
+ matcher.description.should == 'have subject of "foo"'
85
+ end
86
+
87
+ it "should offer helpful failing messages" do
88
+ matcher = have_subject("foo")
89
+ matcher.matches?(mock_email(:subject => "bar"))
90
+
91
+ matcher.failure_message.should == 'expected the subject to be "foo" but was "bar"'
92
+ end
93
+
94
+
95
+ it "should offer helpful negative failing messages" do
96
+ matcher = have_subject("bar")
97
+ matcher.matches?(mock_email(:subject => "bar"))
98
+
99
+ matcher.negative_failure_message.should == 'expected the subject not to be "bar" but was'
100
+ end
101
+
102
+ end
103
+
104
+ end
105
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,4 @@
1
+ --colour
2
+ --format s
3
+ --loadby mtime
4
+ --reverse
@@ -0,0 +1,4 @@
1
+ require 'spec'
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/email_spec/helpers.rb')
4
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/email_spec/matchers.rb')
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bmabey-email_spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
- - Ben Mabrey
7
+ - Ben Mabey
8
8
  - Aaron Gibralter
9
9
  - Mischa Fierer
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2008-12-23 00:00:00 -08:00
14
+ date: 2009-01-20 00:00:00 -08:00
15
15
  default_executable:
16
16
  dependencies: []
17
17
 
@@ -39,109 +39,117 @@ files:
39
39
  - generators/email_spec/email_spec_generator.rb
40
40
  - generators/email_spec/templates
41
41
  - generators/email_spec/templates/email_steps.rb
42
- - spec/email_spec_helpers_spec.rb
43
- - spec/rails_root
44
- - spec/rails_root/app
45
- - spec/rails_root/app/controllers
46
- - spec/rails_root/app/controllers/application.rb
47
- - spec/rails_root/app/controllers/welcome_controller.rb
48
- - spec/rails_root/app/helpers
49
- - spec/rails_root/app/helpers/application_helper.rb
50
- - spec/rails_root/app/helpers/welcome_helper.rb
51
- - spec/rails_root/app/models
52
- - spec/rails_root/app/models/user_mailer.rb
53
- - spec/rails_root/app/views
54
- - spec/rails_root/app/views/user_mailer
55
- - spec/rails_root/app/views/user_mailer/signup.erb
56
- - spec/rails_root/app/views/welcome
57
- - spec/rails_root/app/views/welcome/confirm.html.erb
58
- - spec/rails_root/app/views/welcome/index.html.erb
59
- - spec/rails_root/app/views/welcome/signup.html.erb
60
- - spec/rails_root/config
61
- - spec/rails_root/config/boot.rb
62
- - spec/rails_root/config/database.yml
63
- - spec/rails_root/config/environment.rb
64
- - spec/rails_root/config/environments
65
- - spec/rails_root/config/environments/development.rb
66
- - spec/rails_root/config/environments/production.rb
67
- - spec/rails_root/config/environments/test.rb
68
- - spec/rails_root/config/initializers
69
- - spec/rails_root/config/initializers/inflections.rb
70
- - spec/rails_root/config/initializers/mime_types.rb
71
- - spec/rails_root/config/initializers/new_rails_defaults.rb
72
- - spec/rails_root/config/routes.rb
73
- - spec/rails_root/db
74
- - spec/rails_root/db/development.sqlite3
75
- - spec/rails_root/db/schema.rb
76
- - spec/rails_root/db/test.sqlite3
77
- - spec/rails_root/doc
78
- - spec/rails_root/doc/README_FOR_APP
79
- - spec/rails_root/features
80
- - spec/rails_root/features/errors.feature
81
- - spec/rails_root/features/example.feature
82
- - spec/rails_root/features/step_definitions
83
- - spec/rails_root/features/step_definitions/email_steps.rb
84
- - spec/rails_root/features/step_definitions/webrat_steps.rb
85
- - spec/rails_root/features/support
86
- - spec/rails_root/features/support/env.rb
87
- - spec/rails_root/lib
88
- - spec/rails_root/lib/tasks
89
- - spec/rails_root/log
90
- - spec/rails_root/log/development.log
91
- - spec/rails_root/log/test.log
92
- - spec/rails_root/public
93
- - spec/rails_root/public/404.html
94
- - spec/rails_root/public/422.html
95
- - spec/rails_root/public/500.html
96
- - spec/rails_root/public/dispatch.rb
97
- - spec/rails_root/public/favicon.ico
98
- - spec/rails_root/public/images
99
- - spec/rails_root/public/images/rails.png
100
- - spec/rails_root/public/javascripts
101
- - spec/rails_root/public/javascripts/application.js
102
- - spec/rails_root/public/javascripts/controls.js
103
- - spec/rails_root/public/javascripts/dragdrop.js
104
- - spec/rails_root/public/javascripts/effects.js
105
- - spec/rails_root/public/javascripts/prototype.js
106
- - spec/rails_root/public/robots.txt
107
- - spec/rails_root/Rakefile
108
- - spec/rails_root/script
109
- - spec/rails_root/script/about
110
- - spec/rails_root/script/autospec
111
- - spec/rails_root/script/console
112
- - spec/rails_root/script/cucumber
113
- - spec/rails_root/script/dbconsole
114
- - spec/rails_root/script/destroy
115
- - spec/rails_root/script/generate
116
- - spec/rails_root/script/performance
117
- - spec/rails_root/script/performance/benchmarker
118
- - spec/rails_root/script/performance/profiler
119
- - spec/rails_root/script/performance/request
120
- - spec/rails_root/script/plugin
121
- - spec/rails_root/script/process
122
- - spec/rails_root/script/process/inspector
123
- - spec/rails_root/script/process/reaper
124
- - spec/rails_root/script/process/spawner
125
- - spec/rails_root/script/runner
126
- - spec/rails_root/script/server
127
- - spec/rails_root/script/spec
128
- - spec/rails_root/script/spec_server
129
- - spec/rails_root/spec
130
- - spec/rails_root/spec/controllers
131
- - spec/rails_root/spec/controllers/welcome_controller_spec.rb
132
- - spec/rails_root/spec/models
133
- - spec/rails_root/spec/models/user_mailer_spec.rb
134
- - spec/rails_root/spec/rcov.opts
135
- - spec/rails_root/spec/spec.opts
136
- - spec/rails_root/spec/spec_helper.rb
137
- - spec/rails_root/vendor
138
- - spec/rails_root/vendor/plugins
139
- - spec/rails_root/vendor/plugins/email_spec
140
- - spec/rails_root/vendor/plugins/email_spec/generators
141
- - spec/rails_root/vendor/plugins/email_spec/generators/email_spec
142
- - spec/rails_root/vendor/plugins/email_spec/generators/email_spec/email_spec_generator.rb
143
- - spec/rails_root/vendor/plugins/email_spec/generators/email_spec/templates
144
- - spec/rails_root/vendor/plugins/email_spec/generators/email_spec/templates/email_steps.rb
42
+ - spec/email_spec
43
+ - spec/email_spec/matchers_spec.rb
44
+ - spec/spec.opts
45
+ - spec/spec_helper.rb
46
+ - examples/rails_root
47
+ - examples/rails_root/app
48
+ - examples/rails_root/app/controllers
49
+ - examples/rails_root/app/controllers/application.rb
50
+ - examples/rails_root/app/controllers/welcome_controller.rb
51
+ - examples/rails_root/app/helpers
52
+ - examples/rails_root/app/helpers/application_helper.rb
53
+ - examples/rails_root/app/helpers/welcome_helper.rb
54
+ - examples/rails_root/app/models
55
+ - examples/rails_root/app/models/user_mailer.rb
56
+ - examples/rails_root/app/views
57
+ - examples/rails_root/app/views/user_mailer
58
+ - examples/rails_root/app/views/user_mailer/signup.erb
59
+ - examples/rails_root/app/views/welcome
60
+ - examples/rails_root/app/views/welcome/confirm.html.erb
61
+ - examples/rails_root/app/views/welcome/index.html.erb
62
+ - examples/rails_root/app/views/welcome/signup.html.erb
63
+ - examples/rails_root/config
64
+ - examples/rails_root/config/boot.rb
65
+ - examples/rails_root/config/database.yml
66
+ - examples/rails_root/config/environment.rb
67
+ - examples/rails_root/config/environments
68
+ - examples/rails_root/config/environments/development.rb
69
+ - examples/rails_root/config/environments/production.rb
70
+ - examples/rails_root/config/environments/test.rb
71
+ - examples/rails_root/config/initializers
72
+ - examples/rails_root/config/initializers/inflections.rb
73
+ - examples/rails_root/config/initializers/mime_types.rb
74
+ - examples/rails_root/config/initializers/new_rails_defaults.rb
75
+ - examples/rails_root/config/routes.rb
76
+ - examples/rails_root/db
77
+ - examples/rails_root/db/development.sqlite3
78
+ - examples/rails_root/db/schema.rb
79
+ - examples/rails_root/db/test.sqlite3
80
+ - examples/rails_root/doc
81
+ - examples/rails_root/doc/README_FOR_APP
82
+ - examples/rails_root/features
83
+ - examples/rails_root/features/errors.feature
84
+ - examples/rails_root/features/example.feature
85
+ - examples/rails_root/features/step_definitions
86
+ - examples/rails_root/features/step_definitions/email_steps.rb
87
+ - examples/rails_root/features/step_definitions/webrat_steps.rb
88
+ - examples/rails_root/features/support
89
+ - examples/rails_root/features/support/env.rb
90
+ - examples/rails_root/lib
91
+ - examples/rails_root/lib/tasks
92
+ - examples/rails_root/lib/tasks/rspec.rake
93
+ - examples/rails_root/log
94
+ - examples/rails_root/log/development.log
95
+ - examples/rails_root/log/test.log
96
+ - examples/rails_root/public
97
+ - examples/rails_root/public/404.html
98
+ - examples/rails_root/public/422.html
99
+ - examples/rails_root/public/500.html
100
+ - examples/rails_root/public/dispatch.rb
101
+ - examples/rails_root/public/favicon.ico
102
+ - examples/rails_root/public/images
103
+ - examples/rails_root/public/images/rails.png
104
+ - examples/rails_root/public/javascripts
105
+ - examples/rails_root/public/javascripts/application.js
106
+ - examples/rails_root/public/javascripts/controls.js
107
+ - examples/rails_root/public/javascripts/dragdrop.js
108
+ - examples/rails_root/public/javascripts/effects.js
109
+ - examples/rails_root/public/javascripts/prototype.js
110
+ - examples/rails_root/public/robots.txt
111
+ - examples/rails_root/Rakefile
112
+ - examples/rails_root/script
113
+ - examples/rails_root/script/about
114
+ - examples/rails_root/script/autospec
115
+ - examples/rails_root/script/console
116
+ - examples/rails_root/script/cucumber
117
+ - examples/rails_root/script/dbconsole
118
+ - examples/rails_root/script/destroy
119
+ - examples/rails_root/script/generate
120
+ - examples/rails_root/script/performance
121
+ - examples/rails_root/script/performance/benchmarker
122
+ - examples/rails_root/script/performance/profiler
123
+ - examples/rails_root/script/performance/request
124
+ - examples/rails_root/script/plugin
125
+ - examples/rails_root/script/process
126
+ - examples/rails_root/script/process/inspector
127
+ - examples/rails_root/script/process/reaper
128
+ - examples/rails_root/script/process/spawner
129
+ - examples/rails_root/script/runner
130
+ - examples/rails_root/script/server
131
+ - examples/rails_root/script/spec
132
+ - examples/rails_root/script/spec_server
133
+ - examples/rails_root/spec
134
+ - examples/rails_root/spec/controllers
135
+ - examples/rails_root/spec/controllers/welcome_controller_spec.rb
136
+ - examples/rails_root/spec/models
137
+ - examples/rails_root/spec/models/user_mailer_spec.rb
138
+ - examples/rails_root/spec/rcov.opts
139
+ - examples/rails_root/spec/spec.opts
140
+ - examples/rails_root/spec/spec_helper.rb
141
+ - examples/rails_root/stories
142
+ - examples/rails_root/stories/all.rb
143
+ - examples/rails_root/stories/helper.rb
144
+ - examples/rails_root/vendor
145
+ - examples/rails_root/vendor/plugins
146
+ - examples/rails_root/vendor/plugins/email_spec
147
+ - examples/rails_root/vendor/plugins/email_spec/generators
148
+ - examples/rails_root/vendor/plugins/email_spec/generators/email_spec
149
+ - examples/rails_root/vendor/plugins/email_spec/generators/email_spec/email_spec_generator.rb
150
+ - examples/rails_root/vendor/plugins/email_spec/generators/email_spec/templates
151
+ - examples/rails_root/vendor/plugins/email_spec/generators/email_spec/templates/email_steps.rb
152
+ - examples/rails_root/vendor/plugins/rspec-rails
145
153
  has_rdoc: true
146
154
  homepage: http://github.com/bmabey/email-spec/
147
155
  post_install_message:
@@ -1,28 +0,0 @@
1
- # require File.dirname(__FILE__) + '/spec_helper'
2
- #
3
- # module ActionMailer
4
- # class Base
5
- # end
6
- # end
7
- #
8
- #
9
- # module EmailSpec
10
- # describe Helpers do
11
- # before(:all) do
12
- # @helper = Object.new
13
- # @helper.extend EmailSpec::Helpers
14
- # end
15
- #
16
- # describe "#reset_mailer" do
17
- # it "should empty the all email deliveries" do
18
- # #given
19
- # ActionMailer::Base.stub!(:deliveries).and_return([mock("some email", mock("another email"))])
20
- # #when
21
- # @helper.reset_mailer
22
- # #then
23
- # ActionMailer::Base.deliveries.should be_empty
24
- # end
25
- # end
26
- # end
27
- # end
28
- #