Commit d3cf58056c6480c9da5885905299ed932d3fb5fd

Authored by Leits
2 parents 366e53be 32774873

Merge remote-tracking branch 'leits/coordinates'

... ... @@ -405,7 +405,33 @@ Get Broker Property By Username
405 405 Should Not Be Equal ${left} ${None}
406 406 Should Not Be Equal ${right} ${None}
407 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 446 Звірити дату предметів закупівлі багатопредметного тендера
421 447 [Arguments] ${username} ${tender_data} ${field} ${accuracy}=60 ${absolute_delta}=${False}
422 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 450 \ Log ${index}
426 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 463 [Arguments] ${username} ${field_name} ${object_id}=${None}
431 464 Log ${username}
... ...
... ... @@ -314,16 +314,10 @@ Resource resource.robot
314 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 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 52 ... level3
53 53 Звірити дату предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} deliveryDate.endDate day absolute_delta=${True}
54 54
55   -Відображення координат широти доставки позицій закупівлі багатопредметного тендера
  55 +Відображення координат доставки позицій закупівлі багатопредметного тендера
56 56 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера
57 57 ... viewer
58 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 62 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера
... ...
... ... @@ -357,18 +357,11 @@ ${mode} negotiation.quick
357 357 Відображення дати доставки номенклатури закупівлі
358 358
359 359
360   -Відображення координат широти доставки номенклатури переговорної процедури за нагальною потребою
  360 +Відображення координат доставки номенклатури переговорної процедури за нагальною потребою
361 361 [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури
362 362 ... viewer
363 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 357 Відображення дати доставки номенклатури закупівлі
358 358
359 359
360   -Відображення координат широти доставки номенклатури переговорної процедури
  360 +Відображення координат доставки номенклатури переговорної процедури
361 361 [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури
362 362 ... viewer
363 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 363 Відображення дати доставки номенклатури закупівлі
364 364
365 365
366   -Відображення координат широти доставки номенклатури звіту про укладений договір
  366 +Відображення координат доставки номенклатури звіту про укладений договір
367 367 [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури
368 368 ... viewer
369 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 12 from robot.libraries.BuiltIn import BuiltIn
13 13 from robot.output import LOGGER
14 14 from robot.output.loggerhelper import Message
  15 +from haversine import haversine
  16 +from math import radians, cos, sin, asin, sqrt
15 17 # These imports are not pointless. Robot's resource and testsuite files
16 18 # can access them by simply importing library "service_keywords".
17 19 # Please ignore the warning given by Flake8 or other linter.
... ... @@ -54,6 +56,8 @@ import os
54 56 from barbecue import chef
55 57 import re
56 58
  59 +NUM_TYPES = (int, long, float)
  60 +
57 61
58 62 def get_current_tzdate():
59 63 return get_now().strftime('%Y-%m-%d %H:%M:%S.%f')
... ... @@ -68,20 +72,20 @@ def get_file_contents(path):
68 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 76 '''Compares dates with specified accuracy
73 77
74 78 Before comparison dates are parsed into datetime.datetime format
75 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 83 :param accuracy: Max difference between dates to consider them equal
80 84 Default value - "minute"
81 85 Possible values - "day", "hour", "minute" or float value
82 86 of seconds
83 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 89 Default value - True
86 90 Possible values - True and False or something what can be casted into them
87 91 :returns: Boolean value
... ... @@ -91,15 +95,15 @@ def compare_date(date1, date2, accuracy="minute", absolute_delta=True):
91 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 108 if accuracy == "day":
105 109 accuracy = 24 * 60 * 60 - 1
... ... @@ -120,6 +124,38 @@ def compare_date(date1, date2, accuracy="minute", absolute_delta=True):
120 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 159 def log_object_data(data, file_name=None, format="yaml", update=False):
124 160 """Log object data in pretty format (JSON or YAML)
125 161
... ... @@ -201,8 +237,6 @@ def compute_intrs(brokers_data, used_brokers):
201 237 does not contain ``Default`` entry.
202 238 Using `load_data_from` with ``mode='brokers'`` is recommended.
203 239 """
204   - num_types = (int, long, float)
205   -
206 240 def recur(l, r):
207 241 l, r = deepcopy(l), deepcopy(r)
208 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 244 for ll, rr in zip(l, r):
211 245 lst.append(recur(ll, rr))
212 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 248 if l == r:
215 249 return l
216 250 if l > r:
... ...
... ... @@ -169,18 +169,11 @@ ${mode} single
169 169 Звірити дату тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].deliveryDate.endDate day absolute_delta=${True}
170 170
171 171
172   -Відображення координат широти доставки номенклатури однопредметного тендера
  172 +Відображення координати доставки позицій закупівлі однопредметного тендера
173 173 [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури тендера
174 174 ... viewer
175 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 33 'pytz',
34 34 'parse',
35 35 'chromedriver',
36   - 'barbecue'
  36 + 'barbecue',
  37 + 'haversine'
37 38 ],
38 39 entry_points={
39 40 'console_scripts': [
... ...
Please register or login to post a comment