Commit 32774873816007be6514aa50967b349f2ace05fd

Authored by Leits
1 parent 366e53be

Compare coordinates

@@ -405,7 +405,33 @@ Get Broker Property By Username @@ -405,7 +405,33 @@ Get Broker Property By Username
405 Should Not Be Equal ${left} ${None} 405 Should Not Be Equal ${left} ${None}
406 Should Not Be Equal ${right} ${None} 406 Should Not Be Equal ${right} ${None}
407 ${status}= compare_date ${left} ${right} accuracy=${accuracy} absolute_delta=${absolute_delta} 407 ${status}= compare_date ${left} ${right} accuracy=${accuracy} absolute_delta=${absolute_delta}
408 - Should Be True ${status} msg=Dates are not equal: ${left} != ${right} 408 + Should Be True ${status} msg=Dates differ: ${left} != ${right}
  409 +
  410 +
  411 +Звірити координати доставки тендера
  412 + [Arguments] ${username} ${tender_data} ${field} ${object_id}=${None}
  413 + ${left_lat}= Get_From_Object ${tender_data.data} ${field}.deliveryLocation.latitude
  414 + ${left_lon}= Get_From_Object ${tender_data.data} ${field}.deliveryLocation.longitude
  415 + ${right_lat}= Отримати дані із тендера ${username} ${field}.deliveryLocation.latitude ${object_id}
  416 + ${right_lon}= Отримати дані із тендера ${username} ${field}.deliveryLocation.longitude ${object_id}
  417 + Порівняти координати ${left_lat} ${left_lon} ${right_lat} ${right_lon}
  418 +
  419 +
  420 +Порівняти координати
  421 + [Documentation]
  422 + ... Compare coordinates with specified ``accuracy`` (in km).
  423 + ... Default is `0.1`.
  424 + ...
  425 + ... The keyword will fail if the difference between
  426 + ... ``left`` and ``right`` is more than ``accuracy``,
  427 + ... otherwise it will pass.
  428 + [Arguments] ${left_lat} ${left_lon} ${right_lat} ${right_lon} ${accuracy}=0.1
  429 + Should Not Be Equal ${left_lat} ${None}
  430 + Should Not Be Equal ${left_lon} ${None}
  431 + Should Not Be Equal ${right_lat} ${None}
  432 + Should Not Be Equal ${right_lon} ${None}
  433 + ${status}= compare_coordinates ${left_lat} ${left_lon} ${right_lat} ${right_lon} ${accuracy}
  434 + Should Be True ${status} msg=Coordinates differ: (${left_lat}, ${left_lon}) != (${right_lat}, ${right_lon})
409 435
410 436
411 Звірити поля предметів закупівлі багатопредметного тендера 437 Звірити поля предметів закупівлі багатопредметного тендера
@@ -420,12 +446,19 @@ Get Broker Property By Username @@ -420,12 +446,19 @@ Get Broker Property By Username
420 Звірити дату предметів закупівлі багатопредметного тендера 446 Звірити дату предметів закупівлі багатопредметного тендера
421 [Arguments] ${username} ${tender_data} ${field} ${accuracy}=60 ${absolute_delta}=${False} 447 [Arguments] ${username} ${tender_data} ${field} ${accuracy}=60 ${absolute_delta}=${False}
422 @{items}= Get_From_Object ${tender_data.data} items 448 @{items}= Get_From_Object ${tender_data.data} items
423 - ${len_of_items}= Get Length ${items}  
424 - :FOR ${index} IN RANGE ${len_of_items} 449 + :FOR ${index} ${_} IN ENUMERATE @{items}
425 \ Log ${index} 450 \ Log ${index}
426 \ Звірити дату тендера ${viewer} ${tender_data} items[${index}].${field} accuracy=${accuracy} absolute_delta=${absolute_delta} 451 \ Звірити дату тендера ${viewer} ${tender_data} items[${index}].${field} accuracy=${accuracy} absolute_delta=${absolute_delta}
427 452
428 453
  454 +Звірити координати доставки предметів закупівлі багатопредметного тендера
  455 + [Arguments] ${username} ${tender_data}
  456 + @{items}= Get_From_Object ${tender_data.data} items
  457 + :FOR ${index} ${_} IN ENUMERATE @{items}
  458 + \ Log ${index}
  459 + \ Звірити координати тендера ${viewer} ${tender_data} items[${index}]
  460 +
  461 +
429 Отримати дані із тендера 462 Отримати дані із тендера
430 [Arguments] ${username} ${field_name} ${object_id}=${None} 463 [Arguments] ${username} ${field_name} ${object_id}=${None}
431 Log ${username} 464 Log ${username}
@@ -314,16 +314,10 @@ Resource resource.robot @@ -314,16 +314,10 @@ Resource resource.robot
314 ... absolute_delta=${True} 314 ... absolute_delta=${True}
315 315
316 316
317 -Відображення координат широти доставки номенклатури закупівлі  
318 - Звірити поле тендера ${viewer}  
319 - ... ${USERS.users['${tender_owner}'].initial_data}  
320 - ... items[${ITEMS_NUM}].deliveryLocation.latitude  
321 -  
322 -  
323 -Відображення координат довготи доставки номенклатури закупівлі  
324 - Звірити поле тендера ${viewer} 317 +Відображення координат доставки номенклатури закупівлі
  318 + Звірити координати доставки тендера ${viewer}
325 ... ${USERS.users['${tender_owner}'].initial_data} 319 ... ${USERS.users['${tender_owner}'].initial_data}
326 - ... items[${ITEMS_NUM}].deliveryLocation.longitude 320 + ... items[${ITEMS_NUM}]
327 321
328 322
329 Відображення назви нас. пункту доставки номенклатури закупівлі 323 Відображення назви нас. пункту доставки номенклатури закупівлі
@@ -52,17 +52,11 @@ ${mode} multiItem @@ -52,17 +52,11 @@ ${mode} multiItem
52 ... level3 52 ... level3
53 Звірити дату предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} deliveryDate.endDate day absolute_delta=${True} 53 Звірити дату предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} deliveryDate.endDate day absolute_delta=${True}
54 54
55 -Відображення координат широти доставки позицій закупівлі багатопредметного тендера 55 +Відображення координат доставки позицій закупівлі багатопредметного тендера
56 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера 56 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера
57 ... viewer 57 ... viewer
58 ... ${USERS.users['${viewer}'].broker} 58 ... ${USERS.users['${viewer}'].broker}
59 - Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} deliveryLocation.latitude  
60 -  
61 -Відображення координат довготи доставки позицій закупівлі багатопредметного тендера  
62 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера  
63 - ... viewer  
64 - ... ${USERS.users['${viewer}'].broker}  
65 - Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} deliveryLocation.longitude 59 + Звірити координати доставки предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data}
66 60
67 Відображення назви нас. пункту доставки позицій закупівлі багатопредметного тендера 61 Відображення назви нас. пункту доставки позицій закупівлі багатопредметного тендера
68 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера 62 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера
@@ -357,18 +357,11 @@ ${mode} negotiation.quick @@ -357,18 +357,11 @@ ${mode} negotiation.quick
357 Відображення дати доставки номенклатури закупівлі 357 Відображення дати доставки номенклатури закупівлі
358 358
359 359
360 -Відображення координат широти доставки номенклатури переговорної процедури за нагальною потребою 360 +Відображення координат доставки номенклатури переговорної процедури за нагальною потребою
361 [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури 361 [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури
362 ... viewer 362 ... viewer
363 ... ${USERS.users['${viewer}'].broker} 363 ... ${USERS.users['${viewer}'].broker}
364 - Відображення координат широти доставки номенклатури закупівлі  
365 -  
366 -  
367 -Відображення координат довготи доставки номенклатури переговорної процедури за нагальною потребою  
368 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури  
369 - ... viewer  
370 - ... ${USERS.users['${viewer}'].broker}  
371 - Відображення координат довготи доставки номенклатури закупівлі 364 + Відображення координат доставки номенклатури закупівлі
372 365
373 366
374 Відображення назви нас. пункту доставки номенклатури переговорної процедури за нагальною потребою 367 Відображення назви нас. пункту доставки номенклатури переговорної процедури за нагальною потребою
@@ -357,18 +357,11 @@ ${mode} negotiation @@ -357,18 +357,11 @@ ${mode} negotiation
357 Відображення дати доставки номенклатури закупівлі 357 Відображення дати доставки номенклатури закупівлі
358 358
359 359
360 -Відображення координат широти доставки номенклатури переговорної процедури 360 +Відображення координат доставки номенклатури переговорної процедури
361 [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури 361 [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури
362 ... viewer 362 ... viewer
363 ... ${USERS.users['${viewer}'].broker} 363 ... ${USERS.users['${viewer}'].broker}
364 - Відображення координат широти доставки номенклатури закупівлі  
365 -  
366 -  
367 -Відображення координат довготи доставки номенклатури переговорної процедури  
368 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури  
369 - ... viewer  
370 - ... ${USERS.users['${viewer}'].broker}  
371 - Відображення координат довготи доставки номенклатури закупівлі 364 + Відображення координат доставки номенклатури закупівлі
372 365
373 366
374 Відображення назви нас. пункту доставки номенклатури переговорної процедури 367 Відображення назви нас. пункту доставки номенклатури переговорної процедури
@@ -363,18 +363,11 @@ ${mode} reporting @@ -363,18 +363,11 @@ ${mode} reporting
363 Відображення дати доставки номенклатури закупівлі 363 Відображення дати доставки номенклатури закупівлі
364 364
365 365
366 -Відображення координат широти доставки номенклатури звіту про укладений договір 366 +Відображення координат доставки номенклатури звіту про укладений договір
367 [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури 367 [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури
368 ... viewer 368 ... viewer
369 ... ${USERS.users['${viewer}'].broker} 369 ... ${USERS.users['${viewer}'].broker}
370 - Відображення координат широти доставки номенклатури закупівлі  
371 -  
372 -  
373 -Відображення координат довготи доставки номенклатури звіту про укладений договір  
374 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури  
375 - ... viewer  
376 - ... ${USERS.users['${viewer}'].broker}  
377 - Відображення координат довготи доставки номенклатури закупівлі 370 + Відображення координат доставки номенклатури закупівлі
378 371
379 372
380 Відображення назви нас. пункту доставки номенклатури звіту про укладений договір 373 Відображення назви нас. пункту доставки номенклатури звіту про укладений договір
@@ -12,6 +12,8 @@ from robot.errors import ExecutionFailed @@ -12,6 +12,8 @@ from robot.errors import ExecutionFailed
12 from robot.libraries.BuiltIn import BuiltIn 12 from robot.libraries.BuiltIn import BuiltIn
13 from robot.output import LOGGER 13 from robot.output import LOGGER
14 from robot.output.loggerhelper import Message 14 from robot.output.loggerhelper import Message
  15 +from haversine import haversine
  16 +from math import radians, cos, sin, asin, sqrt
15 # These imports are not pointless. Robot's resource and testsuite files 17 # These imports are not pointless. Robot's resource and testsuite files
16 # can access them by simply importing library "service_keywords". 18 # can access them by simply importing library "service_keywords".
17 # Please ignore the warning given by Flake8 or other linter. 19 # Please ignore the warning given by Flake8 or other linter.
@@ -54,6 +56,8 @@ import os @@ -54,6 +56,8 @@ import os
54 from barbecue import chef 56 from barbecue import chef
55 import re 57 import re
56 58
  59 +NUM_TYPES = (int, long, float)
  60 +
57 61
58 def get_current_tzdate(): 62 def get_current_tzdate():
59 return get_now().strftime('%Y-%m-%d %H:%M:%S.%f') 63 return get_now().strftime('%Y-%m-%d %H:%M:%S.%f')
@@ -68,20 +72,20 @@ def get_file_contents(path): @@ -68,20 +72,20 @@ def get_file_contents(path):
68 return unicode(f.read()) or u'' 72 return unicode(f.read()) or u''
69 73
70 74
71 -def compare_date(date1, date2, accuracy="minute", absolute_delta=True): 75 +def compare_date(left, right, accuracy="minute", absolute_delta=True):
72 '''Compares dates with specified accuracy 76 '''Compares dates with specified accuracy
73 77
74 Before comparison dates are parsed into datetime.datetime format 78 Before comparison dates are parsed into datetime.datetime format
75 and localized. 79 and localized.
76 80
77 - :param date1: First date  
78 - :param date2: Second date 81 + :param left: First date
  82 + :param right: Second date
79 :param accuracy: Max difference between dates to consider them equal 83 :param accuracy: Max difference between dates to consider them equal
80 Default value - "minute" 84 Default value - "minute"
81 Possible values - "day", "hour", "minute" or float value 85 Possible values - "day", "hour", "minute" or float value
82 of seconds 86 of seconds
83 :param absolute_delta: Type of comparison. If set to True, then no matter which date order. If set to 87 :param absolute_delta: Type of comparison. If set to True, then no matter which date order. If set to
84 - False then date2 must be lower then date1 for accuracy value. 88 + False then right must be lower then left for accuracy value.
85 Default value - True 89 Default value - True
86 Possible values - True and False or something what can be casted into them 90 Possible values - True and False or something what can be casted into them
87 :returns: Boolean value 91 :returns: Boolean value
@@ -91,15 +95,15 @@ def compare_date(date1, date2, accuracy="minute", absolute_delta=True): @@ -91,15 +95,15 @@ def compare_date(date1, date2, accuracy="minute", absolute_delta=True):
91 given and accuracy will be set to 60. 95 given and accuracy will be set to 60.
92 96
93 ''' 97 '''
94 - date1 = parse(date1)  
95 - date2 = parse(date2) 98 + left = parse(left)
  99 + right = parse(right)
96 100
97 - if date1.tzinfo is None:  
98 - date1 = TZ.localize(date1)  
99 - if date2.tzinfo is None:  
100 - date2 = TZ.localize(date2) 101 + if left.tzinfo is None:
  102 + left = TZ.localize(left)
  103 + if right.tzinfo is None:
  104 + right = TZ.localize(right)
101 105
102 - delta = (date1 - date2).total_seconds() 106 + delta = (left - right).total_seconds()
103 107
104 if accuracy == "day": 108 if accuracy == "day":
105 accuracy = 24 * 60 * 60 - 1 109 accuracy = 24 * 60 * 60 - 1
@@ -120,6 +124,38 @@ def compare_date(date1, date2, accuracy="minute", absolute_delta=True): @@ -120,6 +124,38 @@ def compare_date(date1, date2, accuracy="minute", absolute_delta=True):
120 return True 124 return True
121 125
122 126
  127 +def compare_coordinates(left_lat, left_lon, right_lat, right_lon, accuracy=0.1):
  128 + '''Compares dates with specified accuracy
  129 +
  130 + Before comparison dates are parsed into datetime.datetime format
  131 + and localized.
  132 +
  133 + :param left_lat: First coordinate latitude
  134 + :param left_lon: First coordinate longitude
  135 + :param right_lat: Second coordinate latitude
  136 + :param right_lon: Second coordinate longitude
  137 + :param accuracy: Max difference between coordinates to consider them equal
  138 + Default value - 0.1
  139 + Possible values - float or integer value of kilometers
  140 +
  141 + :returns: Boolean value
  142 +
  143 + :error: ValueError when there is problem with converting accuracy
  144 + into float value. When it will be catched warning will be
  145 + given and accuracy will be set to 0.1.
  146 +
  147 + '''
  148 + for key, value in {'left_lat': left_lat, 'left_lon': left_lon, 'right_lat': right_lat, 'right_lon': right_lon}.iteritems():
  149 + if not isinstance(value, NUM_TYPES):
  150 + raise TypeError("Invalid type for coordinate '{0}'. "
  151 + "Expected one of {1}, got {2}".format(
  152 + key, str(NUM_TYPES), str(type(value))))
  153 + distance = haversine((left_lat, left_lon), (right_lat, right_lon))
  154 + if distance > accuracy:
  155 + return False
  156 + return True
  157 +
  158 +
123 def log_object_data(data, file_name=None, format="yaml", update=False): 159 def log_object_data(data, file_name=None, format="yaml", update=False):
124 """Log object data in pretty format (JSON or YAML) 160 """Log object data in pretty format (JSON or YAML)
125 161
@@ -201,8 +237,6 @@ def compute_intrs(brokers_data, used_brokers): @@ -201,8 +237,6 @@ def compute_intrs(brokers_data, used_brokers):
201 does not contain ``Default`` entry. 237 does not contain ``Default`` entry.
202 Using `load_data_from` with ``mode='brokers'`` is recommended. 238 Using `load_data_from` with ``mode='brokers'`` is recommended.
203 """ 239 """
204 - num_types = (int, long, float)  
205 -  
206 def recur(l, r): 240 def recur(l, r):
207 l, r = deepcopy(l), deepcopy(r) 241 l, r = deepcopy(l), deepcopy(r)
208 if isinstance(l, list) and isinstance(r, list) and len(l) == len(r): 242 if isinstance(l, list) and isinstance(r, list) and len(l) == len(r):
@@ -210,7 +244,7 @@ def compute_intrs(brokers_data, used_brokers): @@ -210,7 +244,7 @@ def compute_intrs(brokers_data, used_brokers):
210 for ll, rr in zip(l, r): 244 for ll, rr in zip(l, r):
211 lst.append(recur(ll, rr)) 245 lst.append(recur(ll, rr))
212 return lst 246 return lst
213 - elif isinstance(l, num_types) and isinstance(r, num_types): 247 + elif isinstance(l, NUM_TYPES) and isinstance(r, NUM_TYPES):
214 if l == r: 248 if l == r:
215 return l 249 return l
216 if l > r: 250 if l > r:
@@ -169,18 +169,11 @@ ${mode} single @@ -169,18 +169,11 @@ ${mode} single
169 Звірити дату тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].deliveryDate.endDate day absolute_delta=${True} 169 Звірити дату тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].deliveryDate.endDate day absolute_delta=${True}
170 170
171 171
172 -Відображення координат широти доставки номенклатури однопредметного тендера 172 +Відображення координати доставки позицій закупівлі однопредметного тендера
173 [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури тендера 173 [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури тендера
174 ... viewer 174 ... viewer
175 ... ${USERS.users['${viewer}'].broker} 175 ... ${USERS.users['${viewer}'].broker}
176 - Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].deliveryLocation.latitude  
177 -  
178 -  
179 -Відображення координат довготи доставки номенклатури однопредметного тендера  
180 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури тендера  
181 - ... viewer  
182 - ... ${USERS.users['${viewer}'].broker}  
183 - Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].deliveryLocation.longitude 176 + Звірити координати доставки тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0]
184 177
185 178
186 Відображення назви нас. пункту доставки номенклатури однопредметного тендера 179 Відображення назви нас. пункту доставки номенклатури однопредметного тендера
@@ -33,7 +33,8 @@ setup(name='op_robot_tests', @@ -33,7 +33,8 @@ setup(name='op_robot_tests',
33 'pytz', 33 'pytz',
34 'parse', 34 'parse',
35 'chromedriver', 35 'chromedriver',
36 - 'barbecue' 36 + 'barbecue',
  37 + 'haversine'
37 ], 38 ],
38 entry_points={ 39 entry_points={
39 'console_scripts': [ 40 'console_scripts': [
Please register or login to post a comment