Showing
5 changed files
with
104 additions
and
42 deletions
@@ -78,6 +78,12 @@ Library openprocurement_client_helper.py | @@ -78,6 +78,12 @@ Library openprocurement_client_helper.py | ||
78 | Fail Field not found: ${field_name} | 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 | [Arguments] ${username} ${tender_uaid} ${fieldname} ${fieldvalue} | 88 | [Arguments] ${username} ${tender_uaid} ${fieldname} ${fieldvalue} |
83 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 89 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
@@ -136,10 +142,10 @@ Library openprocurement_client_helper.py | @@ -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 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 146 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
141 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} | 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 | ${question_with_answer}= Call Method ${USERS.users['${username}'].client} patch_question ${tender} ${answer_data} | 149 | ${question_with_answer}= Call Method ${USERS.users['${username}'].client} patch_question ${tender} ${answer_data} |
144 | Log object data ${question_with_answer} question_with_answer | 150 | Log object data ${question_with_answer} question_with_answer |
145 | [return] ${question_with_answer} | 151 | [return] ${question_with_answer} |
@@ -311,10 +311,8 @@ Get Broker Property By Username | @@ -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 | Порівняти об'єкти ${left} ${right} | 316 | Порівняти об'єкти ${left} ${right} |
319 | 317 | ||
320 | 318 | ||
@@ -334,8 +332,8 @@ Get Broker Property By Username | @@ -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 | Порівняти дати ${left} ${right} | 337 | Порівняти дати ${left} ${right} |
340 | 338 | ||
341 | 339 | ||
@@ -374,6 +372,44 @@ Get Broker Property By Username | @@ -374,6 +372,44 @@ Get Broker Property By Username | ||
374 | \ Звірити дату тендера ${viewer} ${tender_data} items[${index}].${field} | 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 | [Arguments] ${username} ${command} @{arguments} | 414 | [Arguments] ${username} ${command} @{arguments} |
379 | Run keyword unless '${WARN_RUN_AS}' == '${True}' | 415 | Run keyword unless '${WARN_RUN_AS}' == '${True}' |
@@ -388,24 +424,6 @@ Get Broker Property By Username | @@ -388,24 +424,6 @@ Get Broker Property By Username | ||
388 | Run Keyword And Return Run As ${username} ${command} @{arguments} | 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 | Run As | 427 | Run As |
410 | [Arguments] ${username} ${command} @{arguments} | 428 | [Arguments] ${username} ${command} @{arguments} |
411 | [Documentation] | 429 | [Documentation] |
@@ -415,7 +433,12 @@ Run As | @@ -415,7 +433,12 @@ Run As | ||
415 | Log ${command} | 433 | Log ${command} |
416 | Log Many @{arguments} | 434 | Log Many @{arguments} |
417 | ${keywords_file}= Get Broker Property By Username ${username} keywords_file | 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 | Require Failure | 444 | Require Failure |
@@ -15,7 +15,6 @@ ${mode} multi | @@ -15,7 +15,6 @@ ${mode} multi | ||
15 | ${role} viewer | 15 | ${role} viewer |
16 | ${broker} Quinta | 16 | ${broker} Quinta |
17 | 17 | ||
18 | -${question_id} 1 | ||
19 | ${complaint_id} 1 | 18 | ${complaint_id} 1 |
20 | 19 | ||
21 | *** Test Cases *** | 20 | *** Test Cases *** |
@@ -177,8 +176,12 @@ ${complaint_id} 1 | @@ -177,8 +176,12 @@ ${complaint_id} 1 | ||
177 | ${question_resp}= Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${question} | 176 | ${question_resp}= Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${question} |
178 | ${now}= Get Current TZdate | 177 | ${now}= Get Current TZdate |
179 | ${question.data.date}= Set variable ${now} | 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 | Set To Dictionary ${USERS.users['${provider}']} question_data ${question_data} | 182 | Set To Dictionary ${USERS.users['${provider}']} question_data ${question_data} |
183 | + | ||
184 | + | ||
182 | Можливість відповісти на запитання | 185 | Можливість відповісти на запитання |
183 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відповісти на запитання | 186 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відповісти на запитання |
184 | ... tender_owner | 187 | ... tender_owner |
@@ -186,7 +189,10 @@ ${complaint_id} 1 | @@ -186,7 +189,10 @@ ${complaint_id} 1 | ||
186 | [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | 189 | [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} |
187 | [Teardown] Оновити LAST_MODIFICATION_DATE | 190 | [Teardown] Оновити LAST_MODIFICATION_DATE |
188 | ${answer}= Підготовка даних для відповіді на запитання | 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 | ${now}= Get Current TZdate | 196 | ${now}= Get Current TZdate |
191 | ${answer.data.date}= Set variable ${now} | 197 | ${answer.data.date}= Set variable ${now} |
192 | ${answer_data}= Create Dictionary answer=${answer} answer_resp=${answer_resp} | 198 | ${answer_data}= Create Dictionary answer=${answer} answer_resp=${answer_resp} |
@@ -8,7 +8,7 @@ from json import load | @@ -8,7 +8,7 @@ from json import load | ||
8 | from jsonpath_rw import parse as parse_path | 8 | from jsonpath_rw import parse as parse_path |
9 | from munch import fromYAML, Munch, munchify | 9 | from munch import fromYAML, Munch, munchify |
10 | from restkit import request | 10 | from restkit import request |
11 | -from robot.errors import HandlerExecutionFailed | 11 | +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 |
@@ -202,9 +202,8 @@ def run_keyword_and_ignore_keyword_definitions(name, *args, **kwargs): | @@ -202,9 +202,8 @@ def run_keyword_and_ignore_keyword_definitions(name, *args, **kwargs): | ||
202 | """ | 202 | """ |
203 | try: | 203 | try: |
204 | status, _ = BuiltIn().run_keyword_and_ignore_error(name, *args, **kwargs) | 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 | return status, _ | 207 | return status, _ |
209 | 208 | ||
210 | 209 | ||
@@ -339,6 +338,24 @@ def munch_dict(arg=None, data=False): | @@ -339,6 +338,24 @@ def munch_dict(arg=None, data=False): | ||
339 | return munchify(arg) | 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 | # GUI Frontends common | 359 | # GUI Frontends common |
343 | def add_data_for_gui_frontends(tender_data): | 360 | def add_data_for_gui_frontends(tender_data): |
344 | now = get_now() | 361 | now = get_now() |
@@ -15,8 +15,6 @@ ${mode} single | @@ -15,8 +15,6 @@ ${mode} single | ||
15 | ${role} viewer | 15 | ${role} viewer |
16 | ${broker} Quinta | 16 | ${broker} Quinta |
17 | 17 | ||
18 | -${question_id} 0 | ||
19 | - | ||
20 | *** Test Cases *** | 18 | *** Test Cases *** |
21 | Можливість оголосити однопредметний тендер | 19 | Можливість оголосити однопредметний тендер |
22 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | 20 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
@@ -331,7 +329,8 @@ ${question_id} 0 | @@ -331,7 +329,8 @@ ${question_id} 0 | ||
331 | ${question_resp}= Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${question} | 329 | ${question_resp}= Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${question} |
332 | ${now}= Get Current TZdate | 330 | ${now}= Get Current TZdate |
333 | ${question.data.date}= Set variable ${now} | 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 | ${question_data}= munch_dict arg=${question_data} | 334 | ${question_data}= munch_dict arg=${question_data} |
336 | Set To Dictionary ${USERS.users['${provider}']} question_data=${question_data} | 335 | Set To Dictionary ${USERS.users['${provider}']} question_data=${question_data} |
337 | 336 | ||
@@ -346,7 +345,9 @@ ${question_id} 0 | @@ -346,7 +345,9 @@ ${question_id} 0 | ||
346 | ... level2 | 345 | ... level2 |
347 | [Setup] Дочекатись синхронізації з майданчиком ${viewer} | 346 | [Setup] Дочекатись синхронізації з майданчиком ${viewer} |
348 | Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} | 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,14 +355,18 @@ ${question_id} 0 | ||
354 | ... viewer | 355 | ... viewer |
355 | ... ${USERS.users['${viewer}'].broker} | 356 | ... ${USERS.users['${viewer}'].broker} |
356 | ... level2 | 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 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення анонімного питання без відповідей | 364 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення анонімного питання без відповідей |
362 | ... viewer | 365 | ... viewer |
363 | ... ${USERS.users['${viewer}'].broker} | 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,7 +394,10 @@ ${question_id} 0 | ||
389 | [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | 394 | [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} |
390 | [Teardown] Оновити LAST_MODIFICATION_DATE | 395 | [Teardown] Оновити LAST_MODIFICATION_DATE |
391 | ${answer}= Підготовка даних для відповіді на запитання | 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 | ${now}= Get Current TZdate | 401 | ${now}= Get Current TZdate |
394 | ${answer.data.date}= Set variable ${now} | 402 | ${answer.data.date}= Set variable ${now} |
395 | ${answer_data}= Create Dictionary answer=${answer} answer_resp=${answer_resp} | 403 | ${answer_data}= Create Dictionary answer=${answer} answer_resp=${answer_resp} |
@@ -406,7 +414,9 @@ ${question_id} 0 | @@ -406,7 +414,9 @@ ${question_id} 0 | ||
406 | ... level2 | 414 | ... level2 |
407 | [Setup] Дочекатись синхронізації з майданчиком ${viewer} | 415 | [Setup] Дочекатись синхронізації з майданчиком ${viewer} |
408 | Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} | 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