UNPKG

@itwin/geo-tools-react

Version:
137 lines 7.49 kB
"use strict"; /*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); const chai_1 = require("chai"); const enzyme_1 = require("enzyme"); const react_1 = require("react"); const sinon = require("sinon"); const ts_sinon_1 = require("ts-sinon"); const appui_abstract_1 = require("@itwin/appui-abstract"); const core_common_1 = require("@itwin/core-common"); const core_frontend_1 = require("@itwin/core-frontend"); const react_2 = require("@testing-library/react"); const geo_tools_1 = require("../geo-tools"); const TestUtils_1 = require("./TestUtils"); describe("GeoAddressSearch", () => { const options = [ { addressLine: "addrLine1", formattedAddress: "formattedAddr1" }, { addressLine: "addrLine2", formattedAddress: "formattedAddr2" }, ]; const providerStub = (0, ts_sinon_1.stubObject)(new geo_tools_1.BingAddressProvider()); let getFrustumLonLatBBoxStub; let locateAddressStub; before(async () => { await core_frontend_1.NoRenderApp.startup({ localization: new core_common_1.EmptyLocalization() }); await TestUtils_1.default.initializeGeoTools(); }); beforeEach(() => { locateAddressStub = sinon.stub(geo_tools_1.IModelGeoView, "locateAddress").callsFake(async (_address) => { return Promise.resolve(true); }); providerStub.getSuggestions.returns(Promise.resolve([options[0]])); // providerStub.getAddresses.callsFake(async (_query: string, _viewLatLongBBox: Range2d)=>{ // console.log(`getAddresses called`); // return Promise.resolve([options[0], options[1]]); // }) getFrustumLonLatBBoxStub = sinon.stub(geo_tools_1.IModelGeoView, "getFrustumLonLatBBox").callsFake(() => { return core_frontend_1.MapCartoRectangle.createZero(); }); }); afterEach(() => { locateAddressStub.restore(); getFrustumLonLatBBoxStub.restore(); providerStub.getSuggestions.reset(); }); after(async () => { TestUtils_1.default.terminateUiComponents(); }); it("renders", () => { const wrapper = (0, enzyme_1.mount)(react_1.default.createElement(geo_tools_1.GeoAddressSearch, { provider: new geo_tools_1.BingAddressProvider() })); (0, chai_1.expect)(wrapper.find("input[type='text']").length).to.eq(1); wrapper.unmount(); }); it("should invoke getAddress on AddressProvider when value change", async () => { const wrapper = (0, enzyme_1.mount)(react_1.default.createElement(geo_tools_1.GeoAddressSearch, { provider: providerStub })); const geoAddrSearch = wrapper.find(geo_tools_1.GeoAddressSearch); (0, chai_1.expect)(geoAddrSearch.length).to.eq(1); const input = geoAddrSearch.find("input[type='text']"); (0, chai_1.expect)(input.length).to.eq(1); (0, chai_1.expect)(providerStub.getSuggestions.called).to.be.false; // getAddresses should not be called using an empty value input.simulate("change", { target: { value: "" } }); await TestUtils_1.default.flushAsyncOperations(); wrapper.update(); (0, chai_1.expect)(providerStub.getSuggestions.called).to.be.false; // First test with a getFrustumLonLatBBox stub that returns undefined getFrustumLonLatBBoxStub.restore(); getFrustumLonLatBBoxStub = sinon.stub(geo_tools_1.IModelGeoView, "getFrustumLonLatBBox").callsFake(() => { return undefined; }); input.simulate("change", { target: { value: "sample Addr" } }); await TestUtils_1.default.flushAsyncOperations(); wrapper.update(); getFrustumLonLatBBoxStub.calledOnce.should.true; providerStub.getSuggestions.calledOnce.should.false; // Now test with a stud that returns a proper Range. getFrustumLonLatBBoxStub.restore(); getFrustumLonLatBBoxStub = sinon.stub(geo_tools_1.IModelGeoView, "getFrustumLonLatBBox").callsFake(() => { return core_frontend_1.MapCartoRectangle.createZero(); }); input.simulate("change", { target: { value: "sample Addr" } }); await TestUtils_1.default.flushAsyncOperations(); wrapper.update(); getFrustumLonLatBBoxStub.calledOnce.should.true; providerStub.getSuggestions.calledOnce.should.true; wrapper.unmount(); }); it("should support getSuggestions prop", async () => { const { container } = (0, react_2.render)(react_1.default.createElement("div", null, react_1.default.createElement(geo_tools_1.GeoAddressSearch, { provider: providerStub }))); const input = container.querySelector("input"); (0, chai_1.expect)(input).not.to.be.null; const inputNode = input; react_2.fireEvent.focusIn(inputNode); react_2.fireEvent.change(inputNode, { target: { value: "abc" } }); await TestUtils_1.default.flushAsyncOperations(); const li = container.querySelectorAll("li"); (0, chai_1.expect)(li).not.to.be.null; (0, chai_1.expect)(li === null || li === void 0 ? void 0 : li.length).to.eq(1); react_2.fireEvent.click(li[0]); locateAddressStub.calledOnce.should.true; }); it("should invoke getAddress when enter is pressed", async () => { const wrapper = (0, enzyme_1.mount)(react_1.default.createElement(geo_tools_1.GeoAddressSearch, { provider: providerStub })); const geoAddrSearch = wrapper.find(geo_tools_1.GeoAddressSearch); (0, chai_1.expect)(geoAddrSearch.length).to.eq(1); const input = geoAddrSearch.find("input[type='text']"); (0, chai_1.expect)(input.length).to.eq(1); // Enter should do nothing if no input value input.simulate("keydown", { key: appui_abstract_1.SpecialKey.Enter }); locateAddressStub.calledOnce.should.false; input.simulate("change", { target: { value: "addrLine1" } }); await TestUtils_1.default.flushAsyncOperations(); wrapper.update(); // Enter should invoke locateAddress input.simulate("keydown", { key: appui_abstract_1.SpecialKey.Enter }); locateAddressStub.calledOnce.should.true; wrapper.unmount(); }); it("should clear value when Escape is pressed", async () => { const wrapper = (0, enzyme_1.mount)(react_1.default.createElement(geo_tools_1.GeoAddressSearch, { provider: providerStub })); const geoAddrSearch = wrapper.find(geo_tools_1.GeoAddressSearch); (0, chai_1.expect)(geoAddrSearch.length).to.eq(1); const input = geoAddrSearch.find("input[type='text']"); (0, chai_1.expect)(input.length).to.eq(1); input.simulate("change", { target: { value: "addrLine1" } }); await TestUtils_1.default.flushAsyncOperations(); wrapper.update(); (0, chai_1.expect)(input.getDOMNode().getAttribute("value")).to.eq("addrLine1"); input.simulate("keydown", { key: appui_abstract_1.SpecialKey.Escape }); (0, chai_1.expect)(input.getDOMNode().getAttribute("value")).to.eq(""); wrapper.unmount(); }); }); //# sourceMappingURL=GeoAddressSearch.test.js.map