email_spec 1.6.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +7 -0
  2. data/History.txt +18 -0
  3. data/README.md +30 -28
  4. data/examples/rails4_root/Gemfile +19 -0
  5. data/examples/rails4_root/Gemfile.lock +180 -0
  6. data/examples/rails4_root/README +5 -0
  7. data/examples/rails4_root/Rakefile +11 -0
  8. data/examples/rails4_root/app/controllers/application_controller.rb +3 -0
  9. data/examples/rails4_root/app/controllers/welcome_controller.rb +18 -0
  10. data/examples/rails4_root/app/helpers/application_helper.rb +2 -0
  11. data/examples/rails4_root/app/mailers/user_mailer.rb +39 -0
  12. data/examples/rails4_root/app/models/user.rb +2 -0
  13. data/examples/rails4_root/app/views/user_mailer/email_with_attachment.html.erb +6 -0
  14. data/examples/rails4_root/app/views/user_mailer/newsletter.html.erb +8 -0
  15. data/examples/rails4_root/app/views/user_mailer/signup.html.erb +4 -0
  16. data/examples/rails4_root/app/views/user_mailer/signup.text.erb +4 -0
  17. data/examples/rails4_root/app/views/welcome/attachments.html.erb +0 -0
  18. data/examples/rails4_root/app/views/welcome/confirm.html.erb +1 -0
  19. data/examples/rails4_root/app/views/welcome/index.html.erb +8 -0
  20. data/examples/rails4_root/app/views/welcome/newsletter.html.erb +0 -0
  21. data/examples/rails4_root/app/views/welcome/signup.html.erb +1 -0
  22. data/examples/rails4_root/attachments/document.pdf +0 -0
  23. data/examples/rails4_root/attachments/image.png +0 -0
  24. data/examples/rails4_root/config.ru +4 -0
  25. data/examples/rails4_root/config/application.rb +45 -0
  26. data/examples/rails4_root/config/boot.rb +14 -0
  27. data/examples/rails4_root/config/cucumber.yml +8 -0
  28. data/examples/rails4_root/config/database.yml +25 -0
  29. data/examples/rails4_root/config/environment.rb +6 -0
  30. data/examples/rails4_root/config/environments/development.rb +19 -0
  31. data/examples/rails4_root/config/environments/production.rb +42 -0
  32. data/examples/rails4_root/config/environments/test.rb +32 -0
  33. data/examples/rails4_root/config/initializers/backtrace_silencers.rb +7 -0
  34. data/examples/rails4_root/config/initializers/cookie_verification_secret.rb +7 -0
  35. data/examples/rails4_root/config/initializers/delayed_job.rb +1 -0
  36. data/examples/rails4_root/config/initializers/inflections.rb +10 -0
  37. data/examples/rails4_root/config/initializers/mime_types.rb +5 -0
  38. data/examples/rails4_root/config/initializers/notifier_job.rb +1 -0
  39. data/examples/rails4_root/config/initializers/rspec_generator.rb +6 -0
  40. data/examples/rails4_root/config/initializers/session_store.rb +10 -0
  41. data/examples/rails4_root/config/locales/en.yml +5 -0
  42. data/examples/rails4_root/config/routes.rb +7 -0
  43. data/examples/rails4_root/config/secrets.yml +22 -0
  44. data/examples/rails4_root/db/migrate/20090125013728_create_users.rb +11 -0
  45. data/examples/rails4_root/db/migrate/20090908054656_create_delayed_jobs.rb +20 -0
  46. data/examples/rails4_root/db/migrate/20141119224309_add_queue_to_delayed_jobs.rb +9 -0
  47. data/examples/rails4_root/db/schema.rb +35 -0
  48. data/examples/rails4_root/db/seeds.rb +7 -0
  49. data/examples/rails4_root/db/test.sqlite3 +0 -0
  50. data/examples/rails4_root/doc/README_FOR_APP +2 -0
  51. data/examples/rails4_root/features/attachments.feature +27 -0
  52. data/examples/rails4_root/features/delayed_job.feature +13 -0
  53. data/examples/rails4_root/features/errors.feature +40 -0
  54. data/examples/rails4_root/features/example.feature +93 -0
  55. data/examples/rails4_root/features/step_definitions/email_steps.rb +210 -0
  56. data/examples/rails4_root/features/step_definitions/user_steps.rb +26 -0
  57. data/examples/rails4_root/features/step_definitions/web_steps.rb +219 -0
  58. data/examples/rails4_root/features/support/env.rb +59 -0
  59. data/examples/rails4_root/features/support/env_ext.rb +4 -0
  60. data/examples/rails4_root/features/support/paths.rb +33 -0
  61. data/examples/rails4_root/lib/notifier_job.rb +5 -0
  62. data/examples/rails4_root/lib/tasks/cucumber.rake +65 -0
  63. data/examples/rails4_root/lib/tasks/rspec.rake +69 -0
  64. data/examples/rails4_root/log/development.log +0 -0
  65. data/examples/rails4_root/log/test.log +43813 -0
  66. data/examples/rails4_root/public/404.html +26 -0
  67. data/examples/rails4_root/public/422.html +26 -0
  68. data/examples/rails4_root/public/500.html +26 -0
  69. data/examples/rails4_root/public/favicon.ico +0 -0
  70. data/examples/rails4_root/public/images/rails.png +0 -0
  71. data/examples/rails4_root/public/javascripts/application.js +2 -0
  72. data/examples/rails4_root/public/javascripts/controls.js +965 -0
  73. data/examples/rails4_root/public/javascripts/dragdrop.js +974 -0
  74. data/examples/rails4_root/public/javascripts/effects.js +1123 -0
  75. data/examples/rails4_root/public/javascripts/prototype.js +4874 -0
  76. data/examples/rails4_root/public/javascripts/rails.js +109 -0
  77. data/examples/rails4_root/public/robots.txt +5 -0
  78. data/examples/rails4_root/script/cucumber +10 -0
  79. data/examples/rails4_root/script/delayed_job +5 -0
  80. data/examples/rails4_root/script/rails +9 -0
  81. data/examples/rails4_root/spec/controllers/welcome_controller_spec.rb +20 -0
  82. data/examples/rails4_root/spec/models/user_mailer_spec.rb +47 -0
  83. data/examples/rails4_root/spec/spec_helper.rb +20 -0
  84. data/examples/rails4_root/test/mailers/user_mailer_classic_test.rb +27 -0
  85. data/examples/rails4_root/test/mailers/user_mailer_spec_test.rb +29 -0
  86. data/examples/rails4_root/test/test_helper.rb +10 -0
  87. data/{rails_generators → examples/rails4_root/vendor/plugins/email_spec/rails_generators}/email_spec/email_spec_generator.rb +0 -0
  88. data/{rails_generators → examples/rails4_root/vendor/plugins/email_spec/rails_generators}/email_spec/templates/email_steps.rb +22 -18
  89. data/examples/sinatra_root/Gemfile +15 -0
  90. data/examples/sinatra_root/Gemfile.lock +95 -0
  91. data/examples/sinatra_root/config.ru +4 -0
  92. data/examples/sinatra_root/features/errors.feature +40 -0
  93. data/examples/sinatra_root/features/example.feature +93 -0
  94. data/examples/sinatra_root/features/step_definitions/email_steps.rb +210 -0
  95. data/examples/sinatra_root/features/step_definitions/user_steps.rb +26 -0
  96. data/examples/sinatra_root/features/step_definitions/web_steps.rb +219 -0
  97. data/examples/sinatra_root/features/support/env.rb +21 -0
  98. data/examples/sinatra_root/features/support/paths.rb +29 -0
  99. data/examples/sinatra_root/lib/example_sinatra_app.rb +45 -0
  100. data/features/rails4_app.feature +32 -0
  101. data/features/sinatra_app.feature +14 -0
  102. data/features/step_definitions/app_steps.rb +58 -0
  103. data/features/support/env.rb +16 -0
  104. data/lib/email_spec.rb +1 -1
  105. data/lib/email_spec/deliveries.rb +0 -1
  106. data/lib/email_spec/email_viewer.rb +1 -1
  107. data/lib/email_spec/helpers.rb +16 -5
  108. data/lib/email_spec/matchers.rb +2 -1
  109. data/lib/email_spec/version.rb +3 -0
  110. data/lib/generators/email_spec/steps/templates/email_steps.rb +24 -20
  111. data/spec/email_spec/email_viewer_spec.rb +20 -0
  112. data/spec/email_spec/helpers_spec.rb +316 -0
  113. data/spec/email_spec/mail_ext_spec.rb +34 -0
  114. data/spec/email_spec/matchers_spec.rb +513 -0
  115. data/spec/spec_helper.rb +24 -0
  116. metadata +161 -150
  117. data/lib/email_spec/background_processes.rb +0 -45
  118. data/lib/generators/email_spec/steps/USAGE +0 -5
@@ -0,0 +1,109 @@
1
+ document.observe("dom:loaded", function() {
2
+ var authToken = $$('meta[name=csrf-token]').first().readAttribute('content'),
3
+ authParam = $$('meta[name=csrf-param]').first().readAttribute('content'),
4
+ formTemplate = '<form method="#{method}" action="#{action}">\
5
+ #{realmethod}<input name="#{param}" value="#{token}" type="hidden">\
6
+ </form>',
7
+ realmethodTemplate = '<input name="_method" value="#{method}" type="hidden">';
8
+
9
+ function handleRemote(element) {
10
+ var method, url, params;
11
+
12
+ if (element.tagName.toLowerCase() == 'form') {
13
+ method = element.readAttribute('method') || 'post';
14
+ url = element.readAttribute('action');
15
+ params = element.serialize(true);
16
+ } else {
17
+ method = element.readAttribute('data-method') || 'get';
18
+ url = element.readAttribute('href');
19
+ params = {};
20
+ }
21
+
22
+ var event = element.fire("ajax:before");
23
+ if (event.stopped) return false;
24
+
25
+ new Ajax.Request(url, {
26
+ method: method,
27
+ parameters: params,
28
+ asynchronous: true,
29
+ evalScripts: true,
30
+
31
+ onLoading: function(request) { element.fire("ajax:loading", {request: request}); },
32
+ onLoaded: function(request) { element.fire("ajax:loaded", {request: request}); },
33
+ onInteractive: function(request) { element.fire("ajax:interactive", {request: request}); },
34
+ onComplete: function(request) { element.fire("ajax:complete", {request: request}); },
35
+ onSuccess: function(request) { element.fire("ajax:success", {request: request}); },
36
+ onFailure: function(request) { element.fire("ajax:failure", {request: request}); }
37
+ });
38
+
39
+ element.fire("ajax:after");
40
+ }
41
+
42
+ $(document.body).observe("click", function(event) {
43
+ var message = event.element().readAttribute('data-confirm');
44
+ if (message && !confirm(message)) {
45
+ event.stop();
46
+ return false;
47
+ }
48
+
49
+ var element = event.findElement("a[data-remote=true]");
50
+ if (element) {
51
+ handleRemote(element);
52
+ event.stop();
53
+ }
54
+
55
+ var element = event.findElement("a[data-method]");
56
+ if (element && element.readAttribute('data-remote') != 'true') {
57
+ var method = element.readAttribute('data-method'),
58
+ piggyback = method.toLowerCase() != 'post',
59
+ formHTML = formTemplate.interpolate({
60
+ method: 'POST',
61
+ realmethod: piggyback ? realmethodTemplate.interpolate({ method: method }) : '',
62
+ action: element.readAttribute('href'),
63
+ token: authToken,
64
+ param: authParam
65
+ });
66
+
67
+ var form = new Element('div').update(formHTML).down().hide();
68
+ this.insert({ bottom: form });
69
+
70
+ form.submit();
71
+ event.stop();
72
+ }
73
+ });
74
+
75
+ // TODO: I don't think submit bubbles in IE
76
+ $(document.body).observe("submit", function(event) {
77
+ var message = event.element().readAttribute('data-confirm');
78
+ if (message && !confirm(message)) {
79
+ event.stop();
80
+ return false;
81
+ }
82
+
83
+ var inputs = event.element().select("input[type=submit][data-disable-with]");
84
+ inputs.each(function(input) {
85
+ input.disabled = true;
86
+ input.writeAttribute('data-original-value', input.value);
87
+ input.value = input.readAttribute('data-disable-with');
88
+ });
89
+
90
+ var element = event.findElement("form[data-remote=true]");
91
+ if (element) {
92
+ handleRemote(element);
93
+ event.stop();
94
+ }
95
+ });
96
+
97
+ $(document.body).observe("ajax:complete", function(event) {
98
+ var element = event.element();
99
+
100
+ if (element.tagName.toLowerCase() == 'form') {
101
+ var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
102
+ inputs.each(function(input) {
103
+ input.value = input.readAttribute('data-original-value');
104
+ input.writeAttribute('data-original-value', null);
105
+ input.disabled = false;
106
+ });
107
+ }
108
+ });
109
+ });
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-Agent: *
5
+ # Disallow: /
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ vendored_cucumber_bin = Dir["#{File.dirname(__FILE__)}/../vendor/{gems,plugins}/cucumber*/bin/cucumber"].first
4
+ if vendored_cucumber_bin
5
+ load File.expand_path(vendored_cucumber_bin)
6
+ else
7
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
8
+ require 'cucumber'
9
+ load Cucumber::BINARY
10
+ end
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
4
+ require 'delayed/command'
5
+ Delayed::Command.new(ARGV).daemonize
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
3
+
4
+ ENV_PATH = File.expand_path('../../config/environment', __FILE__)
5
+ BOOT_PATH = File.expand_path('../../config/boot', __FILE__)
6
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
7
+
8
+ require BOOT_PATH
9
+ require 'rails/commands'
@@ -0,0 +1,20 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe WelcomeController, :type => :controller do
4
+
5
+ describe "POST /signup (#signup)" do
6
+ it "should deliver the signup email" do
7
+ expect {
8
+ post :signup, "Email" => "email@example.com", "Name" => "Jimmy Bean"
9
+ }.to change(ActionMailer::Base.deliveries, :size).by(1)
10
+
11
+ last_delivery = ActionMailer::Base.deliveries.last
12
+ expect(last_delivery.to).to include "email@example.com"
13
+ #message is now multipart, make sure both parts include Jimmy Bean
14
+ expect(last_delivery.parts[0].body.to_s).to include "Jimmy Bean"
15
+ expect(last_delivery.parts[1].body.to_s).to include "Jimmy Bean"
16
+ end
17
+
18
+ end
19
+
20
+ end
@@ -0,0 +1,47 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
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
5
+ # formatter to get an idea of how they differ.
6
+ # Example of documenting the behaviour explicitly and expressing the intent in the example's sentence.
7
+ describe "Signup Email", :type => :model do
8
+ include EmailSpec::Helpers
9
+ include EmailSpec::Matchers
10
+ include ::Rails.application.routes.url_helpers
11
+
12
+ subject { UserMailer.signup("jojo@yahoo.com", "Jojo Binks") }
13
+
14
+ it "should be delivered to the email passed in" do
15
+ is_expected.to deliver_to("jojo@yahoo.com")
16
+ end
17
+
18
+ it "should contain the user's name in the mail body" do
19
+ is_expected.to have_body_text(/Jojo Binks/)
20
+ end
21
+
22
+ it "should contain a link to the confirmation page" do
23
+ is_expected.to have_body_text(/#{confirm_account_url(:host => 'example.com')}/)
24
+ end
25
+
26
+ it { is_expected.to have_subject(/Account confirmation/) }
27
+
28
+
29
+ end
30
+
31
+ # In this example group more of the documentation is placed in the context trying to allow for more concise specs.
32
+ describe "Signup Email", :type => :model do
33
+ include EmailSpec::Helpers
34
+ include EmailSpec::Matchers
35
+ include ::Rails.application.routes.url_helpers
36
+
37
+ subject { UserMailer.signup("jojo@yahoo.com", "Jojo Binks") }
38
+
39
+ it { is_expected.to have_body_text(/#{confirm_account_url(:host => 'example.com')}/) }
40
+ it { is_expected.to have_subject(/Account confirmation/) }
41
+
42
+ describe "sent with email address of 'jojo@yahoo.com', and users name 'Jojo Binks'" do
43
+ subject { UserMailer.signup("jojo@yahoo.com", "Jojo Binks") }
44
+ it { is_expected.to deliver_to("jojo@yahoo.com") }
45
+ it { is_expected.to have_body_text(/Jojo Binks/) }
46
+ end
47
+ end
@@ -0,0 +1,20 @@
1
+ # This file is copied to ~/spec when you run 'ruby script/generate rspec'
2
+ # from the project root directory.
3
+ ENV["RAILS_ENV"] ||= 'test'
4
+ require File.dirname(__FILE__) + "/../config/environment"
5
+ require 'rspec/rails'
6
+
7
+ # Requires supporting files with custom matchers and macros, etc,
8
+ # in ./support/ and its subdirectories.
9
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
+ RSpec.configure do |config|
11
+ # == Mock Framework
12
+ #
13
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
14
+ #
15
+ # config.mock_with :mocha
16
+ # config.mock_with :flexmock
17
+ # config.mock_with :rr
18
+ config.mock_with :rspec
19
+ config.raise_errors_for_deprecations!
20
+ end
@@ -0,0 +1,27 @@
1
+ require "test_helper"
2
+
3
+ class TestUserMailer < Minitest::Test
4
+ include ::Rails.application.routes.url_helpers
5
+ include EmailSpec::Helpers
6
+ include EmailSpec::Matchers
7
+
8
+ def setup
9
+ @email = UserMailer.signup("jojo@yahoo.com", "Jojo Binks")
10
+ end
11
+
12
+ def test_delivered
13
+ assert_must deliver_to("jojo@yahoo.com"), @email
14
+ end
15
+
16
+ def test_contains_users_name
17
+ assert_must have_body_text(/Jojo Binks/), @email
18
+ end
19
+
20
+ def test_link_to_confirmation_page
21
+ assert_must have_body_text(/#{confirm_account_url(:host => 'example.com')}/), @email
22
+ end
23
+
24
+ def test_subject
25
+ assert_must have_subject(/Account confirmation/), @email
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ require "test_helper"
2
+
3
+ # Uncomment this line when RSpec no longer loads the DSL in every project that
4
+ # has a dependency on it in the Gemfile, and stomps on MiniTest's `describe`...
5
+ # This is not an issue for Rails projects that don't use RSpec.
6
+ #describe UserMailer, :signup do
7
+ class UserMailerSpec < Minitest::Spec
8
+ include ::Rails.application.routes.url_helpers
9
+ include EmailSpec::Helpers
10
+ include EmailSpec::Matchers
11
+
12
+ let(:email) { UserMailer.signup("jojo@yahoo.com", "Jojo Binks") }
13
+
14
+ def test_is_delivered_to_the_email_passed_in
15
+ email.must deliver_to("jojo@yahoo.com")
16
+ end
17
+
18
+ def test_contains_the_users_name_in_the_mail_body
19
+ email.must have_body_text(/Jojo Binks/)
20
+ end
21
+
22
+ def test_contains_a_link_to_the_confirmation_page
23
+ email.must have_body_text(/#{confirm_account_url(:host => 'example.com')}/)
24
+ end
25
+
26
+ def test_contains_the_correct_subject
27
+ email.must have_subject(/Account confirmation/)
28
+ end
29
+ end
@@ -0,0 +1,10 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+ require File.expand_path('../../config/environment', __FILE__)
3
+ require 'rails/test_help'
4
+ require "minitest/autorun"
5
+
6
+ class ActiveSupport::TestCase
7
+ # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
8
+ fixtures :all
9
+
10
+ end
@@ -49,15 +49,15 @@ end
49
49
  #
50
50
 
51
51
  Then /^(?:I|they|he|she|"([^"]*?)") should receive (an|no|\d+) emails?$/ do |address, amount|
52
- unread_emails_for(address).size.should == parse_email_count(amount)
52
+ expect(unread_emails_for(address).size).to eql parse_email_count(amount)
53
53
  end
54
54
 
55
55
  Then /^(?:I|they|he|she|"([^"]*?)") should have (an|no|\d+) emails?$/ do |address, amount|
56
- mailbox_for(address).size.should == parse_email_count(amount)
56
+ expect(mailbox_for(address).size).to eql parse_email_count(amount)
57
57
  end
58
58
 
59
59
  Then /^(?:I|they|he|she|"([^"]*?)") should receive (an|no|\d+) emails? with subject "([^"]*?)"$/ do |address, amount, subject|
60
- unread_emails_for(address).select { |m| m.subject =~ Regexp.new(Regexp.escape(subject)) }.size.should == parse_email_count(amount)
60
+ expect(unread_emails_for(address).select { |m| m.subject =~ Regexp.new(Regexp.escape(subject)) }.size).to eql parse_email_count(amount)
61
61
  end
62
62
 
63
63
  Then /^(?:I|they|he|she|"([^"]*?)") should receive an email with the following body:$/ do |address, expected_body|
@@ -86,7 +86,7 @@ end
86
86
  #
87
87
 
88
88
  Then /^(?:I|they|he|she) should see "([^"]*?)" in the email subject$/ do |text|
89
- current_email.should have_subject(text)
89
+ expect(current_email).to have_subject(text)
90
90
  end
91
91
 
92
92
  Then /^(?:I|they|he|she) should see "([^"]*?)" in the email body$/ do |text|
@@ -94,36 +94,40 @@ Then /^(?:I|they|he|she) should see "([^"]*?)" in the email body$/ do |text|
94
94
  Then %(I should see "#{text}" in the html part of the email body)
95
95
  Then %(I should see "#{text}" in the text part of the email body)
96
96
  else
97
- current_email.body.should =~ Regexp.new(text)
97
+ expect(current_email.body).to match Regexp.new(text)
98
98
  end
99
99
  end
100
100
 
101
101
  Then /^(?:I|they|he|she) should see "([^"]*?)" in the html part of the email body$/ do |text|
102
- current_email.html_part.body.should =~ Regexp.new(text)
102
+ expect(current_email.html_part.body).to match Regexp.new(text)
103
103
  end
104
104
 
105
105
  Then /^(?:I|they|he|she) should see "([^"]*?)" in the text part of the email body$/ do |text|
106
- current_email.text_part.body.should =~ Regexp.new(text)
106
+ expect(current_email.text_part.body).to match Regexp.new(text)
107
107
  end
108
108
 
109
109
  Then /^(?:I|they|he|she) should see "([^"]*?)" in the email body$/ do |text|
110
- current_email.body.should include(text)
110
+ expect(current_email.body).to include(text)
111
111
  end
112
112
 
113
113
  Then /^(?:I|they|he|she) should see \/([^"]*?)\/ in the email body$/ do |text|
114
- current_email.body.should =~ Regexp.new(text)
114
+ expect(current_email.body).to match Regexp.new(text)
115
115
  end
116
116
 
117
117
  Then /^(?:I|they|he|she) should see the email delivered from "([^"]*?)"$/ do |text|
118
- current_email.should be_delivered_from(text)
118
+ expect(current_email).to be_delivered_from(text)
119
+ end
120
+
121
+ Then /^(?:I|they) should see the email reply to "([^"]*?)"$/ do |text|
122
+ current_email.should have_reply_to(text)
119
123
  end
120
124
 
121
125
  Then /^(?:I|they|he|she) should see "([^\"]*)" in the email "([^"]*?)" header$/ do |text, name|
122
- current_email.should have_header(name, text)
126
+ expect(current_email).to have_header(name, text)
123
127
  end
124
128
 
125
129
  Then /^(?:I|they|he|she) should see \/([^\"]*)\/ in the email "([^"]*?)" header$/ do |text, name|
126
- current_email.should have_header(name, Regexp.new(text))
130
+ expect(current_email).to have_header(name, Regexp.new(text))
127
131
  end
128
132
 
129
133
  #
@@ -131,28 +135,28 @@ end
131
135
  #
132
136
 
133
137
  Then /^(?:I|they|he|she) should see (an|no|\d+) attachments? with the email$/ do |amount|
134
- current_email_attachments.size.should == parse_email_count(amount)
138
+ expect(current_email_attachments.size).to eql parse_email_count(amount)
135
139
  end
136
140
 
137
141
  Then /^there should be (an|no|\d+) attachments? named "([^"]*?)"$/ do |amount, filename|
138
- current_email_attachments.select { |a| a.original_filename == filename }.size.should == parse_email_count(amount)
142
+ expect(current_email_attachments.select { |a| a.original_filename == filename }.size).to eql parse_email_count(amount)
139
143
  end
140
144
 
141
145
  Then /^attachment (\d+) should be named "([^"]*?)"$/ do |index, filename|
142
- current_email_attachments[(index.to_i - 1)].original_filename.should == filename
146
+ expect(current_email_attachments[(index.to_i - 1)].original_filename).to eql filename
143
147
  end
144
148
 
145
149
  Then /^there should be (an|no|\d+) attachments? of type "([^"]*?)"$/ do |amount, content_type|
146
- current_email_attachments.select { |a| a.content_type == content_type }.size.should == parse_email_count(amount)
150
+ expect(current_email_attachments.select { |a| a.content_type == content_type }.size).to eql parse_email_count(amount)
147
151
  end
148
152
 
149
153
  Then /^attachment (\d+) should be of type "([^"]*?)"$/ do |index, content_type|
150
- current_email_attachments[(index.to_i - 1)].content_type.should == content_type
154
+ expect(current_email_attachments[(index.to_i - 1)].content_type).to eql content_type
151
155
  end
152
156
 
153
157
  Then /^all attachments should not be blank$/ do
154
158
  current_email_attachments.each do |attachment|
155
- attachment.size.should_not == 0
159
+ expect(attachment.size).to_not eql 0
156
160
  end
157
161
  end
158
162
 
@@ -0,0 +1,15 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'sinatra'
4
+
5
+ group :test do
6
+ gem 'cucumber'
7
+ gem "cucumber-sinatra", :require => false
8
+ gem 'pony'
9
+ gem 'capybara'
10
+ gem 'nokogiri'
11
+ gem 'xpath'
12
+ gem 'rspec'
13
+ gem 'rack-test'
14
+ gem "email_spec", :path => "../../", :require => "email_spec"
15
+ end
@@ -0,0 +1,95 @@
1
+ PATH
2
+ remote: ../../
3
+ specs:
4
+ email_spec (2.0.0)
5
+ htmlentities (~> 4.3.3)
6
+ launchy (~> 2.1)
7
+ mail (~> 2.6.3)
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ addressable (2.3.8)
13
+ builder (3.2.2)
14
+ capybara (2.4.4)
15
+ mime-types (>= 1.16)
16
+ nokogiri (>= 1.3.3)
17
+ rack (>= 1.0.0)
18
+ rack-test (>= 0.5.4)
19
+ xpath (~> 2.0)
20
+ cucumber (2.0.0)
21
+ builder (>= 2.1.2)
22
+ cucumber-core (~> 1.1.3)
23
+ diff-lcs (>= 1.1.3)
24
+ gherkin (~> 2.12)
25
+ multi_json (>= 1.7.5, < 2.0)
26
+ multi_test (>= 0.1.2)
27
+ cucumber-core (1.1.3)
28
+ gherkin (~> 2.12.0)
29
+ cucumber-sinatra (0.5.0)
30
+ templater (>= 1.0.0)
31
+ diff-lcs (1.2.5)
32
+ extlib (0.9.16)
33
+ gherkin (2.12.2)
34
+ multi_json (~> 1.3)
35
+ highline (1.7.2)
36
+ htmlentities (4.3.3)
37
+ launchy (2.4.3)
38
+ addressable (~> 2.3)
39
+ mail (2.6.3)
40
+ mime-types (>= 1.16, < 3)
41
+ mime-types (2.6.1)
42
+ mini_portile (0.6.2)
43
+ multi_json (1.11.1)
44
+ multi_test (0.1.2)
45
+ nokogiri (1.6.6.2)
46
+ mini_portile (~> 0.6.0)
47
+ pony (1.11)
48
+ mail (>= 2.0)
49
+ rack (1.6.4)
50
+ rack-protection (1.5.3)
51
+ rack
52
+ rack-test (0.6.3)
53
+ rack (>= 1.0)
54
+ rspec (3.3.0)
55
+ rspec-core (~> 3.3.0)
56
+ rspec-expectations (~> 3.3.0)
57
+ rspec-mocks (~> 3.3.0)
58
+ rspec-core (3.3.1)
59
+ rspec-support (~> 3.3.0)
60
+ rspec-expectations (3.3.0)
61
+ diff-lcs (>= 1.2.0, < 2.0)
62
+ rspec-support (~> 3.3.0)
63
+ rspec-mocks (3.3.1)
64
+ diff-lcs (>= 1.2.0, < 2.0)
65
+ rspec-support (~> 3.3.0)
66
+ rspec-support (3.3.0)
67
+ sinatra (1.4.6)
68
+ rack (~> 1.4)
69
+ rack-protection (~> 1.4)
70
+ tilt (>= 1.3, < 3)
71
+ templater (1.0.0)
72
+ diff-lcs (>= 1.1.2)
73
+ extlib (>= 0.9.5)
74
+ highline (>= 1.4.0)
75
+ tilt (2.0.1)
76
+ xpath (2.0.0)
77
+ nokogiri (~> 1.3)
78
+
79
+ PLATFORMS
80
+ ruby
81
+
82
+ DEPENDENCIES
83
+ capybara
84
+ cucumber
85
+ cucumber-sinatra
86
+ email_spec!
87
+ nokogiri
88
+ pony
89
+ rack-test
90
+ rspec
91
+ sinatra
92
+ xpath
93
+
94
+ BUNDLED WITH
95
+ 1.10.5