UNPKG

1.83 kBJavaScriptView Raw
1/*global describe, context, it, beforeEach, afterEach*/
2'use strict';
3
4GLOBAL.fetch = require('node-fetch');
5
6const nock = require('nock');
7const expect = require('chai').expect;
8const subject = require('../main').relatedTags;
9
10describe('related tags', () => {
11
12 context('success', () => {
13
14 let result;
15 let request;
16
17 beforeEach(() => {
18 request = nock('https://next-elastic.ft.com')
19 .post('/v3_api_v2/item/_search', /"metadata\.idV1":"success"/)
20 .once()
21 .reply(200, require('./fixtures/related-tags-elastic.json'));
22
23 return subject({
24 taxonomies: [ 'topics', 'sections', 'people', 'organisations' ],
25 id: 'success',
26 range: 60
27 })
28 .then(data => result = data);
29 });
30
31 afterEach(() => {
32 result = null;
33 request.isDone();
34 });
35
36 it('returns an one-dimensional array of objects', () => {
37 expect(result).to.be.an('array');
38 expect(result.length).to.equal(12);
39
40 result.forEach(tag => {
41 expect(tag).to.be.an('object');
42 expect(tag).to.include.keys('prefLabel', 'taxonomy', 'idV1');
43 });
44 });
45
46 it('returns each tag with mapped name and taxonomy', () => {
47 expect(result[0].prefLabel).to.eq('Markets');
48 expect(result[0].taxonomy).to.eq('sections');
49 });
50
51 });
52
53 context('failure', () => {
54
55 let result;
56 let request;
57
58 beforeEach(() => {
59 request = nock('https://next-elastic.ft.com')
60 .post('/v3_api_v2/item/_search', /"metadata\.idV1":"failure"/)
61 .once()
62 .reply(500, { omg: 'wtf' });
63
64 return subject({
65 taxonomies: [ 'topics', 'sections', 'people', 'organisations' ],
66 id: 'failure',
67 range: 60
68 })
69 .then(data => result = data);
70 });
71
72 afterEach(() => {
73 result = null;
74 request.isDone();
75 });
76
77 it('still returns an array', () => {
78 expect(result).to.be.an('array');
79 expect(result.length).to.equal(0);
80 });
81
82 });
83
84});