Commit 9ef33508d606e4ab8faddd2468cdba359c9afe45
Merge pull request #125 from Leits/id
Support for question ids
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