tm-apps-list-api
Version:
85 lines (69 loc) • 2.36 kB
JavaScript
let assert = require("chai").assert;
let nock = require("nock");
let config = require("config");
let R = require("ramda");
let rewire = require("rewire");
let request = require("supertest");
let sinon = require("sinon");
let app = rewire("../../src/server");
const dynamodbData = {
"Id": "regionals.1",
"Area": "topStories-0",
"ArticleIds": R.range(0, 40)
};
let db = {
"query": sinon.stub().callsArgWith(1, null, {Items: [dynamodbData]})
};
let server = request(app(config, db));
const createBasicArticle = id => {
return {
"data": {
"id": id,
"attributes": {}
}
};
};
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("Pools Component", function () {
beforeEach(() => {
db.query.reset();
});
it("gets by section id", done => {
server
.get("/regionals/1/pool/1/top-stories-0")
.end((err, res) => {
assert.equal(db.query.callCount, 1);
const attrs = db.query.firstCall.args[0].ExpressionAttributeValues;
assert.equal(attrs[":hkey"], "regionals.1");
assert.equal(attrs[":rkey"], "top-stories-0");
assert.equal(res.header['content-type'], 'application/json; charset=utf-8');
assert.equal(res.body.data.type, "articles");
assert.equal(res.body.included.length, 40);
res.body.included.forEach((item, i) => {
assert.equal(item.data.id, i);
});
done();
});
});
it("section doesn't exist", done => {
db.query.callsArgWith(1, null, {Items: []});
server
.get("/regionals/1/pool/1/top-stories-0")
.end((err, res) => {
assert.equal(res.error.status, 404);
assert.equal(res.body.code, "NotFoundError");
assert.equal(res.body.message, "No pools found for /regionals/1/pool/1/");
assert.equal(db.query.callCount, 1);
done();
});
});
});
;