Blame view

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

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

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

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

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

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

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

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

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

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

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

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

271 272 273 274 275 276 277 278 279
Підготувати дані для створення предмету закупівлі плану
  [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}

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

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

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

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

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

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

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

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

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

mykhaly authored
359
Підготувати дані про постачальника
Krokop authored
360
  [Arguments]  ${username}  ${lotIndex}=${-1}
361
  ${lotIndex}=  Convert To Integer  ${lotIndex}
mykhaly authored
362
  ${supplier_data}=  test_supplier_data
Krokop authored
363 364
  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
365 366 367 368
  Log  ${supplier_data}
  [Return]  ${supplier_data}

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


Підготувати дані про скасування плану
  ${cancellation_reason}=  create_fake_sentence
  ${cancellation_reason_en}=  create_fake_sentence
  ${cancellation_data}=  Create Dictionary
  ...       reason=${cancellation_reason}
  ...       reason_en=${cancellation_reason_en}
  ${cancellation_data}=  munchify  ${cancellation_data}
  #${cancellation_data}=  test_plan_cancel_data
  Log  ${cancellation_data}
403 404
  [Return]  ${cancellation_data}
selurvedu authored
405
mykhaly authored
406
Підготувати дані про зміну до договору
407 408 409 410 411 412
  [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
413
ivanka12 authored
414 415 416 417 418 419 420 421 422 423
Підготувати дані про зміну до угоди
  [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}
424
  ${username}=  Отримати користувача з доступом до поля за пріорітетом  items  ${tender_owner}  ${viewer}
ivanka12 authored
425 426 427 428
  ${modification_data}=  test_modification_data
  ...      ${USERS.users['${username}'].agreement_data.data['items'][0]['id']}
  ...      ${field_name}
  ...      ${field_value}
429
  Set To Dictionary  ${USERS.users['${tender_owner}']}  modification_data=${modification_data}
ivanka12 authored
430 431 432 433
  Log  ${modification_data}
  [Return]  ${modification_data}

AlexDiatlov authored
434 435 436 437 438
Підготувати дані для повідомлення про невідповідність пропозиції
  ${24h_data}=  test_24_hours_data
  [Return]  ${24h_data}

439
Адаптувати дані для оголошення тендера
440
  [Arguments]  ${tender_data}
441
  # munchify is used to make deep copy of ${tender_data}
442
  ${adapted_data}=  munchify  ${tender_data}
443
  :FOR  ${username}  IN  @{USED_ROLES}
444 445 446 447 448 449 450 451 452 453 454 455
  # 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}
456
  Log  ${adapted_data}
457
  Log  ${tender_data}
458 459 460
  [Return]  ${adapted_data}

461 462 463 464 465 466 467
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}

468
Завантажуємо бібліотеку з реалізацією для майданчика ${keywords_file}
469 470 471 472 473 474 475 476 477 478 479 480 481 482
  [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.
483
  ${bundled_st}=  Run Keyword And Return Status  Import Resource  ${CURDIR}${/}brokers${/}${keywords_file}.robot
484
  ${external_st}=  Run Keyword And Return Status  Import Resource  ${keywords_file}.robot
485
  Run Keyword If  ${bundled_st} == ${external_st} == ${False}  Fail  Resource file ${keywords_file}.robot not found
486
  Run Keyword If  ${bundled_st} == ${external_st} == ${True}  Fail  Resource file ${keywords_file}.robot found in both brokers${/} and src${/}
487
488
489 490 491
Дочекатись синхронізації з майданчиком
  [Arguments]  ${username}
  [Documentation]
492 493 494 495 496 497 498 499 500
  ...      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.
501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522
  ...      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
523 524 525 526 527 528 529 530
  ...      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.
531
  ${timeout_on_wait}=  Get Broker Property By Username  ${username}  timeout_on_wait
532 533 534 535 536 537 538
  ${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}
539
  Run Keyword If  ${sleep} > 0  Sleep  ${sleep}
540
541 542 543 544

  ${time_diff}=  Subtract Date From Date
  ...      ${last_modification_date_corrected}
  ...      ${USERS.users['${username}']['LAST_REFRESH_DATE']}
mykhaly authored
545
  ${LAST_REFRESH_DATE}=  Get Current TZdate
546
  Run Keyword If  ${time_diff} > 0  Run Keywords
kosaniak authored
547
  ...      Оновити сторінку  ${username}
548 549 550
  ...      AND
  ...      Set To Dictionary  ${USERS.users['${username}']}  LAST_REFRESH_DATE=${LAST_REFRESH_DATE}
551
552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574
Дочекатись синхронізації з ДАСУ
  [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
575 576
Оновити сторінку
  [Arguments]  ${username}
ivanka12 authored
577
  Run Keyword If  '${RESOURCE}' == 'plans'  Run As  ${username}  Оновити сторінку з планом  ${TENDER['TENDER_UAID']}
578 579 580
  ...      ELSE  Run As  ${username}  Оновити сторінку з тендером  ${TENDER['TENDER_UAID']}

581
Звірити поле тендера
582
  [Arguments]  ${username}  ${tender_uaid}  ${tender_data}  ${field}
583
  ${left}=  get_from_object  ${tender_data.data}  ${field}
584
  Звірити поле тендера із значенням  ${username}  ${tender_uaid}  ${left}  ${field}
585
586
ivanka12 authored
587
Звірити поле об'єкта моніторингу
588 589 590
  [Arguments]  ${username}  ${monitoring_uaid}  ${monitoring_data}  ${field}
  ${left}=  get_from_object  ${monitoring_data.data}  ${field}
  Звірити поле об'єкта моніторингу із значенням  ${username}  ${monitoring_uaid}  ${left}  ${field}
ivanka12 authored
591 592

593 594 595 596 597 598 599 600 601 602 603 604
Звірити поле плану
  [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}

605
Звірити поле тендера із значенням
606 607
  [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}
608 609
  Порівняти об'єкти  ${left}  ${right}
610
ivanka12 authored
611
Звірити поле об'єкта моніторингу із значенням
612 613
  [Arguments]  ${username}  ${monitoring_uaid}  ${left}  ${field}  ${object_id}=${Empty}
  ${right}=  Отримати дані із об'єкта моніторингу  ${username}  ${monitoring_uaid}  ${field}  ${object_id}
ivanka12 authored
614 615 616
  Порівняти об'єкти  ${left}  ${right}

617 618 619 620 621 622 623 624 625 626 627 628
Звірити поле договору
  [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
629 630 631 632 633 634
Звірити поле угоди із значенням
  [Arguments]  ${username}  ${agreement_uaid}  ${left}  ${field}
  ${right}=  Run As  ${username}  Отримати інформацію із угоди  ${agreement_uaid}  ${field}
  Порівняти об'єкти  ${left}  ${right}

635 636 637 638 639 640 641 642 643 644 645 646 647
Звірити поле зміни до договору
  [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
648 649 650 651 652 653 654 655 656 657 658 659 660
Звірити поле донора
  [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}

661 662 663 664 665 666
Звірити відображення типу запланованого тендера для ${username}
  ${type}=  Отримати дані із плану  ${username}  ${TENDER['TENDER_UAID']}  tender.procurementMethodType
  Звірити відображення поля tender.procurementMethodType плану для користувача ${username}
  Run Keyword If  '${type}' == ''  Run As  ${username}  Перевірити наявність повідомлення  "без застосування електронної системи"

667 668
Порівняти об'єкти
  [Arguments]  ${left}  ${right}
669 670
  Log  ${left}
  Log  ${right}
671 672
  Should Not Be Equal  ${left}  ${None}
  Should Not Be Equal  ${right}  ${None}
673
  Should Be Equal  ${left}  ${right}  msg=Objects are not equal
674
675
676
Звірити дату тендера
677
  [Arguments]  ${username}  ${tender_uaid}  ${tender_data}  ${field}  ${accuracy}=60  ${absolute_delta}=${False}
678
  ${left}=  get_from_object  ${tender_data.data}  ${field}
679
  Звірити дату тендера із значенням  ${username}  ${tender_uaid}  ${left}  ${field}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
680
681
682
Звірити дату тендера із значенням
683
  [Arguments]  ${username}  ${tender_uaid}  ${left}  ${field}  ${object_id}=${Empty}  ${accuracy}=60  ${absolute_delta}=${False}
684
  ${right}=  Отримати дані із тендера  ${username}  ${tender_uaid}  ${field}  ${object_id}
685
  Порівняти дати  ${left}  ${right}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
686
687
selurvedu authored
688 689 690 691 692 693 694 695
Порівняти дати
  [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
696
  [Arguments]  ${left}  ${right}  ${accuracy}=90  ${absolute_delta}=${False}
697 698
  Log  ${left}
  Log  ${right}
699 700
  Should Not Be Equal  ${left}  ${None}
  Should Not Be Equal  ${right}  ${None}
701
  ${status}=  compare_date  ${left}  ${right}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
Leits authored
702 703 704 705
  Should Be True  ${status}  msg=Dates differ: ${left} != ${right}


Звірити координати доставки тендера
706 707 708
  [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
709
  ${left_lat}=  Convert To Number  ${left_lat}
710
  ${left_lon}=  get_from_object  ${tender_data.data}  items[${item_index}].deliveryLocation.longitude
711
  ${left_lon}=  Convert To Number  ${left_lon}
712
  ${right_lat}=  Отримати дані із тендера  ${username}  ${tender_uaid}  deliveryLocation.latitude  ${item_id}
713
  ${right_lat}=  Convert To Number  ${right_lat}
714
  ${right_lon}=  Отримати дані із тендера  ${username}  ${tender_uaid}  deliveryLocation.longitude  ${item_id}
715
  ${right_lon}=  Convert To Number  ${right_lon}
Leits authored
716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733
  Порівняти координати  ${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})
734
735
736
Звірити поля предметів закупівлі багатопредметного тендера
737
  [Arguments]  ${username}  ${tender_data}  ${field}
738
  @{items}=  get_from_object  ${tender_data.data}  items
selurvedu authored
739 740 741
  ${len_of_items}=  Get Length  ${items}
  :FOR  ${index}  IN RANGE  ${len_of_items}
  \  Звірити поле тендера  ${viewer}  ${tender_data}  items[${index}].${field}
742
743
744
Звірити дату предметів закупівлі багатопредметного тендера
745
  [Arguments]  ${username}  ${tender_data}  ${field}  ${accuracy}=60  ${absolute_delta}=${False}
746
  @{items}=  get_from_object  ${tender_data.data}  items
Leits authored
747
  :FOR  ${index}  ${_}  IN ENUMERATE  @{items}
748
  \  Звірити дату тендера  ${viewer}  ${TENDER['TENDER_UAID']}  ${tender_data}  items[${index}].${field}  accuracy=${accuracy}  absolute_delta=${absolute_delta}
749
750
Leits authored
751 752
Звірити координати доставки предметів закупівлі багатопредметного тендера
  [Arguments]  ${username}  ${tender_data}
753
  @{items}=  get_from_object  ${tender_data.data}  items
Leits authored
754 755 756 757
  :FOR  ${index}  ${_}  IN ENUMERATE  @{items}
  \  Звірити координати тендера  ${viewer}  ${tender_data}  items[${index}]

Leits authored
758
Отримати дані із тендера
759
  [Arguments]  ${username}  ${tender_uaid}  ${field_name}  ${object_id}=${Empty}  ${object_type}=${Empty}  ${object_index}=${Empty}
760
  ${field}=  Run Keyword If  '${object_id}'  Отримати шлях до поля об’єкта  ${username}  ${field_name}  ${object_id}
761
  ...             ELSE IF  '${object_type}' and '${object_index}'  Set Variable  ${object_type}[${object_index}].${field_name}
762
  ...             ELSE  Set Variable  ${field_name}
Leits authored
763
  ${status}  ${field_value}=  Run keyword and ignore error
764
  ...      get_from_object
Leits authored
765 766 767 768 769
  ...      ${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
770 771
  ${field_value}=  Run Keyword IF  '${object_id}'  Отримати дані із об’єкта тендера  ${username}  ${tender_uaid}  ${object_id}  ${field_name}
  ...                          ELSE  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  ${field}
Leits authored
772 773
  # And caching its value before return
  Set_To_Object  ${USERS.users['${username}'].tender_data.data}  ${field}  ${field_value}
774 775 776
  ${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
777 778 779
  [return]  ${field_value}

780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797
Отримати дані із тендера другого етапу
  [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
798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815
Отримати дані із угоди
  [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
816 817 818 819 820 821 822 823 824 825 826 827 828 829 830
Отримати дані із об'єкта моніторингу
  [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}

831 832 833 834 835 836 837 838 839 840 841 842 843
Отримати дані із плану
  [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
844
  Set_To_Object  ${USERS.users['${username}'].tender_data.data}  ${field}  ${field_value}
845 846 847
  ${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
848 849 850
  [return]  ${field_value}

851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868
Отримати дані із договору
  [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
869 870 871
Отримати шлях до поля об’єкта
  [Arguments]  ${username}  ${field_name}  ${object_id}
  ${object_type}=  get_object_type_by_id  ${object_id}
Leits authored
872
  ${objects}=  Get Variable Value  ${USERS.users['${username}'].tender_data.data['${object_type}']}  ${None}
Leits authored
873 874 875 876 877
  ${object_index}=  get_object_index_by_id  ${objects}  ${object_id}
  [return]  ${object_type}[${object_index}].${field_name}


Отримати дані із об’єкта тендера
878 879
  [Arguments]  ${username}  ${tender_uaid}  ${object_id}  ${field_name}
  ${object_type}=  get_object_type_by_id  ${object_id}
Leits authored
880
  ${status}  ${value}=  Run Keyword If  '${object_type}'=='questions'
881 882 883
  ...      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}
884 885 886 887
  ...      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
888 889
  ${field}=  Отримати шлях до поля об’єкта  ${username}  ${field_name}  ${object_id}
  ${field_value}=  Run Keyword IF  '${status}'=='PASS'  Set Variable  ${value}
890
  ...      ELSE  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  ${field}
Leits authored
891 892 893
  [return]  ${field_value}

Leits authored
894 895 896 897 898 899 900 901 902 903
Отримати ідентифікатори об’єктів
  [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}

904
Звірити поле скарги із значенням
905 906
  [Arguments]  ${username}  ${tender_uaid}  ${given_value}  ${field_name}  ${complaintID}  ${object_index}=${None}  ${object}=${None}
  ${received_value}=  Run as  ${username}  Отримати інформацію із скарги  ${tender_uaid}  ${complaintID}  ${field_name}  ${object_index}  ${object}
907
  Порівняти об'єкти  ${given_value}  ${received_value}
908 909

910
Run As
911
  [Arguments]  ${username}  ${command}  @{arguments}
912 913 914
  [Documentation]
  ...      Run the given keyword (``command``) with given ``arguments``
  ...      using driver (keyword library) of user ``username``.
915 916
  Log  ${username}
  Log  ${command}
917
  Log Many  @{arguments}
918
  ${keywords_file}=  Get Broker Property By Username  ${username}  keywords_file
919
  Run Keyword And Return  ${keywords_file}.${command}  ${username}  @{arguments}
Taras Kozlovskyi authored
920
921
922
Require Failure
923
  [Arguments]  ${username}  ${command}  @{arguments}
924 925 926 927 928
  [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.
929 930
  Log  ${username}
  Log  ${command}
931
  Log Many  @{arguments}
932
  ${keywords_file}=  Get Broker Property By Username  ${username}  keywords_file
933
  ${status}  ${value}=  Run keyword and ignore keyword definitions  ${keywords_file}.${command}  ${username}  @{arguments}
934 935
  Run keyword if  '${status}' == 'PASS'  Fail  Користувач ${username} зміг виконати "${command}"
  [return]  ${value}
936
937
938 939 940
Можливість отримати посилання на аукціон для глядача
  ${timeout_on_wait}=  Get Broker Property By Username  ${viewer}  timeout_on_wait
  ${timeout_on_wait}=  Set Variable If
941 942
  ...                  ${timeout_on_wait} < ${120}
  ...                  ${120}
943 944 945 946 947 948
  ...                  ${timeout_on_wait}
  ${url}=  Wait Until Keyword Succeeds
  ...      ${timeout_on_wait}
  ...      15 s
  ...      Run As  ${viewer}  Отримати посилання на аукціон для глядача  ${TENDER['TENDER_UAID']}
  Should Be True  '${url}'
949
  Should Match Regexp  ${url}  ${AUCTION_REGEXP}
950 951 952 953 954 955
  Log  URL аукціону для глядача: ${url}


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

Taras Kozlovskyi authored
968 969
Дочекатись дати
  [Arguments]  ${date}
selurvedu authored
970 971
  ${sleep}=  wait_to_date  ${date}
  Run Keyword If  ${sleep} > 0  Sleep  ${sleep}
Taras Kozlovskyi authored
972
973
974
Дочекатись дати початку періоду уточнень
975
  [Arguments]  ${username}  ${tender_uaid}
976 977 978 979 980 981 982 983 984
  # 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}
985 986
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
987
  ${next_status}=  Set variable if  'open' in '${MODE}'  active.tendering  active.enquiries
988 989 990 991 992 993
  Wait until keyword succeeds
  ...      5 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
994
  ...      ${next_status}
995 996

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

1012
Дочекатись дати закінчення періоду відповідей на запитання
1013 1014 1015
  [Arguments]  ${username}  ${tender_uaid}
  ${clarificationsUntil}=  Run As  ${username}  Отримати інформацію із тендера  ${tender_uaid}  enquiryPeriod.clarificationsUntil
  Дочекатись дати  ${clarificationsUntil}
1016
  Оновити LAST_MODIFICATION_DATE
1017
  Дочекатись синхронізації з майданчиком  ${username}
1018 1019

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


Звірити статус плану
  [Arguments]  ${username}  ${tender_uaid}  ${left}
  ${right}=  Run as  ${username}  Отримати інформацію із плану  ${tender_uaid}  status
1029
  Порівняти об'єкти  ${left}  ${right}
1030
ivanka12 authored
1031 1032
Звірити статус об'єкта моніторингу
  [Arguments]  ${username}  ${monitoring_uaid}  ${left}
1033
  ${right}=  Отримати дані із об'єкта моніторингу  ${username}  ${monitoring_uaid}  status
ivanka12 authored
1034 1035 1036
  Порівняти об'єкти  ${left}  ${right}

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

1043 1044 1045 1046 1047 1048
Звірити статус cancellations
  [Arguments]  ${username}  ${tender_uaid}  ${left}  ${cancellation_index}
  ${right}=  Run as  ${username}  Отримати інформацію із cancellation  ${tender_uaid}  status  ${cancellation_index}
  Порівняти об'єкти  ${left}  ${right}

1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061
Дочекатись дати початку періоду уточнення
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      10 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.enquiries

1062
Дочекатись дати початку прийому пропозицій
1063
  [Arguments]  ${username}  ${tender_uaid}
1064 1065 1066 1067 1068 1069 1070 1071
  # 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.
1072 1073 1074 1075 1076 1077 1078 1079 1080
  ${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}
1081
  Дочекатись дати  ${date}
Leits authored
1082 1083
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
1084
  Wait until keyword succeeds
1085
  ...      30 min 15 sec
1086 1087 1088 1089 1090
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.tendering
1091
1092
yankee7 authored
1093
Дочекатись дати закінчення прийому пропозицій
1094
  [Arguments]  ${username}  ${tender_uaid}
1095
  # XXX: HACK: Same as above
1096 1097 1098 1099 1100 1101 1102
  ${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}
1103
  Дочекатись дати  ${date}
Leits authored
1104 1105
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
1106
  Wait until keyword succeeds
1107
  ...      40 min 15 sec
1108
  ...      15 sec
Leits authored
1109
  ...      Run Keyword And Expect Error  *
1110 1111 1112
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
Leits authored
1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129
  ...      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
1130
  ...      20 min 15 sec
Leits authored
1131 1132 1133 1134 1135 1136 1137
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.pre-qualification

oleh authored
1138 1139
Дочекатись дати початку очікування
  [Arguments]  ${username}  ${tender_uaid}
Krokop authored
1140 1141 1142 1143 1144 1145 1146 1147 1148
  # 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
1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      5 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.stage2.pending

Leits authored
1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174
Дочекатись дати закінчення періоду прекваліфікації
  [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
1175
Дочекатися створення нового етапу мостом
oleh authored
1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      10 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      complete

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

1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227
Дочекатись дати початку періоду підписання угоди
  [Arguments]  ${username}  ${tender_uaid}
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
  ...      40 min 15 sec
  ...      15 sec
  ...      Звірити статус тендера
  ...      ${username}
  ...      ${tender_uaid}
  ...      active.awarded

1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240
Дочекатись дати закінчення періоду кваліфікації
  [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
1241 1242 1243
Дочекатись дати закінчення періоду подання скарг
  [Arguments]  ${username}
  Дочекатись дати  ${USERS.users['${username}'].tender_data.data.complaintPeriod.endDate}
Leits authored
1244 1245
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}
1246 1247

1248 1249
Дочекатись можливості зареєструвати угоди
  [Arguments]  ${username}
1250
  ${username}=  Отримати користувача з доступом до поля за пріорітетом  contractPeriod  ${tender_owner}  ${viewer}
1251
  Дочекатись дати  ${USERS.users['${username}'].tender_data.data.contractPeriod.clarificationsUntil}
1252 1253 1254 1255
  Оновити LAST_MODIFICATION_DATE
  Дочекатись синхронізації з майданчиком  ${username}

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

1270 1271 1272 1273
Дочекатись зміни статусу cancellations
  [Arguments]  ${username}  ${tender_uaid}  ${status}  ${cancellation_index}
  Дочекатись синхронізації з майданчиком  ${username}
  Wait until keyword succeeds
1274
  ...      20 min
1275 1276 1277 1278 1279 1280 1281 1282
  ...      60 sec
  ...      Звірити статус cancellations
  ...      ${username}
  ...      ${tender_uaid}
  ...      ${status}
  ...      ${cancellation_index}

1283
Оновити LAST_MODIFICATION_DATE
1284 1285 1286 1287 1288
  [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).
1289
  ${LAST_MODIFICATION_DATE}=  Get Current TZdate
1290
  ${status}=  Get Variable Value  ${TEST_STATUS}  PASS
Leits authored
1291
  Run Keyword If  '${status}' == 'PASS'  Set To Dictionary  ${TENDER}  LAST_MODIFICATION_DATE=${LAST_MODIFICATION_DATE}
ivanka12 authored
1292 1293

1294 1295 1296 1297 1298 1299
Оновити 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
1300 1301 1302 1303
Отримати користувача з доступом до поля за пріорітетом
  [Arguments]  ${field}  @{usernames}
  :FOR  ${username}  IN  @{usernames}
  \  ${user_data}=  Get From Dictionary  ${USERS.users}  ${username}
1304 1305
  \  ${status}  ${field_value}=  Run Keyword And Ignore Error
  ...      get_from_object
qa-user-1 authored
1306 1307
  ...      ${user_data.tender_data.data}
  ...      ${field}
AlexDiatlov authored
1308
  \  Log  ${user_data.tender_data.data}
1309
  \  Run Keyword If  '${status}' == 'PASS'  Exit For Loop
qa-user-1 authored
1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320
  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
1321
  [Return]  ${index}
1322 1323

qa-user-1 authored
1324 1325 1326 1327 1328 1329 1330 1331 1332 1333
Отримати останній элемент
  [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}

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