Skip to content

Commit 7930ca3

Browse files
committed
Create proper fake redis lib and client classes to allow easier subclassing and make passing the redisLib in via the context private
1 parent 4cf5122 commit 7930ca3

File tree

5 files changed

+77
-101
lines changed

5 files changed

+77
-101
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,9 @@ The unique revision number for the version of the file being uploaded to Redis.
119119

120120
### redisDeployClient
121121

122-
The Redis client to be used to upload files to the Redis store. By default this option will use a new instance of the [Redis][3] client unless another client is provided in the `redisDeployClient` property of the deployment context. This allows for injection of a mock client for testing purposes.
122+
The Redis client to be used to upload files to the Redis store. By default this option will use a new instance of the [Redis][3] client. This allows for injection of a mock client for testing purposes.
123123

124-
*Default:* `context.redisDeployClient || new Redis(context.config.redis)`
124+
*Default:* `return new Redis(options)`
125125

126126
### didDeployMessage
127127

index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ module.exports = {
4040
},
4141
redisDeployClient: function(context) {
4242
var options = context.config.redis;
43-
var fakeRedis = context.redisDeployClient;
43+
var redisLib = context._redisLib;
4444

45-
return new Redis(options, fakeRedis);
45+
return new Redis(options, redisLib);
4646
}
4747
},
4848
configure: function(/* context */) {

lib/redis.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ var CoreObject = require('core-object');
22
var Promise = require('ember-cli/lib/ext/promise');
33

44
module.exports = CoreObject.extend({
5-
init: function(options, client) {
5+
init: function(options, lib) {
66
var redisOptions = options;
7-
var redisLib = client;
7+
var redisLib = lib;
88

99
if (options.url) {
1010
redisOptions = options.url;
@@ -23,7 +23,7 @@ module.exports = CoreObject.extend({
2323
}
2424
}
2525

26-
if (!client) {
26+
if (!redisLib) {
2727
redisLib = require('then-redis');
2828
}
2929

tests/unit/index-nodetest.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ describe('redis plugin', function() {
9393
database: 4
9494
}
9595
},
96-
redisDeployClient: fakeClient
96+
_redisLib: fakeClient
9797
};
9898
plugin.beforeHook(context);
9999
plugin.configure(context);

tests/unit/lib/redis-nodetest.js

Lines changed: 69 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
var Promise = require('ember-cli/lib/ext/promise');
44
var assert = require('ember-cli/tests/helpers/assert');
5+
var CoreObject = require('core-object');
56

67
describe('redis', function() {
78
var Redis;
@@ -10,23 +11,29 @@ describe('redis', function() {
1011
Redis = require('../../../lib/redis');
1112
});
1213

13-
var fakeClient = {
14+
var FakeClient = CoreObject.extend({
15+
get: function(key) {
16+
return Promise.resolve('some-other-value');
17+
},
18+
set: function() { },
19+
lpush: function() { },
20+
ltrim: function() { }
21+
});
22+
23+
var FakeRedis = CoreObject.extend({
24+
init: function(clientClass) {
25+
this.clientClass = clientClass || FakeClient;
26+
},
27+
1428
createClient: function(options) {
1529
this.options = options;
16-
return {
17-
get: function(key) {
18-
return Promise.resolve('some-other-value');
19-
},
20-
set: function() { },
21-
lpush: function() { },
22-
ltrim: function() { }
23-
}
30+
return new this.clientClass()
2431
}
25-
};
32+
});
2633

2734
describe('#upload', function() {
2835
it('rejects if the key already exists in redis', function() {
29-
var redis = new Redis({}, fakeClient);
36+
var redis = new Redis({}, new FakeRedis());
3037

3138
var promise = redis.upload('key', 'value');
3239
return assert.isRejected(promise, /^Value already exists for key: key:default$/);
@@ -35,18 +42,14 @@ describe('redis', function() {
3542
it('uploads the contents if the key does not already exist', function() {
3643
var fileUploaded = false;
3744

38-
var redis = new Redis({
39-
redisClient: {
40-
get: function(key) {
41-
return Promise.resolve(null);
42-
},
43-
set: function(key, value) {
44-
fileUploaded = true;
45-
},
46-
lpush: function() { },
47-
ltrim: function() { }
45+
var redis = new Redis({}, new FakeRedis(FakeClient.extend({
46+
get: function(key) {
47+
return Promise.resolve(null);
48+
},
49+
set: function(key, value) {
50+
fileUploaded = true;
4851
}
49-
});
52+
})));
5053

5154
var promise = redis.upload('key', 'value');
5255
return assert.isFulfilled(promise)
@@ -59,18 +62,12 @@ describe('redis', function() {
5962
var fileUploaded = false;
6063

6164
var redis = new Redis({
62-
allowOverwrite: true,
63-
redisClient: {
64-
get: function(key) {
65-
return Promise.resolve('some-other-value');
66-
},
67-
set: function(key, value) {
68-
fileUploaded = true;
69-
},
70-
lpush: function() { },
71-
ltrim: function() { }
65+
allowOverwrite: true
66+
}, new FakeRedis(FakeClient.extend({
67+
set: function(key, value) {
68+
fileUploaded = true;
7269
}
73-
});
70+
})));
7471

7572
var promise = redis.upload('key', 'value');
7673
return assert.isFulfilled(promise)
@@ -82,19 +79,14 @@ describe('redis', function() {
8279
it('updates the list of recent uploads once upload is successful', function() {
8380
var recentUploads = [];
8481

85-
var redis = new Redis({
86-
redisClient: {
87-
get: function(key) {
88-
return Promise.resolve(null);
89-
},
90-
set: function(key, value) {
91-
},
92-
lpush: function(key, tag) {
93-
recentUploads.push(key + tag);
94-
},
95-
ltrim: function() { }
96-
}
97-
});
82+
var redis = new Redis({}, new FakeRedis(FakeClient.extend({
83+
get: function(key) {
84+
return Promise.resolve(null);
85+
},
86+
lpush: function(key, tag) {
87+
recentUploads.push(key + tag);
88+
},
89+
})));
9890

9991
var promise = redis.upload('key', 'value');
10092
return assert.isFulfilled(promise)
@@ -107,21 +99,17 @@ describe('redis', function() {
10799
it('trims the list of recent uploads', function() {
108100
var recentUploads = ['a', 'b', 'c'];
109101

110-
var redis = new Redis({
111-
redisClient: {
112-
get: function(key) {
113-
return Promise.resolve(null);
114-
},
115-
set: function(key, value) {
116-
},
117-
lpush: function(key, tag) {
118-
recentUploads.push(key + tag);
119-
},
120-
ltrim: function() {
121-
recentUploads.pop();
122-
}
102+
var redis = new Redis({}, new FakeRedis(FakeClient.extend({
103+
get: function(key) {
104+
return Promise.resolve(null);
105+
},
106+
lpush: function(key, tag) {
107+
recentUploads.push(key + tag);
108+
},
109+
ltrim: function() {
110+
recentUploads.pop();
123111
}
124-
});
112+
})));
125113

126114
var promise = redis.upload('key', 'value');
127115
return assert.isFulfilled(promise)
@@ -133,17 +121,13 @@ describe('redis', function() {
133121
describe('generating the redis key', function() {
134122
it('will use just the default tag if the tag is not provided', function() {
135123
var redisKey = null;
136-
var redis = new Redis({
137-
redisClient: {
138-
get: function(key) {
124+
125+
var redis = new Redis({}, new FakeRedis(FakeClient.extend({
126+
get: function(key) {
139127
redisKey = key;
140128
return Promise.resolve('some-other-value');
141-
},
142-
set: function() { },
143-
lpush: function() { },
144-
ltrim: function() { }
145129
}
146-
});
130+
})));
147131

148132
var promise = redis.upload('key', 'value');
149133
return assert.isRejected(promise)
@@ -154,17 +138,12 @@ describe('redis', function() {
154138

155139
it('will use the key and the tag if the tag is provided', function() {
156140
var redisKey = null;
157-
var redis = new Redis({
158-
redisClient: {
159-
get: function(key) {
141+
var redis = new Redis({}, new FakeRedis(FakeClient.extend({
142+
get: function(key) {
160143
redisKey = key;
161144
return Promise.resolve('some-other-value');
162-
},
163-
set: function() { },
164-
lpush: function() { },
165-
ltrim: function() { }
166-
}
167-
});
145+
}
146+
})));
168147

169148
var promise = redis.upload('key', 'tag', 'value');
170149
return assert.isRejected(promise)
@@ -179,13 +158,11 @@ describe('redis', function() {
179158
it('rejects if the revisionKey doesn\t exist in list of uploaded revisions', function() {
180159
var recentRevisions = ['a', 'b', 'c'];
181160

182-
var redis = new Redis({
183-
redisClient: {
184-
lrange: function() {
185-
return recentRevisions;
186-
}
161+
var redis = new Redis({}, new FakeRedis(FakeClient.extend({
162+
lrange: function() {
163+
return recentRevisions;
187164
}
188-
});
165+
})));
189166

190167
var promise = redis.activate('key-prefix', 'revision-key');
191168
return assert.isRejected(promise)
@@ -198,17 +175,16 @@ describe('redis', function() {
198175
var recentRevisions = ['a', 'b', 'c'];
199176
var redisKey, redisValue;
200177

201-
var redis = new Redis({
202-
redisClient: {
203-
lrange: function() {
204-
return recentRevisions;
205-
},
206-
set: function(key, value) {
207-
redisKey = key;
208-
redisValue = value;
209-
}
178+
179+
var redis = new Redis({}, new FakeRedis(FakeClient.extend({
180+
lrange: function() {
181+
return recentRevisions;
182+
},
183+
set: function(key, value) {
184+
redisKey = key;
185+
redisValue = value;
210186
}
211-
});
187+
})));
212188

213189
var promise = redis.activate('key-prefix', 'c');
214190
return assert.isFulfilled(promise)

0 commit comments

Comments
 (0)