three_sixty 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +1 -0
- data/Manifest +25 -0
- data/README +0 -0
- data/Rakefile +21 -0
- data/lib/sorenson/threesixty/account.rb +183 -0
- data/lib/sorenson/threesixty/account_summary.rb +30 -0
- data/lib/sorenson/threesixty/asset.rb +152 -0
- data/lib/sorenson/threesixty/asset_metrics.rb +26 -0
- data/lib/sorenson/threesixty/base.rb +76 -0
- data/lib/sorenson/threesixty/format_constraint.rb +36 -0
- data/lib/sorenson/threesixty/rate_plan.rb +63 -0
- data/lib/sorenson/threesixty/subaccount.rb +34 -0
- data/lib/sorenson/threesixty/uploader.rb +110 -0
- data/lib/sorenson/threesixty.rb +15 -0
- data/spec/account_spec.rb +308 -0
- data/spec/account_summary_spec.rb +57 -0
- data/spec/asset_metrics_spec.rb +31 -0
- data/spec/asset_spec.rb +197 -0
- data/spec/base_spec.rb +90 -0
- data/spec/format_constraint_spec.rb +134 -0
- data/spec/rate_plan_spec.rb +148 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/uploader_spec.rb +241 -0
- data/tasks/rspec.rake +7 -0
- data/three_sixty.gemspec +36 -0
- metadata +116 -0
@@ -0,0 +1,110 @@
|
|
1
|
+
module Sorenson
|
2
|
+
module ThreeSixty
|
3
|
+
class Uploader < Base
|
4
|
+
|
5
|
+
# Attributes
|
6
|
+
attr_accessor :account, :application, :pathToAsset, :pathToShortPreview, :pathToMainThumbnail, :pathToSummaryThumbnails, :displayName, :description, :frameRate, :width, :height, :audioDataRate, :videoDataRate, :audioBitRateMode, :videoBitRateMode, :videoDuration, :presetXML, :fileType, :filter, :audioCodec, :videoCodec, :authorName, :sourceFileName, :sourceFileType, :sourceAudioCodec, :sourceVideoCodec, :sourceFrameRate, :sourceWidth, :sourceHeight, :sourceAudioDataRate, :sourceAudioBitRateMode, :sourceVideoDataRate, :sourceVideoBitRateMode
|
7
|
+
|
8
|
+
# Class Methods
|
9
|
+
|
10
|
+
# Instance Methods
|
11
|
+
def initialize(account, options = {})
|
12
|
+
self.account = account
|
13
|
+
defaults = {
|
14
|
+
'application' => 'Unknown',
|
15
|
+
'frameRate' => '1:1',
|
16
|
+
'width' => 320,
|
17
|
+
'height' => 240,
|
18
|
+
'audioDataRate' => '19000',
|
19
|
+
'videoDataRate' => '23222',
|
20
|
+
'audioBitRateMode' => 'VBR_STEREO',
|
21
|
+
'videoBitRateMode' => 'VBR_TWO_PASS',
|
22
|
+
'videoDuration' => 0,
|
23
|
+
'fileType' => 'Flash',
|
24
|
+
'audioCodec' => 'unknown',
|
25
|
+
'videoCodec' => 'unknown',
|
26
|
+
'authorName' => 'unknown',
|
27
|
+
'sourceFileName' => 'unknown',
|
28
|
+
'sourceAudioCodec' => 'unknown',
|
29
|
+
'sourceVideoCodec' => 'unknown',
|
30
|
+
'sourceFrameRate' => '1:1',
|
31
|
+
'sourceWidth' => 0,
|
32
|
+
'sourceHeight' => 0,
|
33
|
+
'sourceAudioBitRateMode' => 'unknown',
|
34
|
+
'sourceVideoDataRate' => '23222',
|
35
|
+
'sourceVideoBitRateMode' => 'unknown'
|
36
|
+
}
|
37
|
+
|
38
|
+
attributes = defaults.merge(options)
|
39
|
+
|
40
|
+
attributes.each do |k,v|
|
41
|
+
method = "#{k}=".to_sym
|
42
|
+
self.send(method, v) if self.respond_to?(method)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def getMD5Hash
|
47
|
+
md5 = Digest::MD5.new
|
48
|
+
|
49
|
+
return false unless File.exist?(pathToAsset)
|
50
|
+
|
51
|
+
length = File.size(pathToAsset)
|
52
|
+
fp = File.open(pathToAsset)
|
53
|
+
|
54
|
+
totalRead = 0
|
55
|
+
numRead = 0
|
56
|
+
|
57
|
+
numSamples = 100
|
58
|
+
sampleSize = 1024
|
59
|
+
bytes = 1024
|
60
|
+
|
61
|
+
puts length
|
62
|
+
puts numSamples * sampleSize
|
63
|
+
#
|
64
|
+
# if (length <= numSamples * sampleSize)
|
65
|
+
# while (totalRead < length)
|
66
|
+
# totalRead += bytes
|
67
|
+
# data = fp.read(bytes)
|
68
|
+
# md5.update(data);
|
69
|
+
# end
|
70
|
+
# else
|
71
|
+
# skipBlockSize = length / numSamples - sampleSize
|
72
|
+
#
|
73
|
+
# long skipBlockSize = length / numSamples - sampleSize;
|
74
|
+
#
|
75
|
+
# while (length - totalRead > sampleSize + skipBlockSize)
|
76
|
+
# {
|
77
|
+
# numRead = 0;
|
78
|
+
#
|
79
|
+
# while (numRead < sampleSize)
|
80
|
+
# {
|
81
|
+
# numRead = is.read(bytes, 0, Math.min(bytes.length, sampleSize - numRead));
|
82
|
+
# md5.update(bytes, 0, numRead);
|
83
|
+
# totalRead += numRead;
|
84
|
+
# }
|
85
|
+
#
|
86
|
+
# is.skip(skipBlockSize);
|
87
|
+
# totalRead += skipBlockSize;
|
88
|
+
# }
|
89
|
+
#
|
90
|
+
#
|
91
|
+
# end
|
92
|
+
|
93
|
+
md5.hexdigest
|
94
|
+
end
|
95
|
+
|
96
|
+
def uploadAsset
|
97
|
+
# url = URI.parse('http://www.example.com/upload')
|
98
|
+
# File.open("./image.jpg") do |jpg|
|
99
|
+
# req = Net::HTTP::Post::Multipart.new url.path,
|
100
|
+
# "file" => UploadIO.new(jpg, "image/jpeg", "image.jpg")
|
101
|
+
# res = Net::HTTP.start(url.host, url.port) do |http|
|
102
|
+
# http.request(req)
|
103
|
+
# end
|
104
|
+
# end
|
105
|
+
#
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
#require 'net/http/post/multipart'
|
3
|
+
require 'rest_client'
|
4
|
+
require 'json'
|
5
|
+
require 'digest/sha1'
|
6
|
+
|
7
|
+
require(File.join(File.dirname(__FILE__), 'threesixty', 'base'))
|
8
|
+
require(File.join(File.dirname(__FILE__), 'threesixty', 'account'))
|
9
|
+
require(File.join(File.dirname(__FILE__), 'threesixty', 'subaccount'))
|
10
|
+
require(File.join(File.dirname(__FILE__), 'threesixty', 'account_summary'))
|
11
|
+
require(File.join(File.dirname(__FILE__), 'threesixty', 'asset'))
|
12
|
+
require(File.join(File.dirname(__FILE__), 'threesixty', 'asset_metrics'))
|
13
|
+
require(File.join(File.dirname(__FILE__), 'threesixty', 'rate_plan'))
|
14
|
+
require(File.join(File.dirname(__FILE__), 'threesixty', 'format_constraint'))
|
15
|
+
require(File.join(File.dirname(__FILE__), 'threesixty', 'uploader'))
|
@@ -0,0 +1,308 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
module Sorenson
|
4
|
+
module ThreeSixty
|
5
|
+
describe Account, "._login" do
|
6
|
+
it 'should post_to the url given to it' do
|
7
|
+
Account.should_receive(:post_to).with('http://example.com').and_return({'account' => {}})
|
8
|
+
Account.should_receive(:new).with('account' => {})
|
9
|
+
Account._login('http://example.com')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe Account, '.login' do
|
14
|
+
|
15
|
+
before do
|
16
|
+
Account.stub!(:_login).and_return(Account.new({}))
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should return an account object' do
|
20
|
+
Account.login('test', 'secret').class.should == Account
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should access /api/loginApi?username=#{username}&password=#{password}' do
|
24
|
+
Account.should_receive(:_login).with('/api/loginApi?username=test&password=secret')
|
25
|
+
Account.login('test', 'secret')
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
describe Account, '.loginWithAccountId' do
|
31
|
+
|
32
|
+
before do
|
33
|
+
Account.stub!(:_login).and_return(mock_account)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should return an account object' do
|
37
|
+
Account.loginWithAccountId('test', 'account_id').class.should == Account
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should access /api/loginApi?accountId=#{accountId}&password=#{password}' do
|
41
|
+
Account.should_receive(:_login).with('/api/loginApi?accountId=account_id&sessionId=session_id')
|
42
|
+
Account.loginWithAccountId('account_id', 'session_id')
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
describe Account, '#initialize' do
|
48
|
+
before do
|
49
|
+
data = {
|
50
|
+
'sessionId' => 'session_id',
|
51
|
+
'token' => 'a_token',
|
52
|
+
'gotoJuiceURL' => 'http://juice.example.com/',
|
53
|
+
'account' => {
|
54
|
+
'username' => 'test',
|
55
|
+
'status' => 'Live',
|
56
|
+
'id' => 'my_id',
|
57
|
+
'ratePlanExpirationDate' => '2012-01-01',
|
58
|
+
'dateLastModified' => '2009-04-01',
|
59
|
+
'sorensonId' => 'my_sorenson_id',
|
60
|
+
'lastLoginTime' => '2009-04-13',
|
61
|
+
'dateRetrieved' => '2009-04-15',
|
62
|
+
'ratePlan' => 'a rate plan'
|
63
|
+
}
|
64
|
+
}
|
65
|
+
@account = mock_account(data)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should set sessionId' do
|
69
|
+
@account.sessionId.should == 'session_id'
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should set token' do
|
73
|
+
@account.token.should == 'a_token'
|
74
|
+
end
|
75
|
+
|
76
|
+
# depricated
|
77
|
+
it 'should set gotoJuiceURL' do
|
78
|
+
@account.gotoJuiceURL.should == 'http://juice.example.com/'
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should set goto360URL' do
|
82
|
+
@account.goto360URL.should == 'http://juice.example.com/'
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'should set username' do
|
86
|
+
@account.username.should == 'test'
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'should set status' do
|
90
|
+
@account.status.should == 'Live'
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'should set id' do
|
94
|
+
@account.id.should == 'my_id'
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'should set customerId' do
|
98
|
+
@account.customerId.should == 'my_id'
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'should set ratePlanExpirationDate' do
|
102
|
+
@account.ratePlanExpirationDate.should == '2012-01-01'
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'should set dateLastModified' do
|
106
|
+
@account.dateLastModified.should == '2009-04-01'
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'should set sorensonId' do
|
110
|
+
@account.sorensonId.should == 'my_sorenson_id'
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'should set lastLoginTime' do
|
114
|
+
@account.lastLoginTime.should == '2009-04-13'
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'should set dateRetrieved' do
|
118
|
+
@account.dateRetrieved.should == '2009-04-15'
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'should set ratePlan' do
|
122
|
+
@account.ratePlan.should == 'a rate plan'
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
describe Account, '.doesAccountExist' do
|
128
|
+
|
129
|
+
it 'should return true if accountExists is true' do
|
130
|
+
Account.should_receive(:post_to).and_return({'accountExists' => true})
|
131
|
+
Account.doesAccountExist('reallyavalidusername').should be_true
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'should return false if accountExists is false' do
|
135
|
+
Account.should_receive(:post_to).and_return({'accountExists' => false})
|
136
|
+
Account.doesAccountExist('acompletelyfakeusername').should be_false
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
describe Account, '.exists?' do
|
142
|
+
|
143
|
+
it 'should call doesAccountExist' do
|
144
|
+
Account.should_receive(:doesAccountExist).with('reallyavalidusername').and_return(true)
|
145
|
+
Account.exists?('reallyavalidusername').should be_true
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
|
150
|
+
describe Account, '.activate!' do
|
151
|
+
|
152
|
+
it 'should call activateAccount' do
|
153
|
+
Account.should_receive(:activateAccount).with('reallyavalidusername').and_return(true)
|
154
|
+
Account.activate!('reallyavalidusername').should be_true
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
|
159
|
+
describe Account, '.deactivate!' do
|
160
|
+
|
161
|
+
it 'should call deactivateAccount' do
|
162
|
+
Account.should_receive(:deactivateAccount).with('reallyavalidusername').and_return(true)
|
163
|
+
Account.deactivate!('reallyavalidusername').should be_true
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
describe Account, ".activateAccount" do
|
169
|
+
|
170
|
+
it 'should activate the account' do
|
171
|
+
username = 'test'
|
172
|
+
Account.should_receive(:post_to).with("/api/activateAccount?username=#{username}&vToken=#{Base.token_for(username)}").and_return({'success' => true})
|
173
|
+
Account.activateAccount(username).should be_true
|
174
|
+
end
|
175
|
+
|
176
|
+
end
|
177
|
+
|
178
|
+
describe Account, ".deactivateAccount" do
|
179
|
+
|
180
|
+
it 'should deactivate the account' do
|
181
|
+
username = 'test'
|
182
|
+
|
183
|
+
Account.should_receive(:post_to).with("/api/deactivateAccount?username=#{username}&vToken=#{Base.token_for(username)}").and_return({'success' => true})
|
184
|
+
Account.deactivateAccount(username).should be_true
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
describe Account, ".createAccount" do
|
189
|
+
|
190
|
+
before do
|
191
|
+
@username = 'test'
|
192
|
+
@password = 'secret'
|
193
|
+
@ratePlanId = 'rate_plan_id'
|
194
|
+
@url = "/api/createAccount?vToken=#{Base.token_for(@username)}&username=#{@username}&password=#{@password}&ratePlanId=#{@ratePlanId}"
|
195
|
+
Account.stub!(:post_to).with(@url).and_return({'success' => true})
|
196
|
+
end
|
197
|
+
|
198
|
+
it 'should create an account and return true' do
|
199
|
+
Account.should_receive(:updatePasswordHack).with(@username, @password).and_return(true)
|
200
|
+
Account.createAccount(@username, @password, @ratePlanId).should be_true
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'should create an account, activate, and login if activate is true' do
|
204
|
+
Account.should_receive(:activate!).with(@username).and_return(true)
|
205
|
+
Account.should_receive(:login).with(@username, @password).and_return('a fake account')
|
206
|
+
Account.should_receive(:updatePasswordHack).with(@username, @password).and_return(true)
|
207
|
+
Account.createAccount(@username, @password, @ratePlanId, true).should == 'a fake account'
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
describe Account, '.updatePasswordHack' do
|
212
|
+
|
213
|
+
it 'should change the current accounts password' do
|
214
|
+
username = 'auser'
|
215
|
+
password = 'newsecret'
|
216
|
+
Account.should_receive(:post_to).with("/api/updatePassword?username=#{username}&password=#{password}&sessionId=blah").and_return({'success' => true})
|
217
|
+
Account.updatePasswordHack(username, password).should be_true
|
218
|
+
end
|
219
|
+
|
220
|
+
end
|
221
|
+
|
222
|
+
|
223
|
+
describe Account, '#updatePassword' do
|
224
|
+
|
225
|
+
it 'should change the current accounts password' do
|
226
|
+
account = mock_account
|
227
|
+
password = 'newsecret'
|
228
|
+
account.should_receive(:post_to).with("/api/updatePassword?username=#{account.username}&password=#{password}&sessionId=#{account.sessionId}").and_return({'success' => true})
|
229
|
+
account.updatePassword(password).should be_true
|
230
|
+
end
|
231
|
+
|
232
|
+
end
|
233
|
+
|
234
|
+
describe Account, '#updateUsername' do
|
235
|
+
|
236
|
+
it 'should change the current accounts username' do
|
237
|
+
account = mock_account
|
238
|
+
newUsername = 'aNewUsername'
|
239
|
+
account.should_receive(:post_to).with("/api/updateUsername?username=#{account.username}&newUsername=#{newUsername}&sessionId=#{account.sessionId}").and_return({'success' => true})
|
240
|
+
account.updateUsername(newUsername).should be_true
|
241
|
+
end
|
242
|
+
|
243
|
+
end
|
244
|
+
|
245
|
+
describe Account, '#getAssets' do
|
246
|
+
|
247
|
+
it 'should fetch a given range of assets into an array' do
|
248
|
+
account = mock_account
|
249
|
+
Asset.should_receive(:find).with(account, 0, 5).and_return(['foo'])
|
250
|
+
account.getAssets(0, 5).should include('foo')
|
251
|
+
end
|
252
|
+
|
253
|
+
end
|
254
|
+
|
255
|
+
describe Account, '#getAssetCount' do
|
256
|
+
|
257
|
+
it 'should return the total asset count' do
|
258
|
+
account = mock_account
|
259
|
+
account.should_receive(:post_to).with("/api/getMediaListSummary?accountId=#{account.id}&sessionId=#{account.sessionId}").and_return({'totalMediaCount' => 42})
|
260
|
+
account.getAssetCount.should == 42
|
261
|
+
|
262
|
+
end
|
263
|
+
|
264
|
+
end
|
265
|
+
|
266
|
+
describe Account, '#getTotalStorageUsed' do
|
267
|
+
|
268
|
+
it 'should return the total storage used' do
|
269
|
+
Account.stub!(:getAssetCount).and_return(10)
|
270
|
+
account = mock_account
|
271
|
+
account.should_receive(:post_to).with("/api/getTotalStorageUsed?accountId=#{account.id}&sessionId=#{account.sessionId}").and_return({'storageUsed' => 6404172638.0})
|
272
|
+
account.getTotalStorageUsed.should == 6404172638.0
|
273
|
+
|
274
|
+
end
|
275
|
+
|
276
|
+
end
|
277
|
+
|
278
|
+
describe Account, '#getStorageUsed' do
|
279
|
+
|
280
|
+
it 'should return the total storage used' do
|
281
|
+
account = mock_account
|
282
|
+
|
283
|
+
startDate = '2009-04-12'
|
284
|
+
endDate = '2009-04-15'
|
285
|
+
account.should_receive(:post_to).with("/api/getStorageUsed?accountId=#{account.id}&startDate=#{startDate}&endDate=#{endDate}&sessionId=#{account.sessionId}").and_return({'storageUsed' => 4172638.0})
|
286
|
+
account.getStorageUsed(startDate, endDate).should == 4172638.0
|
287
|
+
|
288
|
+
end
|
289
|
+
|
290
|
+
end
|
291
|
+
|
292
|
+
describe Account, '#getAssetMetrics' do
|
293
|
+
|
294
|
+
it 'should return an AssetMetrics object' do
|
295
|
+
account = mock_account
|
296
|
+
|
297
|
+
startDate = '2009-04-01'
|
298
|
+
endDate = '2009-04-15'
|
299
|
+
|
300
|
+
AssetMetrics.should_receive(:find).with(account, startDate, endDate).and_return(['foo'])
|
301
|
+
|
302
|
+
account.getAssetMetrics(startDate, endDate).should include('foo')
|
303
|
+
end
|
304
|
+
|
305
|
+
end
|
306
|
+
|
307
|
+
end
|
308
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
module Sorenson
|
4
|
+
module ThreeSixty
|
5
|
+
describe AccountSummary, '#initialize' do
|
6
|
+
before do
|
7
|
+
data = {
|
8
|
+
'username' => 'test',
|
9
|
+
'status' => 'Live',
|
10
|
+
'id' => 'my_id',
|
11
|
+
'ratePlanExpirationDate' => '2012-01-01',
|
12
|
+
'chosenRatePlan' => 'a cool rate plan',
|
13
|
+
'lastLoginTime' => '2009-04-13',
|
14
|
+
}
|
15
|
+
@account_summary = AccountSummary.new(data)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should set username' do
|
19
|
+
@account_summary.username.should == 'test'
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should set status' do
|
23
|
+
@account_summary.status.should == 'Live'
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should set id' do
|
27
|
+
@account_summary.id.should == 'my_id'
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should set ratePlanExpirationDate' do
|
31
|
+
@account_summary.ratePlanExpirationDate.should == '2012-01-01'
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should set lastLoginTime' do
|
35
|
+
@account_summary.lastLoginTime.should == '2009-04-13'
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should set chosenRatePlan' do
|
39
|
+
@account_summary.chosenRatePlan.should == 'a cool rate plan'
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
describe AccountSummary, '.getAccountSummaries' do
|
46
|
+
|
47
|
+
it 'should fetch all accounts' do
|
48
|
+
AccountSummary.should_receive(:post_to).with("/api/getAllAccounts").and_return('accounts' => [{'id' => '42', 'username' => 'fake username'}, {'id' => '24', 'username' => 'another fake username'}])
|
49
|
+
results = AccountSummary.getAccountSummaries
|
50
|
+
results.first.id.should == '42'
|
51
|
+
results[1].username.should == 'another fake username'
|
52
|
+
results.length.should == 2
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
module Sorenson
|
4
|
+
module ThreeSixty
|
5
|
+
describe AssetMetrics, '#initialize' do
|
6
|
+
|
7
|
+
before do
|
8
|
+
data = {
|
9
|
+
'playTotal' => 40,
|
10
|
+
'filePlayData' => ['test'],
|
11
|
+
'playData' => [{'eventDay' => '2009-04-01', 'plays' => 40}]
|
12
|
+
}
|
13
|
+
|
14
|
+
@asset_metrics = AssetMetrics.new(data)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should set playTotal' do
|
18
|
+
@asset_metrics.playTotal.should == 40
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should set filePlayData' do
|
22
|
+
@asset_metrics.filePlayData.should == ['test']
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should set playData' do
|
26
|
+
@asset_metrics.playData.should include('2009-04-01')
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|