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