Showing
9 changed files
with
99 additions
and
71 deletions
| ... | ... | @@ -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 | Відображення назви нас. пункту доставки номенклатури однопредметного тендера |
| ... | ... |
Please
register
or
login
to post a comment