Commit 9ef33508d606e4ab8faddd2468cdba359c9afe45

Authored by Myroslav Opyr
2 parents df29e887 66039b2a

Merge pull request #125 from Leits/id

Support for question ids
@@ -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