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