pickle 0.4.11 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rspec +2 -0
- data/.travis.yml +10 -0
- data/Gemfile.lock.development +91 -94
- data/History.txt +8 -1
- data/README.rdoc +8 -9
- data/Rakefile.d/cucumber.rake +10 -9
- data/features/app/blueprints.rb +1 -6
- data/features/app/factories.rb +17 -15
- data/features/step_definitions/email_steps.rb +10 -10
- data/features/step_definitions/fork_steps.rb +2 -2
- data/features/step_definitions/generator_steps.rb +15 -9
- data/features/step_definitions/path_steps.rb +3 -3
- data/features/step_definitions/pickle_steps.rb +19 -19
- data/features/step_definitions/raise_error_steps.rb +3 -3
- data/features/support/pickle.rb +0 -1
- data/lib/generators/pickle_generator.rb +1 -26
- data/lib/pickle/adapter.rb +4 -10
- data/lib/pickle/version.rb +2 -2
- data/pickle.gemspec +7 -6
- data/rails_generators/pickle/pickle_generator.rb +2 -4
- data/rails_generators/pickle/templates/email_steps.rb +10 -10
- data/rails_generators/pickle/templates/pickle.rb +0 -1
- data/rails_generators/pickle/templates/pickle_steps.rb +19 -19
- data/spec/pickle/adapter_spec.rb +39 -39
- data/spec/pickle/config_spec.rb +29 -29
- data/spec/pickle/email/parser_spec.rb +9 -9
- data/spec/pickle/email_spec.rb +38 -38
- data/spec/pickle/parser/matchers_spec.rb +8 -8
- data/spec/pickle/parser_spec.rb +34 -34
- data/spec/pickle/path_spec.rb +33 -33
- data/spec/pickle/session_spec.rb +87 -87
- data/spec/pickle_spec.rb +4 -4
- data/spec/spec_helper.rb +73 -3
- metadata +55 -79
data/spec/pickle/adapter_spec.rb
CHANGED
@@ -8,11 +8,11 @@ require 'pickle/adapters/active_record'
|
|
8
8
|
|
9
9
|
describe Pickle::Adapter do
|
10
10
|
it ".factories should raise NotImplementedError" do
|
11
|
-
|
11
|
+
expect { Pickle::Adapter.factories }.to raise_error(NotImplementedError)
|
12
12
|
end
|
13
13
|
|
14
14
|
it "#create should raise NotImplementedError" do
|
15
|
-
|
15
|
+
expect { Pickle::Adapter.new.create }.to raise_error(NotImplementedError)
|
16
16
|
end
|
17
17
|
|
18
18
|
describe ".model_classes" do
|
@@ -23,9 +23,9 @@ describe Pickle::Adapter do
|
|
23
23
|
|
24
24
|
describe "adapters: " do
|
25
25
|
before do
|
26
|
-
@klass1 = Class.new(ActiveRecord::Base).tap { |k| k.
|
27
|
-
@klass2 = Class.new(ActiveRecord::Base).tap { |k| k.
|
28
|
-
@klass3 = Class.new(ActiveRecord::Base).tap { |k| k.
|
26
|
+
@klass1 = Class.new(ActiveRecord::Base).tap { |k| allow(k).to receive(:name).and_return('One') }
|
27
|
+
@klass2 = Class.new(ActiveRecord::Base).tap { |k| allow(k).to receive(:name).and_return('One::Two') }
|
28
|
+
@klass3 = Class.new(ActiveRecord::Base).tap { |k| allow(k).to receive(:name).and_return('Three') }
|
29
29
|
end
|
30
30
|
|
31
31
|
describe 'ActiveRecord' do
|
@@ -34,8 +34,8 @@ describe Pickle::Adapter do
|
|
34
34
|
|
35
35
|
describe ".model_classes" do
|
36
36
|
it "calls .descendants" do
|
37
|
-
::ActiveRecord::Base.
|
38
|
-
::ActiveRecord::Base.
|
37
|
+
expect(::ActiveRecord::Base).to receive(:descendants).and_return([])
|
38
|
+
expect(::ActiveRecord::Base).not_to receive(:subclasses)
|
39
39
|
|
40
40
|
ActiveRecord::Base::PickleAdapter.model_classes
|
41
41
|
end
|
@@ -43,14 +43,14 @@ describe Pickle::Adapter do
|
|
43
43
|
|
44
44
|
describe 'with class stubs' do
|
45
45
|
before do
|
46
|
-
Pickle::Adapter::Orm.
|
46
|
+
allow(Pickle::Adapter::Orm).to receive(:model_classes).and_return([@klass1, @klass2, @klass3])
|
47
47
|
end
|
48
48
|
|
49
49
|
it ".factories should create one for each active record class" do
|
50
|
-
Pickle::Adapter::Orm.
|
51
|
-
Pickle::Adapter::Orm.
|
52
|
-
Pickle::Adapter::Orm.
|
53
|
-
Pickle::Adapter::Orm.factories.length.
|
50
|
+
expect(Pickle::Adapter::Orm).to receive(:new).with(@klass1).once
|
51
|
+
expect(Pickle::Adapter::Orm).to receive(:new).with(@klass2).once
|
52
|
+
expect(Pickle::Adapter::Orm).to receive(:new).with(@klass3).once
|
53
|
+
expect(Pickle::Adapter::Orm.factories.length).to eq(3)
|
54
54
|
end
|
55
55
|
|
56
56
|
describe ".new(Class)" do
|
@@ -59,11 +59,11 @@ describe Pickle::Adapter do
|
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should have underscored (s/_) name of Class as #name" do
|
62
|
-
@factory.name.
|
62
|
+
expect(@factory.name).to eq('one_two')
|
63
63
|
end
|
64
64
|
|
65
65
|
it "#create(attrs) should call Class.create!(attrs)" do
|
66
|
-
@klass2.
|
66
|
+
expect(@klass2).to receive(:create!).with({:key => "val"})
|
67
67
|
@factory.create(:key => "val")
|
68
68
|
end
|
69
69
|
end
|
@@ -72,7 +72,7 @@ describe Pickle::Adapter do
|
|
72
72
|
|
73
73
|
describe 'FactoryGirl' do
|
74
74
|
before do
|
75
|
-
Pickle::Adapter::FactoryGirl.
|
75
|
+
allow(Pickle::Adapter::FactoryGirl).to receive(:model_classes).and_return([@klass1, @klass2, @klass3])
|
76
76
|
|
77
77
|
if defined? ::FactoryGirl
|
78
78
|
@orig_factories = ::FactoryGirl.factories.dup
|
@@ -100,8 +100,8 @@ describe Pickle::Adapter do
|
|
100
100
|
end
|
101
101
|
|
102
102
|
it ".factories should create one for each factory" do
|
103
|
-
Pickle::Adapter::FactoryGirl.
|
104
|
-
Pickle::Adapter::FactoryGirl.
|
103
|
+
expect(Pickle::Adapter::FactoryGirl).to receive(:new).with(@factory1).once
|
104
|
+
expect(Pickle::Adapter::FactoryGirl).to receive(:new).with(@factory2).once
|
105
105
|
Pickle::Adapter::FactoryGirl.factories
|
106
106
|
end
|
107
107
|
|
@@ -111,16 +111,16 @@ describe Pickle::Adapter do
|
|
111
111
|
end
|
112
112
|
|
113
113
|
it "should have name of factory_name" do
|
114
|
-
@factory.name.
|
114
|
+
expect(@factory.name).to eq('one')
|
115
115
|
end
|
116
116
|
|
117
117
|
it "should have klass of build_class" do
|
118
|
-
@factory.klass.
|
118
|
+
expect(@factory.klass).to eq(@klass1)
|
119
119
|
end
|
120
120
|
|
121
121
|
unless defined? ::FactoryGirl
|
122
122
|
it "#create(attrs) should call Factory(<:key>, attrs)" do
|
123
|
-
Factory.
|
123
|
+
expect(Factory).to receive(:create).with("one", {:key => "val"})
|
124
124
|
@factory.create(:key => "val")
|
125
125
|
end
|
126
126
|
end
|
@@ -129,14 +129,14 @@ describe Pickle::Adapter do
|
|
129
129
|
|
130
130
|
describe 'Fabrication' do
|
131
131
|
before do
|
132
|
-
@schematic1 = [:one, Fabrication::Schematic.new(@klass1)]
|
133
|
-
@schematic2 = [:two, Fabrication::Schematic.new(@klass2)]
|
134
|
-
::Fabrication
|
132
|
+
@schematic1 = [:one, Fabrication::Schematic::Definition.new(@klass1)]
|
133
|
+
@schematic2 = [:two, Fabrication::Schematic::Definition.new(@klass2)]
|
134
|
+
allow(::Fabrication.manager).to receive(:schematics).and_return(Hash[[@schematic1, @schematic2]])
|
135
135
|
end
|
136
136
|
|
137
137
|
it '.factories should create one for each fabricator' do
|
138
|
-
Pickle::Adapter::Fabrication.
|
139
|
-
Pickle::Adapter::Fabrication.
|
138
|
+
expect(Pickle::Adapter::Fabrication).to receive(:new).with(@schematic1)
|
139
|
+
expect(Pickle::Adapter::Fabrication).to receive(:new).with(@schematic2)
|
140
140
|
|
141
141
|
Pickle::Adapter::Fabrication.factories
|
142
142
|
end
|
@@ -147,19 +147,19 @@ describe Pickle::Adapter do
|
|
147
147
|
end
|
148
148
|
|
149
149
|
it ".new should have name of schematic name" do
|
150
|
-
@factory.name.
|
150
|
+
expect(@factory.name).to eq('one')
|
151
151
|
end
|
152
152
|
|
153
153
|
it "should have klass of build_class" do
|
154
|
-
@factory.klass.
|
154
|
+
expect(@factory.klass).to eq(@klass1)
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|
158
158
|
describe ".create" do
|
159
159
|
it "returns the fabricated instance" do
|
160
160
|
@factory = Pickle::Adapter::Fabrication.new(@schematic1)
|
161
|
-
|
162
|
-
with(@factory.name.to_sym, {:
|
161
|
+
expect(Fabricate).to receive(:create).
|
162
|
+
with(@factory.name.to_sym, {:attribute => 'value'})
|
163
163
|
@factory.create({:attribute => 'value'})
|
164
164
|
end
|
165
165
|
end
|
@@ -167,7 +167,7 @@ describe Pickle::Adapter do
|
|
167
167
|
|
168
168
|
describe 'Machinist' do
|
169
169
|
before do
|
170
|
-
Pickle::Adapter::Machinist.
|
170
|
+
allow(Pickle::Adapter::Machinist).to receive(:model_classes).and_return([@klass1, @klass2, @klass3])
|
171
171
|
|
172
172
|
@klass1.blueprint {}
|
173
173
|
@klass3.blueprint {}
|
@@ -175,9 +175,9 @@ describe Pickle::Adapter do
|
|
175
175
|
end
|
176
176
|
|
177
177
|
it ".factories should create one for each master blueprint, and special case" do
|
178
|
-
Pickle::Adapter::Machinist.
|
179
|
-
Pickle::Adapter::Machinist.
|
180
|
-
Pickle::Adapter::Machinist.
|
178
|
+
expect(Pickle::Adapter::Machinist).to receive(:new).with(@klass1, :master).once
|
179
|
+
expect(Pickle::Adapter::Machinist).to receive(:new).with(@klass3, :master).once
|
180
|
+
expect(Pickle::Adapter::Machinist).to receive(:new).with(@klass3, :special).once
|
181
181
|
Pickle::Adapter::Machinist.factories
|
182
182
|
end
|
183
183
|
|
@@ -187,11 +187,11 @@ describe Pickle::Adapter do
|
|
187
187
|
end
|
188
188
|
|
189
189
|
it "should have underscored (s/_) name of Class as #name" do
|
190
|
-
@factory.name.
|
190
|
+
expect(@factory.name).to eq('one')
|
191
191
|
end
|
192
192
|
|
193
|
-
it "#create(attrs) should call Class.make(:master, attrs)" do
|
194
|
-
@klass1.
|
193
|
+
it "#create(attrs) should call Class.make!(:master, attrs)" do
|
194
|
+
expect(@klass1).to receive(:make!).with(:master, {:key => "val"})
|
195
195
|
@factory.create(:key => "val")
|
196
196
|
end
|
197
197
|
end
|
@@ -202,11 +202,11 @@ describe Pickle::Adapter do
|
|
202
202
|
end
|
203
203
|
|
204
204
|
it "should have 'special_<Class name>' as #name" do
|
205
|
-
@factory.name.
|
205
|
+
expect(@factory.name).to eq('special_three')
|
206
206
|
end
|
207
207
|
|
208
|
-
it "#create(attrs) should call Class.make(:special, attrs)" do
|
209
|
-
@klass3.
|
208
|
+
it "#create(attrs) should call Class.make!(:special, attrs)" do
|
209
|
+
expect(@klass3).to receive(:make!).with(:special, {:key => "val"})
|
210
210
|
@factory.create(:key => "val")
|
211
211
|
end
|
212
212
|
end
|
data/spec/pickle/config_spec.rb
CHANGED
@@ -6,11 +6,11 @@ describe Pickle::Config do
|
|
6
6
|
end
|
7
7
|
|
8
8
|
it "#adapters should default to :machinist, :factory_girl, :orm" do
|
9
|
-
@config.adapters.
|
9
|
+
expect(@config.adapters).to eq([:machinist, :factory_girl, :fabrication, :orm])
|
10
10
|
end
|
11
11
|
|
12
12
|
it "#adapter_classes should default to Adapter::Machinist, Adapter::FactoryGirl, Adapter::Orm" do
|
13
|
-
@config.adapter_classes.
|
13
|
+
expect(@config.adapter_classes).to eq([Pickle::Adapter::Machinist, Pickle::Adapter::FactoryGirl, Pickle::Adapter::Fabrication, Pickle::Adapter::Orm])
|
14
14
|
end
|
15
15
|
|
16
16
|
describe "setting adapters to [:machinist, SomeAdapter]" do
|
@@ -21,60 +21,60 @@ describe Pickle::Config do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it "#adapter_classes should be Adapter::Machinist, SomeAdapter" do
|
24
|
-
@config.adapter_classes.
|
24
|
+
expect(@config.adapter_classes).to eq([Pickle::Adapter::Machinist, SomeAdapter])
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
describe "#factories" do
|
29
29
|
it "should call adaptor.factories for each adaptor" do
|
30
|
-
Pickle::Adapter::Machinist.
|
31
|
-
Pickle::Adapter::FactoryGirl.
|
32
|
-
Pickle::Adapter::Fabrication.
|
33
|
-
Pickle::Adapter::Orm.
|
30
|
+
expect(Pickle::Adapter::Machinist).to receive(:factories).and_return([])
|
31
|
+
expect(Pickle::Adapter::FactoryGirl).to receive(:factories).and_return([])
|
32
|
+
expect(Pickle::Adapter::Fabrication).to receive(:factories).and_return([])
|
33
|
+
expect(Pickle::Adapter::Orm).to receive(:factories).and_return([])
|
34
34
|
@config.factories
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should aggregate factories into a hash using factory name as key" do
|
38
|
-
Pickle::Adapter::Machinist.
|
39
|
-
Pickle::Adapter::FactoryGirl.
|
40
|
-
Pickle::Adapter::Fabrication.
|
41
|
-
Pickle::Adapter::Orm.
|
42
|
-
@config.factories.
|
38
|
+
expect(Pickle::Adapter::Machinist).to receive(:factories).and_return([@machinist = double('machinist', :name => 'machinist')])
|
39
|
+
expect(Pickle::Adapter::FactoryGirl).to receive(:factories).and_return([@factory_girl = double('factory_girl', :name => 'factory_girl')])
|
40
|
+
expect(Pickle::Adapter::Fabrication).to receive(:factories).and_return([@fabrication = double('fabrication', :name => 'fabrication')])
|
41
|
+
expect(Pickle::Adapter::Orm).to receive(:factories).and_return([@orm = double('orm', :name => 'orm')])
|
42
|
+
expect(@config.factories).to eq({'machinist' => @machinist, 'factory_girl' => @factory_girl, 'fabrication' => @fabrication, 'orm' => @orm})
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should give preference to adaptors first in the list" do
|
46
|
-
Pickle::Adapter::Machinist.
|
47
|
-
Pickle::Adapter::FactoryGirl.
|
48
|
-
Pickle::Adapter::Fabrication.
|
49
|
-
Pickle::Adapter::Orm.
|
50
|
-
@config.factories.
|
46
|
+
expect(Pickle::Adapter::Machinist).to receive(:factories).and_return([@machinist_one = double('one', :name => 'one')])
|
47
|
+
expect(Pickle::Adapter::FactoryGirl).to receive(:factories).and_return([@factory_girl_one = double('one', :name => 'one'), @factory_girl_two = double('two', :name => 'two')])
|
48
|
+
expect(Pickle::Adapter::Fabrication).to receive(:factories).and_return([@fabrication_one = double('one', :name => 'one'), @fabrication_three = double('three', :name => 'three')])
|
49
|
+
expect(Pickle::Adapter::Orm).to receive(:factories).and_return([@orm_two = double('two', :name => 'two'), @orm_four = double('four', :name => 'four')])
|
50
|
+
expect(@config.factories).to eq({'one' => @machinist_one, 'two' => @factory_girl_two, 'three' => @fabrication_three, 'four' => @orm_four})
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
54
|
it "#mappings should default to []" do
|
55
|
-
@config.mappings.
|
55
|
+
expect(@config.mappings).to eq([])
|
56
56
|
end
|
57
57
|
|
58
58
|
describe '#predicates' do
|
59
59
|
it "should be list of all non object ? public instance methods + columns methods of Adapter.model_classes" do
|
60
|
-
class1 =
|
60
|
+
class1 = double('Class1',
|
61
61
|
:public_instance_methods => ['nope', 'foo?', 'bar?'],
|
62
62
|
:column_names => ['one', 'two'],
|
63
63
|
:const_get => ::ActiveRecord::Base::PickleAdapter
|
64
64
|
)
|
65
|
-
class2 =
|
65
|
+
class2 = double('Class2',
|
66
66
|
:public_instance_methods => ['not', 'foo?', 'faz?'],
|
67
67
|
:column_names => ['two', 'three'],
|
68
68
|
:const_get => ::ActiveRecord::Base::PickleAdapter
|
69
69
|
)
|
70
|
-
Pickle::Adapter.
|
70
|
+
allow(Pickle::Adapter).to receive(:model_classes).and_return([class1, class2])
|
71
71
|
|
72
|
-
@config.predicates.to_set.
|
72
|
+
expect(@config.predicates.to_set).to eq(['foo?', 'faz?', 'bar?', 'one', 'two', 'three'].to_set)
|
73
73
|
end
|
74
74
|
|
75
75
|
it "should be overridable" do
|
76
76
|
@config.predicates = %w(lame?)
|
77
|
-
@config.predicates.
|
77
|
+
expect(@config.predicates).to eq(%w(lame?))
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
@@ -85,9 +85,9 @@ describe Pickle::Config do
|
|
85
85
|
|
86
86
|
it "should create Mapping('foo', 'faz') mapping" do
|
87
87
|
@config.mappings.first.tap do |mapping|
|
88
|
-
mapping.
|
89
|
-
mapping.search.
|
90
|
-
mapping.replacement.
|
88
|
+
expect(mapping).to be_kind_of Pickle::Config::Mapping
|
89
|
+
expect(mapping.search).to eq('foo')
|
90
|
+
expect(mapping.replacement).to eq('faz')
|
91
91
|
end
|
92
92
|
end
|
93
93
|
end
|
@@ -98,13 +98,13 @@ describe Pickle::Config do
|
|
98
98
|
end
|
99
99
|
|
100
100
|
it "should create 2 mappings" do
|
101
|
-
@config.mappings.first.
|
102
|
-
@config.mappings.last.
|
101
|
+
expect(@config.mappings.first).to eq(Pickle::Config::Mapping.new('foo', 'faz'))
|
102
|
+
expect(@config.mappings.last).to eq(Pickle::Config::Mapping.new('bar', 'faz'))
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
106
106
|
it "#configure(&block) should execiute on self" do
|
107
|
-
@config.
|
107
|
+
expect(@config).to receive(:foo).with(:bar)
|
108
108
|
@config.configure do |c|
|
109
109
|
c.foo :bar
|
110
110
|
end
|
@@ -8,44 +8,44 @@ describe Pickle::Email::Parser do
|
|
8
8
|
|
9
9
|
describe "#match_email" do
|
10
10
|
it "should match 'the email'" do
|
11
|
-
'the email'.
|
11
|
+
expect('the email').to match(/^#{match_email}$/)
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should match 'the first email'" do
|
15
|
-
'the first email'.
|
15
|
+
expect('the first email').to match(/^#{match_email}$/)
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should match 'the last email'" do
|
19
|
-
'the last email'.
|
19
|
+
expect('the last email').to match(/^#{match_email}$/)
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should match 'the 3rd email'" do
|
23
|
-
'the 3rd email'.
|
23
|
+
expect('the 3rd email').to match(/^#{match_email}$/)
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should match 'an email'" do
|
27
|
-
'an email'.
|
27
|
+
expect('an email').to match(/^#{match_email}$/)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
it "#capture_email should just capture match_email" do
|
32
|
-
capture_email.
|
32
|
+
expect(capture_email).to eq("(#{match_email})")
|
33
33
|
end
|
34
34
|
|
35
35
|
describe "#capture_index_in_email" do
|
36
36
|
it "should extract the '2nd' from 'the 2nd email'" do
|
37
37
|
match = 'the 2nd email'.match(/^#{capture_index_in_email}$/)
|
38
|
-
match[1].
|
38
|
+
expect(match[1]).to eq('2nd')
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should extract nil from 'the email'" do
|
42
42
|
match = 'the email'.match(/^#{capture_index_in_email}$/)
|
43
|
-
match[1].
|
43
|
+
expect(match[1]).to eq(nil)
|
44
44
|
end
|
45
45
|
|
46
46
|
it "should extract the 'last' from 'the last email'" do
|
47
47
|
match = 'the last email'.match(/^#{capture_index_in_email}$/)
|
48
|
-
match[1].
|
48
|
+
expect(match[1]).to eq('last')
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
data/spec/pickle/email_spec.rb
CHANGED
@@ -10,17 +10,17 @@ describe Pickle::Email do
|
|
10
10
|
include Pickle::Email::Parser
|
11
11
|
|
12
12
|
before do
|
13
|
-
@email1 =
|
14
|
-
@email2 =
|
15
|
-
ActionMailer::Base.
|
13
|
+
@email1 = double("Email 1")
|
14
|
+
@email2 = double("Email 2")
|
15
|
+
allow(ActionMailer::Base).to receive(:deliveries).and_return([@email1, @email2])
|
16
16
|
if defined?(ActiveRecord::Base)
|
17
|
-
ActiveRecord::Base::PickleAdapter.
|
17
|
+
allow(ActiveRecord::Base::PickleAdapter).to receive(:model_classes).and_return([])
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
describe "#emails" do
|
22
22
|
it "should return ordered deliveries" do
|
23
|
-
emails.
|
23
|
+
expect(emails).to eq([@email1, @email2])
|
24
24
|
end
|
25
25
|
|
26
26
|
describe "(after)" do
|
@@ -29,38 +29,38 @@ describe Pickle::Email do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
it "#email('the email') should return the last delivery" do
|
32
|
-
email('the email').
|
32
|
+
expect(email('the email')).to eq(@email2)
|
33
33
|
end
|
34
34
|
|
35
35
|
it "#email('the 1st email') should return the first delivery" do
|
36
|
-
email('the 1st email').
|
36
|
+
expect(email('the 1st email')).to eq(@email1)
|
37
37
|
end
|
38
38
|
|
39
39
|
it "#email('the first email') should return the first delivery" do
|
40
|
-
email('the first email').
|
40
|
+
expect(email('the first email')).to eq(@email1)
|
41
41
|
end
|
42
42
|
|
43
43
|
it "#email('the 2nd email') should return the second delivery" do
|
44
|
-
email('the 2nd email').
|
44
|
+
expect(email('the 2nd email')).to eq(@email2)
|
45
45
|
end
|
46
46
|
|
47
47
|
it "#email('the last email') should return the second delivery" do
|
48
|
-
email('the last email').
|
48
|
+
expect(email('the last email')).to eq(@email2)
|
49
49
|
end
|
50
50
|
|
51
51
|
it "#email2('the 3rd email') should be nil" do
|
52
|
-
email('the 3rd email').
|
52
|
+
expect(email('the 3rd email')).to eq(nil)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
56
|
describe "when email1 is to fred & joe, and email2 is to joe" do
|
57
57
|
before do
|
58
|
-
@email1.
|
59
|
-
@email2.
|
58
|
+
allow(@email1).to receive(:to).and_return(['fred@gmail.com', 'joe@gmail.com'])
|
59
|
+
allow(@email2).to receive(:to).and_return('joe@gmail.com')
|
60
60
|
end
|
61
61
|
|
62
62
|
it "#emails('to: \"fred@gmail.com\"') should just return email1" do
|
63
|
-
emails('to: "fred@gmail.com"').
|
63
|
+
expect(emails('to: "fred@gmail.com"')).to eq([@email1])
|
64
64
|
end
|
65
65
|
|
66
66
|
describe "after #emails('to: \"fred@gmail.com\"')" do
|
@@ -69,35 +69,35 @@ describe Pickle::Email do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
it "#email('first') should be #email('last')" do
|
72
|
-
email('first email').
|
73
|
-
email('first email').
|
72
|
+
expect(email('first email')).to eq(email('last email'))
|
73
|
+
expect(email('first email')).to eq(@email1)
|
74
74
|
end
|
75
75
|
|
76
76
|
it "#email('the email', 'to: \"blah\") should be nil" do
|
77
|
-
email('the email', 'to: "blah"').
|
77
|
+
expect(email('the email', 'to: "blah"')).to eq(nil)
|
78
78
|
end
|
79
79
|
|
80
80
|
it "#email('the email', 'to: \"fred@gmail.com\") should be email1" do
|
81
|
-
email('the email', 'to: "fred@gmail.com"').
|
81
|
+
expect(email('the email', 'to: "fred@gmail.com"')).to eq(@email1)
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
85
|
it "#emails('to: \"joe@gmail.com\"') should return both emails" do
|
86
|
-
emails('to: "joe@gmail.com"').
|
86
|
+
expect(emails('to: "joe@gmail.com"')).to eq([@email1, @email2])
|
87
87
|
end
|
88
88
|
|
89
89
|
describe "and emails have subjects 'email1', 'email2'" do
|
90
90
|
before do
|
91
|
-
@email1.
|
92
|
-
@email2.
|
91
|
+
allow(@email1).to receive(:subject).and_return('email1')
|
92
|
+
allow(@email2).to receive(:subject).and_return('email2')
|
93
93
|
end
|
94
94
|
|
95
95
|
it "#emails('to: \"joe@gmail.com\", subject: \"email1\"') should return email1" do
|
96
|
-
emails('to: "joe@gmail.com", subject: "email1"').
|
96
|
+
expect(emails('to: "joe@gmail.com", subject: "email1"')).to eq([@email1])
|
97
97
|
end
|
98
98
|
|
99
99
|
it "#emails('to: \"fred@gmail.com\", subject: \"email2\"') should return empty array" do
|
100
|
-
emails('to: "fred@gmail.com", subject: "email2"').
|
100
|
+
expect(emails('to: "fred@gmail.com", subject: "email2"')).to eq([])
|
101
101
|
end
|
102
102
|
end
|
103
103
|
end
|
@@ -105,14 +105,14 @@ describe Pickle::Email do
|
|
105
105
|
|
106
106
|
describe "#save_and_open_emails" do
|
107
107
|
before do
|
108
|
-
|
109
|
-
|
108
|
+
allow(self).to receive(:open_in_browser)
|
109
|
+
allow(self).to receive(:emails).and_return(["Contents of Email 1"])
|
110
110
|
@now = "2008-01-01".to_time
|
111
|
-
Time.
|
111
|
+
allow(Time).to receive(:now).and_return(@now)
|
112
112
|
end
|
113
113
|
|
114
114
|
it "should call #emails to get emails" do
|
115
|
-
|
115
|
+
expect(self).to receive(:emails).and_return([])
|
116
116
|
save_and_open_emails
|
117
117
|
end
|
118
118
|
|
@@ -120,47 +120,47 @@ describe Pickle::Email do
|
|
120
120
|
before { @emails = [] }
|
121
121
|
|
122
122
|
it "should not call #emails" do
|
123
|
-
|
123
|
+
expect(self).not_to receive(:emails)
|
124
124
|
save_and_open_emails
|
125
125
|
end
|
126
126
|
end
|
127
127
|
|
128
128
|
it "should create a file in Rails/tmp with the emails in it" do
|
129
129
|
save_and_open_emails
|
130
|
-
File.read("pickle-email-#{@now.to_i}.html").
|
130
|
+
expect(File.read("pickle-email-#{@now.to_i}.html")).to eq("<h1>Email 1</h1><pre>Contents of Email 1</pre><hr />")
|
131
131
|
end
|
132
132
|
|
133
133
|
it "should call open_in_browser on created tmp file" do
|
134
|
-
|
134
|
+
expect(self).to receive(:open_in_browser).with("pickle-email-#{@now.to_i}.html")
|
135
135
|
save_and_open_emails
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
139
139
|
describe "following links in emails" do
|
140
140
|
before do
|
141
|
-
|
142
|
-
@email1.
|
141
|
+
allow(self).to receive(:open_in_browser)
|
142
|
+
allow(@email1).to receive(:body).and_return('some text <a href="http://example.com/page">example page</a> more text')
|
143
143
|
end
|
144
144
|
|
145
145
|
it "should find a link for http://example.com/page" do
|
146
|
-
|
146
|
+
expect(self).to receive(:visit).with('http://example.com/page')
|
147
147
|
visit_in_email(@email1, 'http://example.com/page')
|
148
148
|
end
|
149
149
|
|
150
150
|
it "should find a link for \"example page\"" do
|
151
|
-
|
151
|
+
expect(self).to receive(:visit).with('http://example.com/page')
|
152
152
|
visit_in_email(@email1, 'example page')
|
153
153
|
end
|
154
154
|
|
155
155
|
it "should follow the first link in an email" do
|
156
|
-
|
156
|
+
expect(self).to receive(:visit).with('http://example.com/page')
|
157
157
|
click_first_link_in_email(@email1)
|
158
158
|
end
|
159
159
|
|
160
160
|
it "should not raise an error when the email body is not a string, but needs to_s [#26]" do
|
161
|
-
|
162
|
-
@email1.
|
163
|
-
|
161
|
+
allow(self).to receive(:visit)
|
162
|
+
allow(@email1).to receive(:body).and_return(:a_string_body)
|
163
|
+
expect { click_first_link_in_email(@email1) }.not_to raise_error
|
164
164
|
end
|
165
165
|
end
|
166
166
|
end
|