Blame view

op_robot_tests/tests_files/keywords.robot 56.8 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
  \  Set To Dictionary  ${USERS}  ${username}=${USERS.users.${username}}
  \  Set To Dictionary  ${USERS.${username}}  tender_data=${munch_dict}
136
  \  Set To Dictionary  ${USERS.${username}}  second_stage_data=${munch_dict}
137
  \  Set To Dictionary  ${USERS.${username}}  LAST_REFRESH_DATE  ${LAST_REFRESH_DATE}
138
  \  Set To Dictionary  ${USERS.${username}}  DASU_LAST_REFRESH_DATE  ${LAST_REFRESH_DATE}
139 140 141 142

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

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

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

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

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

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

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

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

293
Підготувати дані для подання пропозиції
mykhaly authored
294
  ${bid}=  generate_test_bid_data  ${USERS.users['${tender_owner}'].initial_data.data}
295
  [Return]  ${bid}
296
297
298 299 300 301 302 303
Підготувати дані для подання пропозиції другого етапу рамкової угоди
  [Arguments]  ${index}=${0}
  ${bid}=  test_bid_data_selection  ${USERS.users['${provider2}'].tender_data.data}  ${index}
  [Return]  ${bid}

304
Підготувати дані для подання пропозиції для другого етапу
305 306 307 308
  [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}
309
Krokop authored
310
mykhaly authored
311
Підготувати дані про постачальника
Krokop authored
312
  [Arguments]  ${username}  ${lotIndex}=${-1}
313
  ${lotIndex}=  Convert To Integer  ${lotIndex}
mykhaly authored
314
  ${supplier_data}=  test_supplier_data
Krokop authored
315 316
  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
317 318 319 320
  Log  ${supplier_data}
  [Return]  ${supplier_data}

321 322
Підготувати дані про скасування
  ${cancellation_reason}=  create_fake_sentence
323 324
  ${cancellation_reason}=  field_with_id  c  ${cancellation_reason}
  ${cancellation_id}=  get_id_from_string  ${cancellation_reason}
325
  ${file_path}  ${file_name}  ${file_content}=  create_fake_doc
326
  ${doc_id}=  get_id_from_string  ${file_name}
327 328 329 330 331
  ${document}=  Create Dictionary
  ...      doc_path=${file_path}
  ...      doc_name=${file_name}
  ...      doc_content=${file_content}
  ...      doc_id=${doc_id}
332
  ${new_description}=  create_fake_sentence
333 334
  ${cancellation_data}=  Create Dictionary
  ...      cancellation_reason=${cancellation_reason}
335
  ...      cancellation_id=${cancellation_id}
336 337
  ...      document=${document}
  ...      description=${new_description}
338
  ${cancellation_data}=  munchify  ${cancellation_data}
339 340
  [Return]  ${cancellation_data}
selurvedu authored
341
mykhaly authored
342
Підготувати дані про зміну до договору
343 344 345 346 347 348
  [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
349
ivanka12 authored
350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368
Підготувати дані про зміну до угоди
  [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}
  ${modification_data}=  test_modification_data
  ...      ${USERS.users['${username}'].agreement_data.data['items'][0]['id']}
  ...      ${field_name}
  ...      ${field_value}
  Set To Dictionary  ${USERS.users['${username}']}  modification_data=${modification_data}
  Log  ${modification_data}
  [Return]  ${modification_data}

369
Адаптувати дані для оголошення тендера
370
  [Arguments]  ${tender_data}
371
  # munchify is used to make deep copy of ${tender_data}
372
  ${adapted_data}=  munchify  ${tender_data}
373
  :FOR  ${username}  IN  @{USED_ROLES}
374 375 376 377 378 379 380 381 382 383 384 385
  # 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}
386
  Log  ${adapted_data}
387
  Log  ${tender_data}
388 389 390
  [Return]  ${adapted_data}

391 392 393 394 395 396 397
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}

398
Завантажуємо бібліотеку з реалізацією для майданчика ${keywords_file}
399 400 401 402 403 404 405 406 407 408 409 410 411 412
  [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.
413
  ${bundled_st}=  Run Keyword And Return Status  Import Resource  ${CURDIR}${/}brokers${/}${keywords_file}.robot
414
  ${external_st}=  Run Keyword And Return Status  Import Resource  ${keywords_file}.robot
415
  Run Keyword If  ${bundled_st} == ${external_st} == ${False}  Fail  Resource file ${keywords_file}.robot not found
416
  Run Keyword If  ${bundled_st} == ${external_st} == ${True}  Fail  Resource file ${keywords_file}.robot found in both brokers${/} and src${/}
417
418
419 420 421
Дочекатись синхронізації з майданчиком
  [Arguments]  ${username}
  [Documentation]
422 423 424 425 426 427 428 429 430
  ...      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.
431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452
  ...      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
453 454 455 456 457 458 459 460
  ...      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.
461
  ${timeout_on_wait}=  Get Broker Property By Username  ${username}  timeout_on_wait
462 463 464 465 466 467 468
  ${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}
469
  Run Keyword If  ${sleep} > 0  Sleep  ${sleep}
470
471 472 473 474

  ${time_diff}=  Subtract Date From Date
  ...      ${last_modification_date_corrected}
  ...      ${USERS.users['${username}']['LAST_REFRESH_DATE']}
mykhaly authored
475
  ${LAST_REFRESH_DATE}=  Get Current TZdate
476
  Run Keyword If  ${time_diff} > 0  Run Keywords
kosaniak authored
477
  ...      Оновити сторінку  ${username}
478 479 480
  ...      AND
  ...      Set To Dictionary  ${USERS.users['${username}']}  LAST_REFRESH_DATE=${LAST_REFRESH_DATE}
481
482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504
Дочекатись синхронізації з ДАСУ
  [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
505 506
Оновити сторінку
  [Arguments]  ${username}
ivanka12 authored
507
  Run Keyword If  '${RESOURCE}' == 'plans'  Run As  ${username}  Оновити сторінку з планом  ${TENDER['TENDER_UAID']}
508 509 510
  ...      ELSE  Run As  ${username}  Оновити сторінку з тендером  ${TENDER['TENDER_UAID']}

511
Звірити поле тендера
512
  [Arguments]  ${username}  ${tender_uaid}  ${tender_data}  ${field}
513
  ${left}=  get_from_object  ${tender_data.data}  ${field}
514
  Звірити поле тендера із значенням  ${username}  ${tender_uaid}  ${left}  ${field}
515
516
ivanka12 authored
517
Звірити поле об'єкта моніторингу
518 519 520
  [Arguments]  ${username}  ${monitoring_uaid}  ${monitoring_data}  ${field}
  ${left}=  get_from_object  ${monitoring_data.data}  ${field}
  Звірити поле об'єкта моніторингу із значенням  ${username}  ${monitoring_uaid}  ${left}  ${field}
ivanka12 authored
521 522

523 524 525 526 527 528 529 530 531 532 533 534
Звірити поле плану
  [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}

535
Звірити поле тендера із значенням
536 537
  [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}
538 539
  Порівняти об'єкти  ${left}  ${right}
540
ivanka12 authored
541
Звірити поле об'єкта моніторингу із значенням
542 543
  [Arguments]  ${username}  ${monitoring_uaid}  ${left}  ${field}  ${object_id}=${Empty}
  ${right}=  Отримати дані із об'єкта моніторингу  ${username}  ${monitoring_uaid}  ${field}  ${object_id}
ivanka12 authored
544 545 546
  Порівняти об'єкти  ${left}  ${right}

547 548 549 550 551 552 553 554 555 556 557 558
Звірити поле договору
  [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
559 560 561 562 563 564
Звірити поле угоди із значенням
  [Arguments]  ${username}  ${agreement_uaid}  ${left}  ${field}
  ${right}=  Run As  ${username}  Отримати інформацію із угоди  ${agreement_uaid}  ${field}
  Порівняти об'єкти  ${left}  ${right}

565 566 567 568 569 570 571 572 573 574 575 576 577
Звірити поле зміни до договору
  [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
578 579 580 581 582 583 584 585 586 587 588 589 590
Звірити поле донора
  [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}

591 592 593 594 595 596
Звірити відображення типу запланованого тендера для ${username}
  ${type}=  Отримати дані із плану  ${username}  ${TENDER['TENDER_UAID']}  tender.procurementMethodType
  Звірити відображення поля tender.procurementMethodType плану для користувача ${username}
  Run Keyword If  '${type}' == ''  Run As  ${username}  Перевірити наявність повідомлення  "без застосування електронної системи"

597 598
Порівняти об'єкти
  [Arguments]  ${left}  ${right}
599 600
  Log  ${left}
  Log  ${right}
601 602
  Should Not Be Equal  ${left}  ${None}
  Should Not Be Equal  ${right}  ${None}
603
  Should Be Equal  ${left}  ${right}  msg=Objects are not equal
604
605
606
Звірити дату тендера
607
  [Arguments]  ${username}  ${tender_uaid}  ${tender_data}  ${field}  ${accuracy}=60  ${absolute_delta}=${False}
608
  ${left}=  get_from_object  ${tender_data.data}  ${field}
609
  Звірити дату тендера із значенням  ${username}  ${tender_uaid}  ${left}  ${field}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
610
611
612
Звірити дату тендера із значенням
613
  [Arguments]  ${username}  ${tender_uaid}  ${left}  ${field}  ${object_id}=${Empty}  ${accuracy}=60  ${absolute_delta}=${False}
614
  ${right}=  Отримати дані із тендера  ${username}  ${tender_uaid}  ${field}  ${object_id}
615
  Порівняти дати  ${left}  ${right}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
616
617
selurvedu authored
618 619 620 621 622 623 624 625
Порівняти дати
  [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
626
  [Arguments]  ${left}  ${right}  ${accuracy}=90  ${absolute_delta}=${False}
627 628
  Log  ${left}
  Log  ${right}
629 630
  Should Not Be Equal  ${left}  ${None}
  Should Not Be Equal  ${right}  ${None}
631
  ${status}=  compare_date  ${left}  ${right}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
Leits authored
632 633 634 635
  Should Be True  ${status}  msg=Dates differ: ${left} != ${right}


Звірити координати доставки тендера
636 637 638
  [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
639
  ${left_lat}=  Convert To Number  ${left_lat}
640
  ${left_lon}=  get_from_object  ${tender_data.data}  items[${item_index}].deliveryLocation.longitude
641
  ${left_lon}=  Convert To Number  ${left_lon}
642
  ${right_lat}=  Отримати дані із тендера  ${username}  ${tender_uaid}  deliveryLocation.latitude  ${item_id}
643
  ${right_lat}=  Convert To Number  ${right_lat}
644
  ${right_lon}=  Отримати дані із тендера  ${username}  ${tender_uaid}  deliveryLocation.longitude  ${item_id}
645
  ${right_lon}=  Convert To Number  ${right_lon}
Leits authored
646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663
  Порівняти координати  ${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})
664
665
666
Звірити поля предметів закупівлі багатопредметного тендера
667
  [Arguments]  ${username}  ${tender_data}  ${field}
668
  @{items}=  get_from_object  ${tender_data.data}  items
selurvedu authored
669 670 671
  ${len_of_items}=  Get Length  ${items}
  :FOR  ${index}  IN RANGE  ${len_of_items}
  \  Звірити поле тендера  ${viewer}  ${tender_data}  items[${index}].${field}
672
673
674
Звірити дату предметів закупівлі багатопредметного тендера
675
  [Arguments]  ${username}  ${tender_data}  ${field}  ${accuracy}=60  ${absolute_delta}=${False}
676
  @{items}=  get_from_object  ${tender_data.data}  items
Leits authored
677
  :FOR  ${index}  ${_}  IN ENUMERATE  @{items}
678
  \  Звірити дату тендера  ${viewer}  ${TENDER['TENDER_UAID']}  ${tender_data}  items[${index}].${field}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
679
680
Leits authored
681 682
Звірити координати доставки предметів закупівлі багатопредметного тендера
  [Arguments]  ${username}  ${tender_data}
683
  @{items}=  get_from_object  ${tender_data.data}  items
Leits authored
684 685 686 687
  :FOR  ${index}  ${_}  IN ENUMERATE  @{items}
  \  Звірити координати тендера  ${viewer}  ${tender_data}  items[${index}]

Leits authored
688
Отримати дані із тендера
689
  [Arguments]  ${username}  ${tender_uaid}  ${field_name}  ${object_id}=${Empty}  ${object_type}=${Empty}  ${object_index}=${Empty}
690
  ${field}=  Run Keyword If  '${object_id}'  Отримати шлях до поля об’єкта  ${username}  ${field_name}  ${object_id}
691
  ...             ELSE IF  '${object_type}' and '${object_index}'  Set Variable  ${object_type}[${object_index}].${field_name}
692
  ...             ELSE  Set Variable  ${field_name}
Leits authored
693
  ${status}  ${field_value}=  Run keyword and ignore error
694
  ...      get_from_object
Leits authored
695 696 697 698 699
  ...      ${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
700 701
  ${field_value}=  Run Keyword IF  '${object_id}'  Отримати дані із об’єкта тендера  ${username}  ${tender_uaid}  ${object_id}  ${field_name}
  ...                          ELSE  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  ${field}
Leits authored
702 703
  # And caching its value before return
  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}  ${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
728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745
Отримати дані із угоди
  [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
746 747 748 749 750 751 752 753 754 755 756 757 758 759 760
Отримати дані із об'єкта моніторингу
  [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}

761 762 763 764 765 766 767 768 769 770 771 772 773
Отримати дані із плану
  [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
774
  Set_To_Object  ${USERS.users['${username}'].tender_data.data}  ${field}  ${field_value}
775 776 777
  ${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
778 779 780
  [return]  ${field_value}

781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798
Отримати дані із договору
  [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
799 800 801
Отримати шлях до поля об’єкта
  [Arguments]  ${username}  ${field_name}  ${object_id}
  ${object_type}=  get_object_type_by_id  ${object_id}
Leits authored
802
  ${objects}=  Get Variable Value  ${USERS.users['${username}'].tender_data.data['${object_type}']}  ${None}
Leits authored
803 804 805 806 807
  ${object_index}=  get_object_index_by_id  ${objects}  ${object_id}
  [return]  ${object_type}[${object_index}].${field_name}


Отримати дані із об’єкта тендера
808 809
  [Arguments]  ${username}  ${tender_uaid}  ${object_id}  ${field_name}
  ${object_type}=  get_object_type_by_id  ${object_id}
Leits authored
810
  ${status}  ${value}=  Run Keyword If  '${object_type}'=='questions'
811 812 813
  ...      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}
814 815 816 817
  ...      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
818 819
  ${field}=  Отримати шлях до поля об’єкта  ${username}  ${field_name}  ${object_id}
  ${field_value}=  Run Keyword IF  '${status}'=='PASS'  Set Variable  ${value}
820
  ...      ELSE  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  ${field}
Leits authored
821 822 823
  [return]  ${field_value}

Leits authored
824 825 826 827 828 829 830 831 832 833
Отримати ідентифікатори об’єктів
  [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}

834
Звірити поле скарги із значенням
835
  [Arguments]  ${username}  ${tender_uaid}  ${given_value}  ${field_name}  ${complaintID}  ${award_index}=${None}
836
  ${received_value}=  Run as  ${username}  Отримати інформацію із скарги  ${tender_uaid}  ${complaintID}  ${field_name}  ${award_index}
837
  Порівняти об'єкти  ${given_value}  ${received_value}
838 839

840
Run As
841
  [Arguments]  ${username}  ${command}  @{arguments}
842 843 844
  [Documentation]
  ...      Run the given keyword (``command``) with given ``arguments``
  ...      using driver (keyword library) of user ``username``.
845 846
  Log  ${username}
  Log  ${command}
847
  Log Many  @{arguments}
848
  ${keywords_file}=  Get Broker Property By Username  ${username}  keywords_file
849
  Run Keyword And Return  ${keywords_file}.${command}  ${username}  @{arguments}
Taras Kozlovskyi authored
850
851
852
Require Failure
853
  [Arguments]  ${username}  ${command}  @{arguments}
854 855 856 857 858
  [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.
859 860
  Log  ${username}
  Log  ${command}
861
  Log Many  @{arguments}
862
  ${keywords_file}=  Get Broker Property By Username  ${username}  keywords_file
863
  ${status}  ${value}=  Run keyword and ignore keyword definitions  ${keywords_file}.${command}  ${username}  @{arguments}
864 865
  Run keyword if  '${status}' == 'PASS'  Fail  Користувач ${username} зміг виконати "${command}"
  [return]  ${value}
866
867
868 869 870
Можливість отримати посилання на аукціон для глядача
  ${timeout_on_wait}=  Get Broker Property By Username  ${viewer}  timeout_on_wait
  ${timeout_on_wait}=  Set Variable If
871 872
  ...                  ${timeout_on_wait} < ${120}
  ...                  ${120}
873 874 875 876 877 878
  ...                  ${timeout_on_wait}
  ${url}=  Wait Until Keyword Succeeds
  ...      ${timeout_on_wait}
  ...      15 s
  ...      Run As  ${viewer}  Отримати посилання на аукціон для глядача  ${TENDER['TENDER_UAID']}
  Should Be True  '${url}'
879
  Should Match Regexp  ${url}  ${AUCTION_REGEXP}
880 881 882 883 884 885
  Log  URL аукціону для глядача: ${url}


Можливість отримати посилання на аукціон для учасника ${username}
  ${timeout_on_wait}=  Get Broker Property By Username  ${username}  timeout_on_wait
  ${timeout_on_wait}=  Set Variable If
886 887
  ...                  ${timeout_on_wait} < ${120}
  ...                  ${120}
888 889 890 891 892 893
  ...                  ${timeout_on_wait}
  ${url}=  Wait Until Keyword Succeeds
  ...      ${timeout_on_wait}
  ...      15 s
  ...      Run As  ${username}  Отримати посилання на аукціон для учасника  ${TENDER['TENDER_UAID']}
  Should Be True  '${url}'
894
  Should Match Regexp  ${url}  ${AUCTION_REGEXP}
895 896 897
  Log  URL аукціону для учасника: ${url}

Taras Kozlovskyi authored
898 899
Дочекатись дати
  [Arguments]  ${date}
selurvedu authored
900 901
  ${sleep}=  wait_to_date  ${date}
  Run Keyword If  ${sleep} > 0  Sleep  ${sleep}
Taras Kozlovskyi authored
902
903
904
Дочекатись дати початку періоду уточнень
905
  [Arguments]  ${username}  ${tender_uaid}
906 907 908 909 910 911 912 913 914
  # 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}
915 916
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
917
  ${next_status}=  Set variable if  'open' in '${MODE}'  active.tendering  active.enquiries
918 919 920 921 922 923
  Wait until keyword succeeds
  ...      5 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
924
  ...      ${next_status}
925 926

927
Дочекатись дати закінчення періоду уточнень
kvik authored
928
  [Arguments]  ${username}  ${tender_uaid}
929 930
  ${enquiryPeriod_endDate}=  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  enquiryPeriod.endDate
  Дочекатись дати  ${enquiryPeriod_endDate}
931
  Оновити LAST_MODIFICATION_DATE
932
  Дочекатись синхронізації з майданчиком  ${username}
kvik authored
933 934 935 936 937 938 939
  Wait until keyword succeeds
  ...      10 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.tendering
940 941

942
Дочекатись дати закінчення періоду відповідей на запитання
943 944 945
  [Arguments]  ${username}  ${tender_uaid}
  ${clarificationsUntil}=  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  enquiryPeriod.clarificationsUntil
  Дочекатись дати  ${clarificationsUntil}
946
  Оновити LAST_MODIFICATION_DATE
947
  Дочекатись синхронізації з майданчиком  ${username}
948 949

950 951 952 953
Звірити статус тендера
  [Arguments]  ${username}  ${tender_uaid}  ${left}
  ${right}=  Run as  ${username}  Отримати інформацію із тендера  ${tender_uaid}  status
  Порівняти об'єкти  ${left}  ${right}
954 955

ivanka12 authored
956 957
Звірити статус об'єкта моніторингу
  [Arguments]  ${username}  ${monitoring_uaid}  ${left}
958
  ${right}=  Отримати дані із об'єкта моніторингу  ${username}  ${monitoring_uaid}  status
ivanka12 authored
959 960 961
  Порівняти об'єкти  ${left}  ${right}

962 963 964 965 966 967
Звірити статус вимоги/скарги
  [Arguments]  ${username}  ${tender_uaid}  ${complaintID}  ${left}  ${award_index}=${None}
  ${right}=  Run as  ${username}  Отримати інформацію із скарги  ${tender_uaid}  ${complaintID}  status  ${award_index}
  Порівняти об'єкти  ${left}  ${right}

968 969 970 971 972 973 974 975 976 977 978 979 980
Дочекатись дати початку періоду уточнення
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      10 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.enquiries

981
Дочекатись дати початку прийому пропозицій
982
  [Arguments]  ${username}  ${tender_uaid}
983 984 985 986 987 988 989 990
  # 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.
991 992 993 994 995 996 997 998 999
  ${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}
1000
  Дочекатись дати  ${date}
Leits authored
1001 1002
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
1003
  Wait until keyword succeeds
1004
  ...      30 min 15 sec
1005 1006 1007 1008 1009
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.tendering
1010
1011
yankee7 authored
1012
Дочекатись дати закінчення прийому пропозицій
1013
  [Arguments]  ${username}  ${tender_uaid}
1014
  # XXX: HACK: Same as above
1015 1016 1017 1018 1019 1020 1021
  ${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}
1022
  Дочекатись дати  ${date}
Leits authored
1023 1024
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
1025
  Wait until keyword succeeds
1026
  ...      40 min 15 sec
1027
  ...      15 sec
Leits authored
1028
  ...      Run Keyword And Expect Error  *
1029 1030 1031
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
Leits authored
1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048
  ...      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
1049
  ...      20 min 15 sec
Leits authored
1050 1051 1052 1053 1054 1055 1056
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.pre-qualification

oleh authored
1057 1058
Дочекатись дати початку очікування
  [Arguments]  ${username}  ${tender_uaid}
Krokop authored
1059 1060 1061 1062 1063 1064 1065 1066 1067
  # 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
1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      5 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.stage2.pending

Leits authored
1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093
Дочекатись дати закінчення періоду прекваліфікації
  [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
1094
Дочекатися створення нового етапу мостом
oleh authored
1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      10 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      complete

Leits authored
1107 1108 1109 1110 1111
Дочекатись дати початку періоду аукціону
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
1112
  ...      40 min 15 sec
Leits authored
1113 1114 1115 1116 1117 1118
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.auction
  Sleep  120  # Auction sync
1119
1120
1121 1122 1123 1124 1125
Дочекатись дати початку періоду кваліфікації
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
1126
  ...      40 min 15 sec
1127 1128 1129 1130 1131 1132 1133
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.qualification

1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146
Дочекатись дати закінчення періоду кваліфікації
  [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
1147 1148 1149
Дочекатись дати закінчення періоду подання скарг
  [Arguments]  ${username}
  Дочекатись дати  ${USERS.users['${username}'].tender_data.data.complaintPeriod.endDate}
Leits authored
1150 1151
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
1152 1153

1154 1155 1156 1157 1158 1159 1160
Дочекатись можливості зареєструвати угоди
  [Arguments]  ${username}
  Дочекатись дати  ${USERS.users['${tender_owner}'].tender_data.data.contractPeriod.clarificationsUntil}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}

1161 1162
Дочекатись зміни статусу вимоги
  [Arguments]  ${username}  ${status}  ${complaintID}  ${award_index}=${None}
1163 1164
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
1165
  ...      40 min 15 sec
1166 1167 1168 1169
  ...      15 sec
  ...      Звірити статус вимоги/скарги
  ...      ${provider}
  ...      ${TENDER['TENDER_UAID']}
1170
  ...      ${complaintID}
1171
  ...      ${status}
1172
  ...      ${award_index}
1173 1174

1175
Оновити LAST_MODIFICATION_DATE
1176 1177 1178 1179 1180
  [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).
1181
  ${LAST_MODIFICATION_DATE}=  Get Current TZdate
1182
  ${status}=  Get Variable Value  ${TEST_STATUS}  PASS
Leits authored
1183
  Run Keyword If  '${status}' == 'PASS'  Set To Dictionary  ${TENDER}  LAST_MODIFICATION_DATE=${LAST_MODIFICATION_DATE}
ivanka12 authored
1184 1185

1186 1187 1188 1189 1190 1191
Оновити 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
1192 1193 1194 1195
Отримати користувача з доступом до поля за пріорітетом
  [Arguments]  ${field}  @{usernames}
  :FOR  ${username}  IN  @{usernames}
  \  ${user_data}=  Get From Dictionary  ${USERS.users}  ${username}
1196 1197
  \  ${status}  ${field_value}=  Run Keyword And Ignore Error
  ...      get_from_object
qa-user-1 authored
1198 1199
  ...      ${user_data.tender_data.data}
  ...      ${field}
1200
  \  Run Keyword If  '${status}' == 'PASS'  Exit For Loop
qa-user-1 authored
1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211
  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
1212
  [Return]  ${index}
1213 1214

qa-user-1 authored
1215 1216 1217 1218 1219 1220 1221 1222 1223 1224
Отримати останній элемент
  [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}

1225 1226 1227 1228 1229 1230
Розрахувати ціну для ${contract_number} контракту
  ${contract_data}=  Create Dictionary  data=${USERS.users['${tender_owner}'].tender_data.data.agreements[0].contracts[${contract_number}]}
  ${quantity}=  Set Variable  ${0}
  :FOR  ${index}  IN RANGE  ${NUMBER_OF_ITEMS}
  \  ${quantity}=  Evaluate  ${quantity}+${USERS.users['${tender_owner}'].tender_data.data['items'][${index}]['quantity']}
  ${value}=  Evaluate  ${USERS.users['${tender_owner}'].tender_data.data.awards[${contract_number}+1].value.amount}/${quantity}
1231
  ${value}=  Convert To Integer  ${value}
1232 1233
  :FOR  ${index}  IN RANGE  ${NUMBER_OF_ITEMS}
  \  Set To Dictionary  ${contract_data.data.unitPrices[${index}].value}  amount=${value}
1234 1235 1236
  ${contract_data}=  munch_dict  arg=${contract_data}
  Log  ${contract_data}
  [Return]  ${contract_data}