/
meta-test.js
130 lines (105 loc) · 3.76 KB
/
meta-test.js
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
var Meta = require('../lib/meta'),
should = require('should');
describe('meta-tests', function() {
it('Sets its attributes', function(done) {
var meta = new Meta({
bucket: 'bucket',
key: 'key',
contentType: 'png',
data: 'd32n92390XMIW0',
host: '192.168.1.2',
myown: 'field' });
meta.bucket.should.equal('bucket');
meta.key.should.equal('key');
should.not.exist(meta.vclock);
meta.contentType.should.equal('image/png');
meta.data.toString().should.equal('d32n92390XMIW0');
done();
});
it('Properly falls back to defaults', function(done) {
var meta = new Meta({
bucket: 'bucket',
key: 'key',
contentType: 'png',
data: 'd32n92390XMIW0',
host: '192.168.1.2',
myown: 'field' });
meta.links.should.eql(Meta.defaults.links);
meta.resource.should.equal(Meta.defaults.resource);
meta.clientId.should.equal(Meta.defaults.clientId);
meta.host.should.equal('192.168.1.2');
done();
});
it('Properly falls back to defaults', function(done) {
var meta = new Meta({
bucket: 'bucket',
key: 'key',
contentType: 'png',
data: 'd32n92390XMIW0',
host: '192.168.1.2',
myown: 'field' });
should.not.exist(meta.myown);
done();
});
it('Is able to detect the content type', function(done) {
var meta = new Meta({ data: { a: 1 } });
meta.contentType.should.equal('application/json');
done();
});
it('Is able to detect the content type (XML)', function(done) {
var meta = new Meta({ contentType: 'xml', data: '<a>b</a>' });
meta.contentType.should.equal('text/xml');
done();
});
it('Manual content type setting has priority over detection', function(done) {
var meta = new Meta();
meta.loadData('some text');
meta.contentType.should.equal('text/plain');
done();
});
it('Can be passed multiple option objects, and it mixes in correctly', function(done) {
var meta = new Meta({
bucket: '?',
stream: true,
key: 'key' },
{ bucket: '_',
callback: function() { console.log('test') }
}, { bucket: 'bucket' });
meta.bucket.should.equal('bucket');
meta.key.should.equal('key');
should.exist(meta.stream);
meta.callback.toString().should.equal('function () { console.log(\'test\') }');
done();
});
it('A Meta fed with another Meta results in identity', function(done) {
var meta = new Meta({ bucket: 'bucket', key: 'key' }),
meta2 = new Meta(meta);
meta.should.eql(meta2);
done();
});
});
// TODO What are these?
// keyless.addLink { bucket: 'bucket', key: 'test' }
// keyless.addLink { bucket: 'bucket', key: 'test2', tag: '_' }
// keyless.addLink { bucket: 'bucket', key: 'test', tag: 'tag' }
//
// # dupes
// keyless.addLink { bucket: 'bucket', key: 'test' }
// keyless.addLink { bucket: 'bucket', key: 'test', tag: 'tag' }
// keyless.addLink { bucket: 'bucket', key: 'test2', tag: '_' }
// keyless.addLink { bucket: 'bucket', key: 'test2' } # no tag or '_' are equivalent
//
// 'duplicate links are ignored': (keyless) ->
// assert.deepEqual keyless.links, [
// { bucket: 'bucket', key: 'test' }
// { bucket: 'bucket', key: 'test2', tag: '_' }
// { bucket: 'bucket', key: 'test', tag: 'tag' }
// ]
//
// 'links can be removed': (keyless) ->
// keyless.removeLink { bucket: 'bucket', key: 'test' }
// assert.equal keyless.links.length, 2
// keyless.removeLink { bucket: 'bucket', key: 'test', tag: 'tag' }
// assert.equal keyless.links.length, 1
// keyless.removeLink { bucket: 'bucket', key: 'test2' } # should treat tag '_' as non-existent
// assert.equal keyless.links.length, 0