tm-apps-list-api
Version:
110 lines (93 loc) • 3.27 kB
JavaScript
const assert = require('chai').assert;
const hl = require('highland');
const db = require('tm-apps-db')(require('config').db);
const R = require('ramda');
let rewire = require("rewire");
let app = rewire("../../src/server");
let request = require("supertest");
let config = require("config");
let nock = require("nock");
let server = request(app(config, void 0, db));
const createArticleSetion = tuple => {
const publishedDate = tuple[1];
const id = tuple[0];
const article_section = {
"article_id": id,
"section_id": "nationals.71",
"published_date": publishedDate
};
return hl(db.article_section.upsert(article_section));
};
const createBasicArticle = id => {
return {
"data": {
"attributes": {
},
"id": id
}
};
};
function randomDate(id) {
const now = new Date();
const since = new Date(2016, 10, 10);
return [id, new Date(since.getTime() + Math.random() * (now.getTime() - since.getTime()))];
}
before(() => {
nock("http://apps-test-endpoint.com")
.persist()
.get(/\/(?:nationals|regionals)\/\d+\/articles\/(\d+)/)
.reply(200, uri => createBasicArticle(R.match(/\/(?:nationals|regionals)\/\d+\/articles\/(\d+)/, uri)[1]));
});
after(() => {
nock.restore();
});
describe("Sections Component", function () {
this.timeout(6000);
let sortedIds;
before(done => {
db.sequelize.sync({force: true}).then(function () {
done();
});
});
before(done => {
const arrayOfIdsAndDates = R.range(100, 160).map(integer => `nationals.${integer}`).map(randomDate);
sortedIds = R.take(40, R.sort((tuple1, tuple2) => {
return tuple2[1] - tuple1[1];
}, arrayOfIdsAndDates));
const createArticlesStreams = arrayOfIdsAndDates.map(createArticleSetion);
let now = new Date();
hl(createArticlesStreams)
.merge()
.collect()
.flatMap(() => createArticleSetion([
"nationals.12345",
now.setDate(now.getDate() + 14)
]))
.toCallback(done);
});
it("Gets the 30 articles in section 71", done => {
server
.get("/nationals/2/sections/71")
.end((err, res) => {
// check that articles published in future are not included
assert.notEqual(res.body.included[0].id, 12345);
assert.equal(res.header['content-type'], 'application/json; charset=utf-8');
assert.equal(res.body.data.type, "articles");
assert.equal(res.body.included.length, 30);
for (let i = 0; i < 30; i += 1) {
assert.equal(`nationals.${res.body.included[i].data.id}`, sortedIds[i][0]);
}
done();
});
});
it("Handles 404s correctly", done => {
server
.get("/nationals/2/sections/6814768416841")
.end((err, res) => {
assert.equal(res.body.message, "nationals/2/sections/6814768416841 not available");
assert.equal(res.body.code, "NotFoundError");
done();
});
});
});
;