soapy_cake 2.2.1 → 2.2.3

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: da80a1e33c7b95e91a5bd942846a9028ae2866e5
4
- data.tar.gz: 642af06412ab6edf7d3c54cf7d0bc122f497dd8a
3
+ metadata.gz: db53a85a24c32bedc5424cb71fa94299d1b2b656
4
+ data.tar.gz: 6ff419a8734b6c665d239c9f277abfce3a6e7d3a
5
5
  SHA512:
6
- metadata.gz: bb8ccda5ad2682c9068a06b7ed5e68cc63b1a6685b4bfc0e54aa11ee084a575950a6ebe662ca4511accb563e530353514bd5830d91b83c266c216225844540a3
7
- data.tar.gz: 974c65b039671c8a79e95053c7f5b52045d1deec988fd96f45ffa8dc90ec86090bb5da56fb1ef195a4ad047d09eaf2e7a74f925d238fcb22c7c51a700dcc5145
6
+ metadata.gz: e7ef921b6577c7e37f9fc448199f1b832ff556cd9ad63dfc2db1377a66160185eda2669f1067c48a7266155d2190f6f45699fa8c0f42b266981faaf8ff949d91
7
+ data.tar.gz: 7be351d763c9cafebd1f500e6a3cf6b3c879e26e821d96e7e701f09ec103a6e798037dca7d87aa5e8157a2a217ff345f7fc8e86693945551a3e157e73c14052a
@@ -1 +1 @@
1
- 2.3.4
1
+ 2.4.1
@@ -174,8 +174,60 @@ module SoapyCake
174
174
  run Request.new(:admin, :addedit, :advertiser, opts.merge(advertiser_id: 0))
175
175
  end
176
176
 
177
+ ALLOWED_CREATIVE_OPTS = %i[
178
+ creative_name
179
+ creative_status_id
180
+ creative_type_id
181
+ height
182
+ notes
183
+ offer_id
184
+ offer_link
185
+ third_party_name
186
+ width
187
+ ].freeze
188
+
189
+ ALLOWED_CREATIVE_FILES_OPTS = %i[
190
+ creative_file_id
191
+ creative_file_import_url
192
+ creative_id
193
+ is_preview_file
194
+ replace_all_files
195
+ ].freeze
196
+
197
+ def create_creative(opts)
198
+ raise 'need offer_id to create creative' if opts[:offer_id].blank?
199
+ raise 'cannot pass creative_id when creating creative' if opts[:creative_id].present?
200
+
201
+ creative_opts = opts.select { |key, _| ALLOWED_CREATIVE_OPTS.include? key }
202
+ create_result = addedit_creative(creative_opts)
203
+
204
+ files_opts = opts.select { |key, _| ALLOWED_CREATIVE_FILES_OPTS.include? key }
205
+ .merge(creative_id: create_result[:creative_id])
206
+
207
+ create_result.merge(addedit_creative_files(files_opts)).except(:message)
208
+ end
209
+
177
210
  private
178
211
 
212
+ def addedit_creative(opts)
213
+ defaults = {
214
+ creative_name: '',
215
+ creative_status_id: 1, # Active: 1, Inactive: 2, Hidden: 3
216
+ creative_type_id: 3, # Link: 1, Image: 3, Flash: 4, HTML: 6, Email: 2, Text: 5, Video: 7
217
+ height: 0,
218
+ notes: '',
219
+ offer_link: '',
220
+ third_party_name: '',
221
+ width: 0
222
+ }
223
+
224
+ run Request.new(:admin, :addedit, :creative, defaults.merge(opts))
225
+ end
226
+
227
+ def addedit_creative_files(opts)
228
+ run Request.new(:admin, :addedit, :creative_files, opts)
229
+ end
230
+
179
231
  def addedit_offer_tier(add_edit_option, opts)
180
232
  require_params(opts, %i[offer_id tier_id price_format_id offer_contract_id status_id])
181
233
 
@@ -36,7 +36,7 @@ module SoapyCake
36
36
 
37
37
  protected
38
38
 
39
- attr_reader :domain, :api_key, :time_converter, :opts, :logger, :retry_count, :write_enabled
39
+ attr_reader :domain, :api_key, :time_converter, :opts, :retry_count, :write_enabled
40
40
 
41
41
  private
42
42
 
@@ -82,7 +82,12 @@ module SoapyCake
82
82
  response = perform_http_request(http_request)
83
83
 
84
84
  unless response.is_a?(Net::HTTPSuccess)
85
- raise RequestFailed, "Request failed with HTTP #{response.code}: #{response.body}"
85
+ raise RequestFailed.new(
86
+ "Request failed with HTTP #{response.code}",
87
+ request_path: request.path,
88
+ request_body: http_request.body,
89
+ response_body: response.body
90
+ )
86
91
  end
87
92
 
88
93
  response.body
@@ -2,6 +2,17 @@
2
2
 
3
3
  module SoapyCake
4
4
  class Error < RuntimeError; end
5
- class RequestFailed < Error; end
5
+
6
+ class RequestFailed < Error
7
+ attr_reader :request_path, :request_body, :response_body
8
+
9
+ def initialize(message, request_path: nil, request_body: nil, response_body: nil)
10
+ @request_path = request_path
11
+ @request_body = request_body&.sub(ENV.fetch('CAKE_API_KEY'), '[redacted]')
12
+ @response_body = response_body
13
+ super(message)
14
+ end
15
+ end
16
+
6
17
  class RateLimitError < RequestFailed; end
7
18
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SoapyCake
4
- VERSION = '2.2.1'
4
+ VERSION = '2.2.3'
5
5
  end
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  lib = File.expand_path('../lib', __FILE__)
@@ -21,16 +20,16 @@ Gem::Specification.new do |spec|
21
20
  spec.require_paths = ['lib']
22
21
 
23
22
  spec.add_dependency 'activesupport'
24
- spec.add_dependency 'saxerator'
25
23
  spec.add_dependency 'nokogiri'
26
24
  spec.add_dependency 'retryable'
25
+ spec.add_dependency 'saxerator'
27
26
 
28
27
  spec.add_development_dependency 'bundler'
28
+ spec.add_development_dependency 'dotenv'
29
+ spec.add_development_dependency 'pry'
29
30
  spec.add_development_dependency 'rake'
30
31
  spec.add_development_dependency 'rspec', '>= 3.0.0'
32
+ spec.add_development_dependency 'timecop'
31
33
  spec.add_development_dependency 'vcr'
32
34
  spec.add_development_dependency 'webmock'
33
- spec.add_development_dependency 'pry'
34
- spec.add_development_dependency 'timecop'
35
- spec.add_development_dependency 'dotenv'
36
35
  end
@@ -0,0 +1,116 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://cake-partner-domain.com/api/1/addedit.asmx
6
+ body:
7
+ encoding: ASCII-8BIT
8
+ string: |
9
+ <?xml version="1.0"?>
10
+ <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:cake="http://cakemarketing.com/api/1/">
11
+ <env:Header/>
12
+ <env:Body>
13
+ <cake:Creative>
14
+ <cake:api_key>cake-api-key</cake:api_key>
15
+ <cake:creative_name>creative_name</cake:creative_name>
16
+ <cake:creative_status_id>1</cake:creative_status_id>
17
+ <cake:creative_type_id>3</cake:creative_type_id>
18
+ <cake:height>0</cake:height>
19
+ <cake:notes/>
20
+ <cake:offer_link/>
21
+ <cake:third_party_name/>
22
+ <cake:width>0</cake:width>
23
+ <cake:offer_id>11428</cake:offer_id>
24
+ </cake:Creative>
25
+ </env:Body>
26
+ </env:Envelope>
27
+ headers:
28
+ Content-Type:
29
+ - application/soap+xml;charset=UTF-8
30
+ Accept-Encoding:
31
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
32
+ Accept:
33
+ - "*/*"
34
+ User-Agent:
35
+ - Ruby
36
+ response:
37
+ status:
38
+ code: 200
39
+ message: OK
40
+ headers:
41
+ Cache-Control:
42
+ - private, max-age=0
43
+ Content-Length:
44
+ - '450'
45
+ Content-Type:
46
+ - application/soap+xml; charset=utf-8
47
+ Date:
48
+ - Thu, 03 Aug 2017 09:25:39 GMT
49
+ X-Aspnet-Version:
50
+ - 4.0.30319
51
+ X-Powered-By:
52
+ - ASP.NET
53
+ Connection:
54
+ - close
55
+ body:
56
+ encoding: UTF-8
57
+ string: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
58
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><CreativeResponse
59
+ xmlns="http://cakemarketing.com/api/1/"><CreativeResult><success>true</success><message>Creative
60
+ 12164 Created</message><creative_id>12164</creative_id></CreativeResult></CreativeResponse></soap:Body></soap:Envelope>
61
+ http_version:
62
+ recorded_at: Tue, 17 Feb 2015 12:00:00 GMT
63
+ - request:
64
+ method: post
65
+ uri: https://cake-partner-domain.com/api/1/addedit.asmx
66
+ body:
67
+ encoding: ASCII-8BIT
68
+ string: |
69
+ <?xml version="1.0"?>
70
+ <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:cake="http://cakemarketing.com/api/1/">
71
+ <env:Header/>
72
+ <env:Body>
73
+ <cake:CreativeFiles>
74
+ <cake:api_key>cake-api-key</cake:api_key>
75
+ <cake:creative_file_import_url>http://placehold.it/300x250</cake:creative_file_import_url>
76
+ <cake:creative_id>12164</cake:creative_id>
77
+ </cake:CreativeFiles>
78
+ </env:Body>
79
+ </env:Envelope>
80
+ headers:
81
+ Content-Type:
82
+ - application/soap+xml;charset=UTF-8
83
+ Accept-Encoding:
84
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
85
+ Accept:
86
+ - "*/*"
87
+ User-Agent:
88
+ - Ruby
89
+ response:
90
+ status:
91
+ code: 200
92
+ message: OK
93
+ headers:
94
+ Cache-Control:
95
+ - private, max-age=0
96
+ Content-Length:
97
+ - '621'
98
+ Content-Type:
99
+ - application/soap+xml; charset=utf-8
100
+ Date:
101
+ - Thu, 03 Aug 2017 09:25:40 GMT
102
+ X-Aspnet-Version:
103
+ - 4.0.30319
104
+ X-Powered-By:
105
+ - ASP.NET
106
+ Connection:
107
+ - close
108
+ body:
109
+ encoding: UTF-8
110
+ string: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
111
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><CreativeFilesResponse
112
+ xmlns="http://cakemarketing.com/api/1/"><CreativeFilesResult><success>true</success><message>Creative
113
+ Files 8015 Created.</message><creative_files><creative_file><creative_file_id>8015</creative_file_id><creative_file_name>300x250</creative_file_name><updated>false</updated></creative_file></creative_files></CreativeFilesResult></CreativeFilesResponse></soap:Body></soap:Envelope>
114
+ http_version:
115
+ recorded_at: Tue, 17 Feb 2015 12:00:00 GMT
116
+ recorded_with: VCR 3.0.3
@@ -284,4 +284,25 @@ RSpec.describe SoapyCake::AdminAddedit do
284
284
  expect(result[:message]).to eq('Offer Tier Replaced')
285
285
  end
286
286
  end
287
+
288
+ describe '#create_creatives' do
289
+ it 'creates a creative and adds a file to it', :vcr do
290
+ result = admin_addedit.create_creative(
291
+ offer_id: 11428,
292
+ creative_name: 'creative_name',
293
+ creative_file_import_url: 'http://placehold.it/300x250'
294
+ )
295
+ expect(result).to eq(
296
+ creative_files: {
297
+ creative_file: {
298
+ creative_file_id: 8015,
299
+ creative_file_name: '300x250',
300
+ updated: false
301
+ }
302
+ },
303
+ creative_id: 12164,
304
+ success: true
305
+ )
306
+ end
307
+ end
287
308
  end
@@ -66,9 +66,12 @@ RSpec.describe SoapyCake::Admin do
66
66
  end
67
67
 
68
68
  it 'raises if there is an error', :vcr do
69
- expect do
70
- admin.affiliates(affiliate_id: 'bloops')
71
- end.to raise_error(SoapyCake::RequestFailed)
69
+ expect { admin.affiliates(affiliate_id: 'bloops') }
70
+ .to raise_error(SoapyCake::RequestFailed) do |e|
71
+ expect(e.request_path).to eq('/api/5/export.asmx')
72
+ expect(e.request_body).to include('<cake:affiliate_id>bloops</cake:affiliate_id>')
73
+ expect(e.response_body).to include('There is an error in XML document')
74
+ end
72
75
  end
73
76
 
74
77
  it 'creates an affiliate and returns the ID', :vcr do
@@ -136,4 +136,46 @@ RSpec.describe SoapyCake::AdminAddedit do
136
136
  admin_addedit.add_geo_targets(base_opts)
137
137
  end
138
138
  end
139
+
140
+ describe '#create_creative' do
141
+ context 'when no offer id was passed' do
142
+ it 'raises an error' do
143
+ expect { admin_addedit.create_creative({}) }.to raise_error(
144
+ 'need offer_id to create creative'
145
+ )
146
+ end
147
+ end
148
+
149
+ context 'when creative id was passed' do
150
+ it 'raises an error' do
151
+ expect { admin_addedit.create_creative(offer_id: 10, creative_id: 11) }.to raise_error(
152
+ 'cannot pass creative_id when creating creative'
153
+ )
154
+ end
155
+ end
156
+
157
+ context 'when given the right parameters' do
158
+ it 'creates a creative and adds a file to it' do
159
+ expect(admin_addedit).to receive(:addedit_creative).with(
160
+ offer_id: 10, creative_name: 'creative_name'
161
+ ).and_return(
162
+ success: true, message: 'Creative 12163 Created', creative_id: 12163
163
+ )
164
+ expect(admin_addedit).to receive(:addedit_creative_files).with(
165
+ creative_id: 12163, creative_file_import_url: 'http://www.example.org/image.png'
166
+ ).and_return(
167
+ success: true, message: 'Creative Files 8013 Created.', creative_files: {
168
+ creative_file: {
169
+ creative_file_id: 8013, creative_file_name: 'image.jpg', updated: false
170
+ }
171
+ }
172
+ )
173
+ admin_addedit.create_creative(
174
+ offer_id: 10,
175
+ creative_name: 'creative_name',
176
+ creative_file_import_url: 'http://www.example.org/image.png'
177
+ )
178
+ end
179
+ end
180
+ end
139
181
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe SoapyCake::RequestFailed do
4
+ it 'has request related attributes' do
5
+ error = described_class.new(
6
+ 'Boo!',
7
+ request_path: 'request path',
8
+ request_body: 'request body',
9
+ response_body: 'response body'
10
+ )
11
+ expect(error).to have_attributes(
12
+ 'request_path' => 'request path',
13
+ 'request_body' => 'request body',
14
+ 'response_body' => 'response body'
15
+ )
16
+ end
17
+
18
+ it 'redacts the API key from the request body' do
19
+ error = described_class.new('Boo!', request_body: ">#{ENV.fetch('CAKE_API_KEY')}<")
20
+ expect(error.request_body).to eq('>[redacted]<')
21
+ end
22
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  RSpec.describe SoapyCake::Response do
4
4
  let(:xml) do
5
- <<-EOD
5
+ <<-XML
6
6
  <?xml version="1.0" encoding="utf-8"?>
7
7
  <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
8
8
  <soap:Body>
@@ -22,7 +22,7 @@ RSpec.describe SoapyCake::Response do
22
22
  </SomeResponse>
23
23
  </soap:Body>
24
24
  </soap:Envelope>
25
- EOD
25
+ XML
26
26
  end
27
27
 
28
28
  subject(:response) { described_class.new(xml.strip, false, 0) }
@@ -32,9 +32,6 @@ RSpec.describe SoapyCake::Response do
32
32
  end
33
33
 
34
34
  it 'parses the CAKE XML structure properly' do
35
- expect(response.to_enum.to_a).to eq([
36
- { id: '123' },
37
- { id: '312' }
38
- ])
35
+ expect(response.to_enum.to_a).to eq([{ id: '123' }, { id: '312' }])
39
36
  end
40
37
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rubocop:disable Style/DateTime
3
4
  RSpec.describe SoapyCake::TimeConverter do
4
5
  subject(:time_converter) { described_class.new('Europe/Berlin') }
5
6
 
@@ -37,3 +38,4 @@ RSpec.describe SoapyCake::TimeConverter do
37
38
  end
38
39
  end
39
40
  end
41
+ # rubocop:enable Style/DateTime
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soapy_cake
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - ad2games GmbH
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-14 00:00:00.000000000 Z
11
+ date: 2018-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: saxerator
28
+ name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: nokogiri
42
+ name: retryable
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: retryable
56
+ name: saxerator
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rake
84
+ name: dotenv
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -95,21 +95,21 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rspec
98
+ name: pry
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: 3.0.0
103
+ version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: 3.0.0
110
+ version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: vcr
112
+ name: rake
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">="
@@ -123,21 +123,21 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: webmock
126
+ name: rspec
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: '0'
131
+ version: 3.0.0
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: '0'
138
+ version: 3.0.0
139
139
  - !ruby/object:Gem::Dependency
140
- name: pry
140
+ name: timecop
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - ">="
@@ -151,7 +151,7 @@ dependencies:
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
- name: timecop
154
+ name: vcr
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
@@ -165,7 +165,7 @@ dependencies:
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
- name: dotenv
168
+ name: webmock
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - ">="
@@ -225,6 +225,7 @@ files:
225
225
  - spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_a_clicks_report_with_a_defined_time_range.yml
226
226
  - spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_an_affiliate_with_correct_data_types.yml
227
227
  - spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_media_types.yml
228
+ - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/_create_creatives/creates_a_creative_and_adds_a_file_to_it.yml
228
229
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/advertisers/creates_advertisers.yml
229
230
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/affiliates/edits_affiliates.yml
230
231
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/campaigns/adds_a_campaign.yml
@@ -260,6 +261,7 @@ files:
260
261
  - spec/lib/soapy_cake/affiliate_spec.rb
261
262
  - spec/lib/soapy_cake/campaigns_spec.rb
262
263
  - spec/lib/soapy_cake/modification_type_spec.rb
264
+ - spec/lib/soapy_cake/request_failed_spec.rb
263
265
  - spec/lib/soapy_cake/request_spec.rb
264
266
  - spec/lib/soapy_cake/response_spec.rb
265
267
  - spec/lib/soapy_cake/response_value_spec.rb
@@ -286,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
288
  version: '0'
287
289
  requirements: []
288
290
  rubyforge_project:
289
- rubygems_version: 2.5.2
291
+ rubygems_version: 2.6.11
290
292
  signing_key:
291
293
  specification_version: 4
292
294
  summary: Simple client for the CAKE API
@@ -302,6 +304,7 @@ test_files:
302
304
  - spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_a_clicks_report_with_a_defined_time_range.yml
303
305
  - spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_an_affiliate_with_correct_data_types.yml
304
306
  - spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_media_types.yml
307
+ - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/_create_creatives/creates_a_creative_and_adds_a_file_to_it.yml
305
308
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/advertisers/creates_advertisers.yml
306
309
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/affiliates/edits_affiliates.yml
307
310
  - spec/fixtures/vcr_cassettes/SoapyCake_AdminAddedit/campaigns/adds_a_campaign.yml
@@ -337,6 +340,7 @@ test_files:
337
340
  - spec/lib/soapy_cake/affiliate_spec.rb
338
341
  - spec/lib/soapy_cake/campaigns_spec.rb
339
342
  - spec/lib/soapy_cake/modification_type_spec.rb
343
+ - spec/lib/soapy_cake/request_failed_spec.rb
340
344
  - spec/lib/soapy_cake/request_spec.rb
341
345
  - spec/lib/soapy_cake/response_spec.rb
342
346
  - spec/lib/soapy_cake/response_value_spec.rb