Blame view

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

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

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

  # Handle `-v role:something`
88
  Run Keyword Unless  '${ROLE}' in @{USED_ROLES}
89
  ...      Log
90
  ...      Role ${ROLE} is not used in this test suite.
91 92
  ...      WARN
  Set Suite Variable With Default Value
93 94
  ...      ${ROLE}
  ...      ${BROKERS['${BROKER}'].roles.${ROLE}}
95 96 97 98 99 100

  # 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!
101
  :FOR  ${tmp_role}  IN  @{USED_ROLES}
102 103 104 105 106
  \  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}
107
  # Since `@{USED_ROLES}` is already a suite variable,
108
  # let's make `@{used_brokers}` alike.
109
  ${used_brokers}=  Remove Duplicates  ${used_brokers}
110
  Set Suite Variable  ${used_brokers}
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
  # 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}
129
  \  ${munch_dict}=  munch_dict  data=${True}
130 131 132
  \  ${keywords_file}=  Get Broker Property  ${USERS.users.${username}.broker}  keywords_file
  \  Завантажуємо бібліотеку з реалізацією для майданчика ${keywords_file}
  \  Run As  ${username}  Підготувати клієнт для користувача
133
  \  ${LAST_REFRESH_DATE}=  Get Current TZdate
134 135 136
  \  Set To Dictionary  ${USERS}  ${username}=${USERS.users.${username}}
  \  Set To Dictionary  ${USERS.${username}}  tender_data=${munch_dict}
  \  Set To Dictionary  ${USERS.${username}}  LAST_REFRESH_DATE  ${LAST_REFRESH_DATE}
137
  \  Set To Dictionary  ${USERS.${username}}  DASU_LAST_REFRESH_DATE  ${LAST_REFRESH_DATE}
138 139 140 141

  # Drop all unused users
  Keep In Dictionary  ${USERS.users}  @{used_users}
  Log Many  @{USERS}
142
143
144 145 146
Get Broker Property
  [Arguments]  ${broker_name}  ${property}
  [Documentation]
147 148 149
  ...      This keyword returns a property of specified broker
  ...      if that property exists, otherwise, it returns a
  ...      default value.
150
  Run Keyword If  '${broker_name}'=='${None}'  Fail  \${broker_name} is NoneType
151 152
  Should Contain  ${BROKERS['${broker_name}']}  ${property}
  Return From Keyword  ${BROKERS['${broker_name}'].${property}}
153
154
155 156
Get Broker Property By Username
  [Documentation]
157 158 159
  ...      This keyword gets the corresponding broker name
  ...      for a specified username and then calls
  ...      "Get Broker Property"
160 161 162 163
  [Arguments]  ${username}  ${property}
  ${broker_name}=  Get Variable Value  ${USERS.users['${username}'].broker}
  Run Keyword And Return  Get Broker Property  ${broker_name}  ${property}
selurvedu authored
164
Leits authored
165 166
Створити артефакт
  ${artifact}=  Create Dictionary
167
  ...      api_version=${API_VERSION}
Leits authored
168 169
  ...      tender_uaid=${TENDER['TENDER_UAID']}
  ...      last_modification_date=${TENDER['LAST_MODIFICATION_DATE']}
170
  ...      mode=${MODE}
171 172
  Run Keyword And Ignore Error  Set To Dictionary  ${artifact}
  ...          tender_owner=${USERS.users['${tender_owner}'].broker}
173 174
  ...          access_token=${USERS.users['${tender_owner}'].access_token}
  ...          tender_id=${USERS.users['${tender_owner}'].tender_data.data.id}
175 176 177
  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}
178 179
  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}
180 181 182
  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
183
  ${status}  ${lots_ids}=  Run Keyword And Ignore Error  Отримати ідентифікатори об’єктів  ${viewer}  lots
184
  Run Keyword If  '${status}'=='PASS'
Leits authored
185
  ...      Set To Dictionary   ${artifact}   lots=${lots_ids}
Leits authored
186
  Log   ${artifact}
187
  log_object_data  ${artifact}  file_name=artifact  update=${True}  artifact=${True}
Leits authored
188
selurvedu authored
189
Leits authored
190 191
Завантажити дані про тендер
  ${file_path}=  Get Variable Value  ${ARTIFACT_FILE}  artifact.yaml
192
  ${ARTIFACT}=  load_data_from  ${file_path}
193
  Run Keyword And Ignore Error  Set To Dictionary  ${USERS.users['${tender_owner}']}  access_token=${ARTIFACT.access_token}
194 195 196 197
  ${TENDER}=  Create Dictionary
  ...      TENDER_UAID=${ARTIFACT.tender_uaid}
  ...      LAST_MODIFICATION_DATE=${ARTIFACT.last_modification_date}
  ...      LOT_ID=${Empty}
198 199
  ${lot_index}=  Get Variable Value  ${lot_index}  0
  Run Keyword And Ignore Error  Set To Dictionary  ${TENDER}  LOT_ID=${ARTIFACT.lots[${lot_index}]}
200
  ${MODE}=  Get Variable Value  ${MODE}  ${ARTIFACT.mode}
201
  Run Keyword And Ignore Error  Set To Dictionary  ${USERS.users['${tender_owner}']}  access_token=${ARTIFACT.tender_owner_access_token}
202 203
  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}
204 205
  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}
206 207
  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}
208
  Set Suite Variable  ${MODE}
209 210
  Set Suite Variable  ${lot_index}
  Set Suite Variable  ${TENDER}
211
  log_object_data  ${ARTIFACT}  file_name=artifact  update=${True}  artifact=${True}
Leits authored
212
213
214
Підготувати дані для створення тендера
215
  [Arguments]  ${tender_parameters}
216
  ${period_intervals}=  compute_intrs  ${BROKERS}  ${used_brokers}
217
  ${submissionMethodDetails}=  Get Variable Value  ${submissionMethodDetails}
218
  ${accelerator}=  Get Variable Value  ${accelerator}
kvik authored
219
  ${funders}=  Get Variable Value  ${FUNDERS}
kvik authored
220
  ${tender_data}=  prepare_test_tender_data  ${period_intervals}  ${tender_parameters}  ${submissionMethodDetails}  ${accelerator}  ${funders}
221
  ${TENDER}=  Create Dictionary
222
  Set Global Variable  ${TENDER}
223 224
  Log  ${tender_data}
  [return]  ${tender_data}
225
226
ivanka12 authored
227 228 229 230 231 232 233 234 235 236
Підготувати дані для створення плану
  [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}

237 238
Підготувати дані для створення предмету закупівлі
  [Arguments]  ${cpv}
239 240
  ${index}=  Set variable if  ${moz_integration}  3  4
  ${item}=  test_item_data  ${cpv[:${index}]}
241 242 243
  [Return]  ${item}

244 245 246 247 248 249 250 251 252
Підготувати дані для створення предмету закупівлі плану
  [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}

253
Підготувати дані для створення лоту
254 255
  [Arguments]  ${max_lot_value_amount}
  ${lot}=  test_lot_data  ${max_lot_value_amount}
Leits authored
256 257
  ${reply}=  Create Dictionary  data=${lot}
  [Return]  ${reply}
258
ivanka12 authored
259
260 261 262
Підготувати дані для створення нецінового показника
  ${reply}=  test_feature_data
  [Return]  ${reply}
263
ivanka12 authored
264
265
Підготувати дані для подання вимоги
mykhaly authored
266 267 268 269
  ${claim}=  test_claim_data
  [Return]  ${claim}

270
Підготувати дані для подання скарги
271 272 273 274 275
  [Arguments]  ${lot}=${False}
  ${complaint}=  test_complaint_data  ${lot}
  [Return]  ${complaint}

276
Підготувати дані для відповіді на скаргу
277 278 279 280
  ${reply}=  test_complaint_reply_data
  [Return]  ${reply}

281
Підготувати дані для запитання
282
  ${question}=  test_question_data
283 284 285
  [Return]  ${question}

286
Підготувати дані для відповіді на запитання
287 288 289 290
  ${answer}=  test_question_answer_data
  [Return]  ${answer}

291
Підготувати дані для подання пропозиції
292
  [Arguments]
mykhaly authored
293
  ${bid}=  generate_test_bid_data  ${USERS.users['${tender_owner}'].initial_data.data}
294
  [Return]  ${bid}
295
296
297
Підготувати дані для подання пропозиції для другого етапу
298 299 300 301
  [Arguments]  ${username}
  ${value}=  Evaluate  ${USERS.users['${username}'].bidresponses.bid.data.lotValues[0].value.amount}*0.95
  Set To Dictionary  ${USERS.users['${username}'].bidresponses.bid.data.lotValues[0].value}  amount=${value}
  [Return]  ${USERS.users['${username}'].bidresponses.bid}
302
Krokop authored
303
mykhaly authored
304
Підготувати дані про постачальника
Krokop authored
305
  [Arguments]  ${username}  ${lotIndex}=${-1}
306
  ${lotIndex}=  Convert To Integer  ${lotIndex}
mykhaly authored
307
  ${supplier_data}=  test_supplier_data
Krokop authored
308 309
  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
310 311 312 313
  Log  ${supplier_data}
  [Return]  ${supplier_data}

314 315
Підготувати дані про скасування
  ${cancellation_reason}=  create_fake_sentence
316 317
  ${cancellation_reason}=  field_with_id  c  ${cancellation_reason}
  ${cancellation_id}=  get_id_from_string  ${cancellation_reason}
318
  ${file_path}  ${file_name}  ${file_content}=  create_fake_doc
319
  ${doc_id}=  get_id_from_string  ${file_name}
320 321 322 323 324
  ${document}=  Create Dictionary
  ...      doc_path=${file_path}
  ...      doc_name=${file_name}
  ...      doc_content=${file_content}
  ...      doc_id=${doc_id}
325
  ${new_description}=  create_fake_sentence
326 327
  ${cancellation_data}=  Create Dictionary
  ...      cancellation_reason=${cancellation_reason}
328
  ...      cancellation_id=${cancellation_id}
329 330
  ...      document=${document}
  ...      description=${new_description}
331
  ${cancellation_data}=  munchify  ${cancellation_data}
332 333
  [Return]  ${cancellation_data}
selurvedu authored
334
mykhaly authored
335
Підготувати дані про зміну до договору
336 337 338 339 340 341
  [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
342
343
Адаптувати дані для оголошення тендера
344
  [Arguments]  ${tender_data}
345
  # munchify is used to make deep copy of ${tender_data}
346
  ${adapted_data}=  munchify  ${tender_data}
347
  :FOR  ${username}  IN  @{USED_ROLES}
348 349 350 351 352 353 354 355 356 357 358 359
  # 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}
360
  Log  ${adapted_data}
361
  Log  ${tender_data}
362 363 364
  [Return]  ${adapted_data}

365 366 367 368 369 370 371
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}

372
Завантажуємо бібліотеку з реалізацією для майданчика ${keywords_file}
373 374 375 376 377 378 379 380 381 382 383 384 385 386
  [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.
387
  ${bundled_st}=  Run Keyword And Return Status  Import Resource  ${CURDIR}${/}brokers${/}${keywords_file}.robot
388
  ${external_st}=  Run Keyword And Return Status  Import Resource  ${keywords_file}.robot
389
  Run Keyword If  ${bundled_st} == ${external_st} == ${False}  Fail  Resource file ${keywords_file}.robot not found
390
  Run Keyword If  ${bundled_st} == ${external_st} == ${True}  Fail  Resource file ${keywords_file}.robot found in both brokers${/} and src${/}
391
392
393 394 395
Дочекатись синхронізації з майданчиком
  [Arguments]  ${username}
  [Documentation]
396 397 398 399 400 401 402 403 404
  ...      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.
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426
  ...      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
427 428 429 430 431 432 433 434
  ...      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.
435
  ${timeout_on_wait}=  Get Broker Property By Username  ${username}  timeout_on_wait
436 437 438 439 440 441 442
  ${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}
443
  Run Keyword If  ${sleep} > 0  Sleep  ${sleep}
444
445 446 447 448

  ${time_diff}=  Subtract Date From Date
  ...      ${last_modification_date_corrected}
  ...      ${USERS.users['${username}']['LAST_REFRESH_DATE']}
mykhaly authored
449
  ${LAST_REFRESH_DATE}=  Get Current TZdate
450
  Run Keyword If  ${time_diff} > 0  Run Keywords
kosaniak authored
451
  ...      Оновити сторінку  ${username}
452 453 454
  ...      AND
  ...      Set To Dictionary  ${USERS.users['${username}']}  LAST_REFRESH_DATE=${LAST_REFRESH_DATE}
455
456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478
Дочекатись синхронізації з ДАСУ
  [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
479 480
Оновити сторінку
  [Arguments]  ${username}
ivanka12 authored
481
  Run Keyword If  '${RESOURCE}' == 'plans'  Run As  ${username}  Оновити сторінку з планом  ${TENDER['TENDER_UAID']}
482 483 484
  ...      ELSE  Run As  ${username}  Оновити сторінку з тендером  ${TENDER['TENDER_UAID']}

485
Звірити поле тендера
486
  [Arguments]  ${username}  ${tender_uaid}  ${tender_data}  ${field}
487
  ${left}=  get_from_object  ${tender_data.data}  ${field}
488
  Звірити поле тендера із значенням  ${username}  ${tender_uaid}  ${left}  ${field}
489
490
ivanka12 authored
491
Звірити поле об'єкта моніторингу
492 493 494
  [Arguments]  ${username}  ${monitoring_uaid}  ${monitoring_data}  ${field}
  ${left}=  get_from_object  ${monitoring_data.data}  ${field}
  Звірити поле об'єкта моніторингу із значенням  ${username}  ${monitoring_uaid}  ${left}  ${field}
ivanka12 authored
495 496

497 498 499 500 501 502 503 504 505 506 507 508
Звірити поле плану
  [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}

509
Звірити поле тендера із значенням
510
  [Arguments]  ${username}  ${tender_uaid}  ${left}  ${field}  ${object_id}=${Empty}
511
  ${right}=  Отримати дані із тендера  ${username}  ${tender_uaid}  ${field}  ${object_id}
512 513
  Порівняти об'єкти  ${left}  ${right}
514
ivanka12 authored
515
Звірити поле об'єкта моніторингу із значенням
516 517
  [Arguments]  ${username}  ${monitoring_uaid}  ${left}  ${field}  ${object_id}=${Empty}
  ${right}=  Отримати дані із об'єкта моніторингу  ${username}  ${monitoring_uaid}  ${field}  ${object_id}
ivanka12 authored
518 519 520
  Порівняти об'єкти  ${left}  ${right}

521 522 523 524 525 526 527 528 529 530 531 532
Звірити поле договору
  [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}

533 534 535 536 537 538 539 540 541 542 543 544 545
Звірити поле зміни до договору
  [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
546 547 548 549 550 551 552 553 554 555 556 557 558
Звірити поле донора
  [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}

559 560 561 562 563 564
Звірити відображення типу запланованого тендера для ${username}
  ${type}=  Отримати дані із плану  ${username}  ${TENDER['TENDER_UAID']}  tender.procurementMethodType
  Звірити відображення поля tender.procurementMethodType плану для користувача ${username}
  Run Keyword If  '${type}' == ''  Run As  ${username}  Перевірити наявність повідомлення  "без застосування електронної системи"

565 566
Порівняти об'єкти
  [Arguments]  ${left}  ${right}
567 568
  Log  ${left}
  Log  ${right}
569 570
  Should Not Be Equal  ${left}  ${None}
  Should Not Be Equal  ${right}  ${None}
571
  Should Be Equal  ${left}  ${right}  msg=Objects are not equal
572
573
574
Звірити дату тендера
575
  [Arguments]  ${username}  ${tender_uaid}  ${tender_data}  ${field}  ${accuracy}=60  ${absolute_delta}=${False}
576
  ${left}=  get_from_object  ${tender_data.data}  ${field}
577
  Звірити дату тендера із значенням  ${username}  ${tender_uaid}  ${left}  ${field}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
578
579
580
Звірити дату тендера із значенням
581
  [Arguments]  ${username}  ${tender_uaid}  ${left}  ${field}  ${object_id}=${Empty}  ${accuracy}=60  ${absolute_delta}=${False}
582
  ${right}=  Отримати дані із тендера  ${username}  ${tender_uaid}  ${field}  ${object_id}
583
  Порівняти дати  ${left}  ${right}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
584
585
selurvedu authored
586 587 588 589 590 591 592 593
Порівняти дати
  [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
594
  [Arguments]  ${left}  ${right}  ${accuracy}=90  ${absolute_delta}=${False}
595 596
  Log  ${left}
  Log  ${right}
597 598
  Should Not Be Equal  ${left}  ${None}
  Should Not Be Equal  ${right}  ${None}
599
  ${status}=  compare_date  ${left}  ${right}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
Leits authored
600 601 602 603
  Should Be True  ${status}  msg=Dates differ: ${left} != ${right}


Звірити координати доставки тендера
604 605 606 607 608
  [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
  ${left_lon}=  get_from_object  ${tender_data.data}  items[${item_index}].deliveryLocation.longitude
  ${right_lat}=  Отримати дані із тендера  ${username}  ${tender_uaid}  deliveryLocation.latitude  ${item_id}
609
  ${right_lat}=  Convert To Number  ${right_lat}
610
  ${right_lon}=  Отримати дані із тендера  ${username}  ${tender_uaid}  deliveryLocation.longitude  ${item_id}
611
  ${right_lon}=  Convert To Number  ${right_lon}
Leits authored
612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629
  Порівняти координати  ${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})
630
631
632
Звірити поля предметів закупівлі багатопредметного тендера
633
  [Arguments]  ${username}  ${tender_data}  ${field}
634
  @{items}=  get_from_object  ${tender_data.data}  items
selurvedu authored
635 636 637
  ${len_of_items}=  Get Length  ${items}
  :FOR  ${index}  IN RANGE  ${len_of_items}
  \  Звірити поле тендера  ${viewer}  ${tender_data}  items[${index}].${field}
638
639
640
Звірити дату предметів закупівлі багатопредметного тендера
641
  [Arguments]  ${username}  ${tender_data}  ${field}  ${accuracy}=60  ${absolute_delta}=${False}
642
  @{items}=  get_from_object  ${tender_data.data}  items
Leits authored
643
  :FOR  ${index}  ${_}  IN ENUMERATE  @{items}
644
  \  Звірити дату тендера  ${viewer}  ${TENDER['TENDER_UAID']}  ${tender_data}  items[${index}].${field}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
645
646
Leits authored
647 648
Звірити координати доставки предметів закупівлі багатопредметного тендера
  [Arguments]  ${username}  ${tender_data}
649
  @{items}=  get_from_object  ${tender_data.data}  items
Leits authored
650 651 652 653
  :FOR  ${index}  ${_}  IN ENUMERATE  @{items}
  \  Звірити координати тендера  ${viewer}  ${tender_data}  items[${index}]

Leits authored
654
Отримати дані із тендера
655 656 657
  [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}
Leits authored
658
  ${status}  ${field_value}=  Run keyword and ignore error
659
  ...      get_from_object
Leits authored
660 661 662 663 664
  ...      ${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
665 666
  ${field_value}=  Run Keyword IF  '${object_id}'  Отримати дані із об’єкта тендера  ${username}  ${tender_uaid}  ${object_id}  ${field_name}
  ...                          ELSE  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  ${field}
Leits authored
667 668
  # And caching its value before return
  Set_To_Object  ${USERS.users['${username}'].tender_data.data}  ${field}  ${field_value}
669 670 671
  ${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
672 673 674
  [return]  ${field_value}

ivanka12 authored
675 676 677 678 679 680 681 682 683 684 685 686 687 688 689
Отримати дані із об'єкта моніторингу
  [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}

690 691 692 693 694 695 696 697 698 699 700 701 702
Отримати дані із плану
  [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
703
  Set_To_Object  ${USERS.users['${username}'].tender_data.data}  ${field}  ${field_value}
704 705 706
  ${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
707 708 709
  [return]  ${field_value}

710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727
Отримати дані із договору
  [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
728 729 730
Отримати шлях до поля об’єкта
  [Arguments]  ${username}  ${field_name}  ${object_id}
  ${object_type}=  get_object_type_by_id  ${object_id}
Leits authored
731
  ${objects}=  Get Variable Value  ${USERS.users['${username}'].tender_data.data['${object_type}']}  ${None}
Leits authored
732 733 734 735 736
  ${object_index}=  get_object_index_by_id  ${objects}  ${object_id}
  [return]  ${object_type}[${object_index}].${field_name}


Отримати дані із об’єкта тендера
737 738
  [Arguments]  ${username}  ${tender_uaid}  ${object_id}  ${field_name}
  ${object_type}=  get_object_type_by_id  ${object_id}
Leits authored
739
  ${status}  ${value}=  Run Keyword If  '${object_type}'=='questions'
740 741 742
  ...      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}
743 744 745 746
  ...      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
747 748
  ${field}=  Отримати шлях до поля об’єкта  ${username}  ${field_name}  ${object_id}
  ${field_value}=  Run Keyword IF  '${status}'=='PASS'  Set Variable  ${value}
749
  ...      ELSE  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  ${field}
Leits authored
750 751 752
  [return]  ${field_value}

Leits authored
753 754 755 756 757 758 759 760 761 762
Отримати ідентифікатори об’єктів
  [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}

763
Звірити поле скарги із значенням
764
  [Arguments]  ${username}  ${tender_uaid}  ${given_value}  ${field_name}  ${complaintID}  ${award_index}=${None}
765
  ${received_value}=  Run as  ${username}  Отримати інформацію із скарги  ${tender_uaid}  ${complaintID}  ${field_name}  ${award_index}
766
  Порівняти об'єкти  ${given_value}  ${received_value}
767 768

769
Run As
770
  [Arguments]  ${username}  ${command}  @{arguments}
771 772 773
  [Documentation]
  ...      Run the given keyword (``command``) with given ``arguments``
  ...      using driver (keyword library) of user ``username``.
774 775
  Log  ${username}
  Log  ${command}
776
  Log Many  @{arguments}
777
  ${keywords_file}=  Get Broker Property By Username  ${username}  keywords_file
778
  Run Keyword And Return  ${keywords_file}.${command}  ${username}  @{arguments}
Taras Kozlovskyi authored
779
780
781
Require Failure
782
  [Arguments]  ${username}  ${command}  @{arguments}
783 784 785 786 787
  [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.
788 789
  Log  ${username}
  Log  ${command}
790
  Log Many  @{arguments}
791
  ${keywords_file}=  Get Broker Property By Username  ${username}  keywords_file
792
  ${status}  ${value}=  Run keyword and ignore keyword definitions  ${keywords_file}.${command}  ${username}  @{arguments}
793 794
  Run keyword if  '${status}' == 'PASS'  Fail  Користувач ${username} зміг виконати "${command}"
  [return]  ${value}
795
796
797 798 799
Можливість отримати посилання на аукціон для глядача
  ${timeout_on_wait}=  Get Broker Property By Username  ${viewer}  timeout_on_wait
  ${timeout_on_wait}=  Set Variable If
800 801
  ...                  ${timeout_on_wait} < ${120}
  ...                  ${120}
802 803 804 805 806 807
  ...                  ${timeout_on_wait}
  ${url}=  Wait Until Keyword Succeeds
  ...      ${timeout_on_wait}
  ...      15 s
  ...      Run As  ${viewer}  Отримати посилання на аукціон для глядача  ${TENDER['TENDER_UAID']}
  Should Be True  '${url}'
808
  Should Match Regexp  ${url}  ${AUCTION_REGEXP}
809 810 811 812 813 814
  Log  URL аукціону для глядача: ${url}


Можливість отримати посилання на аукціон для учасника ${username}
  ${timeout_on_wait}=  Get Broker Property By Username  ${username}  timeout_on_wait
  ${timeout_on_wait}=  Set Variable If
815 816
  ...                  ${timeout_on_wait} < ${120}
  ...                  ${120}
817 818 819 820 821 822
  ...                  ${timeout_on_wait}
  ${url}=  Wait Until Keyword Succeeds
  ...      ${timeout_on_wait}
  ...      15 s
  ...      Run As  ${username}  Отримати посилання на аукціон для учасника  ${TENDER['TENDER_UAID']}
  Should Be True  '${url}'
823
  Should Match Regexp  ${url}  ${AUCTION_REGEXP}
824 825 826
  Log  URL аукціону для учасника: ${url}

Taras Kozlovskyi authored
827 828
Дочекатись дати
  [Arguments]  ${date}
selurvedu authored
829 830
  ${sleep}=  wait_to_date  ${date}
  Run Keyword If  ${sleep} > 0  Sleep  ${sleep}
Taras Kozlovskyi authored
831
832
833
Дочекатись дати початку періоду уточнень
834
  [Arguments]  ${username}  ${tender_uaid}
835 836 837 838 839 840 841 842 843
  # 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}
844 845
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
846
  ${next_status}=  Set variable if  'open' in '${MODE}'  active.tendering  active.enquiries
847 848 849 850 851 852
  Wait until keyword succeeds
  ...      5 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
853
  ...      ${next_status}
854 855

856
Дочекатись дати закінчення періоду уточнень
kvik authored
857
  [Arguments]  ${username}  ${tender_uaid}
858 859
  ${enquiryPeriod_endDate}=  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  enquiryPeriod.endDate
  Дочекатись дати  ${enquiryPeriod_endDate}
860
  Оновити LAST_MODIFICATION_DATE
861
  Дочекатись синхронізації з майданчиком  ${username}
kvik authored
862 863 864 865 866 867 868
  Wait until keyword succeeds
  ...      10 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.tendering
869 870

871
Дочекатись дати закінчення періоду відповідей на запитання
872 873 874
  [Arguments]  ${username}  ${tender_uaid}
  ${clarificationsUntil}=  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  enquiryPeriod.clarificationsUntil
  Дочекатись дати  ${clarificationsUntil}
875
  Оновити LAST_MODIFICATION_DATE
876
  Дочекатись синхронізації з майданчиком  ${username}
877 878

879 880 881 882
Звірити статус тендера
  [Arguments]  ${username}  ${tender_uaid}  ${left}
  ${right}=  Run as  ${username}  Отримати інформацію із тендера  ${tender_uaid}  status
  Порівняти об'єкти  ${left}  ${right}
883 884

ivanka12 authored
885 886 887 888 889 890
Звірити статус об'єкта моніторингу
  [Arguments]  ${username}  ${monitoring_uaid}  ${left}
  ${right}=  Run As  ${username}  Отримати інформацію із об'єкта моніторингу  ${monitoring_uaid}  status
  Порівняти об'єкти  ${left}  ${right}

891 892 893 894 895 896
Звірити статус вимоги/скарги
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${left}  ${award_index}=${None}
  ${right}=  Run as  ${username}  Отримати інформацію із скарги  ${tender_uaid}  ${complaintID}  status  ${award_index}
  Порівняти об'єкти  ${left}  ${right}

897
Дочекатись дати початку прийому пропозицій
898
  [Arguments]  ${username}  ${tender_uaid}
899 900 901 902 903 904 905 906
  # 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.
907 908 909 910 911 912 913 914 915
  ${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}
916
  Дочекатись дати  ${date}
Leits authored
917 918
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
919
  Wait until keyword succeeds
920
  ...      30 min 15 sec
921 922 923 924 925
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.tendering
926
927
yankee7 authored
928
Дочекатись дати закінчення прийому пропозицій
929
  [Arguments]  ${username}  ${tender_uaid}
930
  # XXX: HACK: Same as above
931 932 933 934 935 936 937
  ${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}
938
  Дочекатись дати  ${date}
Leits authored
939 940
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
941
  Wait until keyword succeeds
942
  ...      40 min 15 sec
943
  ...      15 sec
Leits authored
944
  ...      Run Keyword And Expect Error  *
945 946 947
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
Leits authored
948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964
  ...      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
965
  ...      20 min 15 sec
Leits authored
966 967 968 969 970 971 972
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.pre-qualification

oleh authored
973 974
Дочекатись дати початку очікування
  [Arguments]  ${username}  ${tender_uaid}
Krokop authored
975 976 977 978 979 980 981 982 983
  # 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
984 985 986 987 988 989 990 991 992 993 994
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      5 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.stage2.pending

Leits authored
995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009
Дочекатись дати закінчення періоду прекваліфікації
  [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
1010
Дочекатися створення нового етапу мостом
oleh authored
1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      10 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      complete

Leits authored
1023 1024 1025 1026 1027
Дочекатись дати початку періоду аукціону
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
1028
  ...      40 min 15 sec
Leits authored
1029 1030 1031 1032 1033 1034
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.auction
  Sleep  120  # Auction sync
1035
1036
1037 1038 1039 1040 1041
Дочекатись дати початку періоду кваліфікації
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
1042
  ...      40 min 15 sec
1043 1044 1045 1046 1047 1048 1049
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.qualification

1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062
Дочекатись дати закінчення періоду кваліфікації
  [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

Leits authored
1063 1064 1065
Дочекатись дати закінчення періоду подання скарг
  [Arguments]  ${username}
  Дочекатись дати  ${USERS.users['${username}'].tender_data.data.complaintPeriod.endDate}
Leits authored
1066 1067
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
1068 1069

1070 1071 1072 1073 1074 1075 1076
Дочекатись можливості зареєструвати угоди
  [Arguments]  ${username}
  Дочекатись дати  ${USERS.users['${tender_owner}'].tender_data.data.contractPeriod.clarificationsUntil}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}

1077 1078
Дочекатись зміни статусу вимоги
  [Arguments]  ${username}  ${status}  ${complaintID}  ${award_index}=${None}
1079 1080
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
1081
  ...      40 min 15 sec
1082 1083 1084 1085
  ...      15 sec
  ...      Звірити статус вимоги/скарги
  ...      ${provider}
  ...      ${TENDER['TENDER_UAID']}
1086
  ...      ${complaintID}
1087
  ...      ${status}
1088
  ...      ${award_index}
1089 1090

1091
Оновити LAST_MODIFICATION_DATE
1092 1093 1094 1095 1096
  [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).
1097
  ${LAST_MODIFICATION_DATE}=  Get Current TZdate
1098
  ${status}=  Get Variable Value  ${TEST_STATUS}  PASS
Leits authored
1099
  Run Keyword If  '${status}' == 'PASS'  Set To Dictionary  ${TENDER}  LAST_MODIFICATION_DATE=${LAST_MODIFICATION_DATE}
ivanka12 authored
1100 1101

1102 1103 1104 1105 1106 1107
Оновити 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}

ivanka12 authored
1108
Отримати останній індекс
1109 1110 1111 1112 1113 1114 1115 1116 1117 1118
  [Arguments]  ${object}  @{username}
  :FOR  ${role}  IN  @{username}
  \  ${status}  ${field_value}=  Run Keyword And Ignore Error
  ...      get_from_object
  ...      ${USERS.users['${role}'].tender_data.data}
  ...      ${object}
  \  Run Keyword If  '${status}' == 'PASS'  Exit For Loop
  ${len_of_object}=  Run Keyword If  '${status}' == 'PASS'  Get Length  ${USERS.users['${role}'].tender_data.data.${object}}
  ${index}=  Run Keyword If  '${status}' == 'PASS'  subtraction  ${len_of_object}  1
  [Return]  ${index}
1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129


Розрахувати ціну для ${index} контракту
  ${contract_data}=  Create Dictionary  data=${USERS.users['${tender_owner}'].tender_data.data.agreements[0].contracts[${index}]}
  ${quantity}=  Convert To Integer  ${USERS.users['${tender_owner}'].tender_data.data['items'][0]['quantity']}
  ${value}=  Evaluate  ${USERS.users['${tender_owner}'].tender_data.data.awards[${index}+1].value.amount}/${quantity}
  ${value}=  Convert To Integer  ${value}
  Set To Dictionary  ${contract_data.data.unitPrices[0].value}  amount=${value}
  ${contract_data}=  munch_dict  arg=${contract_data}
  Log  ${contract_data}
  [Return]  ${contract_data}