Skip to content
This repository was archived by the owner on Feb 15, 2023. It is now read-only.

Commit 77aa182

Browse files
committed
adding tests
1 parent cf27228 commit 77aa182

File tree

7 files changed

+204
-38
lines changed

7 files changed

+204
-38
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"glob": "~7.1.1",
4343
"jscs": "~3.0.7",
4444
"mocha": "~3.1.0",
45+
"pmock": "~0.2.3",
4546
"rewire": "~2.5.2",
4647
"should": "~4.0.0"
4748
},

src/FeedManager.js

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
var stream = require('getstream');
2-
1+
var stream = require('getstream')
2+
, Promise = require('promise');
33
var FeedManager = function () {
44
this.initialize.apply(this, arguments);
55
};
@@ -9,7 +9,7 @@ FeedManager.prototype = {
99
initialize: function (settings) {
1010
this.settings = settings;
1111

12-
options = {};
12+
var options = {};
1313

1414
if (this.settings.apiLocation != '') {
1515
options.location = this.settings.apiLocation;
@@ -36,31 +36,39 @@ FeedManager.prototype = {
3636
},
3737

3838
getNewsFeeds: function (userId) {
39-
feeds = [];
40-
newsFeeds = this.settings.newsFeeds;
39+
var feeds = [];
40+
var newsFeeds = this.settings.newsFeeds;
4141

42-
for (key in newsFeeds) {
43-
slug = newsFeeds[key];
42+
for (var key in newsFeeds) {
43+
var slug = newsFeeds[key];
4444
feeds[slug] = this.client.feed(slug, userId);
4545
}
4646

4747
return feeds;
4848
},
4949

5050
followUser: function (userId, targetUserId) {
51-
newsFeeds = this.getNewsFeeds(userId);
51+
var newsFeeds = this.getNewsFeeds(userId);
52+
var ps = [];
5253

53-
for (slug in newsFeeds) {
54-
newsFeeds[slug].follow(this.settings.userFeed, targetUserId);
54+
for (var slug in newsFeeds) {
55+
var p = newsFeeds[slug].follow(this.settings.userFeed, targetUserId);
56+
ps.push(p);
5557
}
58+
59+
return Promise.all(ps);
5660
},
5761

5862
unfollowUser: function (userId, targetUserId) {
59-
newsFeeds = this.getNewsFeeds(userId);
63+
var newsFeeds = this.getNewsFeeds(userId);
64+
var ps = [];
6065

61-
for (slug in newsFeeds) {
62-
newsFeeds[slug].unfollow(this.settings.userFeed, targetUserId);
66+
for (var slug in newsFeeds) {
67+
var p = newsFeeds[slug].unfollow(this.settings.userFeed, targetUserId);
68+
ps.push(p);
6369
}
70+
71+
return Promise.all(ps);
6472
},
6573

6674
getFeed: function (slug, userId) {
@@ -71,27 +79,29 @@ FeedManager.prototype = {
7179
if (this.trackingEnabled(instance)) {
7280
var activity = instance.createActivity();
7381
var backend = instance.getStreamBackend();
82+
7483
backend.serializeActivities([activity]);
84+
7585
var feedType = instance.activityActorFeed() || this.settings.userFeed;
7686
var userId = backend.getIdFromRef(activity.actor);
77-
feed = this.getFeed(feedType, userId);
78-
feed.addActivity(activity, function (err, response, body) {
79-
if (err) console.log('err: ', err);
80-
});
87+
var feed = this.getFeed(feedType, userId);
88+
89+
return feed.addActivity(activity);
8190
}
8291
},
8392

8493
activityDeleted: function (instance) {
8594
if (this.trackingEnabled(instance)) {
8695
var activity = instance.createActivity();
8796
var backend = instance.getStreamBackend();
97+
8898
backend.serializeActivities([activity]);
99+
89100
var feedType = instance.activityActorFeed() || this.settings.userFeed;
90101
var userId = backend.getIdFromRef(activity.actor);
91-
feed = this.getFeed(feedType, userId);
92-
feed.removeActivity({ 'foreignId': activity.foreign_id }, function (err, response, body) {
93-
if (err) console.log('err: ', err);
94-
});
102+
var feed = this.getFeed(feedType, userId);
103+
104+
return feed.removeActivity({ 'foreignId': activity.foreign_id });
95105
}
96106
},
97107

src/backends/activity.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@ module.exports = function (schema, options) {
4848

4949
// User specific proto functions (with decent defaults)
5050
schema.methods.getStreamBackend = function () {
51-
var stream = require('../index.js');
52-
return new stream.BaseBackend();
51+
throw new Error('Not implemented');
5352
};
5453

5554
schema.methods.activityActorProp = function () {

src/config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ var Config = function () {
2828

2929
var default_config_file = path.join(__dirname, 'config.default.js');
3030

31+
/* istanbul skip else */
3132
if (exists(config_file)) {
3233
settings = _loadFile(config_file);
3334
} else {

test/backend_activity_test.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
var Activity = require('../src/backends/activity')
2+
, expect = require('expect.js');
3+
4+
describe('Activity', function() {
5+
var activity;
6+
var schema;
7+
8+
before(function() {
9+
10+
});
11+
12+
beforeEach(function() {
13+
schema = { methods : {} };
14+
activity = Activity(schema, {});
15+
});
16+
17+
it('#getStreamBackend', function() {
18+
expect(function() {
19+
schema.methods.getStreamBackend();
20+
}).to.throwError();
21+
});
22+
23+
it('#activityActorProp', function() {
24+
var prop = schema.methods.activityActorProp();
25+
26+
expect(prop).to.be('user');
27+
});
28+
29+
it('#activityVerb', function() {
30+
var prop = schema.methods.activityVerb();
31+
32+
expect(prop).to.be('Object');
33+
});
34+
35+
it('#activityExtraData', function() {
36+
var prop = schema.methods.activityExtraData();
37+
38+
expect(prop).to.eql({});
39+
});
40+
41+
it('#activityNotify', function() {
42+
schema.methods.activityNotify();
43+
});
44+
45+
after(function() {
46+
47+
});
48+
49+
});

test/feed_manager_test.js

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
var FeedManager = require('../src/FeedManager')
2+
, pmock = require('pmock')
3+
, mockery = require('mockery')
4+
, sinon = require('sinon')
5+
, expect = require('expect.js');
6+
7+
describe('FeedManager', function() {
8+
var fm;
9+
10+
before(function() {
11+
// replace the module `request` with a stub object
12+
mockery.enable({});
13+
requestStub = sinon.stub();
14+
mockery.registerMock('request', requestStub);
15+
16+
this.env = pmock.env({
17+
STREAM_URL: null,
18+
});
19+
});
20+
21+
beforeEach(function() {
22+
fm = new FeedManager({
23+
apiKey: 12345,
24+
apiSecret: 'abcdefg',
25+
apiAppId: 1000,
26+
apiLocation: 'qa',
27+
userFeed: 'user',
28+
notificationFeed: 'notification',
29+
newsFeeds: {
30+
flat: 'timeline',
31+
aggregated: 'timeline_aggregated',
32+
}
33+
});
34+
});
35+
36+
it('#settings', function() {
37+
expect(fm.client.options.location).to.be('qa');
38+
expect(fm.client.apiKey).to.be(12345);
39+
expect(fm.client.apiSecret).to.be('abcdefg');
40+
expect(fm.client.appId).to.be(1000);
41+
});
42+
43+
it('#getUserFeed', function() {
44+
var feed = fm.getUserFeed('matthisk');
45+
46+
expect(feed.id).to.be('user:matthisk');
47+
});
48+
49+
it('#getNotificationFeed', function() {
50+
var feed = fm.getNotificationFeed('matthisk');
51+
52+
expect(feed.id).to.be('notification:matthisk');
53+
});
54+
55+
it('#getNewsFeeds', function() {
56+
var feeds = fm.getNewsFeeds('matthisk');
57+
58+
expect(feeds['timeline'].id).to.be('timeline:matthisk');
59+
expect(feeds['timeline_aggregated'].id).to.be('timeline_aggregated:matthisk');
60+
});
61+
62+
it('#followUser', function() {
63+
var p = fm.followUser('harry', 'matthisk');
64+
65+
expect(p.then).to.be.a(Function);
66+
});
67+
68+
it('#unfollowUser', function() {
69+
var p = fm.unfollowUser('matthisk', 'harry');
70+
71+
expect(p.then).to.be.a(Function);
72+
});
73+
74+
after(function() {
75+
this.env.reset();
76+
});
77+
78+
});

test/index_test.js

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var should = require('should')
22
, expect = require('expect.js')
33
, fs = require('fs')
44
, path = require('path')
5+
, pmock = require('pmock')
56
, Config = require('../src/config')
67
, BaseBackend = require('../src/backends/base.js')
78
, FeedManager = require('../src/FeedManager')
@@ -57,7 +58,7 @@ describe('feedManagerFactory', function() {
5758

5859
});
5960

60-
describe('Feed manager', function() {
61+
describe('Config', function() {
6162

6263
it('default config', function() {
6364
var settings = main.FeedManager.settings;
@@ -66,32 +67,59 @@ describe('Feed manager', function() {
6667
expect(settings).to.eql(expected);
6768
});
6869

69-
describe('haha', function() {
70-
var configDir = path.join(__dirname, './tmp');
71-
var configFile = path.join(configDir, 'getstream.js');
70+
});
71+
72+
describe('Config Env Var', function() {
73+
var configDir = path.join(__dirname, './tmp');
74+
var configFile = path.join(configDir, 'getstream.js');
7275

73-
before(function() {
74-
process.env.STREAM_NODE_CONFIG_DIR = configDir;
76+
before(function() {
77+
this.env = pmock.env({
78+
STREAM_NODE_CONFIG_DIR: configDir,
79+
});
7580

81+
try {
7682
fs.mkdirSync(configDir);
7783
fs.writeFileSync(configFile, 'exports.config = { apiKey: 12345 };');
78-
});
84+
} catch(e) {
85+
console.error(e);
86+
}
87+
});
7988

80-
after(function() {
89+
after(function() {
90+
try {
8191
fs.unlink(configFile);
8292
fs.rmdirSync(configDir);
83-
delete process.env.STREAM_NODE_CONFIG_DIR;
84-
});
93+
} catch(e) {
94+
console.error(e);
95+
}
96+
this.env.reset();
97+
});
8598

86-
it('env var config dir', function() {
87-
var settings = Config();
99+
it('env var config dir', function() {
100+
var settings = Config();
88101

89-
expect(settings.apiKey).to.be(12345);
90-
});
102+
expect(settings.apiKey).to.be(12345);
91103
});
92104

105+
});
93106

94-
it('override config', function() {
107+
describe('Config Default', function() {
95108

109+
before(function() {
110+
this.cwd = pmock.cwd('/tmp');
96111
});
112+
113+
after(function() {
114+
this.cwd.reset();
115+
});
116+
117+
it('env var config dir', function() {
118+
var settings = Config();
119+
120+
var expected = require('../src/config.default.js').config;
121+
122+
expect(settings).to.eql(expected);
123+
});
124+
97125
});

0 commit comments

Comments
 (0)