factory_girl_remote_strategy 0.0.8 → 0.0.9

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.
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.