restify 1.15.2 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -2
  3. data/README.md +23 -31
  4. data/doc/file.README.html +192 -0
  5. data/lib/restify/adapter/base.rb +4 -0
  6. data/lib/restify/adapter/telemetry.rb +54 -0
  7. data/lib/restify/adapter/typhoeus.rb +37 -4
  8. data/lib/restify/context.rb +3 -3
  9. data/lib/restify/error.rb +2 -2
  10. data/lib/restify/link.rb +4 -4
  11. data/lib/restify/processors/base/parsing.rb +2 -21
  12. data/lib/restify/processors/base.rb +1 -1
  13. data/lib/restify/promise.rb +2 -2
  14. data/lib/restify/registry.rb +1 -1
  15. data/lib/restify/relation.rb +45 -17
  16. data/lib/restify/request.rb +6 -6
  17. data/lib/restify/timeout.rb +2 -2
  18. data/lib/restify/version.rb +3 -3
  19. data/lib/restify.rb +0 -1
  20. data/spec/restify/cache_spec.rb +16 -12
  21. data/spec/restify/context_spec.rb +8 -3
  22. data/spec/restify/error_spec.rb +13 -16
  23. data/spec/restify/features/head_requests_spec.rb +5 -4
  24. data/spec/restify/features/opentelemetry_spec.rb +46 -0
  25. data/spec/restify/features/request_bodies_spec.rb +8 -8
  26. data/spec/restify/features/request_errors_spec.rb +2 -2
  27. data/spec/restify/features/request_headers_spec.rb +3 -6
  28. data/spec/restify/features/response_errors_spec.rb +1 -1
  29. data/spec/restify/features/webmock_spec.rb +27 -0
  30. data/spec/restify/global_spec.rb +10 -10
  31. data/spec/restify/processors/base_spec.rb +6 -7
  32. data/spec/restify/processors/json_spec.rb +21 -62
  33. data/spec/restify/processors/msgpack_spec.rb +33 -70
  34. data/spec/restify/promise_spec.rb +31 -31
  35. data/spec/restify/registry_spec.rb +5 -7
  36. data/spec/restify/relation_spec.rb +185 -7
  37. data/spec/restify/resource_spec.rb +47 -53
  38. data/spec/restify/timeout_spec.rb +3 -3
  39. data/spec/restify_spec.rb +12 -73
  40. data/spec/spec_helper.rb +12 -15
  41. data/spec/support/opentelemetry.rb +29 -0
  42. data/spec/support/stub_server.rb +4 -0
  43. metadata +37 -64
  44. data/lib/restify/adapter/em.rb +0 -134
  45. data/lib/restify/adapter/pooled_em.rb +0 -269
@@ -4,31 +4,30 @@ require 'spec_helper'
4
4
 
5
5
  describe Restify::Processors::Json do
6
6
  let(:context) { Restify::Context.new('http://test.host/') }
7
- let(:response) { double 'response' }
7
+ let(:response) { instance_double(Restify::Response) }
8
8
 
9
9
  before do
10
- allow(response).to receive(:links).and_return []
11
- allow(response).to receive(:follow_location).and_return nil
10
+ allow(response).to receive_messages(links: [], follow_location: nil)
12
11
  end
13
12
 
14
13
  describe 'class' do
15
14
  describe '#accept?' do
16
- subject { described_class.accept? response }
15
+ subject(:accept) { described_class.accept?(response) }
17
16
 
18
17
  it 'accepts JSON mime type (I)' do
19
- expect(response).to receive(:content_type).and_return('application/json')
20
- expect(subject).to be_truthy
18
+ allow(response).to receive(:content_type).and_return('application/json')
19
+ expect(accept).to be_truthy
21
20
  end
22
21
 
23
22
  it 'accepts JSON mime type (II)' do
24
- expect(response).to receive(:content_type).and_return('application/json; abc')
25
- expect(subject).to be_truthy
23
+ allow(response).to receive(:content_type).and_return('application/json; abc')
24
+ expect(accept).to be_truthy
26
25
  end
27
26
  end
28
27
  end
29
28
 
30
29
  describe '#resource' do
31
- subject { described_class.new(context, response).resource }
30
+ subject(:resource) { described_class.new(context, response).resource }
32
31
 
33
32
  before { allow(response).to receive(:body).and_return(body) }
34
33
 
@@ -41,7 +40,7 @@ describe Restify::Processors::Json do
41
40
  end
42
41
 
43
42
  it { is_expected.to be_a Restify::Resource }
44
- it { expect(subject.response).to be response }
43
+ it { expect(resource.response).to be response }
45
44
  it { is_expected.to eq 'json' => 'value' }
46
45
  end
47
46
 
@@ -53,12 +52,12 @@ describe Restify::Processors::Json do
53
52
  end
54
53
 
55
54
  it do
56
- expect(subject).to eq \
55
+ expect(resource).to eq \
57
56
  'json' => 'value', 'search_url' => 'https://google.com{?q}'
58
57
  end
59
58
 
60
59
  it { is_expected.to have_relation :search }
61
- it { expect(subject.relation(:search)).to eq 'https://google.com{?q}' }
60
+ it { expect(resource.relation(:search)).to eq 'https://google.com{?q}' }
62
61
  end
63
62
 
64
63
  context 'object with implicit self relation' do
@@ -68,7 +67,7 @@ describe Restify::Processors::Json do
68
67
  JSON
69
68
  end
70
69
 
71
- it { expect(subject.relation(:self)).to eq '/self' }
70
+ it { expect(resource.relation(:self)).to eq '/self' }
72
71
  end
73
72
 
74
73
  context 'single array' do
@@ -79,7 +78,7 @@ describe Restify::Processors::Json do
79
78
  end
80
79
 
81
80
  it { is_expected.to be_a Restify::Resource }
82
- it { expect(subject.response).to be response }
81
+ it { expect(resource.response).to be response }
83
82
  it { is_expected.to eq [1, 2, nil, 'STR'] }
84
83
  end
85
84
 
@@ -102,11 +101,11 @@ describe Restify::Processors::Json do
102
101
  end
103
102
 
104
103
  it 'parses objects as resources' do
105
- expect(subject).to all(be_a(Restify::Resource))
104
+ expect(resource).to all(be_a(Restify::Resource))
106
105
  end
107
106
 
108
107
  it 'parses relations of resources' do
109
- expect(subject.map {|r| r.relation :self }).to eq \
108
+ expect(resource.map {|r| r.relation :self }).to eq \
110
109
  ['/users/john', '/users/jane']
111
110
  end
112
111
  end
@@ -120,14 +119,14 @@ describe Restify::Processors::Json do
120
119
  end
121
120
 
122
121
  it { is_expected.to be_a Restify::Resource }
123
- it { expect(subject.response).to be response }
122
+ it { expect(resource.response).to be response }
124
123
 
125
124
  it 'parses objects as resources' do
126
- expect(subject['john']).to be_a Restify::Resource
127
- expect(subject['jane']).to be_a Restify::Resource
125
+ expect(resource['john']).to be_a Restify::Resource
126
+ expect(resource['jane']).to be_a Restify::Resource
128
127
 
129
- expect(subject['john']['name']).to eq 'John'
130
- expect(subject['jane']['name']).to eq 'Jane'
128
+ expect(resource['john']['name']).to eq 'John'
129
+ expect(resource['jane']['name']).to eq 'Jane'
131
130
  end
132
131
  end
133
132
 
@@ -139,49 +138,9 @@ describe Restify::Processors::Json do
139
138
  end
140
139
 
141
140
  it { is_expected.to be_a Restify::Resource }
142
- it { expect(subject.response).to be response }
141
+ it { expect(resource.response).to be response }
143
142
  it { is_expected.to eq 'BLUB' }
144
143
  end
145
-
146
- context 'with indifferent access' do
147
- let(:body) do
148
- <<-JSON
149
- {"name": "John", "age": 24}
150
- JSON
151
- end
152
-
153
- it '#key?' do
154
- expect(subject).to have_key 'name'
155
- expect(subject).to have_key 'age'
156
-
157
- expect(subject).to have_key :name
158
- expect(subject).to have_key :age
159
- end
160
-
161
- it '#[]' do
162
- expect(subject['name']).to eq 'John'
163
- expect(subject['age']).to eq 24
164
-
165
- expect(subject[:name]).to eq 'John'
166
- expect(subject[:age]).to eq 24
167
- end
168
- end
169
-
170
- context 'with method getter access' do
171
- let(:body) do
172
- <<-JSON
173
- {"name": "John", "age": 24}
174
- JSON
175
- end
176
-
177
- it '#<method getter>' do
178
- expect(subject).to respond_to :name
179
- expect(subject).to respond_to :age
180
-
181
- expect(subject.name).to eq 'John'
182
- expect(subject.age).to eq 24
183
- end
184
- end
185
144
  end
186
145
  end
187
146
  end
@@ -4,95 +4,94 @@ require 'spec_helper'
4
4
 
5
5
  describe Restify::Processors::Msgpack do
6
6
  let(:context) { Restify::Context.new('http://test.host/') }
7
- let(:response) { double 'response' }
7
+ let(:response) { instance_double(Restify::Response) }
8
8
 
9
9
  before do
10
- allow(response).to receive(:links).and_return []
11
- allow(response).to receive(:follow_location).and_return nil
10
+ allow(response).to receive_messages(links: [], follow_location: nil)
12
11
  end
13
12
 
14
13
  describe 'class' do
15
14
  describe '#accept?' do
16
- subject { described_class.accept? response }
15
+ subject(:accept) { described_class.accept?(response) }
17
16
 
18
17
  it 'accepts msgpack mime type (I)' do
19
- expect(response).to receive(:content_type).and_return('application/msgpack')
20
- expect(subject).to be_truthy
18
+ allow(response).to receive(:content_type).and_return('application/msgpack')
19
+ expect(accept).to be_truthy
21
20
  end
22
21
 
23
22
  it 'accepts msgpack mime type (II)' do
24
- expect(response).to receive(:content_type).and_return('application/msgpack; abc')
25
- expect(subject).to be_truthy
23
+ allow(response).to receive(:content_type).and_return('application/msgpack; abc')
24
+ expect(accept).to be_truthy
26
25
  end
27
26
 
28
27
  it 'accepts x-msgpack mime type (I)' do
29
- expect(response).to receive(:content_type).and_return('application/x-msgpack')
30
- expect(subject).to be_truthy
28
+ allow(response).to receive(:content_type).and_return('application/x-msgpack')
29
+ expect(accept).to be_truthy
31
30
  end
32
31
 
33
32
  it 'accepts x-msgpack mime type (II)' do
34
- expect(response).to receive(:content_type).and_return('application/x-msgpack; abc')
35
- expect(subject).to be_truthy
33
+ allow(response).to receive(:content_type).and_return('application/x-msgpack; abc')
34
+ expect(accept).to be_truthy
36
35
  end
37
36
  end
38
37
  end
39
38
 
40
39
  describe '#resource' do
41
- subject { described_class.new(context, response).resource }
40
+ subject(:resource) { described_class.new(context, response).resource }
42
41
 
43
42
  before { allow(response).to receive(:body).and_return(body) }
44
43
 
45
44
  describe 'parsing' do
46
45
  context 'single object' do
47
46
  let(:body) do
48
- ::MessagePack.dump('msg' => 'value')
47
+ MessagePack.dump('msg' => 'value')
49
48
  end
50
49
 
51
50
  it { is_expected.to be_a Restify::Resource }
52
- it { expect(subject.response).to be response }
51
+ it { expect(resource.response).to be response }
53
52
  it { is_expected.to eq 'msg' => 'value' }
54
53
  end
55
54
 
56
55
  context 'object with relation fields' do
57
56
  let(:body) do
58
- ::MessagePack.dump(
57
+ MessagePack.dump(
59
58
  'msg' => 'value',
60
59
  'search_url' => 'https://google.com{?q}',
61
60
  )
62
61
  end
63
62
 
64
63
  it do
65
- expect(subject).to eq \
64
+ expect(resource).to eq \
66
65
  'msg' => 'value', 'search_url' => 'https://google.com{?q}'
67
66
  end
68
67
 
69
68
  it { is_expected.to have_relation :search }
70
- it { expect(subject.relation(:search)).to eq 'https://google.com{?q}' }
69
+ it { expect(resource.relation(:search)).to eq 'https://google.com{?q}' }
71
70
  end
72
71
 
73
72
  context 'object with implicit self relation' do
74
73
  let(:body) do
75
- ::MessagePack.dump(
74
+ MessagePack.dump(
76
75
  'url' => '/self',
77
76
  )
78
77
  end
79
78
 
80
- it { expect(subject.relation(:self)).to eq '/self' }
79
+ it { expect(resource.relation(:self)).to eq '/self' }
81
80
  end
82
81
 
83
82
  context 'single array' do
84
83
  let(:body) do
85
- ::MessagePack.dump([1, 2, nil, 'STR'])
84
+ MessagePack.dump([1, 2, nil, 'STR'])
86
85
  end
87
86
 
88
87
  it { is_expected.to be_a Restify::Resource }
89
- it { expect(subject.response).to be response }
88
+ it { expect(resource.response).to be response }
90
89
  it { is_expected.to eq [1, 2, nil, 'STR'] }
91
90
  end
92
91
 
93
92
  context 'array with objects' do
94
93
  let(:body) do
95
- ::MessagePack.dump([{'a' => 0}, {'b' => 1}])
94
+ MessagePack.dump([{'a' => 0}, {'b' => 1}])
96
95
  end
97
96
 
98
97
  it { is_expected.to eq [{'a' => 0}, {'b' => 1}] }
@@ -100,87 +99,51 @@ describe Restify::Processors::Msgpack do
100
99
 
101
100
  context 'array with resources' do
102
101
  let(:body) do
103
- ::MessagePack.dump([
102
+ MessagePack.dump([
104
103
  {'name' => 'John', 'self_url' => '/users/john'},
105
104
  {'name' => 'Jane', 'self_url' => '/users/jane'},
106
105
  ])
107
106
  end
108
107
 
109
108
  it 'parses objects as resources' do
110
- expect(subject).to all(be_a(Restify::Resource))
109
+ expect(resource).to all(be_a(Restify::Resource))
111
110
  end
112
111
 
113
112
  it 'parses relations of resources' do
114
- expect(subject.map {|r| r.relation :self }).to eq \
113
+ expect(resource.map {|r| r.relation :self }).to eq \
115
114
  ['/users/john', '/users/jane']
116
115
  end
117
116
  end
118
117
 
119
118
  context 'nested objects' do
120
119
  let(:body) do
121
- ::MessagePack.dump(
120
+ MessagePack.dump(
122
121
  'john' => {'name' => 'John'},
123
122
  'jane' => {'name' => 'Jane'},
124
123
  )
125
124
  end
126
125
 
127
126
  it { is_expected.to be_a Restify::Resource }
128
- it { expect(subject.response).to be response }
127
+ it { expect(resource.response).to be response }
129
128
 
130
129
  it 'parses objects as resources' do
131
- expect(subject['john']).to be_a Restify::Resource
132
- expect(subject['jane']).to be_a Restify::Resource
130
+ expect(resource['john']).to be_a Restify::Resource
131
+ expect(resource['jane']).to be_a Restify::Resource
133
132
 
134
- expect(subject['john']['name']).to eq 'John'
135
- expect(subject['jane']['name']).to eq 'Jane'
133
+ expect(resource['john']['name']).to eq 'John'
134
+ expect(resource['jane']['name']).to eq 'Jane'
136
135
  end
137
136
  end
138
137
 
139
138
  context 'single value' do
140
139
  let(:body) do
141
- ::MessagePack.dump('BLUB')
140
+ MessagePack.dump('BLUB')
142
141
  end
143
142
 
144
143
  it { is_expected.to be_a Restify::Resource }
145
- it { expect(subject.response).to be response }
144
+ it { expect(resource.response).to be response }
146
145
  it { is_expected.to eq 'BLUB' }
147
146
  end
148
-
149
- context 'with indifferent access' do
150
- let(:body) do
151
- ::MessagePack.dump('name' => 'John', 'age' => 24)
152
- end
153
-
154
- it '#key?' do
155
- expect(subject).to have_key 'name'
156
- expect(subject).to have_key 'age'
157
-
158
- expect(subject).to have_key :name
159
- expect(subject).to have_key :age
160
- end
161
-
162
- it '#[]' do
163
- expect(subject['name']).to eq 'John'
164
- expect(subject['age']).to eq 24
165
-
166
- expect(subject[:name]).to eq 'John'
167
- expect(subject[:age]).to eq 24
168
- end
169
- end
170
-
171
- context 'with method getter access' do
172
- let(:body) do
173
- ::MessagePack.dump('name' => 'John', 'age' => 24)
174
- end
175
-
176
- it '#<method getter>' do
177
- expect(subject).to respond_to :name
178
- expect(subject).to respond_to :age
179
-
180
- expect(subject.name).to eq 'John'
181
- expect(subject.age).to eq 24
182
- end
183
- end
184
147
  end
185
148
  end
186
149
  end
@@ -7,42 +7,42 @@ describe Restify::Promise do
7
7
 
8
8
  describe 'factory methods' do
9
9
  describe '#fulfilled' do
10
- subject { described_class.fulfilled(fulfill_value) }
10
+ subject(:promise) { described_class.fulfilled(fulfill_value) }
11
11
 
12
12
  let(:fulfill_value) { 42 }
13
13
 
14
14
  it 'returns a fulfilled promise' do
15
- expect(subject.fulfilled?).to be true
16
- expect(subject.rejected?).to be false
15
+ expect(promise.fulfilled?).to be true
16
+ expect(promise.rejected?).to be false
17
17
  end
18
18
 
19
19
  it 'wraps the given value' do
20
- expect(subject.value!).to eq 42
20
+ expect(promise.value!).to eq 42
21
21
  end
22
22
  end
23
23
 
24
24
  describe '#rejected' do
25
- subject { described_class.rejected(rejection_reason) }
25
+ subject(:promise) { described_class.rejected(rejection_reason) }
26
26
 
27
27
  let(:rejection_reason) { ArgumentError }
28
28
 
29
29
  it 'returns a rejected promise' do
30
- expect(subject.fulfilled?).to be false
31
- expect(subject.rejected?).to be true
30
+ expect(promise.fulfilled?).to be false
31
+ expect(promise.rejected?).to be true
32
32
  end
33
33
 
34
34
  it 'bubbles up the caught exception on #value!' do
35
- expect { subject.value! }.to raise_error(ArgumentError)
35
+ expect { promise.value! }.to raise_error(ArgumentError)
36
36
  end
37
37
 
38
38
  it 'swallows the exception on #value' do
39
- expect(subject.value).to be nil
39
+ expect(promise.value).to be_nil
40
40
  end
41
41
  end
42
42
 
43
43
  describe '#create' do
44
44
  context 'when fulfilling the promise in the writer block' do
45
- subject do
45
+ subject(:promise) do
46
46
  described_class.create do |writer|
47
47
  # Calculate a value and fulfill the promise with it
48
48
  writer.fulfill 42
@@ -50,17 +50,17 @@ describe Restify::Promise do
50
50
  end
51
51
 
52
52
  it 'returns a fulfilled promise' do
53
- expect(subject.fulfilled?).to be true
54
- expect(subject.rejected?).to be false
53
+ expect(promise.fulfilled?).to be true
54
+ expect(promise.rejected?).to be false
55
55
  end
56
56
 
57
57
  it 'wraps the given value' do
58
- expect(subject.value!).to eq 42
58
+ expect(promise.value!).to eq 42
59
59
  end
60
60
  end
61
61
 
62
62
  context 'when rejecting the promise in the writer block' do
63
- subject do
63
+ subject(:promise) do
64
64
  described_class.create do |writer|
65
65
  # Calculate a value and fulfill the promise with it
66
66
  writer.reject ArgumentError
@@ -68,21 +68,21 @@ describe Restify::Promise do
68
68
  end
69
69
 
70
70
  it 'returns a rejected promise' do
71
- expect(subject.fulfilled?).to be false
72
- expect(subject.rejected?).to be true
71
+ expect(promise.fulfilled?).to be false
72
+ expect(promise.rejected?).to be true
73
73
  end
74
74
 
75
75
  it 'bubbles up the caught exception on #value!' do
76
- expect { subject.value! }.to raise_error(ArgumentError)
76
+ expect { promise.value! }.to raise_error(ArgumentError)
77
77
  end
78
78
 
79
79
  it 'swallows the exception on #value' do
80
- expect(subject.value).to be nil
80
+ expect(promise.value).to be_nil
81
81
  end
82
82
  end
83
83
 
84
84
  context 'when fulfilling the promise asynchronously' do
85
- subject do
85
+ subject(:promise) do
86
86
  described_class.create do |writer|
87
87
  Thread.new do
88
88
  sleep 0.1
@@ -92,20 +92,20 @@ describe Restify::Promise do
92
92
  end
93
93
 
94
94
  it 'returns a pending promise' do
95
- expect(subject.fulfilled?).to be false
96
- expect(subject.rejected?).to be false
97
- expect(subject.pending?).to be true
95
+ expect(promise.fulfilled?).to be false
96
+ expect(promise.rejected?).to be false
97
+ expect(promise.pending?).to be true
98
98
  end
99
99
 
100
100
  it 'waits for the fulfillment value' do
101
- expect(subject.value!).to eq 42
101
+ expect(promise.value!).to eq 42
102
102
  end
103
103
  end
104
104
  end
105
105
  end
106
106
 
107
107
  describe 'result' do
108
- subject { described_class.new(*dependencies, &task).value! }
108
+ subject(:result) { described_class.new(*dependencies, &task).value! }
109
109
 
110
110
  let(:dependencies) { [] }
111
111
  let(:task) { nil }
@@ -119,7 +119,7 @@ describe Restify::Promise do
119
119
  end
120
120
 
121
121
  it 'is calculated using the task block' do
122
- expect(subject).to eq 42
122
+ expect(result).to eq 42
123
123
  end
124
124
  end
125
125
 
@@ -133,7 +133,7 @@ describe Restify::Promise do
133
133
  end
134
134
 
135
135
  it 'is an array of the dependencies\' results' do
136
- expect(subject).to eq [1, 2, 3]
136
+ expect(result).to eq [1, 2, 3]
137
137
  end
138
138
  end
139
139
 
@@ -147,7 +147,7 @@ describe Restify::Promise do
147
147
  end
148
148
 
149
149
  it 'is an array of the dependencies\' results' do
150
- expect(subject).to eq [1, 2, 3]
150
+ expect(result).to eq [1, 2, 3]
151
151
  end
152
152
  end
153
153
 
@@ -163,7 +163,7 @@ describe Restify::Promise do
163
163
  end
164
164
 
165
165
  it 'can use the dependencies to calculate the value' do
166
- expect(subject).to eq 17
166
+ expect(result).to eq 17
167
167
  end
168
168
  end
169
169
 
@@ -178,19 +178,19 @@ describe Restify::Promise do
178
178
 
179
179
  describe '#wait' do
180
180
  it 'can time out' do
181
- expect { promise.wait(0.1) }.to raise_error ::Timeout::Error
181
+ expect { promise.wait(0.1) }.to raise_error Timeout::Error
182
182
  end
183
183
  end
184
184
 
185
185
  describe '#value' do
186
186
  it 'can time out' do
187
- expect { promise.value(0.1) }.to raise_error ::Timeout::Error
187
+ expect { promise.value(0.1) }.to raise_error Timeout::Error
188
188
  end
189
189
  end
190
190
 
191
191
  describe '#value!' do
192
192
  it 'can time out' do
193
- expect { promise.value!(0.1) }.to raise_error ::Timeout::Error
193
+ expect { promise.value!(0.1) }.to raise_error Timeout::Error
194
194
  end
195
195
  end
196
196
  end
@@ -3,15 +3,13 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Restify::Registry do
6
- let(:registry) { described_class.instance }
6
+ subject(:registry) { described_class.instance }
7
7
 
8
8
  describe 'class' do
9
9
  describe '#instance' do
10
- subject { described_class.instance }
11
-
12
10
  it 'returns singleton instance' do
13
- expect(subject).to be_a described_class
14
- expect(subject).to be described_class.instance
11
+ expect(registry).to be_a described_class
12
+ expect(registry).to be described_class.instance
15
13
  end
16
14
  end
17
15
 
@@ -36,14 +34,14 @@ describe Restify::Registry do
36
34
  end
37
35
 
38
36
  describe '#store / #fetch' do
39
- subject { registry.store name, uri, **opts }
37
+ subject(:store) { registry.store(name, uri, **opts) }
40
38
 
41
39
  let(:name) { 'remote' }
42
40
  let(:uri) { 'http://remote/entry/point' }
43
41
  let(:opts) { {accept: 'application/vnd.remote+json'} }
44
42
 
45
43
  it 'stores registry item' do
46
- subject
44
+ store
47
45
 
48
46
  item = registry.fetch name
49
47