UNPKG

smartystreets-javascript-sdk

Version:
117 lines (103 loc) 3.79 kB
const chai = require("chai"); const expect = chai.expect; const Client = require("../../src/us_autocomplete_pro/Client"); const Lookup = require("../../src/us_autocomplete_pro/Lookup"); const Suggestion = require("../../src/us_autocomplete_pro/Suggestion"); const errors = require("../../src/Errors"); const MockSender = require("../fixtures/mock_senders").MockSender; const MockSenderWithResponse = require("../fixtures/mock_senders").MockSenderWithResponse; describe("A US Autocomplete Pro Client", function () { it("correctly builds parameters for a prefix only lookup.", function () { let mockSender = new MockSender(); let client = new Client(mockSender); let search = '(>")>#'; let lookup = new Lookup(search); let expectedParameters = { exclude_states: "", include_only_cities: "", include_only_states: "", include_only_zip_codes: "", prefer_cities: "", prefer_states: "", prefer_zip_codes: "", search: search, }; client.send(lookup); expect(mockSender.request.parameters).to.deep.equal(expectedParameters); }); it("correctly builds parameters for a fully-populated lookup.", function () { let mockSender = new MockSender(); let client = new Client(mockSender); let lookup = new Lookup(); lookup.search = "1"; lookup.selected = "2"; lookup.maxResults = "3"; lookup.includeOnlyCities = ["a,b", "c,d"]; lookup.includeOnlyStates = ["e", "f"]; lookup.includeOnlyZIPCodes = ["g", "h"]; lookup.excludeStates = ["i", "j"]; lookup.preferCities = ["k,l", "m,n"]; lookup.preferStates = ["o", "p"]; lookup.preferZIPCodes = ["q", "r"]; lookup.preferRatio = "s"; lookup.preferGeolocation = "t"; lookup.source = "all"; let expectedParameters = { search: "1", selected: "2", max_results: "3", include_only_cities: "a,b;c,d", include_only_states: "e;f", include_only_zip_codes: "g;h", exclude_states: "i;j", prefer_cities: "k,l;m,n", prefer_states: "o;p", prefer_zip_codes: "q;r", prefer_ratio: "s", prefer_geolocation: "t", source: "all", }; client.send(lookup); expect(mockSender.request.parameters).to.deep.equal(expectedParameters); }); it("throws an error if sending without a lookup.", function () { let mockSender = new MockSender(); let client = new Client(mockSender); expect(client.send).to.throw(errors.UndefinedLookupError); }); it("rejects with an exception if the response comes back with an error.", function () { let expectedError = new Error("I'm the error."); let mockSender = new MockSenderWithResponse("", expectedError); let client = new Client(mockSender); let lookup = new Lookup("¯\\_(ツ)_/¯"); return client.send(lookup).catch((e) => {expect(e).to.equal(expectedError);}); }); it("returns an empty array when no suggestions are returned.", () => { let mockExpectedPayload = {suggestions: null}; let mockSender = new MockSenderWithResponse(mockExpectedPayload); let client = new Client(mockSender); let lookup = new Lookup("Please let this be easy to test."); let expectedSuggestion = []; return client.send(lookup).then(response => { expect(lookup.result).to.deep.equal(expectedSuggestion); }); }); it("attaches suggestions from a response to a lookup.", function () { const responseData = { streetLine: "a", secondary: "b", city: "c", state: "d", zipcode: "e", entries: "f", }; let mockExpectedPayload = {suggestions: [responseData]}; let mockSender = new MockSenderWithResponse(mockExpectedPayload); let client = new Client(mockSender); let lookup = new Lookup("Trevor the Vampire"); let expectedSuggestion = new Suggestion(responseData); return client.send(lookup).then(response => { expect(lookup.result[0]).to.deep.equal(expectedSuggestion); }); }) });