/
full.integration.coffee
100 lines (87 loc) · 3.63 KB
/
full.integration.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
###
Full tests for integration with third parties is not something we should
run on a regular basis. However, for initial development and periodic checking
of remote API's it might be nice to have this script around and run in every
once in a while.
Don't include this in the gulpfile on checkin.
To run this
* delete the file in the fb database to that it replies with fileExists:false
* turn on FB and make sure configs are pointed at it
###
assert = require 'assert'
config = require '../config'
dc = require '../lib/balihoo-dam-client'
clone = (obj) ->
if typeof obj isnt 'object'
return obj
cl = {}
for key,val of obj
cl[key] = clone val
return cl
filename = "#{__dirname}/testupload.txt"
describe 'full integration test', ->
uploadSuccessfullResult = null
authBase = null
before (done) ->
dc.authorizeUploadFilename filename, (err, result) ->
assert.ifError err, err?.message
authBase = JSON.parse result
done(err)
describe 'uploadFile', ->
auth = null
beforeEach (done) ->
auth = clone authBase
done()
it "doesn't allow field with incorrect content-md5", (done) ->
assert auth.fileExists is false, 'file already exists, delete asset with id ' + auth.assetid + ' in the db'
origMD5 = auth.data['content-md5']
auth.data['content-md5'] = 'notahash'
dc.uploadFile filename, auth, (err, result) ->
assert err
assert.strictEqual err.message,
"AccessDenied: Invalid according to Policy: Policy Condition failed: [\"eq\", \"$content-md5\", \"#{origMD5}\"]"
done()
it "doesn't allow field with incorrect key", (done) ->
origkey = auth.data['key']
auth.data['key'] = 'wrongkey'
dc.uploadFile filename, auth, (err, result) ->
assert.strictEqual err.message,
"AccessDenied: Invalid according to Policy: Policy Condition failed: [\"eq\", \"$key\", \"#{origkey}\"]"
done()
it "doesn't allow a file that doesn't match the approved md5", (done) ->
dc.uploadFile "#{__dirname}/../package.json", auth, (err, result) ->
assert.strictEqual err.message,
"BadDigest: The Content-MD5 you specified did not match what we received."
done()
it 'fails if content-md5 key excluded', (done) -> #should fail the same for any excluded key in the policy
origMD5 = auth.data['content-md5']
delete auth.data['content-md5']
dc.uploadFile filename, auth, (err, result) ->
assert.strictEqual err.message,
"AccessDenied: Invalid according to Policy: Policy Condition failed: [\"eq\", \"$content-md5\", \"#{origMD5}\"]"
done()
it 'fetches the auth if not prefetched, then uploads the file', (done) ->
dc.uploadFile filename, (err, result) ->
assert.ifError err
assert result.assetid
assert result.url
done()
it 'posts the file with prefetched auth', (done) ->
dc.uploadFile filename, auth, (err, result) ->
assert.ifError err
assert result.assetid
assert result.url
uploadSuccessfullResult = result
done()
describe 'authorizeUploadHash', ->
it 'requires an md5', (done) ->
dc.authorizeUploadHash '', (err, response) ->
assert.strictEqual err.message, 'Required parameter key not provided.'
done()
it 'returns existing data when file already exists', (done) ->
dc.authorizeUploadFilename filename, (err, result) ->
auth = JSON.parse result
assert.strictEqual auth.fileExists, true
delete auth.fileExists
assert.deepEqual uploadSuccessfullResult, auth
done()