Skip to content

Commit 264b0df

Browse files
Brian DeteringBrian Detering
authored andcommitted
input validation
1 parent 1e08cd6 commit 264b0df

File tree

3 files changed

+68
-7
lines changed

3 files changed

+68
-7
lines changed

index.js

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,22 +105,37 @@ module.exports = fig => {
105105
}
106106

107107
load(key) {
108-
return Q(this.loader.load(key));
108+
return key ?
109+
Q(this.loader.load(key)) :
110+
Q.reject(new TypeError('key parameter is required'));
109111
}
110112

111113
loadMany(keys) {
112-
return Q(this.loader.loadMany(keys));
114+
return keys ?
115+
Q(this.loader.loadMany(keys)) :
116+
Q.reject(new TypeError('keys parameter is required'));
113117
}
114118

115119
prime(key, val) {
116-
return rSetAndGet(this.keySpace, key, val, this.opt)
117-
.then(resp => this.loader.clear(key).prime(key, resp));
120+
if(!key) {
121+
return Q.reject(new TypeError('key parameter is required'));
122+
}
123+
else if(val === undefined) {
124+
return Q.reject(new TypeError('value parameter is required'));
125+
}
126+
else {
127+
return rSetAndGet(this.keySpace, key, val, this.opt)
128+
.then(r => {
129+
this.loader.clear(key)
130+
.prime(key, r === '' ? null : r);
131+
});
132+
}
118133
}
119134

120135
clear(key) {
121136
return key ?
122137
rDel(this.keySpace, key).then(() => this.loader.clear(key)) :
123-
Q.reject(new Error('Key parameter is required'));
138+
Q.reject(new TypeError('key parameter is required'));
124139
}
125140
};
126141
};

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "redis-dataloader",
3-
"version": "0.2.0",
3+
"version": "0.3.0",
44
"description": "DataLoader Using Redis as a Cache",
55
"main": "index.js",
66
"scripts": {

test.js

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ describe('redis-dataloader', () => {
5757
}).done();
5858
});
5959

60+
it('should require key', done => {
61+
this.loader.load().catch(err => {
62+
expect(err).to.be.instanceof(TypeError);
63+
done();
64+
}).done();
65+
});
66+
6067
it('should use local cache on second load', done => {
6168
this.stubs.redisMGet = sinon.stub(redis, 'mget', (keys, cb) => {
6269
cb(null, [JSON.stringify(this.data.json)]);
@@ -165,6 +172,21 @@ describe('redis-dataloader', () => {
165172
done();
166173
}).done();
167174
});
175+
176+
it('should handle empty array', done => {
177+
this.loader.loadMany([])
178+
.then(results => {
179+
expect(results).to.deep.equal([]);
180+
done();
181+
}).done();
182+
});
183+
184+
it('should require array', done => {
185+
this.loader.loadMany().catch(err => {
186+
expect(err).to.be.instanceof(TypeError);
187+
done();
188+
}).done();
189+
});
168190
});
169191

170192
describe('prime', () => {
@@ -185,6 +207,30 @@ describe('redis-dataloader', () => {
185207
done();
186208
}).done();
187209
});
210+
211+
it('should require key', done => {
212+
this.loader.prime(undefined, { new: 'value' })
213+
.catch(err => {
214+
expect(err).to.be.instanceof(TypeError);
215+
done();
216+
}).done();
217+
});
218+
219+
it('should require value', done => {
220+
this.loader.prime('json').catch(err => {
221+
expect(err).to.be.instanceof(TypeError);
222+
done();
223+
}).done();
224+
});
225+
226+
it('should allow null for value', done => {
227+
this.loader.prime('json', null)
228+
.then(() => this.loader.load('json'))
229+
.then(data => {
230+
expect(data).to.be.null;
231+
done();
232+
}).done();
233+
});
188234
});
189235

190236
describe('clear', () => {
@@ -202,7 +248,7 @@ describe('redis-dataloader', () => {
202248
it('should require a key', done => {
203249
this.loader.clear()
204250
.catch(err => {
205-
expect(err.message).to.equal('Key parameter is required');
251+
expect(err).to.be.instanceof(TypeError);
206252
done();
207253
}).done();
208254
});

0 commit comments

Comments
 (0)