From 4612a7c5f7fa1275026d152f8570393d81359319 Mon Sep 17 00:00:00 2001 From: Chris Edwards Date: Mon, 2 Jan 2017 19:47:05 -0500 Subject: [PATCH] adding support for lookup by address --- src/index.js | 23 +++++++++++++++++------ test/test_index.js | 22 ++++++++++++++++++++++ 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/index.js b/src/index.js index 4e52d88..2d8e1dd 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,8 @@ -import { getDistrictByLatLng } from 'congressional-district-finder'; +import { + getDistrictByLatLng, + getDistrictByAddress +} from 'congressional-district-finder'; import { getMembers, setProPublicaKey } from './propublica'; @@ -20,21 +23,29 @@ function response(body, statusCode = 200, headers = DEFAULT_HEADERS) { function handler(event, context, callback) { const { queryStringParameters } = event; - const { latLng } = queryStringParameters || {}; + const { latLng, address } = queryStringParameters || {}; setProPublicaKey(process.env.PROPUBLICA_KEY); - if (!latLng) { + if (!latLng && !address) { const message = 'Must provide a query string value: "latLng", ' + - 'a comma delimited set of coordinates.'; + 'a comma delimited set of coordinates,' + + ' or a query string value: "address".'; callback(null, response({ message }, 400)); } else { - const [lat, lng] = latLng.split(','); + let getDistrict; - getDistrictByLatLng(lat, lng) + if (address) { + getDistrict = () => getDistrictByAddress(address); + } else { + const [lat, lng] = latLng.split(','); + getDistrict = () => getDistrictByLatLng(lat, lng); + } + + getDistrict() .then(({ district }) => getMembers(district.districtCode)) .then((result) => { callback(null, response({ result })) diff --git a/test/test_index.js b/test/test_index.js index 35cb5fe..9657ec8 100644 --- a/test/test_index.js +++ b/test/test_index.js @@ -149,4 +149,26 @@ describe('The Index Lambda Handler', () => { }); }); }); + + context('with an address in the US', () => { + + const event = { + queryStringParameters: { + address: '45 Main Street Brooklyn' + } + }; + + it('finds a congressional district', (done) => { + handler(event, {}, (err, { body }) => { + try { + const { result } = JSON.parse(body); + expect(result.district) + .to.eq('NY-07'); + done(); + } catch (err) { + done(err); + } + }); + }); + }); });