1+ import { search } from '../../../../src/leaflet/widgets/search/SearchView'
2+ import { FetchRequest } from '../../../../src/common/util/FetchRequest' ;
3+ import { QueryBySQLService } from '../../../../src/common/iServer/QueryBySQLService' ;
4+ import { QueryBySQLParameters } from '../../../../src/common/iServer/QueryBySQLParameters' ;
5+ import { QueryOption } from '../../../../src/common/REST' ;
6+ import { FilterParameter } from '../../../../src/common/iServer/FilterParameter' ;
7+
8+ var map , url = GlobeParameter . WorldURL , testDiv ;
9+ var poiSearch ;
10+ describe ( 'leaflet_search_SearchView' , ( ) => {
11+ var serviceResult , queryBySQLService ;
12+ var originalTimeout , resultLayer ;
13+ var geocodingGeson = [
14+ {
15+ "score" : 85 ,
16+ "address" : "北京市西城区槐柏树街9号北京小学" ,
17+ "location" : {
18+ "x" : 116.360603320322 ,
19+ "y" : 39.89671784607
20+ } ,
21+ "filters" : [
22+ "北京市" ,
23+ "西城区"
24+ ]
25+ } ,
26+
27+ {
28+ "score" : 77.5 ,
29+ "address" : "北京市朝阳区水碓东路15号北京城市建设学校" ,
30+ "location" : {
31+ "x" : 116.473557329787 ,
32+ "y" : 39.9280456866728
33+ } ,
34+ "filters" : [
35+ "北京市" ,
36+ "朝阳区"
37+ ]
38+ }
39+ ] ;
40+
41+ beforeAll ( ( done ) => {
42+
43+ setTimeout ( ( ) => {
44+ testDiv = document . createElement ( "div" ) ;
45+ testDiv . id = 'map' ;
46+ testDiv . style . margin = "0 auto" ;
47+ testDiv . style . width = "800px" ;
48+ testDiv . style . height = "800px" ;
49+ document . body . appendChild ( testDiv ) ;
50+ map = L . map ( 'map' , {
51+ preferCanvas : true ,
52+ crs : L . CRS . EPSG4326 ,
53+ center : [ 20 , 80 ] ,
54+ maxZoom : 18 ,
55+ zoom : 2
56+ } ) ;
57+
58+ poiSearch = L . supermap . widgets . search ( {
59+ cityGeoCodingConfig : {
60+ addressUrl : "http://test:8090/iserver/services/addressmatch-Address/restjsr/v1/address"
61+ } ,
62+ } ) . addTo ( map ) ;
63+ var queryUrl = " http://test:8090/iserver/services/map-world/rest/maps/World/queryResults.json?returnContent=true" ;
64+ spyOn ( FetchRequest , 'post' ) . and . callFake ( ( url , queryString ) => {
65+ console . log ( url ) ;
66+ if ( url . indexOf ( "/queryResults.json" ) > - 1 ) {
67+ var escapedJson = capitals ;
68+ return Promise . resolve ( new Response ( JSON . stringify ( escapedJson ) ) ) ;
69+
70+ }
71+ return Promise . resolve ( ) ;
72+ } ) ;
73+ var queryFailedEventArgs = null , serviceSuccessEventArgs = null ;
74+ var QueryBySQLFailed = ( serviceFailedEventArgs ) => {
75+ queryFailedEventArgs = serviceFailedEventArgs ;
76+ expect ( false ) . toBeTruthy ( ) ;
77+ } ;
78+ var QueryBySQLCompleted = ( queryEventArgs ) => {
79+ serviceSuccessEventArgs = queryEventArgs ;
80+ try {
81+ resultLayer = L . geoJSON ( serviceSuccessEventArgs . result . recordsets [ 0 ] . features , {
82+ pointToLayer : ( geoJsonPoint , latlng ) => {
83+ return L . circleMarker ( latlng , {
84+ fillColor : 'blue' ,
85+ weight : 1 ,
86+ opacity : 1 ,
87+ color : 'blue' ,
88+ fillOpacity : 0.6
89+ } ) ;
90+ } ,
91+ } ) . addTo ( map ) ;
92+ poiSearch . addSearchLayer ( [ L . supermap . widgets . geoJSONLayerWithName ( "首都" , resultLayer ) ] ) ;
93+ done ( ) ;
94+ } catch ( exception ) {
95+ expect ( false ) . toBeTruthy ( ) ;
96+ console . log ( "SearchView" + exception . name + ":" + exception . message ) ;
97+ queryBySQLService . destroy ( ) ;
98+ params . destroy ( ) ;
99+ queryFailedEventArgs = null ;
100+ serviceSuccessEventArgs = null ;
101+ done ( ) ;
102+ }
103+ } ;
104+ var options = {
105+ eventListeners : {
106+ 'processFailed' : QueryBySQLFailed ,
107+ 'processCompleted' : QueryBySQLCompleted
108+ }
109+ } ;
110+ var polygon = L . polygon ( [ [ 90 , 180 ] , [ 90 , - 180 ] , [ - 90 , - 180 ] , [ - 90 , 180 ] , [ 90 , 180 ] ] ) ;
111+ var params = new QueryBySQLParameters ( {
112+ queryParams : { name : "Capitals@World.1" } ,
113+ bounds : polygon . getBounds ( )
114+ } ) ;
115+ queryBySQLService = new QueryBySQLService ( queryUrl , options ) ;
116+ queryBySQLService . events . on ( { 'processCompleted' : QueryBySQLCompleted } ) ;
117+ queryBySQLService . processAsync ( params ) ;
118+ } , 4000 ) ;
119+ } ) ;
120+
121+ beforeEach ( ( ) => {
122+ originalTimeout = jasmine . DEFAULT_TIMEOUT_INTERVAL ;
123+ jasmine . DEFAULT_TIMEOUT_INTERVAL = 50000 ;
124+ serviceResult = null ;
125+ } ) ;
126+
127+ afterEach ( ( ) => {
128+ jasmine . DEFAULT_TIMEOUT_INTERVAL = originalTimeout ;
129+ } ) ;
130+ afterAll ( ( ) => {
131+ map = null ;
132+ document . body . removeChild ( testDiv ) ;
133+ } ) ;
134+
135+ it ( 'search:searchFromLayer' , ( done ) => {
136+
137+ expect ( poiSearch . viewModel . dataModel . layers ) . not . toBeUndefined ( ) ;
138+ poiSearch . viewModel . on ( 'searchlayersucceed' , function ( e ) {
139+ try {
140+ expect ( e . result [ 0 ] . feature ) . not . toBeNull ( ) ;
141+ expect ( e . result [ 0 ] . feature ) . not . toBeUndefined ( ) ;
142+ done ( ) ;
143+ } catch ( exception ) {
144+ console . log ( "'readfile'案例失败:" + exception . name + ":" + exception . message ) ;
145+ expect ( false ) . toBeTruthy ( ) ;
146+ done ( ) ;
147+ }
148+ } )
149+
150+ poiSearch . viewModel . search ( "北京" , "首都" ) ;
151+ } )
152+
153+ it ( 'search:searchFromCityGeocodeService' , ( done ) => {
154+
155+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url , params , options ) => {
156+ console . log ( url ) ;
157+ if ( url . indexOf ( "geocoding" ) > - 1 ) {
158+ var escapedJson = geocodingGeson ;
159+ return Promise . resolve ( new Response ( JSON . stringify ( escapedJson ) ) ) ;
160+ }
161+ return Promise . resolve ( ) ;
162+ } ) ;
163+
164+ poiSearch . viewModel . on ( 'geocodesucceed' , function ( e ) {
165+ try {
166+ expect ( e . result [ 0 ] . geometry . coordinates . length ) . toBe ( 2 ) ;
167+ done ( ) ;
168+ } catch ( exception ) {
169+ console . log ( "'readfile'案例失败:" + exception . name + ":" + exception . message ) ;
170+ expect ( false ) . toBeTruthy ( ) ;
171+ done ( ) ;
172+ }
173+ } )
174+ poiSearch . viewModel . search ( "北京" ) ;
175+ } ) ;
176+
177+ it ( 'panToCity' , ( done ) => {
178+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url , params , options ) => {
179+ console . log ( url ) ;
180+ if ( url . indexOf ( "geocoding" ) > - 1 ) {
181+ var escapedJson = geocodingGeson ;
182+ return Promise . resolve ( new Response ( JSON . stringify ( escapedJson ) ) ) ;
183+ }
184+ return Promise . resolve ( ) ;
185+ } ) ;
186+ spyOn ( poiSearch . viewModel . map , 'setView' ) . and . callThrough ( ) ;
187+ document . getElementsByClassName ( 'widget-search__settings__name' ) [ 0 ] . click ( )
188+ document . getElementsByClassName ( 'widget-citytabpag__content' ) [ 0 ] . childNodes [ 0 ] . click ( ) ;
189+ setTimeout ( ( ) => {
190+ try {
191+ expect ( poiSearch . viewModel . map . setView ) . toHaveBeenCalled ( ) ;
192+ done ( ) ;
193+ } catch ( exception ) {
194+ console . log ( "'layerSelectOptions'案例失败:" + exception . name + ":" + exception . message ) ;
195+ expect ( false ) . toBeTruthy ( ) ;
196+ done ( ) ;
197+ }
198+ } , 2000 ) ;
199+
200+ } )
201+ } )
0 commit comments