soapy_cake 2.2.1 → 2.2.3

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