todos-contra-el-fuego-web/test/rest.test.js
2018-06-19 10:49:53 +02:00

293 lines
10 KiB
JavaScript

/* eslint-disable import/no-absolute-path */
/* eslint-env mocha */
/* eslint-disable func-names, prefer-arrow-callback */
import { chai } from 'meteor/practicalmeteor:chai';
import { Meteor } from 'meteor/meteor';
import { HTTP } from 'meteor/http';
const testPort = process.env.TEST_PORT;
function url(path) {
return `http://127.0.0.1:${testPort}/${path}`;
}
describe('basic api v1 returns', () => {
it('should return uptime', async done =>
HTTP.get(url('api/v1/status/uptime'), {
data: {
}
}, (error, result) => {
chai.expect(error, null);
chai.expect(result.statusCode).to.equal(200);
chai.expect(typeof result.data.ms).to.equal('number');
done();
}));
it('should return last-fire', async done =>
HTTP.get(url('api/v1/status/active-fires-count'), {
data: {
}
}, (error, result) => {
chai.expect(error, null);
chai.expect(result.statusCode).equal(200);
chai.expect(typeof result.data.total).to.equal('number');
done();
}));
const token = Meteor.settings.private.internalApiToken;
it('should return fires in some location', async done =>
HTTP.get(url(`api/v1/fires-in/${token}/38.736946/-9.142685/100`), {
data: {
}
}, (error, result) => {
chai.expect(error, null);
chai.expect(result.statusCode).equal(200);
chai.expect(typeof result.data.total).to.equal('number');
chai.expect(typeof result.data.real).to.equal('number');
done();
}));
it('should return full fires in some location', async done =>
HTTP.get(url(`api/v1/fires-in-full/${token}/38.736946/-9.142685/100`), {
data: {
}
}, (error, result) => {
chai.expect(error, null);
chai.expect(result.statusCode).equal(200);
chai.expect(typeof result.data.total).to.equal('number');
chai.expect(typeof result.data.real).to.equal('number');
chai.expect(typeof result.data.falsePos).to.equal('object');
chai.expect(typeof result.data.industries).to.equal('object');
chai.expect(typeof result.data.fires).to.equal('object');
done();
}));
it('should not return full fires with some wrong token', async done =>
HTTP.get(url('api/v1/fires-in-full/token/38.736946/-9.142685/100'), {
data: {
}
}, (error, result) => {
chai.expect(error, null);
chai.expect(result.statusCode).equal(401);
done();
}));
it('should not return fires with some wrong token', async done =>
HTTP.get(url('api/v1/fires-in/token/38.736946/-9.142685/100'), {
data: {
}
}, (error, result) => {
chai.expect(error, null);
chai.expect(result.statusCode).equal(401);
done();
}));
it('should not return fires with some wrong distance', async done =>
HTTP.get(url(`api/v1/fires-in-full/${token}/38.736946/-9.142685/1100`), (error, result) => {
chai.expect(error, null);
chai.expect(result.statusCode).equal(400);
done();
}));
const mobileToken = 'user-mobile-firebase-token';
let testUserId;
let returnedSubsId;
const objId = new Meteor.Collection.ObjectID();
it('should create mobile users', async (done) => {
// this are removed in the test database but we are testing in dev/ci database
// Delete the test account if it's still present
// Meteor.users.remove({ fireBaseToken: mobileToken });
HTTP.post(url('api/v1/mobile/users'), {
data: {
token,
mobileToken,
lang: 'en'
}
}, (error, result) => {
chai.expect(error, null);
const jsendResult = result.data;
chai.expect(jsendResult.status).equal('success');
chai.expect(result.statusCode).equal(200);
chai.expect(jsendResult.data.upsertResult.numberAffected).to.equal(1);
chai.expect(jsendResult.data.mobileToken).to.equal(mobileToken);
chai.expect(jsendResult.data.lang).to.equal('en');
chai.expect(typeof jsendResult.data.username).to.equal('string');
testUserId = jsendResult.data.userId;
chai.expect(typeof testUserId).to.equal('string');
done();
});
});
it('should not create mobile users with wrong token', async (done) => {
// this are removed in the test database but we are testing in dev/ci database
// Delete the test account if it's still present
// Meteor.users.remove({ fireBaseToken: mobileToken });
HTTP.post(url('api/v1/mobile/users'), {
data: {
token: 'wrong token',
mobileToken,
lang: 'en'
}
}, (error, result) => {
chai.expect(error, null);
chai.expect(result.statusCode).equal(401);
done();
});
});
function addSubs(done) {
// this are removed in the test database but we are testing in dev/ci database
// Remove previous subs of this user
// Subscriptions.remove({ owner: testUserId });
// chai.expect(Subscriptions.find({ owner: testUserId }).count()).to.equal(0);
HTTP.post(url('api/v1/mobile/subscriptions'), {
data: {
token,
mobileToken,
id: objId._str,
lat: 3.106111,
lon: 53.5775,
distance: 100
}
}, (error, result) => {
chai.expect(error, null);
if (result.statusCode !== 200) console.log(result);
chai.expect(result.statusCode).equal(200);
const jsendResult = result.data;
chai.expect(jsendResult.status).equal('success');
returnedSubsId = jsendResult.data.subsId;
chai.expect(returnedSubsId.toString()).equal(objId._str);
done();
});
}
it('should create mobile user subscriptions', async (done) => {
addSubs(done);
});
it('should not create mobile user subscriptions with wrong token', async (done) => {
HTTP.post(url('api/v1/mobile/subscriptions'), {
data: {
token: 'wrongOne',
mobileToken,
id: objId._str,
lat: 3.106111,
lon: 53.5775,
distance: 100
}
}, (error, result) => {
chai.expect(error, null);
if (result.statusCode !== 401) console.log(result);
chai.expect(result.statusCode).equal(401);
done();
});
});
it('should get all mobile user subscriptions', async (done) => {
HTTP.get(url(`api/v1/mobile/subscriptions/all/${token}/${mobileToken}`), {
}, (error, result) => {
chai.expect(error, null);
if (result.statusCode !== 200) console.log(result);
chai.expect(result.statusCode).equal(200);
const jsendResult = result.data;
chai.expect(jsendResult.status).equal('success');
chai.expect(typeof jsendResult.data.subscriptions).to.equal('object');
chai.expect(typeof jsendResult.data.count).to.equal('number');
if (jsendResult.data.count !== 1) console.log(result);
chai.expect(jsendResult.data.count).to.equal(1);
// console.log(JSON.stringify(jsendResult.data.subscriptions));
done();
});
});
it('should remove mobile user subscriptions', async (done) => {
// this are removed in the test database but we are testing in dev/ci database
HTTP.del(url(`api/v1/mobile/subscriptions/${token}/${mobileToken}/${returnedSubsId}`), {
}, (error, result) => {
chai.expect(error, null);
if (result.statusCode !== 200) console.log(result);
chai.expect(result.statusCode).equal(200);
const jsendResult = result.data;
chai.expect(jsendResult.status).equal('success');
done();
});
});
it('should get all mobile user subscriptions after deletion', async (done) => {
HTTP.get(url(`api/v1/mobile/subscriptions/all/${token}/${mobileToken}`), {
}, (error, result) => {
chai.expect(error, null);
if (result.statusCode !== 200) console.log(result);
chai.expect(result.statusCode).equal(200);
const jsendResult = result.data;
chai.expect(jsendResult.status).equal('success');
chai.expect(typeof jsendResult.data.subscriptions).to.equal('object');
chai.expect(typeof jsendResult.data.count).to.equal('number');
if (jsendResult.data.count !== 0) console.log(result);
chai.expect(jsendResult.data.count).to.equal(0);
// console.log(JSON.stringify(jsendResult.data.subscriptions));
done();
});
});
it('should not remove mobile user subscriptions with wrong token', async (done) => {
HTTP.del(url(`api/v1/mobile/subscriptions/wrongOne/${mobileToken}/${returnedSubsId}`), {
}, (error, result) => {
chai.expect(error, null);
if (result.statusCode !== 401) console.log(result);
chai.expect(result.statusCode).equal(401);
done();
});
});
it('should not get mobile user subscriptions with wrong token', async (done) => {
HTTP.get(url(`api/v1/mobile/subscriptions/all/wrongOne/${mobileToken}`), {
}, (error, result) => {
chai.expect(error, null);
if (result.statusCode !== 401) console.log(result);
chai.expect(result.statusCode).equal(401);
done();
});
});
it('should get all mobile user subscriptions', async (done) => {
HTTP.get(url(`api/v1/mobile/subscriptions/all/${token}/${mobileToken}`), {
}, (error, result) => {
chai.expect(error, null);
// console.log(result);
if (result.statusCode !== 200) console.log(result);
chai.expect(result.statusCode).equal(200);
const jsendResult = result.data;
chai.expect(jsendResult.status).equal('success');
chai.expect(typeof jsendResult.data.subscriptions).to.equal('object');
chai.expect(typeof jsendResult.data.count).to.equal('number');
if (jsendResult.data.count !== 0) console.log(result);
chai.expect(jsendResult.data.count).to.equal(0);
done();
});
});
it('should del all mobile user subscriptions', async (done) => {
// Add subs
addSubs(() => {
HTTP.del(url(`api/v1/mobile/subscriptions/all/${token}/${mobileToken}`), {
}, (error, result) => {
chai.expect(error, null);
if (result.statusCode !== 200) console.log(result);
chai.expect(result.statusCode).equal(200);
const jsendResult = result.data;
chai.expect(jsendResult.status).equal('success');
chai.expect(typeof jsendResult.data.count).to.equal('number');
chai.expect(jsendResult.data.count).to.be.at.most(1);
done();
});
});
});
});