Lokasi ngalangkungan proxy:   [ UP ]  
[Ngawartoskeun bug]   [Panyetelan cookie]                
Skip to content
This repository was archived by the owner on Jul 6, 2022. It is now read-only.

Commit 5bb8a6d

Browse files
committed
Adding fleet leave functionality (and tests).
1 parent d20bde8 commit 5bb8a6d

4 files changed

Lines changed: 219 additions & 72 deletions

File tree

app/js/Util.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ var Util = {
6868
redirectIfNecessary: function (fleetKey, callback) {
6969
if (!!fleetKey !== !!Util.getUrlKey() || fleetKey !== Util.getUrlKey()) {
7070
UIPanels.showLoadingPanel('Redirecting to Standing Fleet URL...', function () {
71-
setTimeout($.proxy(Util.redirectToKeyUrl, null, fleetKey),
72-
Data.config.pollInterval);
71+
setTimeout($.proxy(Util.redirectToKeyUrl, null, fleetKey), 2);
72+
// Data.config.pollInterval);
7373
});
7474
} else {
7575
callback();

lib/controllers/fleet.js

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,29 @@ exports.join = function(req, res, next){
4545
})
4646
.done();
4747

48-
// memberService.addAndGet(headerParser.parse(req), fleet.key, function (error, member) {
49-
// if (error) return errorResponse.respond(req, res, 'init', 'Error creating member.');
50-
//
51-
// eventService.addAndGet('memberJoined', member, fleet.key, function (error, event) {
52-
// sessionService.initialize(req, fleet.key, member.key);
53-
// successResponse.respond(res);
54-
// });
55-
// });
56-
// });
57-
//
5848
};
5949

6050
exports.leave = function(req, res, next){
6151
response.success(res, []);
52+
53+
Member.findOneQ({key: req.session.memberKey})
54+
.then(function(member) {
55+
var event = Event.prepare('memberLeft', req.session.fleetKey, member)
56+
event.saveQ();
57+
58+
return member.removeQ();
59+
})
60+
.then(function(member) {
61+
delete req.session;
62+
63+
return response.success(res);
64+
})
65+
.catch(function(error) {
66+
console.log(error)
67+
return response.error(res, 'state', 'Error joining fleet');
68+
})
69+
.done();
70+
6271
};
6372

6473
exports.status = function(req, res, next) {
@@ -166,6 +175,7 @@ exports.poll = function(req, res, next) {
166175
.then(function(events) {
167176

168177
Event.find({fleetKey: req.session.fleetKey, ts: { $lte: moment().valueOf(), $gte: +req.params.lastPollTs }})
178+
.sort({date: 'descending'})
169179
.execQ()
170180
.then(function(recent_events) {
171181
return response.success(res, _.union(events, recent_events));

test/fleet-leave.js

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
var server = require('../server')
2+
, should = require('should')
3+
, assert = require('assert')
4+
, request = require('supertest')
5+
, mongoose = require('mongoose-q')()
6+
, winston = require('winston')
7+
, sinon = require('sinon')
8+
, Q = require('q')
9+
, db = mongoose.connection
10+
, session = require('supertest-session')({app: server.app})
11+
, moment = require('moment')
12+
, _ = require('lodash')
13+
14+
var Fleet = require('../lib/models/fleet')
15+
, Member = require('../lib/models/member')
16+
, Event = require('../lib/models/event')
17+
18+
describe('Fleet API: Leave', function() {
19+
var url = 'http://0.0.0.0:5000/api';
20+
var igb_headers = require('./fixtures/tarei-ju-.json');
21+
22+
it('should catch invalid headers', function(done) {
23+
request(url)
24+
.get('/fleet/leave')
25+
.expect(200)
26+
.end(function(err, res) {
27+
if (err) return done(err);
28+
res.body.success.should.not.be.ok;
29+
res.body.error.message.should.match(/You do not seem to be running the IGB, or your request was corrupted/);
30+
done();
31+
});
32+
});
33+
34+
describe('should get memberLeft events', function() {
35+
before(function(done) {
36+
this.sess_a = new session();
37+
this.sess_b = new session();
38+
39+
Q.all([
40+
db.models.Fleet.remove().execQ(),
41+
db.models.Member.remove().execQ(),
42+
db.models.Event.remove().execQ(),
43+
db.models.Session.remove().execQ()
44+
])
45+
.fin(done);
46+
47+
});
48+
after(function() {
49+
this.sess_a.destroy();
50+
this.sess_b.destroy();
51+
});
52+
53+
var fleet_key = null;
54+
var igb_headers_a = _.clone(igb_headers);
55+
var igb_headers_b = require('./fixtures/jbethusela-ju-.json');
56+
var time = moment().valueOf();
57+
58+
it('when creating a fleet', function(done) {
59+
this.sess_a
60+
.post('/api/fleet/create')
61+
.set(igb_headers_a)
62+
.expect(200)
63+
.end(function(err, res) {
64+
if (err) return done(err);
65+
res.body.success.should.be.ok;
66+
res.body.events.should.not.be.an.Array;
67+
res.body.events.should.have.property('type', 'fleetCreated');
68+
69+
fleet_key = res.body.events.data.key;
70+
done();
71+
});
72+
});
73+
74+
it('when polling a fleet', function(done) {
75+
this.sess_a
76+
.get('/api/fleet/poll/' + time)
77+
.set(igb_headers_a)
78+
.expect(200)
79+
.end(function(err, res) {
80+
if (err) return done(err);
81+
res.body.success.should.be.ok;
82+
done();
83+
});
84+
85+
});
86+
87+
it('when joining a fleet', function(done) {
88+
this.sess_b
89+
.get('/api/fleet/join/' + fleet_key)
90+
.set(igb_headers_b)
91+
.expect(200)
92+
.end(function(err, res) {
93+
if (err) return done(err);
94+
res.body.success.should.be.ok;
95+
res.body.events.should.not.be.an.Array;
96+
res.body.events.should.have.property('type', 'memberJoined');
97+
98+
done();
99+
});
100+
});
101+
102+
it('when leaving a fleet', function(done) {
103+
this.sess_b
104+
.get('/api/fleet/leave')
105+
.set(igb_headers_b)
106+
.expect(200)
107+
.end(function(err, res) {
108+
if (err) return done(err);
109+
res.body.success.should.be.ok;
110+
res.body.should.have.property('events').with.lengthOf(0);
111+
112+
done();
113+
})
114+
});
115+
116+
it('when polling a fleet', function(done) {
117+
this.sess_a
118+
.get('/api/fleet/poll/' + time)
119+
.set(igb_headers_a)
120+
.expect(200)
121+
.end(function(err, res) {
122+
if (err) return done(err);
123+
124+
res.body.success.should.be.ok;
125+
res.body.should.have.property('events').with.lengthOf(3);
126+
// TODO
127+
// res.body.events.should.containDeep('fleetCreated');
128+
// res.body.events.should.containDeep('memberJoined');
129+
// res.body.events.should.containDeep('memberLeft');
130+
131+
done();
132+
});
133+
134+
});
135+
136+
});
137+
138+
});

test/fleet-poll.js

Lines changed: 59 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -18,78 +18,77 @@ describe('Fleet API: Poll', function() {
1818
var url = 'http://0.0.0.0:5000/api';
1919
var igb_headers = require('./fixtures/tarei-ju-.json');
2020

21-
// describe('Invalid', function() {
22-
23-
before(function(done) {
24-
Q.all([
25-
db.models.Fleet.remove().execQ(),
26-
db.models.Member.remove().execQ(),
27-
db.models.Event.remove().execQ(),
28-
db.models.Session.remove().execQ()
29-
])
30-
.fin(done);
21+
before(function(done) {
22+
Q.all([
23+
db.models.Fleet.remove().execQ(),
24+
db.models.Member.remove().execQ(),
25+
db.models.Event.remove().execQ(),
26+
db.models.Session.remove().execQ()
27+
])
28+
.fin(done);
29+
});
30+
31+
it('should catch invalid headers', function(done) {
32+
request(url)
33+
.get('/fleet/poll/' + moment().valueOf())
34+
.expect(200)
35+
.end(function(err, res) {
36+
if (err) return done(err);
37+
res.body.success.should.not.be.ok;
38+
res.body.error.message.should.match(/You do not seem to be running the IGB, or your request was corrupted/);
39+
done();
40+
});
41+
});
42+
43+
it('should catch invalid sessions', function(done) {
44+
request(url)
45+
.get('/fleet/poll/' + moment().valueOf())
46+
.set(igb_headers)
47+
.expect(200)
48+
.end(function(err, res) {
49+
if (err) return done(err);
50+
res.body.success.should.not.be.ok;
51+
res.body.error.message.should.match(/Error fetching fleet poll/);
52+
done();
53+
});
54+
});
55+
56+
describe('should catch invalid polling', function() {
57+
var time = moment().valueOf();
58+
59+
before(function() { this.sess = new session(); });
60+
after(function() { this.sess.destroy(); });
61+
62+
it('when creating a fleet', function(done) {
63+
this.sess
64+
.post('/api/fleet/create')
65+
.set(igb_headers)
66+
.expect(200, done)
3167
});
3268

33-
it('should catch invalid headers', function(done) {
34-
request(url)
35-
.get('/fleet/poll/' + moment().valueOf())
36-
.expect(200)
37-
.end(function(err, res) {
38-
if (err) return done(err);
39-
res.body.success.should.not.be.ok;
40-
res.body.error.message.should.match(/You do not seem to be running the IGB, or your request was corrupted/);
41-
done();
42-
});
69+
it('when polling a fleet', function(done) {
70+
this.sess
71+
.get('/api/fleet/poll/' + time)
72+
.set(igb_headers)
73+
.expect(200, done)
74+
4375
});
4476

45-
it('should catch invalid sessions', function(done) {
46-
request(url)
47-
.get('/fleet/poll/' + moment().valueOf())
77+
it('when polling a fleet again', function(done) {
78+
this.sess
79+
.get('/api/fleet/poll/' + (+time + 7))
4880
.set(igb_headers)
4981
.expect(200)
5082
.end(function(err, res) {
5183
if (err) return done(err);
52-
res.body.success.should.not.be.ok;
53-
res.body.error.message.should.match(/Error fetching fleet poll/);
84+
// TODO
85+
// res.body.success.should.not.be.ok;
86+
// res.body.error.message.should.match(/You are polling too quickly/);
5487
done();
5588
});
5689
});
5790

58-
describe('should catch invalid polling', function() {
59-
var time = moment().valueOf();
60-
61-
before(function() { this.sess = new session(); });
62-
after(function() { this.sess.destroy(); });
63-
64-
it('when creating a fleet', function(done) {
65-
this.sess
66-
.post('/api/fleet/create')
67-
.set(igb_headers)
68-
.expect(200, done)
69-
});
70-
71-
it('when polling a fleet', function(done) {
72-
this.sess
73-
.get('/api/fleet/poll/' + time)
74-
.set(igb_headers)
75-
.expect(200, done)
76-
77-
});
78-
79-
it('when polling a fleet again', function(done) {
80-
this.sess
81-
.get('/api/fleet/poll/' + (+time + 7))
82-
.set(igb_headers)
83-
.expect(200)
84-
.end(function(err, res) {
85-
if (err) return done(err);
86-
// res.body.success.should.not.be.ok;
87-
// res.body.error.message.should.match(/You are polling too quickly/);
88-
done();
89-
});
90-
});
91-
92-
});
91+
});
9392

9493
describe('should get memberUpdated and updateSystemMap events', function() {
9594
before(function() { this.sess = new session(); });

0 commit comments

Comments
 (0)