bmabey-email_spec 0.0.10 → 0.1.0

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 CHANGED
@@ -1,6 +1,12 @@
1
1
  (In Git)
2
2
 
3
3
  === New features
4
+ === Bufixes
5
+
6
+ == 0.1.0 2008-3-25
7
+ === New features
8
+ * Change Rakefile to run all specs and features, as well as prepare the db (Mischa Fierer)
9
+ * Allow for array to be passed into deliver_to matcher. (Diego Carrion)
4
10
  * Added matcher for checking if a collection of emails includes an email with a particular subject (Luke Melia, Noah Davis)
5
11
  * Introduced hook to convert objects to email addresses (Luke Melia and Lee Bankewitz)
6
12
 
@@ -18,6 +24,7 @@
18
24
  end
19
25
 
20
26
  === Bufixes
27
+ * Revert parse_email_for_link helper method to allow for text links as well as explicit link finding. (Mischa Fierer)
21
28
  * Isolated variances between using email-spec with an ARMailer project. (Luke Melia)
22
29
 
23
30
 
data/Rakefile CHANGED
@@ -33,9 +33,19 @@ task :generate do
33
33
  system "cd #{current_dir}/examples/rails_root && ./script/generate email_spec"
34
34
  end
35
35
 
36
- task :features => [:generate] do
37
- system("cucumber examples/rails_root/features")
36
+ task :migrate do
37
+ system("cd examples/rails_root/ && rake db:test:prepare")
38
38
  end
39
39
 
40
- task :default => :features
40
+ task :features => :generate do
41
+ system("cucumber examples/rails_root/")
42
+ puts "4 steps should fail.\n\n"
43
+ end
44
+
45
+ task :specs do
46
+ system("spec examples/rails_root -c --format nested")
47
+ system("spec spec -c --format nested")
48
+ end
49
+
50
+ task :default => [:migrate, :features, :specs]
41
51
 
@@ -12,10 +12,8 @@
12
12
  ActiveRecord::Schema.define(:version => 20090125013728) do
13
13
 
14
14
  create_table "users", :force => true do |t|
15
- t.string "email"
16
- t.string "name"
17
- t.string "confirm_code"
18
- t.datetime "confirmed_at"
15
+ t.string "email"
16
+ t.string "name"
19
17
  end
20
18
 
21
19
  end
@@ -26,7 +26,7 @@ Scenario: A new person signs up imperatively
26
26
  And I should see "Quentin Jones" in the email
27
27
  And I should see "Account confirmation" in the subject
28
28
 
29
- When I follow "confirm" in the email
29
+ When I follow "Click here to confirm your account!" in the email
30
30
  Then I should see "Confirm your new account"
31
31
 
32
32
 
@@ -43,7 +43,7 @@ Scenario: slightly more declarative, but still mostly imperative
43
43
  When I open the email
44
44
  Then I should see "Account confirmation" in the subject
45
45
 
46
- When I follow "confirm" in the email
46
+ When I follow "http:///confirm" in the email
47
47
  Then I should see "Confirm your new account"
48
48
 
49
49
 
@@ -56,3 +56,4 @@ Scenario: slightly more declarative, but still mostly imperative
56
56
 
57
57
 
58
58
 
59
+
@@ -95,27 +95,34 @@ module EmailSpec
95
95
  email_spec_hash[:current_email] = email
96
96
  end
97
97
 
98
- def parse_email_for_link(email, link_text_or_regex)
99
- email.should have_body_text(link_text_or_regex)
100
- regex = link_text_or_regex
98
+ def parse_email_for_link(email, text_or_regex)
99
+ email.should have_body_text(text_or_regex)
100
+
101
+ url = parse_email_for_explicit_link(email, text_or_regex)
102
+ url ||= parse_email_for_anchor_text_link(email, text_or_regex)
103
+
104
+ raise "No link found matching #{text_or_regex.inspect} in #{email}" unless url
105
+ url
106
+ end
107
+
108
+ # e.g. confirm in http://confirm
109
+ def parse_email_for_explicit_link(email, regex)
101
110
  regex = /#{Regexp.escape(regex)}/ unless regex.is_a?(Regexp)
102
111
  url = links_in_email(email).detect { |link| link =~ regex }
103
- raise "No link found matching #{regex.inspect} in #{email}" unless url
104
- URI::parse(url).request_uri
105
- #
106
- # if link_text =~ %r{^/.*$}
107
- # # if it's an explicit link
108
- # link_text
109
- # elsif email.body =~ %r{<a[^>]*href=['"]?([^'"]*)['"]?[^>]*?>[^<]*?#{link_text}[^<]*?</a>}
110
- # # if it's an anchor tag
111
- # URI.split($~[1])[5..-1].compact!.join("?").gsub("&amp;", "&")
112
- # # sub correct ampersand after rails switches it (http://dev.rubyonrails.org/ticket/4002)
113
- # # TODO: outsource this kind of parsing to webrat or someone else
114
- # end
112
+ URI::parse(url).request_uri if url
115
113
  end
116
114
 
115
+ # e.g. Click here in <a href="http://confirm">Click here</a>
116
+ def parse_email_for_anchor_text_link(email, link_text)
117
+ email.body =~ %r{<a[^>]*href=['"]?([^'"]*)['"]?[^>]*?>[^<]*?#{link_text}[^<]*?</a>}
118
+ URI.split($~[1])[5..-1].compact!.join("?").gsub("&amp;", "&")
119
+ # sub correct ampersand after rails switches it (http://dev.rubyonrails.org/ticket/4002)
120
+ end
121
+
122
+
117
123
  def convert_address(address)
118
124
  AddressConverter.instance.convert(address)
119
125
  end
120
126
  end
121
127
  end
128
+
@@ -32,7 +32,7 @@ module EmailSpec
32
32
  end
33
33
 
34
34
  def deliver_to(*expected_email_addresses_or_objects_that_respond_to_email)
35
- DeliverTo.new(expected_email_addresses_or_objects_that_respond_to_email)
35
+ DeliverTo.new(expected_email_addresses_or_objects_that_respond_to_email.flatten)
36
36
  end
37
37
 
38
38
  alias :be_delivered_to :deliver_to
@@ -59,6 +59,12 @@ describe EmailSpec::Matchers do
59
59
  deliver_to("karen@yahoo.com").should_not match(email)
60
60
  end
61
61
 
62
+ it "should match when an array of emails is exact same as all of the email's recipients" do
63
+ addresses = ["james@yahoo.com", "karen@yahoo.com"]
64
+ email = mock_email(:to => addresses)
65
+ deliver_to(addresses).should match(email)
66
+ end
67
+
62
68
  it "should use the passed in objects :email method if not a string" do
63
69
  email = mock_email(:to => "jimmy_bean@yahoo.com")
64
70
  user = mock("user", :email => "jimmy_bean@yahoo.com")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bmabey-email_spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Mabey
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2009-02-21 00:00:00 -08:00
14
+ date: 2009-03-25 00:00:00 -07:00
15
15
  default_executable:
16
16
  dependencies: []
17
17
 
@@ -79,7 +79,6 @@ files:
79
79
  - examples/rails_root/config/routes.rb
80
80
  - examples/rails_root/cucumber.yml
81
81
  - examples/rails_root/db
82
- - examples/rails_root/db/development.sqlite3
83
82
  - examples/rails_root/db/migrate
84
83
  - examples/rails_root/db/migrate/20090125013728_create_users.rb
85
84
  - examples/rails_root/db/schema.rb