capsule_crm 0.0.5 → 0.0.6

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: dca3fb5d1950b9561a1a92f28a69ed82746437c5
4
- data.tar.gz: c44375ed1df1bf56b6fbaed31fc645220f1979f8
3
+ metadata.gz: 27fbb70234eb3c2f46340bb621531d44ef172089
4
+ data.tar.gz: 545a7d2b1f2dba314ed4e399fff534e56a549a54
5
5
  SHA512:
6
- metadata.gz: c4b8d844174f6ddfea4aa46899d22c90b9dbbcce3bb7330c5cbbd047a1fe99d05852ab659708a6282a063ce93f0a794e6eb001f6a912203e3e9684a325bc1eeb
7
- data.tar.gz: 3ca0e9816938ad828bce082240894213e1ab19c5421afeeca6af5f1d7a9cd954ef54675801bf542823efbf2c38f340bd637a654171757c4ff3e0a069a134a2d1
6
+ metadata.gz: 5a8948dc7c1ca6c64a084b31e371f1b51ddff6e15ef991878a2b3985a84ae3a004021883a0d32603c5050cf9753d03ad96a5560f0e287cdb2c4c73bc50c21453
7
+ data.tar.gz: 925f7f147a537fef527ecce482a9b8975fb5ca2a230ea70c0dab2bc87997963b15faee4408b8b193584aa4e3601848600a0b2cea3e439a458cc5474bd3f5cbac
data/lib/capsule_crm.rb CHANGED
@@ -5,6 +5,7 @@ require 'virtus'
5
5
  require 'capsule_crm/capsule_jsonable'
6
6
  require 'capsule_crm/associations'
7
7
  require 'capsule_crm/address'
8
+ require 'capsule_crm/case'
8
9
  require 'capsule_crm/connection'
9
10
  require 'capsule_crm/email'
10
11
  require 'capsule_crm/party'
@@ -0,0 +1,258 @@
1
+ module CapsuleCRM
2
+ class Case
3
+ include Virtus
4
+
5
+ extend ActiveModel::Naming
6
+ include ActiveModel::Conversion
7
+ include ActiveModel::Validations
8
+
9
+ include CapsuleCRM::Associations::BelongsTo
10
+
11
+ attribute :id, Integer
12
+ attribute :name, String
13
+ attribute :description, String
14
+ attribute :status, String
15
+ attribute :close_date, Date
16
+ attribute :owner, String
17
+
18
+ validates :name, presence: true
19
+ validates :party, presence: true
20
+
21
+ belongs_to :party, class_name: 'CapsuleCRM::Party'
22
+
23
+ # Public: Search and retrieve all cases in CapsuleCRM
24
+ #
25
+ # options - the Hash of query options (default: {}):
26
+ # :tag - the String tag to search for
27
+ # :lastmodified - the Date after which the case was last
28
+ # modified by
29
+ # :start - the Integer index of the first record to
30
+ # return.
31
+ # :limit - the Integer number of records to return
32
+ #
33
+ # Examples
34
+ #
35
+ # CapsuleCRM::Case.all(tag: 'Some Tag')
36
+ #
37
+ # Returns a CapsuleCRM::ResultsProxy of CapsuleCRM::Case objects
38
+ def self.all(options = {})
39
+ init_collection(
40
+ CapsuleCRM::Connection.get('/api/kase', options)['kases']['kase']
41
+ )
42
+ end
43
+
44
+ # Public: Search for a single case by ID
45
+ #
46
+ # id - the Integer ID of the record to search for
47
+ #
48
+ # Examples
49
+ #
50
+ # CapsuleCRM::Case.find(1)
51
+ #
52
+ # Returns a CapsuleCRM::Case object
53
+ def self.find(id)
54
+ new CapsuleCRM::Connection.get("/api/kase/#{id}")['kase']
55
+ end
56
+
57
+ # Public: Create a CapsuleCRM::Case
58
+ #
59
+ # attributes - the Hash of attributes (default: {}):
60
+ # :name - the String name of the case (required)
61
+ # :description - the String description
62
+ # :status - the String status (OPEN or CLOSED), default
63
+ # is OPEN
64
+ # :owner - the String username of the owner
65
+ # :close_date - the Date when the case was/will be closed.
66
+ # Ignored if the status is set to CLOSED
67
+ #
68
+ # Examples
69
+ #
70
+ # CapsuleCRM::Case.create name: "Matt's test case"
71
+ #
72
+ # Returns a CapsuleCRM::Case
73
+ def self.create(attributes = {})
74
+ new(attributes).tap(&:save)
75
+ end
76
+
77
+ # Public: Create a CapsuleCRM::Case or raise a error
78
+ #
79
+ # attributes - the Hash of attributes (default: {}):
80
+ # :name - the String name of the case (required)
81
+ # :description - the String description
82
+ # :status - the String status (OPEN or CLOSED), default
83
+ # is OPEN
84
+ # :owner - the String username of the owner
85
+ # :close_date - the Date when the case was/will be closed.
86
+ # Ignored if the status is set to CLOSED
87
+ #
88
+ # Examples
89
+ #
90
+ # CapsuleCRM::Case.create! name: "Matt's test case"
91
+ # => CapsuleCRM::Case object
92
+ #
93
+ # CapsuleCRM::Case.create! name: nil
94
+ # => CapsuleCRM::Errors::RecordInvalid
95
+ #
96
+ # Returns a CapsuleCRM::Case
97
+ def self.create!(attributes = {})
98
+ new(attributes).tap(&:save!)
99
+ end
100
+
101
+ # Public: Updates an existing CapsuleCRM::Case with the supplied attributes
102
+ #
103
+ # attributes - the Hash of attributes (default: {}):
104
+ # :name - the String name of the case (required)
105
+ # :description - the String description
106
+ # :status - the String status (OPEN or CLOSED), default
107
+ # is OPEN
108
+ # :owner - the String username of the owner
109
+ # :close_date - the Date when the case was/will be closed.
110
+ # Ignored if the status is set to CLOSED
111
+ #
112
+ # Examples
113
+ #
114
+ # kase = CapsuleCRM::Case.find(1)
115
+ # kase.update_attributes name: 'A new name'
116
+ #
117
+ # Returns a CapsuleCRM::Case
118
+ def update_attributes(attributes = {})
119
+ self.attributes = attributes
120
+ save
121
+ end
122
+
123
+ # Public: Updates an existing CapsuleCRM::Case with the supplied attributes
124
+ # or raises an error
125
+ #
126
+ # attributes - the Hash of attributes (default: {}):
127
+ # :name - the String name of the case (required)
128
+ # :description - the String description
129
+ # :status - the String status (OPEN or CLOSED), default
130
+ # is OPEN
131
+ # :owner - the String username of the owner
132
+ # :close_date - the Date when the case was/will be closed.
133
+ # Ignored if the status is set to CLOSED
134
+ #
135
+ # Examples
136
+ #
137
+ # kase = CapsuleCRM::Case.find(1)
138
+ # kase.update_attributes! name: 'A new name'
139
+ # => CapsuleCRM::Case object
140
+ #
141
+ # kase.update_attributes! name: nil
142
+ # => CapsuleCRM::Errors::RecordInvalid
143
+ #
144
+ # Returns a CapsuleCRM::Case
145
+ def update_attributes!(attributes = {})
146
+ self.attributes = attributes
147
+ save!
148
+ end
149
+
150
+ # Public: Saves this CapsuleCRM::Case
151
+ #
152
+ # Examples:
153
+ #
154
+ # kase = CapsuleCRM::Case.new(
155
+ # name: 'Case Name', party: person_or_organization
156
+ # )
157
+ # kase.save
158
+ # => CapsuleCRM::Case object
159
+ #
160
+ # Returns the CapsuleCRM::Case or false
161
+ def save
162
+ if valid?
163
+ new_record? ? create_record : update_record
164
+ else
165
+ false
166
+ end
167
+ end
168
+
169
+ # Public: Saves this CapsuleCRM::Case or raises an error
170
+ #
171
+ # Examples
172
+ #
173
+ # kase = CapsuleCRM::Case.find(1)
174
+ # kase.name = 'Changed name'
175
+ # kase.save!
176
+ # => CapsuleCRM::Case object
177
+ #
178
+ # kase.name = nil
179
+ # kase.save!
180
+ # => CapsuleCRM::Errors::RecordInvalid
181
+ #
182
+ # Returns a CapsuleCRM::Case
183
+ def save!
184
+ if valid?
185
+ new_record? ? create_record : update_record
186
+ else
187
+ raise CapsuleCRM::Errors::RecordInvalid.new(self)
188
+ end
189
+ end
190
+
191
+ # Public: Deletes this CapsuleCRM::Case from CapsuleCRM
192
+ #
193
+ # Examples
194
+ #
195
+ # CapsuleCRM::Case.find(1).destroy
196
+ #
197
+ # Returns the CapsuleCRM::Case object
198
+ def destroy
199
+ self.id = nil if CapsuleCRM::Connection.delete("/api/kase/#{id}")
200
+ self
201
+ end
202
+
203
+ # Public: Is this case a new record?
204
+ #
205
+ # Examples
206
+ #
207
+ # CapsuleCRM::Case.find(1).new_record?
208
+ # => false
209
+ #
210
+ # CapsuleCRM::Case.new.new_record?
211
+ # => true
212
+ #
213
+ # Returns a Boolean
214
+ def new_record?
215
+ !id
216
+ end
217
+
218
+ # Public: Is this case persisted to CapsuleCRM?
219
+ #
220
+ # Examples
221
+ #
222
+ # CapsuleCRM::Case.find(1).persisted?
223
+ # => true
224
+ #
225
+ # CapsuleCRM::Case.new.persisted?
226
+ # => false
227
+ #
228
+ # Returns a Boolean
229
+ def persisted?
230
+ !new_record?
231
+ end
232
+
233
+ def to_capsule_json
234
+ {
235
+ kase: CapsuleCRM::HashHelper.camelize_keys(
236
+ attributes.dup.delete_if { |key, value| value.blank? }
237
+ )
238
+ }
239
+ end
240
+
241
+ private
242
+
243
+ def create_record
244
+ self.attributes = CapsuleCRM::Connection.post(
245
+ "/api/party/#{party_id}/kase", to_capsule_json
246
+ )
247
+ self
248
+ end
249
+
250
+ def update_record
251
+ CapsuleCRM::Connection.put("/api/kase/#{id}", to_capsule_json)
252
+ end
253
+
254
+ def self.init_collection(results)
255
+ CapsuleCRM::ResultsProxy.new(results.map { |item| new item })
256
+ end
257
+ end
258
+ end
@@ -1,3 +1,3 @@
1
1
  module CapsuleCrm
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
@@ -0,0 +1,317 @@
1
+ require 'spec_helper'
2
+
3
+ describe CapsuleCRM::Case do
4
+ before { configure }
5
+
6
+ it { should validate_presence_of(:name) }
7
+
8
+ it { should validate_presence_of(:party) }
9
+
10
+ describe '.all' do
11
+ before do
12
+ stub_request(:get, 'https://1234:@company.capsulecrm.com/api/kase').
13
+ to_return(body: File.read('spec/support/all_cases.json'))
14
+ end
15
+
16
+ subject { CapsuleCRM::Case.all }
17
+
18
+ it { should be_a(Array) }
19
+
20
+ it { subject.length.should eql(1) }
21
+
22
+ it { subject.all? { |item| item.is_a?(CapsuleCRM::Case) }.should be_true }
23
+ end
24
+
25
+ describe '.find' do
26
+ before do
27
+ stub_request(:get, 'https://1234:@company.capsulecrm.com/api/kase/43').
28
+ to_return(body: File.read('spec/support/case.json'))
29
+ end
30
+
31
+ subject { CapsuleCRM::Case.find(43) }
32
+
33
+ it { should be_a(CapsuleCRM::Case) }
34
+
35
+ it { subject.name.should eql('Consulting') }
36
+ end
37
+
38
+ describe '.create' do
39
+ context 'when the case is valid' do
40
+ before do
41
+ stub_request(
42
+ :post, 'https://1234:@company.capsulecrm.com/api/party/1/kase'
43
+ ).to_return(
44
+ headers: { 'Location' => 'https://sample.capsulecrm.com/api/kase/59' }
45
+ )
46
+ end
47
+
48
+ let(:party) { CapsuleCRM::Person.new(id: 1, first_name: 'Matt') }
49
+
50
+ subject { CapsuleCRM::Case.create name: 'Test Case', party: party }
51
+
52
+ it { should be_a(CapsuleCRM::Case) }
53
+
54
+ it { subject.id.should eql(59) }
55
+ end
56
+
57
+ context 'when the case is invalid' do
58
+ let(:kase) { CapsuleCRM::Case.create name: 'Test Case' }
59
+
60
+ it { kase.errors.should_not be_blank }
61
+ end
62
+ end
63
+
64
+ describe '.create!' do
65
+ context 'when the case is valid' do
66
+ before do
67
+ stub_request(
68
+ :post, 'https://1234:@company.capsulecrm.com/api/party/1/kase'
69
+ ).to_return(
70
+ headers: { 'Location' => 'https://sample.capsulecrm.com/api/kase/61' }
71
+ )
72
+ end
73
+
74
+ let(:party) { CapsuleCRM::Person.new(id: 1, first_name: 'Matt') }
75
+
76
+ subject { CapsuleCRM::Case.create! name: 'Test Case', party: party }
77
+
78
+ it { should be_a(CapsuleCRM::Case) }
79
+
80
+ it { subject.id.should eql(61) }
81
+ end
82
+
83
+ context 'when the case is invalid' do
84
+ let(:kase) { CapsuleCRM::Case.create! name: 'Test Case' }
85
+
86
+ it 'should raise an error' do
87
+ expect { kase }.to raise_error(CapsuleCRM::Errors::RecordInvalid)
88
+ end
89
+ end
90
+ end
91
+
92
+ describe '#update_attributes' do
93
+ context 'when the case is valid' do
94
+ let(:party) { CapsuleCRM::Person.new(id: 10) }
95
+
96
+ let(:kase) do
97
+ CapsuleCRM::Case.new(id: 1, name: 'Test Case', party: party)
98
+ end
99
+
100
+ before do
101
+ stub_request(
102
+ :put, 'https://1234:@company.capsulecrm.com/api/kase/1'
103
+ ).to_return(status: 200)
104
+ kase.update_attributes name: 'changed name'
105
+ end
106
+
107
+ it { kase.name.should eql('changed name') }
108
+
109
+ it { kase.id.should eql(1) }
110
+ end
111
+
112
+ context 'when the case is not valid' do
113
+ let(:kase) { CapsuleCRM::Case.new(id: 2, name: 'Test Case') }
114
+
115
+ before do
116
+ kase.update_attributes name: 'changed name'
117
+ end
118
+
119
+ it { kase.errors.should_not be_blank }
120
+
121
+ it { kase.name.should eql('changed name') }
122
+ end
123
+ end
124
+
125
+ describe '#update_attributes!' do
126
+ context 'when the case is valid' do
127
+ let(:party) { CapsuleCRM::Person.new(id: 1, first_name: 'Matt') }
128
+
129
+ let(:kase) do
130
+ CapsuleCRM::Case.new(id: 1, name: 'Test Case', party: party)
131
+ end
132
+
133
+ before do
134
+ stub_request(
135
+ :put, 'https://1234:@company.capsulecrm.com/api/kase/1'
136
+ ).to_return(status: 200)
137
+ kase.update_attributes! name: 'changed name'
138
+ end
139
+
140
+ it { kase.name.should eql('changed name') }
141
+
142
+ it { kase.id.should eql(1) }
143
+ end
144
+
145
+ context 'when the case is invalid' do
146
+ let(:kase) { CapsuleCRM::Case.new(id: 1, name: 'Test Case') }
147
+
148
+ subject { kase.update_attributes! name: 'changed name' }
149
+
150
+ it do
151
+ expect { subject }.to raise_error(CapsuleCRM::Errors::RecordInvalid)
152
+ end
153
+ end
154
+ end
155
+
156
+ describe '#save' do
157
+ let(:party) { CapsuleCRM::Person.new(id: 1) }
158
+
159
+ context 'when it is a new record' do
160
+ context 'when it is valid' do
161
+ let(:kase) { CapsuleCRM::Case.new(name: 'Test', party: party) }
162
+
163
+ before do
164
+ stub_request(
165
+ :post, 'https://1234:@company.capsulecrm.com/api/party/1/kase'
166
+ ).to_return(
167
+ headers: { 'Location' => 'https://sample.capsulecrm.com/api/kase/2' }
168
+ )
169
+ kase.save
170
+ end
171
+
172
+ subject { kase }
173
+
174
+ it { should be_persisted }
175
+
176
+ it { kase.id.should eql(2) }
177
+ end
178
+
179
+ context 'when it is invalid' do
180
+ let(:kase) { CapsuleCRM::Case.new(name: 'Test') }
181
+
182
+ before { kase.save }
183
+
184
+ it { kase.errors.should_not be_blank }
185
+
186
+ it { kase.should_not be_persisted }
187
+ end
188
+ end
189
+
190
+ context 'when it is an existing record' do
191
+ let(:party) { CapsuleCRM::Person.new(id: 1) }
192
+
193
+ context 'when it is valid' do
194
+ let(:kase) { CapsuleCRM::Case.new(id: 2, name: 'Test', party: party) }
195
+
196
+ before do
197
+ stub_request(
198
+ :put, 'https://1234:@company.capsulecrm.com/api/kase/2'
199
+ ).to_return(status: 200)
200
+ kase.name = 'changed name'
201
+ kase.save
202
+ end
203
+
204
+ it { kase.should be_persisted }
205
+
206
+ it { kase.name.should eql('changed name') }
207
+ end
208
+
209
+ context 'when it is invalid' do
210
+ let(:kase) { CapsuleCRM::Case.new(id: 2, name: 'Test') }
211
+
212
+ before { kase.save }
213
+
214
+ it { kase.should be_persisted }
215
+
216
+ it { kase.errors.should_not be_blank }
217
+ end
218
+ end
219
+ end
220
+
221
+ describe '#save!' do
222
+ let(:party) { CapsuleCRM::Person.new(id: 1) }
223
+
224
+ context 'when it is a new record' do
225
+ context 'when it is valid' do
226
+ let(:kase) { CapsuleCRM::Case.new(name: 'Test Case', party: party) }
227
+
228
+ before do
229
+ stub_request(:post, /^https.*\/api\/party\/1\/kase$/).
230
+ to_return(headers: {
231
+ 'Location' => 'https://sample.capsulecrm.com/api/kase/59'
232
+ })
233
+ kase.save!
234
+ end
235
+
236
+ it { kase.should be_persisted }
237
+ end
238
+
239
+ context 'when it is invalid' do
240
+ let(:kase) { CapsuleCRM::Case.new(name: 'Test Case') }
241
+
242
+ it do
243
+ expect { kase.save! }.
244
+ to raise_error(CapsuleCRM::Errors::RecordInvalid)
245
+ end
246
+ end
247
+ end
248
+
249
+ context 'when it is not a new record' do
250
+ context 'when it is valid' do
251
+ let(:kase) do
252
+ CapsuleCRM::Case.new(id: 1, name: 'Test Case', party: party)
253
+ end
254
+
255
+ before do
256
+ stub_request(:put, /^.*\/api\/kase\/1$/).to_return(status: 200)
257
+ kase.save!
258
+ end
259
+
260
+ it { kase.should be_persisted }
261
+ end
262
+
263
+ context 'when it is invalid' do
264
+ let(:kase) do
265
+ CapsuleCRM::Case.new(id: 1, name: 'Test Case')
266
+ end
267
+
268
+ it do
269
+ expect { kase.save! }.
270
+ to raise_error(CapsuleCRM::Errors::RecordInvalid)
271
+ end
272
+ end
273
+ end
274
+ end
275
+
276
+ describe '#destroy' do
277
+ let(:party) { CapsuleCRM::Person.new(id: 2) }
278
+
279
+ let(:kase) { CapsuleCRM::Case.new(id: 1, party: party, name: 'Test Case') }
280
+
281
+ before do
282
+ stub_request(:delete, /^.*\/api\/kase\/1$/).to_return(status: 200)
283
+ kase.destroy
284
+ end
285
+
286
+ it { kase.should_not be_persisted }
287
+ end
288
+
289
+ describe '#new_record?' do
290
+ describe 'when it is a new record' do
291
+
292
+ subject { CapsuleCRM::Case.new }
293
+
294
+ it { should be_new_record }
295
+ end
296
+
297
+ describe 'when it is not a new record' do
298
+ subject { CapsuleCRM::Case.new(id: 1) }
299
+
300
+ it { should_not be_new_record }
301
+ end
302
+ end
303
+
304
+ describe '#persisted?' do
305
+ context 'when it is persisted' do
306
+ subject { CapsuleCRM::Case.new(id: 1) }
307
+
308
+ it { should be_persisted }
309
+ end
310
+
311
+ context 'when it is not persisted' do
312
+ subject { CapsuleCRM::Case.new }
313
+
314
+ it { should_not be_persisted }
315
+ end
316
+ end
317
+ end
@@ -0,0 +1,14 @@
1
+ {
2
+ "kases": {
3
+ "kase": [{
4
+ "id": "43",
5
+ "createdOn": "2011-04-16T13:59:58Z",
6
+ "description": "Scope and design web site shopping cart",
7
+ "name": "Consulting",
8
+ "status": "OPEN",
9
+ "owner": "a.user",
10
+ "updatedOn": "2011-05-11T16:54:23Z",
11
+ "partyId": "2"
12
+ }]
13
+ }
14
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "kase": {
3
+ "id": "43",
4
+ "createdOn": "2011-04-16T13:59:58Z",
5
+ "description": "Scope and design web site shopping cart",
6
+ "name": "Consulting",
7
+ "status": "OPEN",
8
+ "owner": "a.user",
9
+ "updatedOn": "2011-05-11T16:54:23Z",
10
+ "partyId": "2"
11
+ }
12
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capsule_crm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Beedle
@@ -230,6 +230,7 @@ files:
230
230
  - lib/capsule_crm/associations/has_many.rb
231
231
  - lib/capsule_crm/associations/has_many_proxy.rb
232
232
  - lib/capsule_crm/capsule_jsonable.rb
233
+ - lib/capsule_crm/case.rb
233
234
  - lib/capsule_crm/configuration.rb
234
235
  - lib/capsule_crm/connection.rb
235
236
  - lib/capsule_crm/contactable.rb
@@ -250,15 +251,18 @@ files:
250
251
  - spec/lib/capsule_crm/address_spec.rb
251
252
  - spec/lib/capsule_crm/associations/has_many_proxy_spec.rb
252
253
  - spec/lib/capsule_crm/associations/has_many_spec.rb
254
+ - spec/lib/capsule_crm/case_spec.rb
253
255
  - spec/lib/capsule_crm/contacts_spec.rb
254
256
  - spec/lib/capsule_crm/email_spec.rb
255
257
  - spec/lib/capsule_crm/opportunity_spec.rb
256
258
  - spec/lib/capsule_crm/organization_spec.rb
257
259
  - spec/lib/capsule_crm/person_spec.rb
258
260
  - spec/spec_helper.rb
261
+ - spec/support/all_cases.json
259
262
  - spec/support/all_opportunities.json
260
263
  - spec/support/all_parties.json
261
264
  - spec/support/all_people.json
265
+ - spec/support/case.json
262
266
  - spec/support/deleted_opportunities.json
263
267
  - spec/support/helpers.rb
264
268
  - spec/support/opportunity.json
@@ -294,15 +298,18 @@ test_files:
294
298
  - spec/lib/capsule_crm/address_spec.rb
295
299
  - spec/lib/capsule_crm/associations/has_many_proxy_spec.rb
296
300
  - spec/lib/capsule_crm/associations/has_many_spec.rb
301
+ - spec/lib/capsule_crm/case_spec.rb
297
302
  - spec/lib/capsule_crm/contacts_spec.rb
298
303
  - spec/lib/capsule_crm/email_spec.rb
299
304
  - spec/lib/capsule_crm/opportunity_spec.rb
300
305
  - spec/lib/capsule_crm/organization_spec.rb
301
306
  - spec/lib/capsule_crm/person_spec.rb
302
307
  - spec/spec_helper.rb
308
+ - spec/support/all_cases.json
303
309
  - spec/support/all_opportunities.json
304
310
  - spec/support/all_parties.json
305
311
  - spec/support/all_people.json
312
+ - spec/support/case.json
306
313
  - spec/support/deleted_opportunities.json
307
314
  - spec/support/helpers.rb
308
315
  - spec/support/opportunity.json