diff --git a/endpoints/tracking/index.js b/endpoints/tracking/index.js new file mode 100644 index 00000000..6274bdae --- /dev/null +++ b/endpoints/tracking/index.js @@ -0,0 +1,38 @@ +/* eslint-disable no-param-reassign */ + +const request = require('request') +const cheerio = require('cheerio') +const app = require('../../server') + +app.get('/tracking/:trackingNumber', (req, res) => { + const url = 'http://www.postur.is/' + + 'einstaklingar/senda-pakka-innanlands/finna-sendingu/' + + `?TrackingNumber=${req.params.trackingNumber}&Language=IS` + + request.get(url, (err, response, body) => { + const $ = cheerio.load(body) + + const history = $('table').eq(1).find('tr').map((index, row) => { + return { + date: $(row).children().eq(0).text() + .replace(/\s/g, ''), + action: $(row).children().eq(1).text() + .replace(/\s/g, ''), + } + }) + .get() + .slice(1) + .reduce((sum, curr) => { + sum[curr.date] = curr.action + return sum + }, {}) + + if (Object.keys(history).length === 0) { + return res.status(404).json({}) + } + + return res.cache(60).json({ + history, + }) + }) +}) diff --git a/endpoints/tracking/tests/integration_test.js b/endpoints/tracking/tests/integration_test.js new file mode 100644 index 00000000..37108757 --- /dev/null +++ b/endpoints/tracking/tests/integration_test.js @@ -0,0 +1,27 @@ +const request = require('request') +const assert = require('assert') +const nock = require('nock') + +describe.only('tracking', () => { + const trackingNumber = 'TRACKING_NUMBER' + before(() => { + const path = '/einstaklingar/senda-pakka-innanlands/finna-sendingu/' + + `?TrackingNumber=${trackingNumber}&Language=IS` + const scope = nock('http://www.postur.is') + .get(path) + .reply(200, 'domain matched') + //const secondScope = nock('http://localhost:3101') + // .get(`/tracking/${trackingNumber}`) + // .reply(200, 'domain matched') + }) + + it('should return a 404 when the tracking number can\'t be found', (done) => { + request.get(`http://localhost:3101/tracking/${trackingNumber}`, (error, response) => { + console.log(error) + console.log(response) + assert.equal(404, response.statusCode) + + done() + }) + }) +}) diff --git a/server.js b/server.js index b5e7b1ef..99400974 100644 --- a/server.js +++ b/server.js @@ -67,8 +67,8 @@ fileModule.walkSync('./endpoints', (dirPath, dirs, endpoints) => { if (!(endpoint.includes('.DS_Store') && !dirPath.includes('graphql') && !endpoint.includes('graphql'))) { try { require(`./${dirPath}/${endpoint}`) - } catch (e) { - console.error('Error loading file', e) + } catch (error) { + console.error('Error loading file', error) } } }