UNPKG

tm-apps-list-api

Version:

110 lines (93 loc) 3.27 kB
'use strict'; 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(); }); }); });