Showing
5 changed files
with
104 additions
and
42 deletions
... | ... | @@ -78,6 +78,12 @@ Library openprocurement_client_helper.py |
78 | 78 | Fail Field not found: ${field_name} |
79 | 79 | |
80 | 80 | |
81 | +Отримати інформацію із запитання | |
82 | + [Arguments] ${username} ${question_id} ${field_name} | |
83 | + ${field_name}= Отримати шлях до поля об’єкта ${username} ${field_name} ${question_id} | |
84 | + Run Keyword And Return openprocurement_client.Отримати інформацію із тендера ${username} ${field_name} | |
85 | + | |
86 | + | |
81 | 87 | Внести зміни в тендер |
82 | 88 | [Arguments] ${username} ${tender_uaid} ${fieldname} ${fieldvalue} |
83 | 89 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
... | ... | @@ -136,10 +142,10 @@ Library openprocurement_client_helper.py |
136 | 142 | |
137 | 143 | |
138 | 144 | Відповісти на питання |
139 | - [Arguments] ${username} ${tender_uaid} ${question} ${answer_data} | |
145 | + [Arguments] ${username} ${tender_uaid} ${question} ${answer_data} ${question_id} | |
140 | 146 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
141 | 147 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} |
142 | - ${answer_data.data.id}= Set Variable ${question.data.id} | |
148 | + ${answer_data.data.id}= openprocurement_client.Отримати інформацію із запитання ${username} ${question_id} id | |
143 | 149 | ${question_with_answer}= Call Method ${USERS.users['${username}'].client} patch_question ${tender} ${answer_data} |
144 | 150 | Log object data ${question_with_answer} question_with_answer |
145 | 151 | [return] ${question_with_answer} | ... | ... |
... | ... | @@ -311,10 +311,8 @@ Get Broker Property By Username |
311 | 311 | |
312 | 312 | |
313 | 313 | Звірити поле тендера із значенням |
314 | - [Arguments] ${username} ${left} ${field} | |
315 | - ${right}= Отримати дані із тендера ${username} ${field} | |
316 | - Log ${left} | |
317 | - Log ${right} | |
314 | + [Arguments] ${username} ${left} ${field} ${object_id}=${None} | |
315 | + ${right}= Отримати дані із тендера ${username} ${field} ${object_id} | |
318 | 316 | Порівняти об'єкти ${left} ${right} |
319 | 317 | |
320 | 318 | |
... | ... | @@ -334,8 +332,8 @@ Get Broker Property By Username |
334 | 332 | |
335 | 333 | |
336 | 334 | Звірити дату тендера із значенням |
337 | - [Arguments] ${username} ${left} ${field} | |
338 | - ${right}= Отримати дані із тендера ${username} ${field} | |
335 | + [Arguments] ${username} ${left} ${field} ${object_id}=${None} | |
336 | + ${right}= Отримати дані із тендера ${username} ${field} ${object_id} | |
339 | 337 | Порівняти дати ${left} ${right} |
340 | 338 | |
341 | 339 | |
... | ... | @@ -374,6 +372,44 @@ Get Broker Property By Username |
374 | 372 | \ Звірити дату тендера ${viewer} ${tender_data} items[${index}].${field} |
375 | 373 | |
376 | 374 | |
375 | +Отримати дані із тендера | |
376 | + [Arguments] ${username} ${field_name} ${object_id}=${None} | |
377 | + Log ${username} | |
378 | + Log ${field_name} | |
379 | + ${field}= Run Keyword If '${object_id}'=='${None}' Set Variable ${field_name} | |
380 | + ... ELSE Отримати шлях до поля об’єкта ${username} ${field_name} ${object_id} | |
381 | + ${status} ${field_value}= Run keyword and ignore error | |
382 | + ... Get from object | |
383 | + ... ${USERS.users['${username}'].tender_data.data} | |
384 | + ... ${field} | |
385 | + # If field in cache, return its value | |
386 | + Run Keyword if '${status}' == 'PASS' Return from keyword ${field_value} | |
387 | + # Else call broker to find field | |
388 | + ${field_value}= Run Keyword IF '${object_id}'=='${None}' Run As ${username} Отримати інформацію із тендера ${field} | |
389 | + ... ELSE Отримати дані із об’єкта тендера ${username} ${object_id} ${field_name} | |
390 | + # And caching its value before return | |
391 | + Set_To_Object ${USERS.users['${username}'].tender_data.data} ${field} ${field_value} | |
392 | + [return] ${field_value} | |
393 | + | |
394 | + | |
395 | +Отримати шлях до поля об’єкта | |
396 | + [Arguments] ${username} ${field_name} ${object_id} | |
397 | + ${object_type}= get_object_type_by_id ${object_id} | |
398 | + ${objects}= Get Variable Value ${USERS.users['${username}'].tender_data.data['${object_type}']} ${empty} | |
399 | + ${object_index}= get_object_index_by_id ${objects} ${object_id} | |
400 | + [return] ${object_type}[${object_index}].${field_name} | |
401 | + | |
402 | + | |
403 | +Отримати дані із об’єкта тендера | |
404 | + [Arguments] ${username} ${object_id} ${field_name} | |
405 | + ${object_type}= get_object_type_by_id ${object_id} | |
406 | + ${status} ${value}= Run Keyword And Ignore Error Run As ${username} Отримати інформацію із запитання ${object_id} ${field_name} | |
407 | + ${field}= Отримати шлях до поля об’єкта ${username} ${field_name} ${object_id} | |
408 | + ${field_value}= Run Keyword IF '${status}'=='PASS' Set Variable ${value} | |
409 | + ... ELSE Run As ${username} Отримати інформацію із тендера ${field} | |
410 | + [return] ${field_value} | |
411 | + | |
412 | + | |
377 | 413 | Викликати для учасника |
378 | 414 | [Arguments] ${username} ${command} @{arguments} |
379 | 415 | Run keyword unless '${WARN_RUN_AS}' == '${True}' |
... | ... | @@ -388,24 +424,6 @@ Get Broker Property By Username |
388 | 424 | Run Keyword And Return Run As ${username} ${command} @{arguments} |
389 | 425 | |
390 | 426 | |
391 | -Отримати дані із тендера | |
392 | - [Arguments] ${username} ${field_name} | |
393 | - Log ${username} | |
394 | - Log ${field_name} | |
395 | - | |
396 | - ${status} ${field_value}= Run keyword and ignore error | |
397 | - ... Get from object | |
398 | - ... ${USERS.users['${username}'].tender_data.data} | |
399 | - ... ${field_name} | |
400 | - # If field in cache, return its value | |
401 | - Run Keyword if '${status}' == 'PASS' Return from keyword ${field_value} | |
402 | - # Else call broker to find field | |
403 | - ${field_value}= Викликати для учасника ${username} Отримати інформацію із тендера ${field_name} | |
404 | - # And caching its value before return | |
405 | - Set_To_Object ${USERS.users['${username}'].tender_data.data} ${field_name} ${field_value} | |
406 | - [return] ${field_value} | |
407 | - | |
408 | - | |
409 | 427 | Run As |
410 | 428 | [Arguments] ${username} ${command} @{arguments} |
411 | 429 | [Documentation] |
... | ... | @@ -415,7 +433,12 @@ Run As |
415 | 433 | Log ${command} |
416 | 434 | Log Many @{arguments} |
417 | 435 | ${keywords_file}= Get Broker Property By Username ${username} keywords_file |
418 | - Run Keyword And Return ${keywords_file}.${command} ${username} @{arguments} | |
436 | + ${status} ${value}= Run keyword and ignore keyword definitions ${keywords_file}.${command} ${username} @{arguments} | |
437 | + ${unexpected_args}= Get Regexp Matches '${value}' expected [0-9] arguments, got [0-9] | |
438 | + ${status} ${value}= Run Keyword If "${unexpected_args}"=="[]" Set Variable ${status} ${value} | |
439 | + ... ELSE Run keyword and ignore keyword definitions ${keywords_file}.${command} ${username} @{arguments[:-1]} | |
440 | + Run Keyword If '${status}' == 'FAIL' Fail ${value} | |
441 | + [return] ${value} | |
419 | 442 | |
420 | 443 | |
421 | 444 | Require Failure | ... | ... |
... | ... | @@ -15,7 +15,6 @@ ${mode} multi |
15 | 15 | ${role} viewer |
16 | 16 | ${broker} Quinta |
17 | 17 | |
18 | -${question_id} 1 | |
19 | 18 | ${complaint_id} 1 |
20 | 19 | |
21 | 20 | *** Test Cases *** |
... | ... | @@ -177,8 +176,12 @@ ${complaint_id} 1 |
177 | 176 | ${question_resp}= Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${question} |
178 | 177 | ${now}= Get Current TZdate |
179 | 178 | ${question.data.date}= Set variable ${now} |
180 | - ${question_data}= Create Dictionary question=${question} question_resp=${question_resp} | |
179 | + ${question_id}= get_id_from_field ${question.data.description} | |
180 | + ${question_data}= Create Dictionary question=${question} question_resp=${question_resp} question_id=${question_id} | |
181 | + ${question_data}= munch_dict arg=${question_data} | |
181 | 182 | Set To Dictionary ${USERS.users['${provider}']} question_data ${question_data} |
183 | + | |
184 | + | |
182 | 185 | Можливість відповісти на запитання |
183 | 186 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відповісти на запитання |
184 | 187 | ... tender_owner |
... | ... | @@ -186,7 +189,10 @@ ${complaint_id} 1 |
186 | 189 | [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} |
187 | 190 | [Teardown] Оновити LAST_MODIFICATION_DATE |
188 | 191 | ${answer}= Підготовка даних для відповіді на запитання |
189 | - ${answer_resp}= Викликати для учасника ${tender_owner} Відповісти на питання ${TENDER['TENDER_UAID']} ${USERS.users['${provider}']['question_data']['question_resp']} ${answer} | |
192 | + ${answer_resp}= Викликати для учасника ${tender_owner} | |
193 | + ... Відповісти на питання ${TENDER['TENDER_UAID']} | |
194 | + ... ${USERS.users['${provider}']['question_data']['question_resp']} ${answer} | |
195 | + ... question_id=${USERS.users['${provider}'].question_data.question_id} | |
190 | 196 | ${now}= Get Current TZdate |
191 | 197 | ${answer.data.date}= Set variable ${now} |
192 | 198 | ${answer_data}= Create Dictionary answer=${answer} answer_resp=${answer_resp} | ... | ... |
... | ... | @@ -8,7 +8,7 @@ from json import load |
8 | 8 | from jsonpath_rw import parse as parse_path |
9 | 9 | from munch import fromYAML, Munch, munchify |
10 | 10 | from restkit import request |
11 | -from robot.errors import HandlerExecutionFailed | |
11 | +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 |
... | ... | @@ -202,9 +202,8 @@ def run_keyword_and_ignore_keyword_definitions(name, *args, **kwargs): |
202 | 202 | """ |
203 | 203 | try: |
204 | 204 | status, _ = BuiltIn().run_keyword_and_ignore_error(name, *args, **kwargs) |
205 | - except HandlerExecutionFailed: | |
206 | - LOGGER.log_message(Message("Keyword is not implemented: {}".format(name), "ERROR")) | |
207 | - status, _ = "FAIL", None | |
205 | + except ExecutionFailed as e: | |
206 | + status, _ = "FAIL", e.message | |
208 | 207 | return status, _ |
209 | 208 | |
210 | 209 | |
... | ... | @@ -339,6 +338,24 @@ def munch_dict(arg=None, data=False): |
339 | 338 | return munchify(arg) |
340 | 339 | |
341 | 340 | |
341 | +def get_id_from_field(field): | |
342 | + return re.match(r'(^[filq]-[0-9a-fA-F]{8}): ', field).group(1) | |
343 | + | |
344 | + | |
345 | +def get_object_type_by_id(object_id): | |
346 | + prefixes = {'q': 'questions', 'f': 'features', 'i': 'items', 'l': 'lots'} | |
347 | + return prefixes.get(object_id[0]) | |
348 | + | |
349 | + | |
350 | +def get_object_index_by_id(data, object_id): | |
351 | + for index, element in enumerate(data): | |
352 | + element_id = get_id_from_field(element['description']) | |
353 | + if element_id == object_id: | |
354 | + break | |
355 | + else: | |
356 | + index = 0 | |
357 | + return index | |
358 | + | |
342 | 359 | # GUI Frontends common |
343 | 360 | def add_data_for_gui_frontends(tender_data): |
344 | 361 | now = get_now() | ... | ... |
... | ... | @@ -15,8 +15,6 @@ ${mode} single |
15 | 15 | ${role} viewer |
16 | 16 | ${broker} Quinta |
17 | 17 | |
18 | -${question_id} 0 | |
19 | - | |
20 | 18 | *** Test Cases *** |
21 | 19 | Можливість оголосити однопредметний тендер |
22 | 20 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
... | ... | @@ -331,7 +329,8 @@ ${question_id} 0 |
331 | 329 | ${question_resp}= Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${question} |
332 | 330 | ${now}= Get Current TZdate |
333 | 331 | ${question.data.date}= Set variable ${now} |
334 | - ${question_data}= Create Dictionary question=${question} question_resp=${question_resp} | |
332 | + ${question_id}= get_id_from_field ${question.data.description} | |
333 | + ${question_data}= Create Dictionary question=${question} question_resp=${question_resp} question_id=${question_id} | |
335 | 334 | ${question_data}= munch_dict arg=${question_data} |
336 | 335 | Set To Dictionary ${USERS.users['${provider}']} question_data=${question_data} |
337 | 336 | |
... | ... | @@ -346,7 +345,9 @@ ${question_id} 0 |
346 | 345 | ... level2 |
347 | 346 | [Setup] Дочекатись синхронізації з майданчиком ${viewer} |
348 | 347 | Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} |
349 | - Звірити поле тендера із значенням ${viewer} ${USERS.users['${provider}'].question_data.question.data.title} questions[${question_id}].title | |
348 | + Звірити поле тендера із значенням ${viewer} | |
349 | + ... ${USERS.users['${provider}'].question_data.question.data.title} title | |
350 | + ... object_id=${USERS.users['${provider}'].question_data.question_id} | |
350 | 351 | |
351 | 352 | |
352 | 353 | Відображення опису анонімного питання без відповіді |
... | ... | @@ -354,14 +355,18 @@ ${question_id} 0 |
354 | 355 | ... viewer |
355 | 356 | ... ${USERS.users['${viewer}'].broker} |
356 | 357 | ... level2 |
357 | - Звірити поле тендера із значенням ${viewer} ${USERS.users['${provider}'].question_data.question.data.description} questions[${question_id}].description | |
358 | + Звірити поле тендера із значенням ${viewer} | |
359 | + ... ${USERS.users['${provider}'].question_data.question.data.description} description | |
360 | + ... object_id=${USERS.users['${provider}'].question_data.question_id} | |
358 | 361 | |
359 | 362 | |
360 | 363 | Відображення дати анонімного питання без відповіді |
361 | 364 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення анонімного питання без відповідей |
362 | 365 | ... viewer |
363 | 366 | ... ${USERS.users['${viewer}'].broker} |
364 | - Звірити дату тендера із значенням ${viewer} ${USERS.users['${provider}'].question_data.question.data.date} questions[${question_id}].date | |
367 | + Звірити дату тендера із значенням ${viewer} | |
368 | + ... ${USERS.users['${provider}'].question_data.question.data.date} date | |
369 | + ... object_id=${USERS.users['${provider}'].question_data.question_id} | |
365 | 370 | |
366 | 371 | ############################################################################################## |
367 | 372 | # МОЖЛИВІСТЬ |
... | ... | @@ -389,7 +394,10 @@ ${question_id} 0 |
389 | 394 | [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} |
390 | 395 | [Teardown] Оновити LAST_MODIFICATION_DATE |
391 | 396 | ${answer}= Підготовка даних для відповіді на запитання |
392 | - ${answer_resp}= Викликати для учасника ${tender_owner} Відповісти на питання ${TENDER['TENDER_UAID']} ${USERS.users['${provider}']['question_data']['question_resp']} ${answer} | |
397 | + ${answer_resp}= Викликати для учасника ${tender_owner} | |
398 | + ... Відповісти на питання ${TENDER['TENDER_UAID']} | |
399 | + ... ${USERS.users['${provider}']['question_data']['question_resp']} ${answer} | |
400 | + ... question_id=${USERS.users['${provider}'].question_data.question_id} | |
393 | 401 | ${now}= Get Current TZdate |
394 | 402 | ${answer.data.date}= Set variable ${now} |
395 | 403 | ${answer_data}= Create Dictionary answer=${answer} answer_resp=${answer_resp} |
... | ... | @@ -406,7 +414,9 @@ ${question_id} 0 |
406 | 414 | ... level2 |
407 | 415 | [Setup] Дочекатись синхронізації з майданчиком ${viewer} |
408 | 416 | Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} |
409 | - Звірити поле тендера із значенням ${viewer} ${USERS.users['${provider}']['answer_data']['answer'].data.answer} questions[${question_id}].answer | |
417 | + Звірити поле тендера із значенням ${viewer} | |
418 | + ... ${USERS.users['${provider}']['answer_data']['answer'].data.answer} answer | |
419 | + ... object_id=${USERS.users['${provider}'].question_data.question_id} | |
410 | 420 | |
411 | 421 | ############################################################################################## |
412 | 422 | # МОЖЛИВІСТЬ | ... | ... |
Please
register
or
login
to post a comment