factory_girl_remote_strategy 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1bd2d2572ab0367269268716ba1a455f7a2fd60d
4
- data.tar.gz: f9331007bf708479bbc1d105e3828003097c055a
3
+ metadata.gz: 21f90569049c4f8d008001aa7c40efafd2b39a02
4
+ data.tar.gz: 725032e1c2b679209979bb677c692cdb63343f83
5
5
  SHA512:
6
- metadata.gz: 49f8a43abee55530a7b84c1f3182e9818d0bb66d253ea47e611f34917e38dc27a1dcc4b10a4dd3dd2831ff5c50ed95d151aae2b356eb6e596edf813feff0e634
7
- data.tar.gz: fac74153c6c9f41b5f8ee14ecaa557ea88e21d6f31255bb1b037a8699e7457af55a75bda907db92301f3655e56ca5f858f6e7dde882dc2e98b6f033d9c0a8785
6
+ metadata.gz: 830e4ca93da006123847430bb2660c11eeab35ff68f2d377c0aca772a30d5847219d6a101c140b1881ea3038562d5820b74a4a4c58a87aaa2ca0ddf20fb3cbe2
7
+ data.tar.gz: 0818258efe070db446ab90cf99797351c3863075bcecc3a63f8c842e091d3589ad27c3eb36c836be5943951930b9f559f0b00068e480a81560be2ac43d24b344
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # factory_girl_remote_strategy
2
2
 
3
3
  FactoryGirl strategy for ActiveResource models.
4
+ Stubs remote HTTP requests with [WebMock](https://github.com/bblimke/webmock) or [FakeWeb](https://github.com/chrisk/fakeweb)
4
5
 
5
6
  ## Installation
6
7
 
@@ -16,9 +17,27 @@ Or install it yourself as:
16
17
 
17
18
  $ gem install factory_girl_remote_strategy
18
19
 
19
- ## Usage
20
+ ## Usage with WebMock and RSpec
20
21
 
21
- TODO: Write usage instructions here
22
+ Add this in `spec/spec_helper.rb`
23
+
24
+ ```ruby
25
+ require 'webmock/rspec'
26
+ WebMock.disable_net_connect!(allow_localhost: true)
27
+ FactoryGirl::RemoteStrategy.stub_requests_with :webmock
28
+ ```
29
+
30
+ If you do not use RSpec for more info please see [WebMock README](https://github.com/bblimke/webmock)
31
+
32
+ ## Usage with FakeWeb
33
+
34
+ Add this in the helper method for your tests suite (for RSpec `spec/spec_helper.rb`)
35
+
36
+ ```ruby
37
+ require 'fakeweb'
38
+ FakeWeb.allow_net_connect = false
39
+ FactoryGirl::RemoteStrategy.stub_requests_with :fakeweb
40
+ ```
22
41
 
23
42
  ## Contributing
24
43
 
@@ -27,3 +46,10 @@ TODO: Write usage instructions here
27
46
  3. Commit your changes (`git commit -am 'Add some feature'`)
28
47
  4. Push to the branch (`git push origin my-new-feature`)
29
48
  5. Create new Pull Request
49
+
50
+ ## Testing
51
+
52
+ ```ruby
53
+ LIBRARY=webmock rspec
54
+ LIBRARY=fakeweb rspec
55
+ ```
@@ -21,8 +21,9 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "activesupport", '>= 3.2'
22
22
  spec.add_dependency "activeresource", '>= 3.2'
23
23
  spec.add_dependency "factory_girl"
24
- spec.add_dependency "fakeweb"
25
24
  spec.add_development_dependency "bundler", "~> 1.5"
26
25
  spec.add_development_dependency "rake"
27
26
  spec.add_development_dependency "rspec"
27
+ spec.add_development_dependency "webmock"
28
+ spec.add_development_dependency "fakeweb"
28
29
  end
@@ -23,8 +23,8 @@ module FactoryGirl
23
23
 
24
24
  def result(evaluation)
25
25
  @strategy.result(evaluation).tap do |e|
26
- FakeWeb.register_uri(:get, self.class.entity_url(e), body: self.class.entity_hash(e).to_json)
27
- FakeWeb.register_uri(:put, self.class.entity_url(e), body: self.class.entity_hash(e).to_json)
26
+ self.class.register_request(:get, self.class.entity_url(e), body: self.class.entity_hash(e).to_json)
27
+ self.class.register_request(:put, self.class.entity_url(e), body: self.class.entity_hash(e).to_json)
28
28
  remote_search(e, search: { :"#{e.class.primary_key}_eq" => e.public_send(e.class.primary_key) })
29
29
  remote_search(e, search: { :"#{e.class.primary_key}_in" => [e.public_send(e.class.primary_key)] })
30
30
  evaluation.notify(:after_remote, e) # runs after(:remote) callback
@@ -66,6 +66,23 @@ module FactoryGirl
66
66
  def collection_url(collection, params = {})
67
67
  (collection.first.is_a?(Class) ? collection.first : collection.first.class).instance_eval { "#{site}#{prefix}#{collection_name}.json#{'?' if params.any?}#{params.to_query}" }
68
68
  end
69
+
70
+ def stub_requests_with(library)
71
+ library = library.to_s
72
+ raise ArgumentError, "Unknown library '#{library}', please try :webmock or :fakeweb" unless %w(webmock fakeweb).include?(library)
73
+ require library
74
+ @@library = library.to_sym
75
+ rescue LoadError
76
+ worn "WARNING: gem '#{library}' is not installed"
77
+ end
78
+
79
+ def register_request(http_method, uri, options)
80
+ if @@library == :fakeweb
81
+ FakeWeb.register_uri(http_method, uri, options)
82
+ else
83
+ WebMock.stub_request(http_method, uri).to_return(options)
84
+ end
85
+ end
69
86
  end
70
87
  end
71
88
 
@@ -74,7 +91,7 @@ module FactoryGirl
74
91
  @strategy.result(evaluation).tap do |e|
75
92
  body = { errors: [{ code: 'resource_not_found',
76
93
  message: "Couldn't find #{e.class} with #{e.class.primary_key}=#{e.public_send(e.class.primary_key)}" } ] }.to_json
77
- FakeWeb.register_uri(:get, self.class.entity_url(e), body: body, status: 404)
94
+ self.class.register_request(:get, self.class.entity_url(e), body: body, status: 404)
78
95
  remote_search(e.class, search: { :"#{e.class.primary_key}_eq" => e.public_send(e.class.primary_key) }) # empty search
79
96
  remote_search(e.class, search: { :"#{e.class.primary_key}_in" => [e.public_send(e.class.primary_key)] }) # empty search
80
97
  end
@@ -91,6 +108,6 @@ FactoryGirl.register_strategy(:remote_not_found, FactoryGirl::RemoteNotFoundStra
91
108
  def remote_search(*args)
92
109
  params = args.extract_options!
93
110
  collection = args.flatten
94
- FakeWeb.register_uri(:get, FactoryGirl::RemoteStrategy.collection_url(collection, params),
111
+ ::FactoryGirl::RemoteStrategy.register_request(:get, FactoryGirl::RemoteStrategy.collection_url(collection, params),
95
112
  body: (collection.first.is_a?(Class) ? "[]" : collection.map { |e| FactoryGirl::RemoteStrategy.entity_hash(e, params) }.to_json))
96
113
  end
@@ -1,3 +1,3 @@
1
1
  module FactoryGirlRemoteStrategy
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -14,7 +14,7 @@ describe FactoryGirl::RemoteStrategy do
14
14
  FactoryGirl.remote(:incident, id: 1)
15
15
  expect { Incident.find(1) }.not_to raise_error
16
16
  incident = Incident.find(1)
17
- incident.should be_kind_of Incident
17
+ expect(incident).to be_kind_of Incident
18
18
  end
19
19
  end
20
20
 
@@ -25,24 +25,24 @@ describe FactoryGirl::RemoteStrategy do
25
25
  it "remote associations are added to response json" do
26
26
  FactoryGirl.remote(:incident, id: 3, victims: victims)
27
27
  incident = Incident.find(3)
28
- incident.victims.should be_kind_of Array
29
- incident.victims.first.should be_kind_of Victim
28
+ expect(incident.victims).to be_kind_of Array
29
+ expect(incident.victims.first).to be_kind_of Victim
30
30
  end
31
31
 
32
32
  it "allows to create has_many association with <assotiation(s)>_ids option" do
33
33
  FactoryGirl.remote(:incident, id: 4, victim_ids: [2, 3])
34
34
  incident = Incident.find(4)
35
- incident.victims.should be_kind_of Array
36
- incident.victims.first.should be_kind_of Victim
35
+ expect(incident.victims).to be_kind_of Array
36
+ expect(incident.victims.first).to be_kind_of Victim
37
37
 
38
38
  expect { Victim.find(2) }.not_to raise_error
39
39
  victim = Victim.find(2)
40
- victim.should eq incident.victims.first
40
+ expect(victim).to eq incident.victims.first
41
41
  end
42
42
 
43
43
  it "belongs_to association id is added to response json" do
44
44
  membership = FactoryGirl.remote(:membership, group: group)
45
- membership.group_id.should == group.id
45
+ expect(membership.group_id).to eq(group.id)
46
46
  end
47
47
  end
48
48
 
@@ -51,7 +51,7 @@ describe FactoryGirl::RemoteStrategy do
51
51
  incident = FactoryGirl.remote(:incident, reported_by: 4)
52
52
  expect { User.find(4) }.not_to raise_error
53
53
  user = User.find(4)
54
- user.should be_kind_of User
54
+ expect(user).to be_kind_of User
55
55
  end
56
56
  end
57
57
 
@@ -60,15 +60,15 @@ describe FactoryGirl::RemoteStrategy do
60
60
  remote_search FactoryGirl.remote_list(:membership, 2), search: { premises_id_in: [4] }
61
61
  expect { Membership.find(:all, params: { search: { premises_id_in: [4] } }) }.not_to raise_error
62
62
  memberships = Membership.find(:all, params: { search: { premises_id_in: [4] } }).to_a
63
- memberships.should be_kind_of Array
64
- memberships.first.should be_kind_of Membership
63
+ expect(memberships).to be_kind_of Array
64
+ expect(memberships.first).to be_kind_of Membership
65
65
  end
66
66
 
67
67
  it "registers search url of empty collection if provided model class (no first element)" do
68
68
  remote_search Membership, search: { premises_id_in: [4] }
69
69
  expect { Membership.find(:all, params: { search: { premises_id_in: [4] } }) }.not_to raise_error
70
70
  memberships = Membership.find(:all, params: { search: { premises_id_in: [4] } }).to_a
71
- memberships.should eq []
71
+ expect(memberships).to eq []
72
72
  end
73
73
 
74
74
  context "standard ActiveResource JSON formatter with included root" do
@@ -90,13 +90,13 @@ describe FactoryGirl::RemoteStrategy do
90
90
  it "registers search url for equality <primary_key>_eq = <value>" do
91
91
  expect { User.find(:first, params: { search: { id_eq: 4 } }) }.not_to raise_error
92
92
  user = User.find(:first, params: { search: { id_eq: 4 } })
93
- user.id.should == 4
93
+ expect(user.id).to eq(4)
94
94
  end
95
95
 
96
96
  it "registers search url for inclusion <primary_key>_in [<value>]" do
97
97
  expect { User.find(:first, params: { search: { id_in: [4] } }) }.not_to raise_error
98
98
  user = User.find(:first, params: { search: { id_in: [4] } })
99
- user.id.should == 4
99
+ expect(user.id).to eq(4)
100
100
  end
101
101
  end
102
102
 
@@ -106,13 +106,13 @@ describe FactoryGirl::RemoteStrategy do
106
106
  it "registers search url for equality <primary_key>_eq = <value>" do
107
107
  expect { Postcode.find(:first, params: { search: { code_eq: 'ABCD' } }) }.not_to raise_error
108
108
  postcode = Postcode.find(:first, params: { search: { code_eq: 'ABCD' } })
109
- postcode.code.should == 'ABCD'
109
+ expect(postcode.code).to eq('ABCD')
110
110
  end
111
111
 
112
112
  it "registers search url for inclusion <primary_key>_in [<value>]" do
113
113
  expect { Postcode.find(:first, params: { search: { code_in: ['ABCD'] } }) }.not_to raise_error
114
114
  postcode = Postcode.find(:first, params: { search: { code_in: ['ABCD'] } })
115
- postcode.code.should == 'ABCD'
115
+ expect(postcode.code).to eq('ABCD')
116
116
  end
117
117
  end
118
118
  end
@@ -122,8 +122,8 @@ describe FactoryGirl::RemoteStrategy do
122
122
  FactoryGirl.remote(:postcode, code: 'FGH')
123
123
  expect { Postcode.find('FGH') }.not_to raise_error
124
124
  postcode = Postcode.find('FGH')
125
- postcode.should be_kind_of Postcode
126
- postcode.code.should == 'FGH'
125
+ expect(postcode).to be_kind_of Postcode
126
+ expect(postcode.code).to eq('FGH')
127
127
  end
128
128
  end
129
129
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,13 @@
1
- require "factory_girl_remote_strategy"
2
- require "fakeweb"
3
-
4
- FakeWeb.allow_net_connect = false
1
+ require 'factory_girl_remote_strategy'
2
+ ENV['LIBRARY'] ||= 'webmock'
3
+ puts "HTTP requests are stabbed with library #{ENV['LIBRARY']}"
4
+ FactoryGirl::RemoteStrategy.stub_requests_with ENV['LIBRARY']
5
+ if ENV['LIBRARY'] == 'webmock'
6
+ require 'webmock/rspec'
7
+ WebMock.disable_net_connect!(allow_localhost: true)
8
+ else
9
+ FakeWeb.allow_net_connect = false
10
+ end
5
11
 
6
12
  FactoryGirl.find_definitions
7
13
 
metadata CHANGED
@@ -1,111 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_girl_remote_strategy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Avoyants
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-08 00:00:00.000000000 Z
11
+ date: 2016-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activeresource
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '3.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: factory_girl
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: fakeweb
56
+ name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.5'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.5'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
62
- type: :runtime
76
+ type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - '>='
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
- name: bundler
84
+ name: rspec
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ~>
87
+ - - ">="
74
88
  - !ruby/object:Gem::Version
75
- version: '1.5'
89
+ version: '0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ~>
94
+ - - ">="
81
95
  - !ruby/object:Gem::Version
82
- version: '1.5'
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: rake
98
+ name: webmock
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - '>='
101
+ - - ">="
88
102
  - !ruby/object:Gem::Version
89
103
  version: '0'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - '>='
108
+ - - ">="
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: rspec
112
+ name: fakeweb
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
- - - '>='
115
+ - - ">="
102
116
  - !ruby/object:Gem::Version
103
117
  version: '0'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
- - - '>='
122
+ - - ">="
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  description: FactoryGirl strategy for ActiveResource models.
@@ -115,8 +129,8 @@ executables: []
115
129
  extensions: []
116
130
  extra_rdoc_files: []
117
131
  files:
118
- - .gitignore
119
- - .rspec
132
+ - ".gitignore"
133
+ - ".rspec"
120
134
  - Gemfile
121
135
  - LICENSE.txt
122
136
  - README.md
@@ -152,17 +166,17 @@ require_paths:
152
166
  - lib
153
167
  required_ruby_version: !ruby/object:Gem::Requirement
154
168
  requirements:
155
- - - '>='
169
+ - - ">="
156
170
  - !ruby/object:Gem::Version
157
171
  version: '0'
158
172
  required_rubygems_version: !ruby/object:Gem::Requirement
159
173
  requirements:
160
- - - '>='
174
+ - - ">="
161
175
  - !ruby/object:Gem::Version
162
176
  version: '0'
163
177
  requirements: []
164
178
  rubyforge_project:
165
- rubygems_version: 2.2.2
179
+ rubygems_version: 2.4.8
166
180
  signing_key:
167
181
  specification_version: 4
168
182
  summary: FactoryGirl strategy for ActiveResource models.