Blame view

op_robot_tests/tests_files/keywords.robot 61.7 KB
AlexDiatlov authored
1
coding: utf-8
2
*** Settings ***
3 4
Library  op_robot_tests.tests_files.service_keywords
Library  String
5 6
Library  Collections
Library  Selenium2Library
7
Library  OperatingSystem
8 9
Library  DateTime
Library  DebugLibrary
10
11
selurvedu authored
12 13 14
Documentation
...  This resource file contains keywords that are used directly by
...  test suites or by brokers' keyword libraries (also known as drivers).
15
selurvedu authored
16
17
*** Keywords ***
18
Test Suite Setup
19
  Set Suite Variable  ${WARN_RUN_AS}  ${False}
20 21
  Set Selenium Implicit Wait  5 s
  Set Selenium Timeout  10 s
22
  Залогувати git-дані
23
  Порівняти системний і серверний час
24
  Завантажуємо дані про користувачів і майданчики
25
selurvedu authored
26
Leits authored
27 28
Test Suite Teardown
  Close all browsers
Leits authored
29
  Run Keyword And Ignore Error  Створити артефакт
30
selurvedu authored
31
AlexDiatlov authored
32 33 34 35 36
Test Suite Teardown Plan
  Close all browsers
  Run Keyword And Ignore Error  Створити артефакт план

37 38 39 40 41
Set Suite Variable With Default Value
  [Arguments]  ${suite_var}  ${def_value}
  ${tmp}=  Get Variable Value  ${${suite_var}}  ${def_value}
  Set Suite Variable  ${${suite_var}}  ${tmp}
42
43
Порівняти системний і серверний час
44
  ${server_time}=  request  ${API_HOST_URL}  HEAD
45 46 47 48 49 50 51 52
  ${local_time}=  Get current TZdate
  Log  ${server_time.headers['date']}
  Log  ${local_time}
  ${status}=  compare_date  ${server_time.headers['date']}  ${local_time}  5
  Run keyword if  ${status} == ${False}
  ...      Log  Час на сервері відрізняється від локального більше ніж на 5 секунд  WARN

53 54 55 56
Залогувати git-дані
  ${commit}=  Run  git log --graph --pretty --abbrev-commit --date=relative -n 30
  ${repo}=    Run  git remote -v
  ${branch}=  Run  git branch -vva
57
  ${status}=  Run  git status
godsdog authored
58
  ${diff}=    Run  git diff
59 60 61 62
  ${reflog}=  Run  git reflog
  Log  ${commit}
  Log  ${repo}
  Log  ${branch}
63
  Log  ${status}
64 65
  Log  ${diff}
  Log  ${reflog}
66 67

68
Завантажуємо дані про користувачів і майданчики
69
  Log  ${BROKER}
70
  Log  ${ROLE}
71 72
  # Suite variable; should be present in every test suite
  # in `*** Variables ***` section
73
  Log Many  @{USED_ROLES}
74
75
  # Load brokers data
76
  ${file_path}=  Get Variable Value  ${BROKERS_FILE}  brokers.yaml
77 78
  ${BROKERS_PARAMS}=  Get Variable Value  ${BROKERS_PARAMS}
  ${BROKERS}=  load_data_from  ${file_path}  mode=brokers  external_params_name=BROKERS_PARAMS
selurvedu authored
79 80
  Log  ${BROKERS}
  Set Suite Variable  ${BROKERS}
81 82
  # List of currently used brokers
  ${used_brokers}=  Create List
83
84
  # Load users data
85
  ${file_path}=  Get Variable Value  ${USERS_FILE}  users.yaml
86 87
  ${USERS_PARAMS}=  Get Variable Value  ${USERS_PARAMS}
  ${USERS}=  load_data_from  ${file_path}  users.yaml  external_params_name=USERS_PARAMS
88 89 90 91 92 93
  Log  ${USERS.users}
  Set Suite Variable  ${USERS}
  # List of currently used users
  ${used_users}=  Create List

  # Handle `-v role:something`
94
  Run Keyword Unless  '${ROLE}' in @{USED_ROLES}
95
  ...      Log
96
  ...      Role ${ROLE} is not used in this test suite.
97 98
  ...      WARN
  Set Suite Variable With Default Value
99 100
  ...      ${ROLE}
  ...      ${BROKERS['${BROKER}'].roles.${ROLE}}
101 102 103 104 105 106

  # Set default value for each role if it is not set yet;
  # fill `used_users`;
  # fill `used_brokers`.
  #
  # Don't even ask how this works!
107
  :FOR  ${tmp_role}  IN  @{USED_ROLES}
108 109 110 111 112
  \  Set Suite Variable With Default Value
  \  ...      ${tmp_role}
  \  ...      ${BROKERS['Quinta'].roles.${tmp_role}}
  \  Append To List  ${used_users}  ${${tmp_role}}
  \  Append To List  ${used_brokers}  ${USERS.users.${${tmp_role}}.broker}
113
  # Since `@{USED_ROLES}` is already a suite variable,
114
  # let's make `@{used_brokers}` alike.
115
  ${used_brokers}=  Remove Duplicates  ${used_brokers}
116
  Set Suite Variable  ${used_brokers}
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
  # We need to create two lists since Robot Framework doesn't support
  # dicts in `:FOR` loops.
  Log Many  @{used_users}
  Log Many  @{used_brokers}

  # A list of all users in users file
  ${known_users}=  Get Dictionary Keys  ${USERS.users}

  # Check whether users file contains an entry for each
  # selected user before preparing any clients
  :FOR  ${username}  IN  @{used_users}
  \  List Should Contain Value
  \  ...      ${known_users}
  \  ...      ${username}
  \  ...      msg=User ${username} not found in users file!

  # Prepare a client for each user
  :FOR  ${username}  IN  @{used_users}
135
  \  ${munch_dict}=  munch_dict  data=${True}
136 137 138
  \  ${keywords_file}=  Get Broker Property  ${USERS.users.${username}.broker}  keywords_file
  \  Завантажуємо бібліотеку з реалізацією для майданчика ${keywords_file}
  \  Run As  ${username}  Підготувати клієнт для користувача
139
  \  ${LAST_REFRESH_DATE}=  Get Current TZdate
140 141
  \  Set To Dictionary  ${USERS}  ${username}=${USERS.users.${username}}
  \  Set To Dictionary  ${USERS.${username}}  tender_data=${munch_dict}
142
  \  Set To Dictionary  ${USERS.${username}}  second_stage_data=${munch_dict}
143
  \  Set To Dictionary  ${USERS.${username}}  LAST_REFRESH_DATE  ${LAST_REFRESH_DATE}
144
  \  Set To Dictionary  ${USERS.${username}}  DASU_LAST_REFRESH_DATE  ${LAST_REFRESH_DATE}
145 146 147 148

  # Drop all unused users
  Keep In Dictionary  ${USERS.users}  @{used_users}
  Log Many  @{USERS}
149
150
151 152 153
Get Broker Property
  [Arguments]  ${broker_name}  ${property}
  [Documentation]
154 155 156
  ...      This keyword returns a property of specified broker
  ...      if that property exists, otherwise, it returns a
  ...      default value.
157
  Run Keyword If  '${broker_name}'=='${None}'  Fail  \${broker_name} is NoneType
158 159
  Should Contain  ${BROKERS['${broker_name}']}  ${property}
  Return From Keyword  ${BROKERS['${broker_name}'].${property}}
160
161
162 163
Get Broker Property By Username
  [Documentation]
164 165 166
  ...      This keyword gets the corresponding broker name
  ...      for a specified username and then calls
  ...      "Get Broker Property"
167 168 169 170
  [Arguments]  ${username}  ${property}
  ${broker_name}=  Get Variable Value  ${USERS.users['${username}'].broker}
  Run Keyword And Return  Get Broker Property  ${broker_name}  ${property}
selurvedu authored
171
Leits authored
172 173
Створити артефакт
  ${artifact}=  Create Dictionary
174
  ...      api_version=${API_VERSION}
Leits authored
175 176
  ...      tender_uaid=${TENDER['TENDER_UAID']}
  ...      last_modification_date=${TENDER['LAST_MODIFICATION_DATE']}
177
  ...      mode=${MODE}
178 179
  Run Keyword And Ignore Error  Set To Dictionary  ${artifact}
  ...          tender_owner=${USERS.users['${tender_owner}'].broker}
180 181
  ...          access_token=${USERS.users['${tender_owner}'].access_token}
  ...          tender_id=${USERS.users['${tender_owner}'].tender_data.data.id}
182 183 184
  Run Keyword And Ignore Error  Set To Dictionary  ${artifact}  tender_owner_access_token=${USERS.users['${tender_owner}'].access_token}
  Run Keyword And Ignore Error  Set To Dictionary  ${artifact}  provider_access_token=${USERS.users['${provider}'].access_token}
  Run Keyword And Ignore Error  Set To Dictionary  ${artifact}  provider1_access_token=${USERS.users['${provider1}'].access_token}
185 186
  Run Keyword And Ignore Error  Set To Dictionary  ${artifact}  provider_bid_id=${USERS.users['${provider}'].bid_id}
  Run Keyword And Ignore Error  Set To Dictionary  ${artifact}  provider1_bid_id=${USERS.users['${provider1}'].bid_id}
187 188 189
  Run Keyword And Ignore Error  Set To Dictionary  ${artifact}
  ...      tender_file_properties=${USERS.users['${tender_owner}'].tender_document.file_properties}
  ...      lot_file_properties=${USERS.users['${tender_owner}'].lots_documents[0].file_properties}
Leits authored
190
  ${status}  ${lots_ids}=  Run Keyword And Ignore Error  Отримати ідентифікатори об’єктів  ${viewer}  lots
191
  Run Keyword If  '${status}'=='PASS'
Leits authored
192
  ...      Set To Dictionary   ${artifact}   lots=${lots_ids}
Leits authored
193
  Log   ${artifact}
194
  log_object_data  ${artifact}  file_name=artifact  update=${True}  artifact=${True}
Leits authored
195
selurvedu authored
196
AlexDiatlov authored
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
Створити артефакт план
  ${artifact}=  Create Dictionary
  ...      api_version=${API_VERSION}
  ...      tender_uaid=${TENDER['TENDER_UAID']}
  ...      last_modification_date=${TENDER['LAST_MODIFICATION_DATE']}
  ...      mode=${MODE}
  Run Keyword And Ignore Error  Set To Dictionary  ${artifact}
  ...          tender_owner=${USERS.users['${tender_owner}'].broker}
  ...          access_token=${USERS.users['${tender_owner}'].access_token}
  ...          tender_id=${USERS.users['${tender_owner}'].tender_data.data.id}
  ...          tender_owner_access_token=${USERS.users['${tender_owner}'].access_token}
  Run Keyword And Ignore Error  Set To Dictionary  ${artifact}
  ...      tender_file_properties=${USERS.users['${tender_owner}'].tender_document.file_properties}
  Log   ${artifact}
  log_object_data  ${artifact}  file_name=artifact_plan  update=${True}  artifact=${True}

Leits authored
214 215
Завантажити дані про тендер
  ${file_path}=  Get Variable Value  ${ARTIFACT_FILE}  artifact.yaml
216
  ${ARTIFACT}=  load_data_from  ${file_path}
217
  Run Keyword And Ignore Error  Set To Dictionary  ${USERS.users['${tender_owner}']}  access_token=${ARTIFACT.access_token}
218 219 220 221
  ${TENDER}=  Create Dictionary
  ...      TENDER_UAID=${ARTIFACT.tender_uaid}
  ...      LAST_MODIFICATION_DATE=${ARTIFACT.last_modification_date}
  ...      LOT_ID=${Empty}
222 223
  ${lot_index}=  Get Variable Value  ${lot_index}  0
  Run Keyword And Ignore Error  Set To Dictionary  ${TENDER}  LOT_ID=${ARTIFACT.lots[${lot_index}]}
224
  ${MODE}=  Get Variable Value  ${MODE}  ${ARTIFACT.mode}
225
  Run Keyword And Ignore Error  Set To Dictionary  ${USERS.users['${tender_owner}']}  access_token=${ARTIFACT.tender_owner_access_token}
226 227
  Run Keyword And Ignore Error  Set To Dictionary  ${USERS.users['${viewer}']}  tender_file_properties=${ARTIFACT.tender_file_properties}
  Run Keyword And Ignore Error  Set To Dictionary  ${USERS.users['${viewer}']}  lot_file_properties=${ARTIFACT.lot_file_properties}
228 229
  Run Keyword And Ignore Error  Set To Dictionary  ${USERS.users['${provider}']}  access_token=${ARTIFACT.provider_access_token}
  Run Keyword And Ignore Error  Set To Dictionary  ${USERS.users['${provider1}']}  access_token=${ARTIFACT.provider1_access_token}
230 231
  Run Keyword And Ignore Error  Set To Dictionary  ${USERS.users['${provider}']}  bid_id=${ARTIFACT.provider_bid_id}
  Run Keyword And Ignore Error  Set To Dictionary  ${USERS.users['${provider1}']}  bid_id=${ARTIFACT.provider1_bid_id}
232
  Set Suite Variable  ${MODE}
233 234
  Set Suite Variable  ${lot_index}
  Set Suite Variable  ${TENDER}
235
  log_object_data  ${ARTIFACT}  file_name=artifact  update=${True}  artifact=${True}
Leits authored
236
237
238
Підготувати дані для створення тендера
AlexDiatlov authored
239
  [Arguments]  ${tender_parameters}  ${plan_data}
240
  ${period_intervals}=  compute_intrs  ${BROKERS}  ${used_brokers}
241
  ${submissionMethodDetails}=  Get Variable Value  ${submissionMethodDetails}
242
  ${accelerator}=  Get Variable Value  ${accelerator}
kvik authored
243
  ${funders}=  Get Variable Value  ${FUNDERS}
AlexDiatlov authored
244
  ${tender_data}=  prepare_test_tender_data  ${period_intervals}  ${tender_parameters}  ${submissionMethodDetails}  ${accelerator}  ${funders}  ${plan_data}
245
  ${TENDER}=  Create Dictionary
246
  Set Global Variable  ${TENDER}
247 248
  Log  ${tender_data}
  [return]  ${tender_data}
249
250
ivanka12 authored
251 252 253 254 255 256 257 258 259 260
Підготувати дані для створення плану
  [Arguments]  ${tender_parameters}
  ${data}=  test_tender_data_planning  ${tender_parameters}
  ${tender_data}=  Create Dictionary  data=${data}
  ${TENDER}=  Create Dictionary
  Set Global Variable  ${TENDER}
  Log  ${tender_data}
  [return]  ${tender_data}

261 262
Підготувати дані для створення предмету закупівлі
  [Arguments]  ${cpv}
263
  ${index}=  Set variable if  ${moz_integration}  3  4
264 265
  ${cpv_group}=  Convert To Integer  ${cpv[:${index}]}
  ${item}=  test_item_data  ${cpv_group}
266 267 268
  [Return]  ${item}

269 270 271 272 273 274 275 276 277
Підготувати дані для створення предмету закупівлі плану
  [Arguments]  ${cpv}
  ${item}=  test_item_data  ${cpv[0:4]}
  Remove From Dictionary  ${item}  deliveryAddress
  Remove From Dictionary  ${item}  deliveryLocation
  Remove From Dictionary  ${item}  deliveryDate.startDate
  [Return]  ${item}

278
Підготувати дані для створення лоту
279 280
  [Arguments]  ${max_lot_value_amount}
  ${lot}=  test_lot_data  ${max_lot_value_amount}
Leits authored
281 282
  ${reply}=  Create Dictionary  data=${lot}
  [Return]  ${reply}
283
ivanka12 authored
284
285 286 287
Підготувати дані для створення нецінового показника
  ${reply}=  test_feature_data
  [Return]  ${reply}
288
ivanka12 authored
289
290
Підготувати дані для подання вимоги
mykhaly authored
291 292 293 294
  ${claim}=  test_claim_data
  [Return]  ${claim}

295
Підготувати дані для подання скарги
AlexDiatlov authored
296 297
  #[Arguments]  ${lot}=${False}
  ${complaint}=  test_complaint_data
298 299 300
  [Return]  ${complaint}

301 302 303 304 305 306
Підготувати дані для оплати скарги
  [Arguments]  ${complaint_token}  ${complaint_value}  ${complaint_uaid}
  ${payment_data}=  test_payment_data  ${complaint_token}  ${complaint_value}  ${complaint_uaid}
  [Return]  ${payment_data}

307 308 309 310
Підготувати дані для прийняття скарги до розгляду
  ${confirmation_data}=  test_accept_complaint_data
  [Return]  ${confirmation_data}
AlexDiatlov authored
311
312 313 314
Підготувати дані для відхилення скарги
  ${reject_reason}=  test_reject_complaint_data
  [Return]  ${reject_reason}
AlexDiatlov authored
315 316

317
Підготувати дані для відповіді на скаргу
318 319 320 321
  ${reply}=  test_complaint_reply_data
  [Return]  ${reply}

322
Підготувати дані для запитання
323
  ${question}=  test_question_data
324 325 326
  [Return]  ${question}

327
Підготувати дані для відповіді на запитання
328 329 330 331
  ${answer}=  test_question_answer_data
  [Return]  ${answer}

332
Підготувати дані для подання пропозиції
mykhaly authored
333
  ${bid}=  generate_test_bid_data  ${USERS.users['${tender_owner}'].initial_data.data}
334
  [Return]  ${bid}
335
336
337 338 339 340 341 342
Підготувати дані для подання пропозиції другого етапу рамкової угоди
  [Arguments]  ${index}=${0}
  ${bid}=  test_bid_data_selection  ${USERS.users['${provider2}'].tender_data.data}  ${index}
  [Return]  ${bid}

343
Підготувати дані для подання пропозиції для другого етапу
344 345
  [Arguments]  ${username}
  ${value}=  Evaluate  ${USERS.users['${username}'].bidresponses.bid.data.lotValues[0].value.amount}*0.95
346
  ${value}=  Convert To Number  ${value}  2
347 348
  Set To Dictionary  ${USERS.users['${username}'].bidresponses.bid.data.lotValues[0].value}  amount=${value}
  [Return]  ${USERS.users['${username}'].bidresponses.bid}
349
Krokop authored
350
oleg.stasiv authored
351 352 353 354 355 356
Підготувати дані для подання пропозиції priceQuotation
  [Arguments]  ${username}
  ${bid}=  test_bid_data_pq  ${USERS.users['${username}'].tender_data.data}
  [Return]  ${bid}

mykhaly authored
357
Підготувати дані про постачальника
Krokop authored
358
  [Arguments]  ${username}  ${lotIndex}=${-1}
359
  ${lotIndex}=  Convert To Integer  ${lotIndex}
mykhaly authored
360
  ${supplier_data}=  test_supplier_data
Krokop authored
361 362
  Run Keyword If  ${lotIndex} > -1  Set To Dictionary  ${supplier_data.data}  lotID=${USERS.users['${tender_owner}'].initial_data.data['lots'][${lotIndex}]['id']}
  Set To Dictionary  ${USERS.users['${tender_owner}']}  supplier_data=${supplier_data}
mykhaly authored
363 364 365 366
  Log  ${supplier_data}
  [Return]  ${supplier_data}

367
Підготувати дані про скасування
AlexDiatlov authored
368 369
  [Arguments]  ${procurementMethodType}
  ${cancellation_data}=  test_cancellation_data  ${procurementMethodType}
370
  ${cancellation_reason}=  create_fake_sentence
371 372
  ${cancellation_reason}=  field_with_id  c  ${cancellation_reason}
  ${cancellation_id}=  get_id_from_string  ${cancellation_reason}
373
  ${file_path}  ${file_name}  ${file_content}=  create_fake_doc
374
  ${doc_id}=  get_id_from_string  ${file_name}
375 376 377 378 379
  ${document}=  Create Dictionary
  ...      doc_path=${file_path}
  ...      doc_name=${file_name}
  ...      doc_content=${file_content}
  ...      doc_id=${doc_id}
380
  ${new_description}=  create_fake_sentence
381 382
  ${cancellation_data}=  Create Dictionary
  ...      cancellation_reason=${cancellation_reason}
AlexDiatlov authored
383
  ...      cancellation_reasonType=${cancellation_data.reasonType}
384
  ...      cancellation_id=${cancellation_id}
385 386
  ...      document=${document}
  ...      description=${new_description}
387
  ${cancellation_data}=  munchify  ${cancellation_data}
AlexDiatlov authored
388 389 390 391 392 393 394 395 396 397 398 399 400
  Log  ${cancellation_data}
  [Return]  ${cancellation_data}


Підготувати дані про скасування плану
  ${cancellation_reason}=  create_fake_sentence
  ${cancellation_reason_en}=  create_fake_sentence
  ${cancellation_data}=  Create Dictionary
  ...       reason=${cancellation_reason}
  ...       reason_en=${cancellation_reason_en}
  ${cancellation_data}=  munchify  ${cancellation_data}
  #${cancellation_data}=  test_plan_cancel_data
  Log  ${cancellation_data}
401 402
  [Return]  ${cancellation_data}
selurvedu authored
403
mykhaly authored
404
Підготувати дані про зміну до договору
405 406 407 408 409 410
  [Arguments]  ${username}
  ${change_data}=  test_change_data
  Set To Dictionary  ${USERS.users['${username}']}  change_data=${change_data}
  Log  ${change_data}
  [Return]  ${change_data}
mykhaly authored
411
ivanka12 authored
412 413 414 415 416 417 418 419 420 421
Підготувати дані про зміну до угоди
  [Arguments]  ${username}  ${rationaleType}
  ${change_data}=  test_agreement_change_data  ${rationaleType}
  Set To Dictionary  ${USERS.users['${username}']}  change_data=${change_data}
  Log  ${change_data}
  [Return]  ${change_data}


Підготувати дані для оновлення властивості угоди
  [Arguments]  ${username}  ${field_name}  ${field_value}
422
  ${username}=  Отримати користувача з доступом до поля за пріорітетом  items  ${tender_owner}  ${viewer}
ivanka12 authored
423 424 425 426
  ${modification_data}=  test_modification_data
  ...      ${USERS.users['${username}'].agreement_data.data['items'][0]['id']}
  ...      ${field_name}
  ...      ${field_value}
427
  Set To Dictionary  ${USERS.users['${tender_owner}']}  modification_data=${modification_data}
ivanka12 authored
428 429 430 431
  Log  ${modification_data}
  [Return]  ${modification_data}

432
Адаптувати дані для оголошення тендера
433
  [Arguments]  ${tender_data}
434
  # munchify is used to make deep copy of ${tender_data}
435
  ${adapted_data}=  munchify  ${tender_data}
436
  :FOR  ${username}  IN  @{USED_ROLES}
437 438 439 440 441 442 443 444 445 446 447 448
  # munchify is used to make deep copy of ${adapted_data}
  \  ${adapted_data_copy}=  munchify  ${adapted_data}
  \  ${status}  ${adapted_data_from_broker}=  Run keyword and ignore error  Run As  ${${username}}  Підготувати дані для оголошення тендера  ${adapted_data_copy}  ${username}
  \  Log  ${adapted_data_from_broker}
  # Need this in case ``${${username}}`` doesn't have `Підготувати дані для оголошення
  # тендера користувачем` keyword, so after `Run keyword and ignore error` call
  # ``${adapted_data_from_broker}`` will be ``${None}``. Else - nothing changes.
  \  ${adapted_data_from_broker}=  Set variable if  '${status}' == 'FAIL'  ${adapted_data}  ${adapted_data_from_broker}
  \  Log differences between dicts  ${adapted_data.data}  ${adapted_data_from_broker.data}  ${username} has changed initial data!
  # Update (or not, if nothing changed) ``${adapted_data}``.
  \  ${adapted_data}=  munchify  ${adapted_data_from_broker}
  \  Log  ${adapted_data}
449
  Log  ${adapted_data}
450
  Log  ${tender_data}
451 452 453
  [Return]  ${adapted_data}

454 455 456 457 458 459 460
Log differences between dicts
  [Arguments]  ${left}  ${right}  ${begin}  ${end}=${Empty}
  ${diff_status}  ${diff_message}=  Run Keyword And Ignore Error  Dictionaries Should Be Equal  ${left}  ${right}
  Run keyword if  '${diff_status}' == 'FAIL'  Log  \n${begin}\n${diff_message}\n${end}  WARN
  [Return]  ${diff_status}

461
Завантажуємо бібліотеку з реалізацією для майданчика ${keywords_file}
462 463 464 465 466 467 468 469 470 471 472 473 474 475
  [Documentation]
  ...      Load broker's driver (keyword library).
  ...
  ...      `Import Resource` is called twice:
  ...
  ...      1) It tries to read from  ``brokers/`` directory
  ...      (located next to ``keywords.robot``).
  ...      This is an old feature which will be removed in the future.
  ...
  ...      2) It looks for a given filename in ``sys.path``
  ...      (``PYTHONPATH`` environment variable).
  ...
  ...      This keyword will fail if ``keywords_file`` was found
  ...      in both locations.
476
  ${bundled_st}=  Run Keyword And Return Status  Import Resource  ${CURDIR}${/}brokers${/}${keywords_file}.robot
477
  ${external_st}=  Run Keyword And Return Status  Import Resource  ${keywords_file}.robot
478
  Run Keyword If  ${bundled_st} == ${external_st} == ${False}  Fail  Resource file ${keywords_file}.robot not found
479
  Run Keyword If  ${bundled_st} == ${external_st} == ${True}  Fail  Resource file ${keywords_file}.robot found in both brokers${/} and src${/}
480
481
482 483 484
Дочекатись синхронізації з майданчиком
  [Arguments]  ${username}
  [Documentation]
485 486 487 488 489 490 491 492 493
  ...      Synchronise with ``username`` and update cache
  ...      First section
  ...      Get `timeout_on_wait` for ``username``
  ...      Add `timeout_on_wait` to `last_modification_date` in order to have
  ...      correct time of data modification in CDB(every broker has different
  ...      data synchronisation time with CDB).
  ...      Find diff between `last_mofidication_date_corrected`
  ...      and `now`. If that value is positive, sleep for `sleep` seconds,
  ...      else go to next section.
494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515
  ...      Thus, when this keyword is executed several times in a row,
  ...      it will wait for as long as really needed.
  ...
  ...      Example:
  ...
  ...      The procurement is modified.
  ...      In 5 seconds, this keyword is called for `viewer`.
  ...      Immediately, this keyword is called for `provider`.
  ...      Timeout for `viewer` is 60.
  ...      Timeout for `provider` is 300.
  ...      First call (for `viewer`) will trigger `Sleep 55`.
  ...      Second call (for `provider`) will trigger `Sleep 235`.
  ...      As a result, the delay will end in 300 seconds
  ...      since last modification date.
  ...
  ...      Another example (a variation of previous one):
  ...
  ...      Timeout for `viewer` is 120.
  ...      Timeout for `provider` is 30.
  ...      First call will trigger `Sleep 115`.
  ...      Second call will trigger `Sleep 0`,
  ...      since we have already slept for 120 seconds
516 517 518 519 520 521 522 523
  ...      and there is no need to sleep anymore.
  ...
  ...      Second section
  ...      Find how much time passed from ``username``'s `last_refresh_date`
  ...      to `last_modification_date_corrected`. If that value is positive, then
  ...      cahce for ``username`` is not up-to-date. So, it will be refreshed and
  ...      `last_refresh_date` will be updated.
  ...      Else do nothing.
524
  ${timeout_on_wait}=  Get Broker Property By Username  ${username}  timeout_on_wait
525 526 527 528 529 530 531
  ${last_modification_date_corrected}=  Add Time To Date
  ...      ${TENDER['LAST_MODIFICATION_DATE']}
  ...      ${timeout_on_wait} s
  ${now}=  Get Current TZdate
  ${sleep}=  Subtract Date From Date
  ...      ${last_modification_date_corrected}
  ...      ${now}
532
  Run Keyword If  ${sleep} > 0  Sleep  ${sleep}
533
534 535 536 537

  ${time_diff}=  Subtract Date From Date
  ...      ${last_modification_date_corrected}
  ...      ${USERS.users['${username}']['LAST_REFRESH_DATE']}
mykhaly authored
538
  ${LAST_REFRESH_DATE}=  Get Current TZdate
539
  Run Keyword If  ${time_diff} > 0  Run Keywords
kosaniak authored
540
  ...      Оновити сторінку  ${username}
541 542 543
  ...      AND
  ...      Set To Dictionary  ${USERS.users['${username}']}  LAST_REFRESH_DATE=${LAST_REFRESH_DATE}
544
545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567
Дочекатись синхронізації з ДАСУ
  [Arguments]  ${username}
  ${timeout_on_wait}=  Get Broker Property By Username  ${username}  timeout_on_wait
  ${last_modification_date_corrected}=  Add Time To Date
  ...      ${MONITORING['DASU_LAST_MODIFICATION_DATE']}
  ...      ${timeout_on_wait} s
  ${now}=  Get Current TZdate
  ${sleep}=  Subtract Date From Date
  ...      ${last_modification_date_corrected}
  ...      ${now}
  Run Keyword If  ${sleep} > 0  Sleep  ${sleep}


  ${time_diff}=  Subtract Date From Date
  ...      ${last_modification_date_corrected}
  ...      ${USERS.users['${username}']['DASU_LAST_REFRESH_DATE']}
  ${LAST_REFRESH_DATE}=  Get Current TZdate
  Run Keyword If  ${time_diff} > 0  Run Keywords
  ...      Оновити сторінку з об'єктом моніторингу  ${username}  ${MONITORING['MONITORING_UAID']}
  ...      AND
  ...      Set To Dictionary  ${USERS.users['${username}']}  DASU_LAST_REFRESH_DATE=${LAST_REFRESH_DATE}

kosaniak authored
568 569
Оновити сторінку
  [Arguments]  ${username}
ivanka12 authored
570
  Run Keyword If  '${RESOURCE}' == 'plans'  Run As  ${username}  Оновити сторінку з планом  ${TENDER['TENDER_UAID']}
571 572 573
  ...      ELSE  Run As  ${username}  Оновити сторінку з тендером  ${TENDER['TENDER_UAID']}

574
Звірити поле тендера
575
  [Arguments]  ${username}  ${tender_uaid}  ${tender_data}  ${field}
576
  ${left}=  get_from_object  ${tender_data.data}  ${field}
577
  Звірити поле тендера із значенням  ${username}  ${tender_uaid}  ${left}  ${field}
578
579
ivanka12 authored
580
Звірити поле об'єкта моніторингу
581 582 583
  [Arguments]  ${username}  ${monitoring_uaid}  ${monitoring_data}  ${field}
  ${left}=  get_from_object  ${monitoring_data.data}  ${field}
  Звірити поле об'єкта моніторингу із значенням  ${username}  ${monitoring_uaid}  ${left}  ${field}
ivanka12 authored
584 585

586 587 588 589 590 591 592 593 594 595 596 597
Звірити поле плану
  [Arguments]  ${username}  ${tender_uaid}  ${tender_data}  ${field}
  ${left}=  get_from_object  ${tender_data.data}  ${field}
  Звірити поле плану із значенням  ${username}  ${tender_uaid}  ${left}  ${field}


Звірити поле плану із значенням
  [Arguments]  ${username}  ${tender_uaid}  ${left}  ${field}  ${object_id}=${Empty}
  ${right}=  Отримати дані із плану  ${username}  ${tender_uaid}  ${field}  ${object_id}
  Порівняти об'єкти  ${left}  ${right}

598
Звірити поле тендера із значенням
599 600
  [Arguments]  ${username}  ${tender_uaid}  ${left}  ${field}  ${object_id}=${Empty}  ${object_type}=${Empty}  ${object_index}=${Empty}
  ${right}=  Отримати дані із тендера  ${username}  ${tender_uaid}  ${field}  ${object_id}  ${object_type}  ${object_index}
601 602
  Порівняти об'єкти  ${left}  ${right}
603
ivanka12 authored
604
Звірити поле об'єкта моніторингу із значенням
605 606
  [Arguments]  ${username}  ${monitoring_uaid}  ${left}  ${field}  ${object_id}=${Empty}
  ${right}=  Отримати дані із об'єкта моніторингу  ${username}  ${monitoring_uaid}  ${field}  ${object_id}
ivanka12 authored
607 608 609
  Порівняти об'єкти  ${left}  ${right}

610 611 612 613 614 615 616 617 618 619 620 621
Звірити поле договору
  [Arguments]  ${username}  ${contract_uaid}  ${cotract_data}  ${field}
  ${left}=  get_from_object  ${contract_data.data}  ${field}
  Звірити поле договору із значенням  ${username}  ${contract_uaid}  ${left}  ${field}


Звірити поле договору із значенням
  [Arguments]  ${username}  ${contract_uaid}  ${left}  ${field}
  ${right}=  Отримати дані із договору  ${username}  ${contract_uaid}  ${field}
  Порівняти об'єкти  ${left}  ${right}

ivanka12 authored
622 623 624 625 626 627
Звірити поле угоди із значенням
  [Arguments]  ${username}  ${agreement_uaid}  ${left}  ${field}
  ${right}=  Run As  ${username}  Отримати інформацію із угоди  ${agreement_uaid}  ${field}
  Порівняти об'єкти  ${left}  ${right}

628 629 630 631 632 633 634 635 636 637 638 639 640
Звірити поле зміни до договору
  [Arguments]  ${username}  ${contract_uaid}  ${change_data}  ${field}
  ${left}=  get_from_object  ${change_data.data}  ${field}
  Звірити поле зміни до договору із значенням  ${username}  ${contract_uaid}  ${left}  ${field}


Звірити поле зміни до договору із значенням
  [Arguments]  ${username}  ${contract_uaid}  ${left}  ${field}
  ${field}=  Evaluate  "{}{}".format('changes[0].', '${field}')
  ${right}=  Отримати дані із договору  ${username}  ${contract_uaid}  ${field}
  Порівняти об'єкти  ${left}  ${right}

kvik authored
641 642 643 644 645 646 647 648 649 650 651 652 653
Звірити поле донора
  [Arguments]  ${username}  ${tender_uaid}  ${tender_data}  ${field}  ${funders_index}
  ${left}=  get_from_object  ${tender_data.data.funders[${funders_index}]}  ${field}
  Log  ${left}
  Звірити поле донора із значенням  ${username}  ${tender_uaid}  ${left}  ${field}  ${funders_index}


Звірити поле донора із значенням
  [Arguments]  ${username}  ${tender_uaid}  ${left}  ${field}  ${funders_index}  ${object_id}=${Empty}
  ${right}=  Отримати дані із тендера  ${username}  ${tender_uaid}  funders[${funders_index}].${field}  ${object_id}
  Порівняти об'єкти  ${left}  ${right}

654 655 656 657 658 659
Звірити відображення типу запланованого тендера для ${username}
  ${type}=  Отримати дані із плану  ${username}  ${TENDER['TENDER_UAID']}  tender.procurementMethodType
  Звірити відображення поля tender.procurementMethodType плану для користувача ${username}
  Run Keyword If  '${type}' == ''  Run As  ${username}  Перевірити наявність повідомлення  "без застосування електронної системи"

660 661
Порівняти об'єкти
  [Arguments]  ${left}  ${right}
662 663
  Log  ${left}
  Log  ${right}
664 665
  Should Not Be Equal  ${left}  ${None}
  Should Not Be Equal  ${right}  ${None}
666
  Should Be Equal  ${left}  ${right}  msg=Objects are not equal
667
668
669
Звірити дату тендера
670
  [Arguments]  ${username}  ${tender_uaid}  ${tender_data}  ${field}  ${accuracy}=60  ${absolute_delta}=${False}
671
  ${left}=  get_from_object  ${tender_data.data}  ${field}
672
  Звірити дату тендера із значенням  ${username}  ${tender_uaid}  ${left}  ${field}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
673
674
675
Звірити дату тендера із значенням
676
  [Arguments]  ${username}  ${tender_uaid}  ${left}  ${field}  ${object_id}=${Empty}  ${accuracy}=60  ${absolute_delta}=${False}
677
  ${right}=  Отримати дані із тендера  ${username}  ${tender_uaid}  ${field}  ${object_id}
678
  Порівняти дати  ${left}  ${right}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
679
680
selurvedu authored
681 682 683 684 685 686 687 688
Порівняти дати
  [Documentation]
  ...      Compare dates with specified ``accuracy`` (in seconds).
  ...      Default is `60`.
  ...
  ...      The keyword will fail if the difference between
  ...      ``left`` and ``right`` dates is more than ``accuracy``,
  ...      otherwise it will pass.
kosaniak authored
689
  [Arguments]  ${left}  ${right}  ${accuracy}=90  ${absolute_delta}=${False}
690 691
  Log  ${left}
  Log  ${right}
692 693
  Should Not Be Equal  ${left}  ${None}
  Should Not Be Equal  ${right}  ${None}
694
  ${status}=  compare_date  ${left}  ${right}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
Leits authored
695 696 697 698
  Should Be True  ${status}  msg=Dates differ: ${left} != ${right}


Звірити координати доставки тендера
699 700 701
  [Arguments]  ${username}  ${tender_uaid}  ${tender_data}  ${item_id}
  ${item_index}=  get_object_index_by_id  ${tender_data.data['items']}  ${item_id}
  ${left_lat}=  get_from_object  ${tender_data.data}  items[${item_index}].deliveryLocation.latitude
702
  ${left_lat}=  Convert To Number  ${left_lat}
703
  ${left_lon}=  get_from_object  ${tender_data.data}  items[${item_index}].deliveryLocation.longitude
704
  ${left_lon}=  Convert To Number  ${left_lon}
705
  ${right_lat}=  Отримати дані із тендера  ${username}  ${tender_uaid}  deliveryLocation.latitude  ${item_id}
706
  ${right_lat}=  Convert To Number  ${right_lat}
707
  ${right_lon}=  Отримати дані із тендера  ${username}  ${tender_uaid}  deliveryLocation.longitude  ${item_id}
708
  ${right_lon}=  Convert To Number  ${right_lon}
Leits authored
709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726
  Порівняти координати  ${left_lat}  ${left_lon}  ${right_lat}  ${right_lon}


Порівняти координати
  [Documentation]
  ...      Compare coordinates with specified ``accuracy`` (in km).
  ...      Default is `0.1`.
  ...
  ...      The keyword will fail if the difference between
  ...      ``left`` and ``right`` is more than ``accuracy``,
  ...      otherwise it will pass.
  [Arguments]  ${left_lat}  ${left_lon}  ${right_lat}  ${right_lon}  ${accuracy}=0.1
  Should Not Be Equal  ${left_lat}  ${None}
  Should Not Be Equal  ${left_lon}  ${None}
  Should Not Be Equal  ${right_lat}  ${None}
  Should Not Be Equal  ${right_lon}  ${None}
  ${status}=  compare_coordinates  ${left_lat}  ${left_lon}  ${right_lat}  ${right_lon}  ${accuracy}
  Should Be True  ${status}  msg=Coordinates differ: (${left_lat}, ${left_lon}) != (${right_lat}, ${right_lon})
727
728
729
Звірити поля предметів закупівлі багатопредметного тендера
730
  [Arguments]  ${username}  ${tender_data}  ${field}
731
  @{items}=  get_from_object  ${tender_data.data}  items
selurvedu authored
732 733 734
  ${len_of_items}=  Get Length  ${items}
  :FOR  ${index}  IN RANGE  ${len_of_items}
  \  Звірити поле тендера  ${viewer}  ${tender_data}  items[${index}].${field}
735
736
737
Звірити дату предметів закупівлі багатопредметного тендера
738
  [Arguments]  ${username}  ${tender_data}  ${field}  ${accuracy}=60  ${absolute_delta}=${False}
739
  @{items}=  get_from_object  ${tender_data.data}  items
Leits authored
740
  :FOR  ${index}  ${_}  IN ENUMERATE  @{items}
741
  \  Звірити дату тендера  ${viewer}  ${TENDER['TENDER_UAID']}  ${tender_data}  items[${index}].${field}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
742
743
Leits authored
744 745
Звірити координати доставки предметів закупівлі багатопредметного тендера
  [Arguments]  ${username}  ${tender_data}
746
  @{items}=  get_from_object  ${tender_data.data}  items
Leits authored
747 748 749 750
  :FOR  ${index}  ${_}  IN ENUMERATE  @{items}
  \  Звірити координати тендера  ${viewer}  ${tender_data}  items[${index}]

Leits authored
751
Отримати дані із тендера
752
  [Arguments]  ${username}  ${tender_uaid}  ${field_name}  ${object_id}=${Empty}  ${object_type}=${Empty}  ${object_index}=${Empty}
753
  ${field}=  Run Keyword If  '${object_id}'  Отримати шлях до поля об’єкта  ${username}  ${field_name}  ${object_id}
754
  ...             ELSE IF  '${object_type}' and '${object_index}'  Set Variable  ${object_type}[${object_index}].${field_name}
755
  ...             ELSE  Set Variable  ${field_name}
Leits authored
756
  ${status}  ${field_value}=  Run keyword and ignore error
757
  ...      get_from_object
Leits authored
758 759 760 761 762
  ...      ${USERS.users['${username}'].tender_data.data}
  ...      ${field}
  # If field in cache, return its value
  Run Keyword if  '${status}' == 'PASS'  Return from keyword   ${field_value}
  # Else call broker to find field
763 764
  ${field_value}=  Run Keyword IF  '${object_id}'  Отримати дані із об’єкта тендера  ${username}  ${tender_uaid}  ${object_id}  ${field_name}
  ...                          ELSE  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  ${field}
Leits authored
765 766
  # And caching its value before return
  Set_To_Object  ${USERS.users['${username}'].tender_data.data}  ${field}  ${field_value}
767 768 769
  ${data}=  munch_dict  arg=${USERS.users['${username}'].tender_data.data}
  Set To Dictionary  ${USERS.users['${username}'].tender_data}  data=${data}
  Log  ${USERS.users['${username}'].tender_data.data}
Leits authored
770 771 772
  [return]  ${field_value}

773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790
Отримати дані із тендера другого етапу
  [Arguments]  ${username}  ${tender_uaid}  ${field_name}
  ${status}  ${field_value}=  Run keyword and ignore error
  ...      get_from_object
  ...      ${USERS.users['${username}'].second_stage_data.data}
  ...      ${field}
  # If field in cache, return its value
  Run Keyword if  '${status}' == 'PASS'  Return from keyword   ${field_value}
  # Else call broker to find field
  ${field_value}=  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  ${field_name}
  # And caching its value before return
  Set_To_Object  ${USERS.users['${username}'].second_stage_data.data}  ${field_name}  ${field_value}
  ${data}=  munch_dict  arg=${USERS.users['${username}'].second_stage_data.data}
  Set To Dictionary  ${USERS.users['${username}'].second_stage_data}  data=${data}
  Log  ${USERS.users['${username}'].second_stage_data.data}
  [return]  ${field_value}

ivanka12 authored
791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808
Отримати дані із угоди
  [Arguments]  ${username}  ${agreement_uaid}  ${field_name}
  ${status}  ${field_value}=  Run keyword and ignore error
  ...      get_from_object
  ...      ${USERS.users['${username}'].agreement_data.data}
  ...      ${field_name}
  # If field in cache, return its value
  Run Keyword if  '${status}' == 'PASS'  Return from keyword   ${field_value}
  # Else call broker to find field
  ${field_value}=  Run As  ${username}  Отримати інформацію із угоди  ${agreement_uaid}  ${field_name}
  # And caching its value before return
  Set_To_Object  ${USERS.users['${username}'].agreement_data.data}  ${field_name}  ${field_value}
  ${data}=  munch_dict  arg=${USERS.users['${username}'].agreement_data.data}
  Set To Dictionary  ${USERS.users['${username}'].agreement_data}  data=${data}
  Log  ${USERS.users['${username}'].agreement_data.data}
  [return]  ${field_value}

ivanka12 authored
809 810 811 812 813 814 815 816 817 818 819 820 821 822 823
Отримати дані із об'єкта моніторингу
  [Arguments]  ${username}  ${monitoring_uaid}  ${field_name}  ${object_id}=${Empty}
  ${status}  ${field_value}=  Run keyword and ignore error
  ...      get_from_object
  ...      ${USERS.users['${username}'].monitoring_data.data}
  ...      ${field_name}
  Run Keyword if  '${status}' == 'PASS'  Return from keyword   ${field_value}
  ${field_value}=  Run As  ${username}  Отримати інформацію із об'єкта моніторингу  ${monitoring_uaid}  ${field_name}
  Set_To_Object  ${USERS.users['${username}'].monitoring_data.data}  ${field_name}  ${field_value}
  ${data}=  munch_dict  arg=${USERS.users['${username}'].monitoring_data.data}
  Set To Dictionary  ${USERS.users['${username}'].monitoring_data}  data=${data}
  Log  ${USERS.users['${username}'].monitoring_data.data}
  [return]  ${field_value}

824 825 826 827 828 829 830 831 832 833 834 835 836
Отримати дані із плану
  [Arguments]  ${username}  ${tender_uaid}  ${field_name}  ${object_id}=${Empty}
  ${field}=  Run Keyword If  '${object_id}'  Отримати шлях до поля об’єкта  ${username}  ${field_name}  ${object_id}
  ...             ELSE  Set Variable  ${field_name}
  ${status}  ${field_value}=  Run keyword and ignore error
  ...      get_from_object
  ...      ${USERS.users['${username}'].tender_data.data}
  ...      ${field}
  # If field in cache, return its value
  Run Keyword if  '${status}' == 'PASS'  Return from keyword   ${field_value}
  # Else call broker to find field
  ${field_value}=  Run As  ${username}  Отримати інформацію із плану  ${tender_uaid}  ${field}
  # And caching its value before return
Leits authored
837
  Set_To_Object  ${USERS.users['${username}'].tender_data.data}  ${field}  ${field_value}
838 839 840
  ${data}=  munch_dict  arg=${USERS.users['${username}'].tender_data.data}
  Set To Dictionary  ${USERS.users['${username}'].tender_data}  data=${data}
  Log  ${USERS.users['${username}'].tender_data.data}
Leits authored
841 842 843
  [return]  ${field_value}

844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861
Отримати дані із договору
  [Arguments]  ${username}  ${contract_uaid}  ${field}
  ${status}  ${field_value}=  Run keyword and ignore error
  ...      get_from_object
  ...      ${USERS.users['${username}'].contract_data.data}
  ...      ${field}
  # If field in cache, return its value
  Run Keyword if  '${status}' == 'PASS'  Return from keyword  ${field_value}
  # Else call broker to find field
  ${field_value}=  Run As  ${username}  Отримати інформацію із договору  ${contract_uaid}  ${field}
  # And caching its value before return
  Set_To_Object  ${USERS.users['${username}'].contract_data.data}  ${field}  ${field_value}
  ${data}=  munch_dict  arg=${USERS.users['${username}'].contract_data.data}
  Set To Dictionary  ${USERS.users['${username}'].contract_data}  data=${data}
  Log  ${USERS.users['${username}'].contract_data.data}
  [return]  ${field_value}

Leits authored
862 863 864
Отримати шлях до поля об’єкта
  [Arguments]  ${username}  ${field_name}  ${object_id}
  ${object_type}=  get_object_type_by_id  ${object_id}
Leits authored
865
  ${objects}=  Get Variable Value  ${USERS.users['${username}'].tender_data.data['${object_type}']}  ${None}
Leits authored
866 867 868 869 870
  ${object_index}=  get_object_index_by_id  ${objects}  ${object_id}
  [return]  ${object_type}[${object_index}].${field_name}


Отримати дані із об’єкта тендера
871 872
  [Arguments]  ${username}  ${tender_uaid}  ${object_id}  ${field_name}
  ${object_type}=  get_object_type_by_id  ${object_id}
Leits authored
873
  ${status}  ${value}=  Run Keyword If  '${object_type}'=='questions'
874 875 876
  ...      Run Keyword And Ignore Error  Run As  ${username}  Отримати інформацію із запитання  ${tender_uaid}  ${object_id}  ${field_name}
  ...      ELSE IF  '${object_type}'=='lots'
  ...      Run Keyword And Ignore Error  Run As  ${username}  Отримати інформацію із лоту  ${tender_uaid}  ${object_id}  ${field_name}
877 878 879 880
  ...      ELSE IF  '${object_type}'=='items'
  ...      Run Keyword And Ignore Error  Run As  ${username}  Отримати інформацію із предмету  ${tender_uaid}  ${object_id}  ${field_name}
  ...      ELSE IF  '${object_type}'=='features'
  ...      Run Keyword And Ignore Error  Run As  ${username}  Отримати інформацію із нецінового показника  ${tender_uaid}  ${object_id}  ${field_name}
Leits authored
881 882
  ${field}=  Отримати шлях до поля об’єкта  ${username}  ${field_name}  ${object_id}
  ${field_value}=  Run Keyword IF  '${status}'=='PASS'  Set Variable  ${value}
883
  ...      ELSE  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  ${field}
Leits authored
884 885 886
  [return]  ${field_value}

Leits authored
887 888 889 890 891 892 893 894 895 896
Отримати ідентифікатори об’єктів
  [Arguments]  ${username}  ${objects_type}
  @{objects_ids}=  Create List
  @{objects}=  Get from object  ${USERS.users['${username}'].tender_data.data}  ${objects_type}
  :FOR  ${obj}  IN  @{objects}
  \   ${obj_id}=  get_id_from_object  ${obj}
  \   Append To List  ${objects_ids}  ${obj_id}
  [return]  ${objects_ids}

897
Звірити поле скарги із значенням
898 899
  [Arguments]  ${username}  ${tender_uaid}  ${given_value}  ${field_name}  ${complaintID}  ${object_index}=${None}  ${object}=${None}
  ${received_value}=  Run as  ${username}  Отримати інформацію із скарги  ${tender_uaid}  ${complaintID}  ${field_name}  ${object_index}  ${object}
900
  Порівняти об'єкти  ${given_value}  ${received_value}
901 902

903
Run As
904
  [Arguments]  ${username}  ${command}  @{arguments}
905 906 907
  [Documentation]
  ...      Run the given keyword (``command``) with given ``arguments``
  ...      using driver (keyword library) of user ``username``.
908 909
  Log  ${username}
  Log  ${command}
910
  Log Many  @{arguments}
911
  ${keywords_file}=  Get Broker Property By Username  ${username}  keywords_file
912
  Run Keyword And Return  ${keywords_file}.${command}  ${username}  @{arguments}
Taras Kozlovskyi authored
913
914
915
Require Failure
916
  [Arguments]  ${username}  ${command}  @{arguments}
917 918 919 920 921
  [Documentation]
  ...      Sometimes we need to make sure that the given keyword fails.
  ...
  ...      This keyword works just like `Run As`, but it passes only
  ...      if ``command`` with ``arguments`` fails and vice versa.
922 923
  Log  ${username}
  Log  ${command}
924
  Log Many  @{arguments}
925
  ${keywords_file}=  Get Broker Property By Username  ${username}  keywords_file
926
  ${status}  ${value}=  Run keyword and ignore keyword definitions  ${keywords_file}.${command}  ${username}  @{arguments}
927 928
  Run keyword if  '${status}' == 'PASS'  Fail  Користувач ${username} зміг виконати "${command}"
  [return]  ${value}
929
930
931 932 933
Можливість отримати посилання на аукціон для глядача
  ${timeout_on_wait}=  Get Broker Property By Username  ${viewer}  timeout_on_wait
  ${timeout_on_wait}=  Set Variable If
934 935
  ...                  ${timeout_on_wait} < ${120}
  ...                  ${120}
936 937 938 939 940 941
  ...                  ${timeout_on_wait}
  ${url}=  Wait Until Keyword Succeeds
  ...      ${timeout_on_wait}
  ...      15 s
  ...      Run As  ${viewer}  Отримати посилання на аукціон для глядача  ${TENDER['TENDER_UAID']}
  Should Be True  '${url}'
942
  Should Match Regexp  ${url}  ${AUCTION_REGEXP}
943 944 945 946 947 948
  Log  URL аукціону для глядача: ${url}


Можливість отримати посилання на аукціон для учасника ${username}
  ${timeout_on_wait}=  Get Broker Property By Username  ${username}  timeout_on_wait
  ${timeout_on_wait}=  Set Variable If
949 950
  ...                  ${timeout_on_wait} < ${120}
  ...                  ${120}
951 952 953 954 955 956
  ...                  ${timeout_on_wait}
  ${url}=  Wait Until Keyword Succeeds
  ...      ${timeout_on_wait}
  ...      15 s
  ...      Run As  ${username}  Отримати посилання на аукціон для учасника  ${TENDER['TENDER_UAID']}
  Should Be True  '${url}'
957
  Should Match Regexp  ${url}  ${AUCTION_REGEXP}
958 959 960
  Log  URL аукціону для учасника: ${url}

Taras Kozlovskyi authored
961 962
Дочекатись дати
  [Arguments]  ${date}
selurvedu authored
963 964
  ${sleep}=  wait_to_date  ${date}
  Run Keyword If  ${sleep} > 0  Sleep  ${sleep}
Taras Kozlovskyi authored
965
966
967
Дочекатись дати початку періоду уточнень
968
  [Arguments]  ${username}  ${tender_uaid}
969 970 971 972 973 974 975 976 977
  # XXX: HACK: Same as below
  ${status}  ${date}=  Run Keyword And Ignore Error
  ...      Set Variable
  ...      ${USERS.users['${username}'].tender_data.data.enquiryPeriod.startDate}
  ${date}=  Set Variable If
  ...      '${status}' == 'FAIL'
  ...      ${USERS.users['${tender_owner}'].initial_data.data.enquiryPeriod.startDate}
  ...      ${date}
  Дочекатись дати  ${date}
978 979
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
980
  ${next_status}=  Set variable if  'open' in '${MODE}'  active.tendering  active.enquiries
981 982 983 984 985 986
  Wait until keyword succeeds
  ...      5 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
987
  ...      ${next_status}
988 989

990
Дочекатись дати закінчення періоду уточнень
kvik authored
991
  [Arguments]  ${username}  ${tender_uaid}
992 993
  ${enquiryPeriod_endDate}=  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  enquiryPeriod.endDate
  Дочекатись дати  ${enquiryPeriod_endDate}
994
  Оновити LAST_MODIFICATION_DATE
995
  Дочекатись синхронізації з майданчиком  ${username}
kvik authored
996 997 998 999 1000 1001 1002
  Wait until keyword succeeds
  ...      10 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.tendering
1003 1004

1005
Дочекатись дати закінчення періоду відповідей на запитання
1006 1007 1008
  [Arguments]  ${username}  ${tender_uaid}
  ${clarificationsUntil}=  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  enquiryPeriod.clarificationsUntil
  Дочекатись дати  ${clarificationsUntil}
1009
  Оновити LAST_MODIFICATION_DATE
1010
  Дочекатись синхронізації з майданчиком  ${username}
1011 1012

1013 1014 1015 1016
Звірити статус тендера
  [Arguments]  ${username}  ${tender_uaid}  ${left}
  ${right}=  Run as  ${username}  Отримати інформацію із тендера  ${tender_uaid}  status
  Порівняти об'єкти  ${left}  ${right}
AlexDiatlov authored
1017 1018 1019 1020 1021


Звірити статус плану
  [Arguments]  ${username}  ${tender_uaid}  ${left}
  ${right}=  Run as  ${username}  Отримати інформацію із плану  ${tender_uaid}  status
1022
  Порівняти об'єкти  ${left}  ${right}
1023
ivanka12 authored
1024 1025
Звірити статус об'єкта моніторингу
  [Arguments]  ${username}  ${monitoring_uaid}  ${left}
1026
  ${right}=  Отримати дані із об'єкта моніторингу  ${username}  ${monitoring_uaid}  status
ivanka12 authored
1027 1028 1029
  Порівняти об'єкти  ${left}  ${right}

1030
Звірити статус вимоги/скарги
1031 1032
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${left}  ${object}  ${object_index}
  ${right}=  Run as  ${username}  Отримати інформацію із скарги  ${tender_uaid}  ${complaintID}  status  ${object}  ${object_index}
1033 1034 1035
  Порівняти об'єкти  ${left}  ${right}

1036 1037 1038 1039 1040 1041
Звірити статус cancellations
  [Arguments]  ${username}  ${tender_uaid}  ${left}  ${cancellation_index}
  ${right}=  Run as  ${username}  Отримати інформацію із cancellation  ${tender_uaid}  status  ${cancellation_index}
  Порівняти об'єкти  ${left}  ${right}

1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054
Дочекатись дати початку періоду уточнення
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      10 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.enquiries

1055
Дочекатись дати початку прийому пропозицій
1056
  [Arguments]  ${username}  ${tender_uaid}
1057 1058 1059 1060 1061 1062 1063 1064
  # This tries to get the date from current user's procurement data cache.
  # On failure, it reads from tender_owner's cached initial_data.
  # XXX: This is a dirty hack!
  # HACK: It was left here only for backward compatibiliy.
  # HACK: Before caching was implemented, this keyword used to look into
  # HACK: tender_owner's initial_data.
  # HACK: This should be cleaned up as soon as each broker implements reading
  # HACK: of the needed dates from tender's page.
1065 1066 1067 1068 1069 1070 1071 1072 1073
  ${status}  ${date}=  Run Keyword And Ignore Error
  ...      Set Variable
  ...      ${USERS.users['${username}'].tender_data.data.tenderPeriod.startDate}
  # By default if condition is not satisfied, variable is set to None.
  # The third argument sets the variable to itself instead of None.
  ${date}=  Set Variable If
  ...      '${status}' == 'FAIL'
  ...      ${USERS.users['${tender_owner}'].initial_data.data.tenderPeriod.startDate}
  ...      ${date}
1074
  Дочекатись дати  ${date}
Leits authored
1075 1076
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
1077
  Wait until keyword succeeds
1078
  ...      30 min 15 sec
1079 1080 1081 1082 1083
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.tendering
1084
1085
yankee7 authored
1086
Дочекатись дати закінчення прийому пропозицій
1087
  [Arguments]  ${username}  ${tender_uaid}
1088
  # XXX: HACK: Same as above
1089 1090 1091 1092 1093 1094 1095
  ${status}  ${date}=  Run Keyword And Ignore Error
  ...      Set Variable
  ...      ${USERS.users['${username}'].tender_data.data.tenderPeriod.endDate}
  ${date}=  Set Variable If
  ...      '${status}' == 'FAIL'
  ...      ${USERS.users['${tender_owner}'].initial_data.data.tenderPeriod.endDate}
  ...      ${date}
1096
  Дочекатись дати  ${date}
Leits authored
1097 1098
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
1099
  Wait until keyword succeeds
1100
  ...      40 min 15 sec
1101
  ...      15 sec
Leits authored
1102
  ...      Run Keyword And Expect Error  *
1103 1104 1105
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
Leits authored
1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122
  ...      active.tendering


Дочекатись дати початку періоду прекваліфікації
  [Arguments]  ${username}  ${tender_uaid}
  # XXX: HACK: Same as above
  ${status}  ${date}=  Run Keyword And Ignore Error
  ...      Set Variable
  ...      ${USERS.users['${username}'].tender_data.data.tenderPeriod.endDate}
  ${date}=  Set Variable If
  ...      '${status}' == 'FAIL'
  ...      ${USERS.users['${tender_owner}'].initial_data.data.tenderPeriod.endDate}
  ...      ${date}
  Дочекатись дати  ${date}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
1123
  ...      20 min 15 sec
Leits authored
1124 1125 1126 1127 1128 1129 1130
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.pre-qualification

oleh authored
1131 1132
Дочекатись дати початку очікування
  [Arguments]  ${username}  ${tender_uaid}
Krokop authored
1133 1134 1135 1136 1137 1138 1139 1140 1141
  # XXX: HACK: Same as above
  ${status}  ${date}=  Run Keyword And Ignore Error
  ...      Set Variable
  ...      ${USERS.users['${username}'].tender_data.data.tenderPeriod.endDate}
  ${date}=  Set Variable If
  ...      '${status}' == 'FAIL'
  ...      ${USERS.users['${tender_owner}'].initial_data.data.tenderPeriod.endDate}
  ...      ${date}
  Дочекатись дати  ${date}
oleh authored
1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      5 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.stage2.pending

Leits authored
1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167
Дочекатись дати закінчення періоду прекваліфікації
  [Arguments]  ${username}  ${tender_uaid}
  Дочекатись дати  ${USERS.users['${username}'].tender_data.data.qualificationPeriod.endDate}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      5 min 15 sec
  ...      15 sec
  ...      Run Keyword And Expect Error  *
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.pre-qualification.stand-still

Krokop authored
1168
Дочекатися створення нового етапу мостом
oleh authored
1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      10 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      complete

Leits authored
1181 1182 1183 1184 1185
Дочекатись дати початку періоду аукціону
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
1186
  ...      40 min 15 sec
Leits authored
1187 1188 1189 1190 1191 1192
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.auction
  Sleep  120  # Auction sync
1193
1194
1195 1196 1197 1198 1199
Дочекатись дати початку періоду кваліфікації
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
1200
  ...      40 min 15 sec
1201 1202 1203 1204 1205 1206 1207
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.qualification

1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220
Дочекатись дати закінчення періоду кваліфікації
  [Arguments]  ${username}  ${tender_uaid}
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      5 min 15 sec
  ...      15 sec
  ...      Run Keyword And Expect Error  *
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.qualification.stand-still

1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233
Дочекатись зміни статусу unsuccessful
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      40 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      unsuccessful

Leits authored
1234 1235 1236
Дочекатись дати закінчення періоду подання скарг
  [Arguments]  ${username}
  Дочекатись дати  ${USERS.users['${username}'].tender_data.data.complaintPeriod.endDate}
Leits authored
1237 1238
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
1239 1240

1241 1242
Дочекатись можливості зареєструвати угоди
  [Arguments]  ${username}
1243
  ${username}=  Отримати користувача з доступом до поля за пріорітетом  contractPeriod  ${tender_owner}  ${viewer}
1244
  Дочекатись дати  ${USERS.users['${username}'].tender_data.data.contractPeriod.clarificationsUntil}
1245 1246 1247 1248
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}

1249 1250
Дочекатись зміни статусу вимоги
  [Arguments]  ${username}  ${status}  ${complaintID}  ${award_index}=${None}
1251 1252
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
1253
  ...      40 min 15 sec
1254 1255 1256 1257
  ...      15 sec
  ...      Звірити статус вимоги/скарги
  ...      ${provider}
  ...      ${TENDER['TENDER_UAID']}
1258
  ...      ${complaintID}
1259
  ...      ${status}
1260
  ...      ${award_index}
1261 1262

1263 1264 1265 1266
Дочекатись зміни статусу cancellations
  [Arguments]  ${username}  ${tender_uaid}  ${status}  ${cancellation_index}
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
1267
  ...      20 min
1268 1269 1270 1271 1272 1273 1274 1275
  ...      60 sec
  ...      Звірити статус cancellations
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${status}
  ...      ${cancellation_index}

1276
Оновити LAST_MODIFICATION_DATE
1277 1278 1279 1280 1281
  [Documentation]
  ...      Variable ``${TEST_STATUS}`` is only available in test case teardown.
  ...      When we call this keyword from elswere, we need to presume that
  ...      test status is ``PASS`` (since previous keywords passed and this
  ...      one was called).
1282
  ${LAST_MODIFICATION_DATE}=  Get Current TZdate
1283
  ${status}=  Get Variable Value  ${TEST_STATUS}  PASS
Leits authored
1284
  Run Keyword If  '${status}' == 'PASS'  Set To Dictionary  ${TENDER}  LAST_MODIFICATION_DATE=${LAST_MODIFICATION_DATE}
ivanka12 authored
1285 1286

1287 1288 1289 1290 1291 1292
Оновити DASU_LAST_MODIFICATION_DATE
  ${LAST_MODIFICATION_DATE}=  Get Current TZdate
  ${status}=  Get Variable Value  ${TEST_STATUS}  PASS
  Run Keyword If  '${status}' == 'PASS'  Set To Dictionary  ${MONITORING}  DASU_LAST_MODIFICATION_DATE=${LAST_MODIFICATION_DATE}

qa-user-1 authored
1293 1294 1295 1296
Отримати користувача з доступом до поля за пріорітетом
  [Arguments]  ${field}  @{usernames}
  :FOR  ${username}  IN  @{usernames}
  \  ${user_data}=  Get From Dictionary  ${USERS.users}  ${username}
1297 1298
  \  ${status}  ${field_value}=  Run Keyword And Ignore Error
  ...      get_from_object
qa-user-1 authored
1299 1300
  ...      ${user_data.tender_data.data}
  ...      ${field}
AlexDiatlov authored
1301
  \  Log  ${user_data.tender_data.data}
1302
  \  Run Keyword If  '${status}' == 'PASS'  Exit For Loop
qa-user-1 authored
1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313
  Run Keyword If  '${status}' == 'FAIL'  Fail  ${object} not found for usernames @{usernames}
  [Return]  ${username}


Отримати останній індекс
  [Arguments]  ${field}  @{usernames}
  ${username}=  Отримати користувача з доступом до поля за пріорітетом  ${field}  @{usernames}
  ${user_data}=  Get From Dictionary  ${USERS.users}  ${username}
  ${object}=  Get From Dictionary  ${user_data.tender_data.data}  ${field}
  ${len}=  Get Length  ${object}
  ${index}=  Evaluate  ${len} - 1
1314
  [Return]  ${index}
1315 1316

qa-user-1 authored
1317 1318 1319 1320 1321 1322 1323 1324 1325 1326
Отримати останній элемент
  [Arguments]  ${field}  @{usernames}
  ${username}=  Отримати користувача з доступом до поля за пріорітетом  ${field}  @{usernames}
  ${index}=  Отримати останній індекс  ${field}  @{usernames}
  ${user_data}=  Get From Dictionary  ${USERS.users}  ${username}
  ${object}=  Get From Dictionary  ${user_data.tender_data.data}  ${field}
  ${item}=  Get From List  ${object}  ${index}
  [Return]  ${item}

1327
Розрахувати ціну для ${contract_number} контракту
1328
  ${username}=  Отримати користувача з доступом до поля за пріорітетом  agreements  ${tender_owner}  ${viewer}
1329
  ${contract_data}=  Create Dictionary  data=${USERS.users['${username}'].tender_data.data.agreements[0].contracts[${contract_number}]}
1330 1331
  ${quantity}=  Set Variable  ${0}
  :FOR  ${index}  IN RANGE  ${NUMBER_OF_ITEMS}
1332
  \  ${quantity}=  Evaluate  ${quantity}+${USERS.users['${username}'].tender_data.data['items'][${index}]['quantity']}
1333
  ${value}=  Evaluate  ${USERS.users['${username}'].tender_data.data.awards[${contract_number}].value.amount}/${quantity}
1334
  ${value}=  Convert To Integer  ${value}
1335 1336
  :FOR  ${index}  IN RANGE  ${NUMBER_OF_ITEMS}
  \  Set To Dictionary  ${contract_data.data.unitPrices[${index}].value}  amount=${value}
1337 1338
  ${contract_data}=  munch_dict  arg=${contract_data}
  Log  ${contract_data}
1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352
  [Return]  ${contract_data}


Дочекатися припинення процесу
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      10 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      draft.unsuccessful