Showing
9 changed files
with
99 additions
and
71 deletions
@@ -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