Commit cccadce93a05e2906428a1a4364be2c045fe3031

Authored by kosaniak
2 parents ecdf3454 549297d7

Merge branch 'devel' of github.com:openprocurement/robot_tests

Showing 36 changed files with 2768 additions and 678 deletions
@@ -79,7 +79,7 @@ robot_tests.broker.proztorg = git ${remotes:gh}openprocurement/robot_tests.b @@ -79,7 +79,7 @@ robot_tests.broker.proztorg = git ${remotes:gh}openprocurement/robot_tests.b
79 robot_tests.broker.uub = git ${remotes:gh}openprocurement/robot_tests.broker.uub.git 79 robot_tests.broker.uub = git ${remotes:gh}openprocurement/robot_tests.broker.uub.git
80 robot_tests.broker.aps = git ${remotes:gh}openprocurement/robot_tests.broker.aps.git 80 robot_tests.broker.aps = git ${remotes:gh}openprocurement/robot_tests.broker.aps.git
81 robot_tests.broker.kapitalist = git ${remotes:gh}openprocurement/robot_tests.broker.kapitalist.git 81 robot_tests.broker.kapitalist = git ${remotes:gh}openprocurement/robot_tests.broker.kapitalist.git
82 -robot_tests.broker.pzo = git ${remotes:gh}openprocurement/robot_tests.broker.pzo.git 82 +robot_tests.broker.pzo = git ${remotes:gh}openprocurement/robot_tests.broker.pzo.git
83 83
84 [versions] 84 [versions]
85 Faker = 0.7.7 85 Faker = 0.7.7
@@ -14,9 +14,12 @@ Resource base_keywords.robot @@ -14,9 +14,12 @@ Resource base_keywords.robot
14 Require Failure ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} description description 14 Require Failure ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} description description
15 15
16 16
17 -Можливість продовжити період подання пропозиції на 7 днів  
18 - ${endDate}= add_minutes_to_date ${USERS.users['${tender_owner}'].tender_data.data.tenderPeriod.endDate} 7 17 +Можливість продовжити період подання пропозиції на ${number_of_days} днів
  18 + ${period_intervals}= compute_intrs ${BROKERS} ${used_brokers}
  19 + ${number_of_minutes}= get_number_of_minutes ${number_of_days} ${period_intervals.${MODE}.accelerator}
  20 + ${endDate}= add_minutes_to_date ${USERS.users['${tender_owner}'].tender_data.data.tenderPeriod.endDate} ${number_of_minutes}
19 Можливість змінити поле tenderPeriod.endDate тендера на ${endDate} 21 Можливість змінити поле tenderPeriod.endDate тендера на ${endDate}
  22 + Remove From Dictionary ${USERS.users['${tender_owner}'].tender_data.data.tenderPeriod} endDate
20 23
21 ############################################################################################## 24 ##############################################################################################
22 # BIDDING 25 # BIDDING
@@ -31,7 +34,7 @@ Resource base_keywords.robot @@ -31,7 +34,7 @@ Resource base_keywords.robot
31 34
32 Можливість підтвердити цінову пропозицію учасником ${username} 35 Можливість підтвердити цінову пропозицію учасником ${username}
33 ${status}= Run Keyword IF '${MODE}'=='openeu' Set Variable pending 36 ${status}= Run Keyword IF '${MODE}'=='openeu' Set Variable pending
34 - ... ELSE IF '${MODE}'=='openua' Set Variable active 37 + ... ELSE IF '${MODE}'=='openua' or '${MODE}'=='openua_defense' Set Variable active
35 Run As ${username} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} status ${status} 38 Run As ${username} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} status ${status}
36 39
37 ############################################################################################## 40 ##############################################################################################
@@ -102,4 +102,4 @@ Suite Teardown Test Suite Teardown @@ -102,4 +102,4 @@ Suite Teardown Test Suite Teardown
102 ... Run Keywords 102 ... Run Keywords
103 ... Wait Until Keyword Succeeds 5 times 30 s Page should not contain очікуємо розкриття учасників 103 ... Wait Until Keyword Succeeds 5 times 30 s Page should not contain очікуємо розкриття учасників
104 ... AND 104 ... AND
105 - ... Close browser 105 + ... Close browser
  1 +*** Settings ***
  2 +Resource keywords.robot
  3 +Resource resource.robot
  4 +Suite Setup Test Suite Setup
  5 +Suite Teardown Test Suite Teardown
  6 +Library Selenium2Library
  7 +
  8 +*** Variables ***
  9 +@{USED_ROLES} viewer provider provider1
  10 +
  11 +
  12 +*** Test Cases ***
  13 +Можливість знайти закупівлю по ідентифікатору
  14 + [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера
  15 + ... ${USERS.users['${viewer}'].broker}
  16 + ... find_tender
  17 + Завантажити дані про тендер
  18 + Run As ${viewer} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']}
  19 +
  20 +##############################################################################################
  21 +# AUCTION
  22 +##############################################################################################
  23 +
  24 +Відображення дати початку аукціону
  25 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних аукціону
  26 + ... viewer
  27 + ... ${USERS.users['${viewer}'].broker}
  28 + ... tender_view
  29 + [Setup] Дочекатись дати закінчення прийому пропозицій ${viewer} ${TENDER['TENDER_UAID']}
  30 + Дочекатись дати початку періоду аукціону ${viewer} ${TENDER['TENDER_UAID']}
  31 + Отримати дані із тендера ${viewer} ${TENDER['TENDER_UAID']} auctionPeriod.startDate ${TENDER['LOT_ID']}
  32 +
  33 +
  34 +Можливість дочекатися початку аукціону
  35 + [Tags] ${USERS.users['${viewer}'].broker}: Процес аукціону
  36 + ... viewer
  37 + ... ${USERS.users['${viewer}'].broker}
  38 + ... auction
  39 + Дочекатись дати початку аукціону ${viewer}
  40 +
  41 +
  42 +Можливість вичитати посилання на аукціон для першого учасника
  43 + [Tags] ${USERS.users['${provider}'].broker}: Процес аукціону
  44 + ... provider
  45 + ... ${USERS.users['${provider}'].broker}
  46 + ... auction
  47 + Можливість вичитати посилання на аукціон для ${provider}
  48 +
  49 +
  50 +Можливість вичитати посилання на аукціон для другого учасника
  51 + [Tags] ${USERS.users['${provider1}'].broker}: Процес аукціону
  52 + ... provider1
  53 + ... ${USERS.users['${provider1}'].broker}
  54 + ... auction
  55 + Можливість вичитати посилання на аукціон для ${provider1}
  56 +
  57 +
  58 +Можливість вичитати посилання на аукціон для глядача
  59 + [Tags] ${USERS.users['${viewer}'].broker}: Процес аукціону
  60 + ... viewer
  61 + ... ${USERS.users['${viewer}'].broker}
  62 + ... auction
  63 + Можливість вичитати посилання на аукціон для ${viewer}
  64 +
  65 +
  66 +Можливість дочекатись першого раунду
  67 + [Tags] ${USERS.users['${viewer}'].broker}: Процес аукціону
  68 + ... viewer provider provider1
  69 + ... ${USERS.users['${viewer}'].broker}
  70 + ... ${USERS.users['${provider}'].broker}
  71 + ... ${USERS.users['${provider1}'].broker}
  72 + ... auction
  73 + Дочекатись завершення паузи перед першим раундом
  74 +
  75 +
  76 +Можливість проведення 1 го раунду аукціону для першого учасника
  77 + [Tags] ${USERS.users['${provider}'].broker}: Процес аукціону
  78 + ... provider
  79 + ... ${USERS.users['${provider}'].broker}
  80 + ... auction
  81 + Вибрати учасника, який може зробити ставку
  82 + Поставити максимально можливу ставку
  83 + Дочекатись учасником закінчення стадії ставок
  84 + Перевірити чи ставка була прийнята
  85 +
  86 +
  87 +Можливість проведення 1 го раунду аукціону для другого учасника
  88 + [Tags] ${USERS.users['${provider1}'].broker}: Процес аукціону
  89 + ... provider1
  90 + ... ${USERS.users['${provider1}'].broker}
  91 + ... auction
  92 + Вибрати учасника, який може зробити ставку
  93 + Поставити ставку більшу від максимальної на 1 грн
  94 + Поставити максимально можливу ставку
  95 + Дочекатись учасником закінчення стадії ставок
  96 + Перевірити чи ставка була прийнята
  97 +
  98 +
  99 +Можливість дочекатись другого раунду
  100 + [Tags] ${USERS.users['${viewer}'].broker}: Процес аукціону
  101 + ... viewer provider provider1
  102 + ... ${USERS.users['${viewer}'].broker}
  103 + ... ${USERS.users['${provider}'].broker}
  104 + ... ${USERS.users['${provider1}'].broker}
  105 + ... auction
  106 + Дочекатись завершення паузи перед 2 раундом
  107 +
  108 +
  109 +Можливість проведення 2 го раунду аукціону для першого учасника
  110 + [Tags] ${USERS.users['${provider}'].broker}: Процес аукціону
  111 + ... provider
  112 + ... ${USERS.users['${provider}'].broker}
  113 + ... auction
  114 + Вибрати учасника, який може зробити ставку
  115 + Поставити малу ставку в 1 грн
  116 + Відмінитити ставку
  117 + Поставити максимально можливу ставку
  118 + Дочекатись учасником закінчення стадії ставок
  119 + Перевірити чи ставка була прийнята
  120 +
  121 +
  122 +Можливість проведення 2 го раунду аукціону для другого учасника
  123 + [Tags] ${USERS.users['${provider1}'].broker}: Процес аукціону
  124 + ... provider1
  125 + ... ${USERS.users['${provider1}'].broker}
  126 + ... auction
  127 + Дочекатись учасником закінчення стадії ставок
  128 + Вибрати учасника, який може зробити ставку
  129 + Поставити максимально можливу ставку
  130 + Дочекатись учасником закінчення стадії ставок
  131 + Перевірити чи ставка була прийнята
  132 +
  133 +
  134 +Можливість дочекатись третього раунду
  135 + [Tags] ${USERS.users['${viewer}'].broker}: Процес аукціону
  136 + ... viewer provider provider1
  137 + ... ${USERS.users['${viewer}'].broker}
  138 + ... ${USERS.users['${provider}'].broker}
  139 + ... ${USERS.users['${provider1}'].broker}
  140 + ... auction
  141 + Дочекатись завершення паузи перед 3 раундом
  142 +
  143 +
  144 +Можливість проведення 3 го раунду аукціону для першого учасника
  145 + [Tags] ${USERS.users['${provider}'].broker}: Процес аукціону
  146 + ... provider
  147 + ... ${USERS.users['${provider}'].broker}
  148 + ... auction
  149 + Вибрати учасника, який може зробити ставку
  150 + Поставити нульову ставку
  151 + Поставити максимально можливу ставку
  152 + Дочекатись учасником закінчення стадії ставок
  153 + Перевірити чи ставка була прийнята
  154 +
  155 +
  156 +Можливість проведення 3 го раунду аукціону для другого учасника
  157 + [Tags] ${USERS.users['${provider1}'].broker}: Процес аукціону
  158 + ... provider1
  159 + ... ${USERS.users['${provider1}'].broker}
  160 + ... auction
  161 + Вибрати учасника, який може зробити ставку
  162 + Поставити малу ставку в 1 грн
  163 + Змінити ставку на максимальну
  164 + Дочекатись учасником закінчення стадії ставок
  165 + Перевірити чи ставка була прийнята
  166 +
  167 +
  168 +Можливість дочекатися завершення аукціону
  169 + [Tags] ${USERS.users['${viewer}'].broker}: Процес аукціону
  170 + ... viewer provider provider1
  171 + ... ${USERS.users['${viewer}'].broker}
  172 + ... ${USERS.users['${provider}'].broker}
  173 + ... ${USERS.users['${provider1}'].broker}
  174 + ... auction
  175 + [Teardown] Оновити LAST_MODIFICATION_DATE
  176 + Дочекатись дати закінчення аукціону
  177 +
  178 +
  179 +Відображення дати завершення аукціону
  180 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних аукціону
  181 + ... viewer
  182 + ... ${USERS.users['${viewer}'].broker}
  183 + ... tender_view
  184 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  185 + Отримати дані із тендера ${viewer} ${TENDER['TENDER_UAID']} auctionPeriod.endDate ${TENDER['LOT_ID']}
  186 +
  187 +
  188 +*** Keywords ***
  189 +Дочекатись дати початку аукціону
  190 + [Arguments] ${username}
  191 + # Can't use that dirty hack here since we don't know
  192 + # the date of auction when creating the procurement :)
  193 + ${auctionStart}= Отримати дані із тендера ${username} ${TENDER['TENDER_UAID']} auctionPeriod.startDate ${TENDER['LOT_ID']}
  194 + Дочекатись дати ${auctionStart}
  195 + Оновити LAST_MODIFICATION_DATE
  196 + Дочекатись синхронізації з майданчиком ${username}
  197 +
  198 +
  199 +Можливість вичитати посилання на аукціон для ${username}
  200 + ${url}= Run Keyword If '${username}' == '${viewer}' Run As ${viewer} Отримати посилання на аукціон для глядача ${TENDER['TENDER_UAID']} ${TENDER['LOT_ID']}
  201 + ... ELSE Run As ${username} Отримати посилання на аукціон для учасника ${TENDER['TENDER_UAID']} ${TENDER['LOT_ID']}
  202 + Should Be True '${url}'
  203 + Should Match Regexp ${url} ^https?:\/\/auction(?:-sandbox)?\.openprocurement\.org\/tenders\/([0-9A-Fa-f]{32})
  204 + Log URL: ${url}
  205 + [return] ${url}
  206 +
  207 +
  208 +Відкрити сторінку аукціону для ${username}
  209 + ${url}= Можливість вичитати посилання на аукціон для ${username}
  210 + Open browser ${url} ${USERS.users['${username}'].browser} ${username}
  211 + Set Window Position @{USERS['${username}']['position']}
  212 + Set Window Size @{USERS['${username}']['size']}
  213 + Run Keyword Unless '${username}' == '${viewer}'
  214 + ... Click Element xpath=//button[contains(@class, 'btn btn-success')]
  215 +
  216 +
  217 +Дочекатись завершення паузи перед першим раундом
  218 + Відкрити сторінку аукціону для ${viewer}
  219 + Дочекатись паузи перед першим раундом глядачем
  220 + Дочекатись завершення паузи перед першим раундом для користувачів
  221 +
  222 +
  223 +Дочекатись дати закінчення аукціону
  224 + Переключитись на учасника ${viewer}
  225 + ${status} ${_}= Run Keyword And Ignore Error Wait Until Keyword Succeeds 61 times 30 s Page should contain Аукціон завершився
  226 + Run Keyword If '${status}' == 'FAIL'
  227 + ... Run Keywords
  228 + ... Отримати дані із тендера ${username} ${TENDER['TENDER_UAID']} auctionPeriod.startDate ${TENDER['LOT_ID']}
  229 + ... AND
  230 + ... Дочекатись дати початку аукціону ${username}
  231 + ... AND
  232 + ... Дочекатись дати закінчення аукціону для ${username}
  233 + ... ELSE
  234 + ... Run Keywords
  235 + ... Wait Until Keyword Succeeds 15 times 30 s Page should not contain Очікуємо на розкриття імен учасників
  236 + ... AND
  237 + ... Переключитись на учасника ${provider}
  238 + ... AND
  239 + ... Page should contain Аукціон завершився
  240 + ... AND
  241 + ... Переключитись на учасника ${provider1}
  242 + ... AND
  243 + ... Page should contain Аукціон завершився
  244 + ... AND
  245 + ... Close browser
  246 +
  247 +
  248 +Дочекатись паузи перед першим раундом глядачем
  249 + ${status} ${_}= Run Keyword And Ignore Error Page should contain Очікування
  250 + Run Keyword If '${status}' == 'PASS'
  251 + ... Run Keywords
  252 + ... Дочекатись дати початку аукціону ${viewer}
  253 + ... AND
  254 + ... Wait Until Keyword Succeeds 15 times 10 s Page should contain до початку раунду
  255 +
  256 +
  257 +Дочекатись завершення паузи перед ${round_number} раундом
  258 + Переключитись на учасника ${viewer}
  259 + Wait Until Keyword Succeeds 30 times 5s Page should contain → ${round_number}
  260 + ${date}= Get Current Date
  261 + Переключитись на учасника ${provider}
  262 + Page should contain → ${round_number}
  263 + Переключитись на учасника ${provider1}
  264 + Page should contain → ${round_number}
  265 + Переключитись на учасника ${viewer}
  266 + Wait Until Keyword Succeeds 30 times 5 s Page should not contain → ${round_number}
  267 + ${new_date}= Get Current Date
  268 + Переключитись на учасника ${provider}
  269 + Page should not contain → ${round_number}
  270 + Переключитись на учасника ${provider1}
  271 + Page should not contain → ${round_number}
  272 + ${time}= Subtract Date From Date ${new_date} ${date}
  273 + Should Be True ${time} < 140 and ${time} > 100
  274 +
  275 +
  276 +Дочекатись завершення паузи перед першим раундом для користувачів
  277 + Wait Until Keyword Succeeds 30 times 5s Page should contain → 1
  278 + ${date}= Get Current Date
  279 + Відкрити сторінку аукціону для ${provider}
  280 + Відкрити сторінку аукціону для ${provider1}
  281 + Переключитись на учасника ${viewer}
  282 + Wait Until Keyword Succeeds 62 times 5 s Page should not contain → 1
  283 + ${new_date}= Get Current Date
  284 + ${time}= Subtract Date From Date ${new_date} ${date}
  285 + Should Be True ${time} < 310 and ${time} > 250
  286 + Переключитись на учасника ${provider}
  287 + Page should not contain → 1
  288 + Переключитись на учасника ${provider1}
  289 + Page should not contain → 1
  290 +
  291 +
  292 +Дочекатись закінчення стадії ставок глядачем
  293 + Wait Until Keyword Succeeds 30 times 5s Page should contain до закінчення раунду
  294 + ${date}= Get Current Date
  295 + Wait Until Keyword Succeeds 50 times 5 s Page should not contain до закінчення раунду
  296 + ${new_date}= Get Current Date
  297 + ${time}= Subtract Date From Date ${new_date} ${date}
  298 + Should Be True ${time} < 250 and ${time} > 210
  299 +
  300 +
  301 +Дочекатись учасником закінчення стадії ставок
  302 + Wait Until Keyword Succeeds 12 times 10 s Page should not contain до закінчення вашої черги
  303 +
  304 +
  305 +Дочекатись оголошення результатів глядачем
  306 + Wait Until Keyword Succeeds 30 times 5s Page should contain до оголошення результатів
  307 + ${date}= Get Current Date
  308 + Wait Until Keyword Succeeds 50 times 5 s Page should not contain до оголошення результатів
  309 + ${new_date}= Get Current Date
  310 + ${time}= Subtract Date From Date ${new_date} ${date}
  311 + Should Be True ${time} < 250 and ${time} > 210
  312 +
  313 +
  314 +Переключитись на учасника
  315 + [Arguments] ${username}
  316 + Switch Browser ${username}
  317 + ${CURRENT_USER}= Set Variable ${username}
  318 + Set Global Variable ${CURRENT_USER}
  319 +
  320 +
  321 +Поставити максимально можливу ставку
  322 + Wait Until Page Contains Element id=max_bid_amount_price
  323 + ${last_amount}= Get Text id=max_bid_amount_price
  324 + ${last_amount}= convert_amount_string_to_float ${last_amount}
  325 + ${value}= Convert To Number 0.01
  326 + ${last_amount}= subtraction ${last_amount} ${value}
  327 + Поставити ставку ${last_amount} Заявку прийнято
  328 +
  329 +
  330 +Поставити ставку більшу від максимальної на ${extra_amount} грн
  331 + Wait Until Page Contains Element id=max_bid_amount_price
  332 + ${last_amount}= Get Text id=max_bid_amount_price
  333 + ${last_amount}= convert_amount_string_to_float ${last_amount}
  334 + ${extra_amount}= convert_amount_string_to_float ${extra_amount}
  335 + ${last_amount}= Evaluate ${last_amount}+${extra_amount}
  336 + Поставити ставку ${last_amount} Надто висока заявка
  337 +
  338 +
  339 +Поставити ставку
  340 + [Arguments] ${amount} ${msg}
  341 + ${amount}= Convert To String ${amount}
  342 + Set To Dictionary ${USERS['${CURRENT_USER}']} last_amount=${amount}
  343 + Click Element id=clear-bid-button
  344 + Wait Until Page Does Not Contain Element xpath=//alert[contains(@class, 'bids-form')] 7s
  345 + Input Text id=bid-amount-input ${amount}
  346 + Click Element id=place-bid-button
  347 + Wait Until Page Contains ${msg} 30s
  348 +
  349 +
  350 +Відмінитити ставку
  351 + Click Element id=cancel-bid-button
  352 + Wait Until Page Contains Заявку відмінено 10s
  353 +
  354 +
  355 +Змінити ставку на максимальну
  356 + Click Element id=edit-bid-button
  357 + Click Element id=clear-bid-button
  358 + Поставити максимально можливу ставку
  359 +
  360 +
  361 +Вибрати учасника, який може зробити ставку
  362 + :FOR ${username} IN ${provider} ${provider1}
  363 + \ Переключитись на учасника ${username}
  364 + \ ${status} ${_}= Run Keyword And Ignore Error Page Should Contain до закінчення вашої черги
  365 + \ Run Keyword If '${status}' == 'PASS' Exit For Loop
  366 +
  367 +
  368 +Поставити малу ставку в ${last_amount} грн
  369 + Wait Until Page Contains Element id=max_bid_amount_price
  370 + Поставити ставку ${last_amount} Ви ввели дуже малу суму
  371 +
  372 +
  373 +Поставити нульову ставку
  374 + Wait Until Page Contains Element id=max_bid_amount_price
  375 + Поставити ставку 0 Bid amount is required
  376 +
  377 +
  378 +Перевірити чи ставка була прийнята
  379 + ${last_amount}= convert_amount ${USERS['${CURRENT_USER}']['last_amount']}
  380 + Page Should Contain ${last_amount}
@@ -37,6 +37,22 @@ Resource resource.robot @@ -37,6 +37,22 @@ Resource resource.robot
37 \ Should Match Regexp ${document_url} ^https?:\/\/public.docs(?:-sandbox)?\.openprocurement\.org\/get\/([0-9A-Fa-f]{32}) msg=Not a Document Service Upload 37 \ Should Match Regexp ${document_url} ^https?:\/\/public.docs(?:-sandbox)?\.openprocurement\.org\/get\/([0-9A-Fa-f]{32}) msg=Not a Document Service Upload
38 38
39 39
  40 +Можливість створити план закупівлі
  41 + ${NUMBER_OF_ITEMS}= Convert To Integer ${NUMBER_OF_ITEMS}
  42 + ${tender_parameters}= Create Dictionary
  43 + ... mode=${MODE}
  44 + ... number_of_items=${NUMBER_OF_ITEMS}
  45 + ... tender_meat=${${TENDER_MEAT}}
  46 + ... item_meat=${${ITEM_MEAT}}
  47 + ${DIALOGUE_TYPE}= Get Variable Value ${DIALOGUE_TYPE}
  48 + Run keyword if '${DIALOGUE_TYPE}' != '${None}' Set to dictionary ${tender_parameters} dialogue_type=${DIALOGUE_TYPE}
  49 + ${tender_data}= Підготувати дані для створення тендера ${tender_parameters}
  50 + ${adapted_data}= Адаптувати дані для оголошення тендера ${tender_data}
  51 + ${TENDER_UAID}= Run As ${tender_owner} Створити план ${adapted_data}
  52 + Set To Dictionary ${USERS.users['${tender_owner}']} initial_data=${adapted_data}
  53 + Set To Dictionary ${TENDER} TENDER_UAID=${TENDER_UAID}
  54 +
  55 +
40 Можливість знайти тендер по ідентифікатору для усіх користувачів 56 Можливість знайти тендер по ідентифікатору для усіх користувачів
41 :FOR ${username} IN ${tender_owner} ${provider} ${provider1} ${viewer} 57 :FOR ${username} IN ${tender_owner} ${provider} ${provider1} ${viewer}
42 \ Можливість знайти тендер по ідентифікатору для користувача ${username} 58 \ Можливість знайти тендер по ідентифікатору для користувача ${username}
@@ -47,6 +63,16 @@ Resource resource.robot @@ -47,6 +63,16 @@ Resource resource.robot
47 Run as ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} 63 Run as ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']}
48 64
49 65
  66 +Можливість знайти план по ідентифікатору
  67 + :FOR ${username} IN ${tender_owner} ${viewer}
  68 + \ Можливість знайти план по ідентифікатору для користувача ${username}
  69 +
  70 +
  71 +Можливість знайти план по ідентифікатору для користувача ${username}
  72 + Дочекатись синхронізації з майданчиком ${username}
  73 + Run as ${username} Пошук плану по ідентифікатору ${TENDER['TENDER_UAID']}
  74 +
  75 +
50 Можливість знайти тендер по ідентифікатору ${tender_id} та зберегти його в ${save_location} для користувача ${username} 76 Можливість знайти тендер по ідентифікатору ${tender_id} та зберегти його в ${save_location} для користувача ${username}
51 Дочекатись синхронізації з майданчиком ${username} 77 Дочекатись синхронізації з майданчиком ${username}
52 Run as ${username} Пошук тендера по ідентифікатору ${tender_id} ${save_location} 78 Run as ${username} Пошук тендера по ідентифікатору ${tender_id} ${save_location}
@@ -56,6 +82,10 @@ Resource resource.robot @@ -56,6 +82,10 @@ Resource resource.robot
56 Run As ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} ${field_name} ${field_value} 82 Run As ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} ${field_name} ${field_value}
57 83
58 84
  85 +Можливість змінити поле ${field_name} плану на ${field_value}
  86 + Run As ${tender_owner} Внести зміни в план ${TENDER['TENDER_UAID']} ${field_name} ${field_value}
  87 +
  88 +
59 Можливість додати документацію до тендера 89 Можливість додати документацію до тендера
60 ${file_path} ${file_name} ${file_content}= create_fake_doc 90 ${file_path} ${file_name} ${file_content}= create_fake_doc
61 Run As ${tender_owner} Завантажити документ ${file_path} ${TENDER['TENDER_UAID']} 91 Run As ${tender_owner} Завантажити документ ${file_path} ${TENDER['TENDER_UAID']}
@@ -79,10 +109,25 @@ Resource resource.robot @@ -79,10 +109,25 @@ Resource resource.robot
79 Set To Dictionary ${USERS.users['${tender_owner}']} item_data=${item_data} 109 Set To Dictionary ${USERS.users['${tender_owner}']} item_data=${item_data}
80 110
81 111
  112 +Можливість додати предмет закупівлі в план
  113 + ${item}= Підготувати дані для створення предмету закупівлі плану ${USERS.users['${tender_owner}'].initial_data.data['items'][0]['classification']['id']}
  114 + Run As ${tender_owner} Додати предмет закупівлі в план ${TENDER['TENDER_UAID']} ${item}
  115 + ${item_id}= get_id_from_object ${item}
  116 + ${item_data}= Create Dictionary
  117 + ... item=${item}
  118 + ... item_id=${item_id}
  119 + ${item_data}= munch_dict arg=${item_data}
  120 + Set To Dictionary ${USERS.users['${tender_owner}']} item_data=${item_data}
  121 +
  122 +
82 Можливість видалити предмет закупівлі з тендера 123 Можливість видалити предмет закупівлі з тендера
83 Run As ${tender_owner} Видалити предмет закупівлі ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].item_data.item_id} 124 Run As ${tender_owner} Видалити предмет закупівлі ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].item_data.item_id}
84 125
85 126
  127 +Можливість видалити предмет закупівлі з плану
  128 + Run As ${tender_owner} Видалити предмет закупівлі плану ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].item_data.item_id}
  129 +
  130 +
86 Звірити відображення поля ${field} документа ${doc_id} із ${left} для користувача ${username} 131 Звірити відображення поля ${field} документа ${doc_id} із ${left} для користувача ${username}
87 ${right}= Run As ${username} Отримати інформацію із документа ${TENDER['TENDER_UAID']} ${doc_id} ${field} 132 ${right}= Run As ${username} Отримати інформацію із документа ${TENDER['TENDER_UAID']} ${doc_id} ${field}
88 Порівняти об'єкти ${left} ${right} 133 Порівняти об'єкти ${left} ${right}
@@ -101,6 +146,10 @@ Resource resource.robot @@ -101,6 +146,10 @@ Resource resource.robot
101 Звірити поле тендера ${username} ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].initial_data} ${field} 146 Звірити поле тендера ${username} ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].initial_data} ${field}
102 147
103 148
  149 +Звірити відображення поля ${field} плану для користувача ${username}
  150 + Звірити поле плану ${username} ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].initial_data} ${field}
  151 +
  152 +
104 Отримати доступ до тендера другого етапу та зберегти його 153 Отримати доступ до тендера другого етапу та зберегти його
105 Run as ${tender_owner} Отримати тендер другого етапу та зберегти його ${USERS.users['${tender_owner}'].tender_data.data.stage2TenderID} 154 Run as ${tender_owner} Отримати тендер другого етапу та зберегти його ${USERS.users['${tender_owner}'].tender_data.data.stage2TenderID}
106 ${TENDER_UAID_second_stage}= BuiltIn.Catenate SEPARATOR= ${TENDER['TENDER_UAID']} .2 155 ${TENDER_UAID_second_stage}= BuiltIn.Catenate SEPARATOR= ${TENDER['TENDER_UAID']} .2
@@ -115,6 +164,25 @@ Resource resource.robot @@ -115,6 +164,25 @@ Resource resource.robot
115 Порівняти об'єкти ${left} ${right} 164 Порівняти об'єкти ${left} ${right}
116 165
117 166
  167 +Отримати інформацію про документ тендера ${doc_id} ${username}
  168 + ${file_properties} = Run as ${username} Отримати інформацію про документ ${TENDER['TENDER_UAID']} ${doc_id}
  169 + Set To Dictionary ${USERS.users['${tender_owner}'].tender_document} file_properties=${file_properties}
  170 + Log ${file_properties}
  171 +
  172 +
  173 +Отримати інформацію про документ лотів ${doc_id} ${username}
  174 + ${file_properties} = Run as ${username} Отримати інформацію про документ ${TENDER['TENDER_UAID']} ${doc_id}
  175 + Set To Dictionary ${USERS.users['${tender_owner}'].lots_documents[0]} file_properties=${file_properties}
  176 + Log ${file_properties}
  177 +
  178 +
  179 +Звірити інформацію про документацію ${file_properties} ${username}
  180 + ${file_contents}= Run as ${username} Отримати вміст документа ${file_properties.url}
  181 + ${file_hash}= get_hash ${file_contents}
  182 + ${new_file_properties}= Call Method ${USERS.users['${viewer}'].client} get_file_properties ${file_properties.url} ${file_hash}
  183 + Порівняти об'єкти ${new_file_properties} ${file_properties}
  184 +
  185 +
118 Звірити відображення дати ${date} тендера для усіх користувачів 186 Звірити відображення дати ${date} тендера для усіх користувачів
119 :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} 187 :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1}
120 \ Звірити відображення дати ${date} тендера для користувача ${username} 188 \ Звірити відображення дати ${date} тендера для користувача ${username}
@@ -146,6 +214,17 @@ Resource resource.robot @@ -146,6 +214,17 @@ Resource resource.robot
146 \ Звірити відображення поля ${field} ${item_index} предмету для користувача ${username} 214 \ Звірити відображення поля ${field} ${item_index} предмету для користувача ${username}
147 215
148 216
  217 +Звірити відображення ${field} усіх предметів плану для усіх користувачів
  218 + :FOR ${username} IN ${viewer} ${tender_owner}
  219 + \ Звірити відображення ${field} усіх предметів плану для користувача ${username}
  220 +
  221 +
  222 +Звірити відображення ${field} усіх предметів плану для користувача ${username}
  223 + :FOR ${item_index} IN RANGE ${NUMBER_OF_ITEMS}
  224 + \ ${item_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data['items'][${item_index}]}
  225 + \ Звірити поле плану із значенням ${username} ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].initial_data.data['items'][${item_index}].${field}} ${field} ${item_id}
  226 +
  227 +
149 Звірити відображення поля ${field} ${item_index} предмету для користувача ${username} 228 Звірити відображення поля ${field} ${item_index} предмету для користувача ${username}
150 ${item_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data['items'][${item_index}]} 229 ${item_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data['items'][${item_index}]}
151 Звірити поле тендера із значенням ${username} ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].initial_data.data['items'][${item_index}].${field}} ${field} ${item_id} 230 Звірити поле тендера із значенням ${username} ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].initial_data.data['items'][${item_index}].${field}} ${field} ${item_id}
@@ -413,6 +492,71 @@ Resource resource.robot @@ -413,6 +492,71 @@ Resource resource.robot
413 :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} 492 :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1}
414 \ Remove From List ${USERS.users['${username}'].tender_data.data['features']} ${feature_index} 493 \ Remove From List ${USERS.users['${username}'].tender_data.data['features']} ${feature_index}
415 494
  495 +
  496 +Звірити відображення поля ${field} зміни до договору для користувача ${username}
  497 + Звірити поле зміни до договору ${username} ${CONTRACT_UAID}
  498 + ... ${USERS.users['${tender_owner}'].change_data}
  499 + ... ${field}
  500 +
  501 +
  502 +Звірити відображення поля ${field} договору із ${left} для користувача ${username}
  503 + ${right}= Run As ${username} Отримати інформацію із договору ${CONTRACT_UAID} ${field}
  504 + Порівняти об'єкти ${left} ${right}
  505 +
  506 +
  507 +Звірити відображення поля ${field} документа ${doc_id} до договору з ${left} для користувача ${username}
  508 + ${right}= Run As ${username} Отримати інформацію із документа до договору ${CONTRACT_UAID} ${doc_id} ${field}
  509 + Порівняти об'єкти ${left} ${right}
  510 +
  511 +
  512 +Звірити відображення вмісту документа ${doc_id} до договору з ${left} для користувача ${username}
  513 + ${file_name}= Run As ${username} Отримати документ до договору ${CONTRACT_UAID} ${doc_id}
  514 + ${right}= Get File ${OUTPUT_DIR}${/}${file_name}
  515 + Порівняти об'єкти ${left} ${right}
  516 +
  517 +
  518 +Звірити відображення причин зміни договору
  519 + ${rationale_types_from_broker}= Run as ${viewer} Отримати інформацію із договору ${CONTRACT_UAID} changes[0].rationaleTypes
  520 + ${rationale_types_from_robot}= Get variable value ${USERS.users['${tender_owner}'].change_data.data.rationaleTypes}
  521 + Log ${rationale_types_from_broker}
  522 + Log ${rationale_types_from_robot}
  523 + ${result}= compare_rationale_types ${rationale_types_from_broker} ${rationale_types_from_robot}
  524 + Run keyword if ${result} == ${False} Fail Rationale types are not equal
  525 +
  526 +
  527 +Додати документацію до зміни договору
  528 + ${file_path} ${file_name} ${file_content}= create_fake_doc
  529 + ${doc_id}= get_id_from_string ${file_name}
  530 + ${doc}= Create Dictionary
  531 + ... id=${doc_id}
  532 + ... name=${file_name}
  533 + ... content=${file_content}
  534 + Set to dictionary ${USERS.users['${tender_owner}']} change_doc=${doc}
  535 + Run As ${tender_owner} Додати документацію до зміни в договорі ${CONTRACT_UAID} ${file_path}
  536 + Remove File ${file_path}
  537 +
  538 +
  539 +Додати документацію до договору
  540 + ${file_path} ${file_name} ${file_content}= create_fake_doc
  541 + ${doc_id}= get_id_from_string ${file_name}
  542 + ${doc}= Create Dictionary
  543 + ... id=${doc_id}
  544 + ... name=${file_name}
  545 + ... content=${file_content}
  546 + Set to dictionary ${USERS.users['${tender_owner}']} contract_doc=${doc}
  547 + Run As ${tender_owner} Завантажити документацію до договору ${CONTRACT_UAID} ${file_path}
  548 + Remove File ${file_path}
  549 +
  550 +
  551 +Вказати дійсно оплачену суму
  552 + ${amount}= Get variable value ${USERS.users['${tender_owner}'].contract_data.data.value.amount}
  553 + ${amountPaid}= Create Dictionary amount=${amount} valueAddedTaxIncluded=${True} currency=UAH
  554 + ${data}= Create Dictionary amountPaid=${amountPaid}
  555 + ${data}= Create Dictionary data=${data}
  556 + Set to dictionary ${USERS.users['${tender_owner}']} terminating_data=${data}
  557 + Run As ${tender_owner} Внести зміни в договір ${CONTRACT_UAID} ${data}
  558 +
  559 +
416 ############################################################################################## 560 ##############################################################################################
417 # QUESTIONS 561 # QUESTIONS
418 ############################################################################################## 562 ##############################################################################################
@@ -669,7 +813,7 @@ Resource resource.robot @@ -669,7 +813,7 @@ Resource resource.robot
669 813
670 Можливість скасувати вимогу про виправлення визначення ${award_index} переможця 814 Можливість скасувати вимогу про виправлення визначення ${award_index} переможця
671 ${cancellation_reason}= create_fake_sentence 815 ${cancellation_reason}= create_fake_sentence
672 - ${status}= Set variable if 'open' in '${MODE}' stopping cancelled 816 + ${status}= Set variable if "${USERS.users['${provider}'].tender_data.data.awards[${award_index}].complaints[-1].status}" == 'pending' and 'open' in '${MODE}' stopping cancelled
673 ${data}= Create Dictionary 817 ${data}= Create Dictionary
674 ... status=${status} 818 ... status=${status}
675 ... cancellationReason=${cancellation_reason} 819 ... cancellationReason=${cancellation_reason}
@@ -682,7 +826,6 @@ Resource resource.robot @@ -682,7 +826,6 @@ Resource resource.robot
682 ... ${cancellation_data} 826 ... ${cancellation_data}
683 ... ${award_index} 827 ... ${award_index}
684 Set To Dictionary ${USERS.users['${provider}'].claim_data} cancellation ${cancellation_data} 828 Set To Dictionary ${USERS.users['${provider}'].claim_data} cancellation ${cancellation_data}
685 - ${status}= Set variable if 'open' in '${MODE}' stopping cancelled  
686 Wait until keyword succeeds 829 Wait until keyword succeeds
687 ... 40 min 15 sec 830 ... 40 min 15 sec
688 ... 15 sec 831 ... 15 sec
@@ -971,6 +1114,7 @@ Resource resource.robot @@ -971,6 +1114,7 @@ Resource resource.robot
971 ... ELSE Set Variable ${None} 1114 ... ELSE Set Variable ${None}
972 Run As ${username} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} ${lots_ids} ${features_ids} 1115 Run As ${username} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} ${lots_ids} ${features_ids}
973 1116
  1117 +
974 Неможливість подати цінову пропозицію без прив’язки до лоту користувачем ${username} 1118 Неможливість подати цінову пропозицію без прив’язки до лоту користувачем ${username}
975 ${bid}= Підготувати дані для подання пропозиції 1119 ${bid}= Підготувати дані для подання пропозиції
976 ${values}= Get Variable Value ${bid.data.lotValues[0]} 1120 ${values}= Get Variable Value ${bid.data.lotValues[0]}
@@ -1042,9 +1186,65 @@ Resource resource.robot @@ -1042,9 +1186,65 @@ Resource resource.robot
1042 Remove File ${file_path} 1186 Remove File ${file_path}
1043 1187
1044 1188
  1189 +Можливість завантажити документ в ${contract_index} угоду користувачем ${username}
  1190 + ${file_path} ${file_name} ${file_content}= create_fake_doc
  1191 + ${doc_id}= get_id_from_string ${file_name}
  1192 + ${doc}= Create Dictionary
  1193 + ... id=${doc_id}
  1194 + ... name=${file_name}
  1195 + ... content=${file_content}
  1196 + Set to dictionary ${USERS.users['${tender_owner}']} contract_doc=${doc}
  1197 + Run As ${username} Завантажити документ в угоду ${file_path} ${TENDER['TENDER_UAID']} ${contract_index}
  1198 + Remove File ${file_path}
  1199 +
  1200 +
1045 Можливість укласти угоду для закупівлі 1201 Можливість укласти угоду для закупівлі
1046 Run as ${tender_owner} 1202 Run as ${tender_owner}
1047 ... Підтвердити підписання контракту 1203 ... Підтвердити підписання контракту
1048 ... ${TENDER['TENDER_UAID']} 1204 ... ${TENDER['TENDER_UAID']}
1049 ... ${0} 1205 ... ${0}
1050 Run Keyword And Ignore Error Remove From Dictionary ${USERS.users['${viewer}'].tender_data.data.contracts[0]} status 1206 Run Keyword And Ignore Error Remove From Dictionary ${USERS.users['${viewer}'].tender_data.data.contracts[0]} status
  1207 +
  1208 +##############################################################################################
  1209 +# Pre-Qualifications
  1210 +##############################################################################################
  1211 +
  1212 +Дочекатися перевірки прекваліфікацій
  1213 + [Documentation]
  1214 + ... [Arguments] Username, tender uaid
  1215 + ... [Description] Waint until edr bridge check qualifications
  1216 + ... [Return] Nothing
  1217 + [Arguments] ${username} ${tender_uaid}
  1218 + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
  1219 + :FOR ${qualification} IN @{tender.data.qualifications}
  1220 + \ ${res}= Wait until keyword succeeds
  1221 + \ ... 10 min 15 sec
  1222 + \ ... 30 sec
  1223 + \ ... Перевірити документ прекваліфікіції ${qualification.id} для користувача ${username} в тендері ${tender_uaid}
  1224 +
  1225 +
  1226 +Перевірити документ прекваліфікіції ${qualification_id} для користувача ${username} в тендері ${tender_uaid}
  1227 + ${document}= openprocurement_client.Отримати останній документ прекваліфікації з типом registerExtract ${username} ${tender_uaid} ${qualification_id}
  1228 + Порівняти об'єкти ${document['documentType']} registerExtract
  1229 +
  1230 +##############################################################################################
  1231 +# Qualifications
  1232 +##############################################################################################
  1233 +
  1234 +Дочекатися перевірки кваліфікацій
  1235 + [Documentation]
  1236 + ... [Arguments] Username, tender uaid
  1237 + ... [Description] Waint until edr bridge create check award
  1238 + ... [Return] Nothing
  1239 + [Arguments] ${username} ${tender_uaid}
  1240 + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
  1241 + :FOR ${award} IN @{tender.data.awards}
  1242 + \ Wait until keyword succeeds
  1243 + \ ... 10 min 15 sec
  1244 + \ ... 30 sec
  1245 + \ ... Перевірити документ кваліфікіції ${award.id} для користувача ${username} в тендері ${tender_uaid}
  1246 +
  1247 +
  1248 +Перевірити документ кваліфікіції ${award_id} для користувача ${username} в тендері ${tender_uaid}
  1249 + ${document}= openprocurement_client.Отримати останній документ кваліфікації з типом registerExtract ${username} ${tender_uaid} ${award_id}
  1250 + Порівняти об'єкти ${document['documentType']} registerExtract
1 *** Settings *** 1 *** Settings ***
2 Library openprocurement_client_helper.py 2 Library openprocurement_client_helper.py
  3 +Library openprocurement_client.utils
3 4
4 5
5 *** Keywords *** 6 *** Keywords ***
@@ -16,16 +17,51 @@ Library openprocurement_client_helper.py @@ -16,16 +17,51 @@ Library openprocurement_client_helper.py
16 [return] ${tender_id} 17 [return] ${tender_id}
17 18
18 19
  20 +Отримати internal id плану по UAid
  21 + [Arguments] ${username} ${tender_uaid}
  22 + Log ${username}
  23 + Log ${tender_uaid}
  24 + Log Many ${USERS.users['${username}'].id_map}
  25 + ${status}= Run Keyword And Return Status Dictionary Should Contain Key ${USERS.users['${username}'].id_map} ${tender_uaid}
  26 + Run Keyword And Return If ${status} Get From Dictionary ${USERS.users['${username}'].id_map} ${tender_uaid}
  27 + Call Method ${USERS.users['${username}'].client} get_plans
  28 + ${tender_id}= Wait Until Keyword Succeeds 5x 30 sec get_plan_id_by_uaid ${tender_uaid} ${USERS.users['${username}'].client}
  29 + Set To Dictionary ${USERS.users['${username}'].id_map} ${tender_uaid} ${tender_id}
  30 + [return] ${tender_id}
  31 +
  32 +
19 Підготувати клієнт для користувача 33 Підготувати клієнт для користувача
20 [Arguments] ${username} 34 [Arguments] ${username}
21 - [Documentation] Відкрити браузер, створити об’єкт api wrapper, тощо 35 + [Documentation] Відкрити браузер, створити об’єкти api wrapper і
  36 + ... ds api wrapper, приєднати їх атрибутами до користувача, тощо
  37 + Log ${RESOURCE}
22 Log ${API_HOST_URL} 38 Log ${API_HOST_URL}
23 Log ${API_VERSION} 39 Log ${API_VERSION}
24 - ${api_wrapper}= prepare_api_wrapper ${USERS.users['${username}'].api_key} ${RESOURCE} ${API_HOST_URL} ${API_VERSION} 40 + Log ${DS_HOST_URL}
  41 + ${auth_ds_all}= get variable value ${USERS.users.${username}.auth_ds}
  42 + ${auth_ds}= set variable ${auth_ds_all.${RESOURCE}}
  43 + Log ${auth_ds}
  44 +
  45 +# Uncomment this line if there is need to process files operations without DS.
  46 +# ${ds_api_wraper}= set variable ${None}
  47 + ${ds_api_wraper}= prepare_ds_api_wrapper ${DS_HOST_URL} ${auth_ds}
  48 + ${api_wrapper}= Run Keyword If '${MODE}' == 'planning'
  49 + ... prepare_plan_api_wrapper ${USERS.users['${username}'].api_key} ${API_HOST_URL} ${API_VERSION}
  50 + ... ELSE prepare_api_wrapper ${USERS.users['${username}'].api_key} ${RESOURCE} ${API_HOST_URL} ${API_VERSION} ${ds_api_wraper}
25 Set To Dictionary ${USERS.users['${username}']} client=${api_wrapper} 51 Set To Dictionary ${USERS.users['${username}']} client=${api_wrapper}
26 Set To Dictionary ${USERS.users['${username}']} access_token=${EMPTY} 52 Set To Dictionary ${USERS.users['${username}']} access_token=${EMPTY}
27 ${id_map}= Create Dictionary 53 ${id_map}= Create Dictionary
28 Set To Dictionary ${USERS.users['${username}']} id_map=${id_map} 54 Set To Dictionary ${USERS.users['${username}']} id_map=${id_map}
  55 + Log ${EDR_HOST_URL}
  56 + Log ${EDR_VERSION}
  57 + ${edr_wrapper}= prepare_edr_wrapper ${EDR_HOST_URL} ${EDR_VERSION} ${USERS.users['${username}'].auth_edr[0]} ${USERS.users['${username}'].auth_edr[1]}
  58 + Set To Dictionary ${USERS.users['${username}']} edr_client=${edr_wrapper}
  59 + #Variables for contracting_management module
  60 + ${contract_api_wrapper}= prepare_contract_api_wrapper ${USERS.users['${username}'].api_key} ${api_host_url} ${api_version} ${ds_api_wraper}
  61 + Set To Dictionary ${USERS.users['${username}']} contracting_client=${contract_api_wrapper}
  62 + Set To Dictionary ${USERS.users['${username}']} contract_access_token=${EMPTY}
  63 + ${contracts_id_map}= Create Dictionary
  64 + Set To Dictionary ${USERS.users['${username}']} contracts_id_map=${contracts_id_map}
29 Log Variables 65 Log Variables
30 66
31 67
@@ -35,11 +71,11 @@ Library openprocurement_client_helper.py @@ -35,11 +71,11 @@ Library openprocurement_client_helper.py
35 Log ${tender_uaid} 71 Log ${tender_uaid}
36 Log ${filepath} 72 Log ${filepath}
37 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} 73 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
38 - ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} 74 + ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token}
39 ${reply}= Call Method ${USERS.users['${username}'].client} upload_document ${filepath} ${tender} 75 ${reply}= Call Method ${USERS.users['${username}'].client} upload_document ${filepath} ${tender}
40 Log object data ${reply} reply 76 Log object data ${reply} reply
41 #return here is needed to have uploaded doc data in `Завантажити документ в лот` keyword 77 #return here is needed to have uploaded doc data in `Завантажити документ в лот` keyword
42 - [return] ${reply} 78 + [return] ${reply}
43 79
44 80
45 Отримати інформацію із документа 81 Отримати інформацію із документа
@@ -50,6 +86,15 @@ Library openprocurement_client_helper.py @@ -50,6 +86,15 @@ Library openprocurement_client_helper.py
50 [Return] ${document['${field}']} 86 [Return] ${document['${field}']}
51 87
52 88
  89 +Отримати інформацію про документ
  90 + [Arguments] ${username} ${tender_uaid} ${doc_id}
  91 + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
  92 + ${document}= get_document_by_id ${tender.data} ${doc_id}
  93 + ${file_properties}= Call Method ${USERS.users['${username}'].client} get_file_properties ${document.url} ${document.hash}
  94 + Log ${file_properties}
  95 + [return] ${file_properties}
  96 +
  97 +
53 Отримати документ 98 Отримати документ
54 [Arguments] ${username} ${tender_uaid} ${doc_id} 99 [Arguments] ${username} ${tender_uaid} ${doc_id}
55 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} 100 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
@@ -58,6 +103,13 @@ Library openprocurement_client_helper.py @@ -58,6 +103,13 @@ Library openprocurement_client_helper.py
58 [return] ${filename} 103 [return] ${filename}
59 104
60 105
  106 +Отримати вміст документа
  107 + [Arguments] ${username} ${url}
  108 + ${file_name}= download_file_from_url ${url} ${OUTPUT_DIR}${/}file
  109 + ${file_contents}= Get File ${OUTPUT_DIR}${/}${file_name}
  110 + [return] ${file_contents}
  111 +
  112 +
61 Отримати посилання на аукціон для глядача 113 Отримати посилання на аукціон для глядача
62 [Arguments] ${username} ${tender_uaid} ${lot_id}=${Empty} 114 [Arguments] ${username} ${tender_uaid} ${lot_id}=${Empty}
63 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} 115 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
@@ -103,6 +155,20 @@ Library openprocurement_client_helper.py @@ -103,6 +155,20 @@ Library openprocurement_client_helper.py
103 [return] ${tender.data.tenderID} 155 [return] ${tender.data.tenderID}
104 156
105 157
  158 +Створити план
  159 + [Arguments] ${username} ${tender_data}
  160 + ${tender}= Call Method ${USERS.users['${username}'].client} create_plan ${tender_data}
  161 + Log ${tender}
  162 + ${access_token}= Get Variable Value ${tender.access.token}
  163 + ${tender}= Call Method ${USERS.users['${username}'].client} patch_plan ${tender}
  164 + Log ${tender}
  165 + Log ${\n}${API_HOST_URL}/api/${API_VERSION}/plans/${tender.data.id}${\n} WARN
  166 + Set To Dictionary ${USERS.users['${username}']} access_token=${access_token}
  167 + Set To Dictionary ${USERS.users['${username}']} tender_data=${tender}
  168 + Log ${USERS.users['${username}'].tender_data}
  169 + [return] ${tender.data.planID}
  170 +
  171 +
106 Пошук тендера по ідентифікатору 172 Пошук тендера по ідентифікатору
107 [Arguments] ${username} ${tender_uaid} ${save_key}=tender_data 173 [Arguments] ${username} ${tender_uaid} ${save_key}=tender_data
108 ${internalid}= openprocurement_client.Отримати internal id по UAid ${username} ${tender_uaid} 174 ${internalid}= openprocurement_client.Отримати internal id по UAid ${username} ${tender_uaid}
@@ -114,6 +180,17 @@ Library openprocurement_client_helper.py @@ -114,6 +180,17 @@ Library openprocurement_client_helper.py
114 [return] ${tender} 180 [return] ${tender}
115 181
116 182
  183 +Пошук плану по ідентифікатору
  184 + [Arguments] ${username} ${tender_uaid} ${save_key}=tender_data
  185 + ${internalid}= openprocurement_client.Отримати internal id плану по UAid ${username} ${tender_uaid}
  186 + ${tender}= Call Method ${USERS.users['${username}'].client} get_plan ${internalid}
  187 + ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token}
  188 + Set To Dictionary ${USERS.users['${username}']} ${save_key}=${tender}
  189 + ${tender}= munch_dict arg=${tender}
  190 + Log ${tender}
  191 + [return] ${tender}
  192 +
  193 +
117 Отримати тендер другого етапу та зберегти його 194 Отримати тендер другого етапу та зберегти його
118 [Arguments] ${username} ${tender_id} 195 [Arguments] ${username} ${tender_id}
119 ${response}= Call Method ${USERS.users['${username}'].client} patch_credentials ${tender_id} ${USERS.users['${username}'].access_token} 196 ${response}= Call Method ${USERS.users['${username}'].client} patch_credentials ${tender_id} ${USERS.users['${username}'].access_token}
@@ -128,6 +205,11 @@ Library openprocurement_client_helper.py @@ -128,6 +205,11 @@ Library openprocurement_client_helper.py
128 openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} 205 openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
129 206
130 207
  208 +Оновити сторінку з планом
  209 + [Arguments] ${username} ${tender_uaid}
  210 + openprocurement_client.Пошук плану по ідентифікатору ${username} ${tender_uaid}
  211 +
  212 +
131 Отримати інформацію із тендера 213 Отримати інформацію із тендера
132 [Arguments] ${username} ${tender_uaid} ${field_name} 214 [Arguments] ${username} ${tender_uaid} ${field_name}
133 openprocurement_client.Пошук тендера по ідентифікатору 215 openprocurement_client.Пошук тендера по ідентифікатору
@@ -143,6 +225,21 @@ Library openprocurement_client_helper.py @@ -143,6 +225,21 @@ Library openprocurement_client_helper.py
143 Fail Field not found: ${field_name} 225 Fail Field not found: ${field_name}
144 226
145 227
  228 +Отримати інформацію із плану
  229 + [Arguments] ${username} ${tender_uaid} ${field_name}
  230 + openprocurement_client.Пошук плану по ідентифікатору
  231 + ... ${username}
  232 + ... ${tender_uaid}
  233 +
  234 + ${status} ${field_value}= Run keyword and ignore error
  235 + ... Get from object
  236 + ... ${USERS.users['${username}'].tender_data.data}
  237 + ... ${field_name}
  238 + Run Keyword if '${status}' == 'PASS' Return from keyword ${field_value}
  239 +
  240 + Fail Field not found: ${field_name}
  241 +
  242 +
146 Внести зміни в тендер 243 Внести зміни в тендер
147 [Arguments] ${username} ${tender_uaid} ${fieldname} ${fieldvalue} 244 [Arguments] ${username} ${tender_uaid} ${fieldname} ${fieldvalue}
148 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} 245 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
@@ -154,6 +251,16 @@ Library openprocurement_client_helper.py @@ -154,6 +251,16 @@ Library openprocurement_client_helper.py
154 ${tender}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} 251 ${tender}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender}
155 Set_To_Object ${USERS.users['${username}'].tender_data} ${fieldname} ${fieldvalue} 252 Set_To_Object ${USERS.users['${username}'].tender_data} ${fieldname} ${fieldvalue}
156 253
  254 +
  255 +Внести зміни в план
  256 + [Arguments] ${username} ${tender_uaid} ${fieldname} ${fieldvalue}
  257 + ${tender}= openprocurement_client.Пошук плану по ідентифікатору ${username} ${tender_uaid}
  258 + Set_To_Object ${tender.data} ${fieldname} ${fieldvalue}
  259 + ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token}
  260 + ${tender}= Call Method ${USERS.users['${username}'].client} patch_plan ${tender}
  261 + Set_To_Object ${USERS.users['${username}'].tender_data} ${fieldname} ${fieldvalue}
  262 +
  263 +
157 ############################################################################## 264 ##############################################################################
158 # Item operations 265 # Item operations
159 ############################################################################## 266 ##############################################################################
@@ -165,6 +272,13 @@ Library openprocurement_client_helper.py @@ -165,6 +272,13 @@ Library openprocurement_client_helper.py
165 Call Method ${USERS.users['${username}'].client} patch_tender ${tender} 272 Call Method ${USERS.users['${username}'].client} patch_tender ${tender}
166 273
167 274
  275 +Додати предмет закупівлі в план
  276 + [Arguments] ${username} ${tender_uaid} ${item}
  277 + ${tender}= openprocurement_client.Пошук плану по ідентифікатору ${username} ${tender_uaid}
  278 + Append To List ${tender.data['items']} ${item}
  279 + Call Method ${USERS.users['${username}'].client} patch_plan ${tender}
  280 +
  281 +
168 Отримати інформацію із предмету 282 Отримати інформацію із предмету
169 [Arguments] ${username} ${tender_uaid} ${item_id} ${field_name} 283 [Arguments] ${username} ${tender_uaid} ${item_id} ${field_name}
170 ${field_name}= Отримати шлях до поля об’єкта ${username} ${field_name} ${item_id} 284 ${field_name}= Отримати шлях до поля об’єкта ${username} ${field_name} ${item_id}
@@ -178,6 +292,13 @@ Library openprocurement_client_helper.py @@ -178,6 +292,13 @@ Library openprocurement_client_helper.py
178 Remove From List ${tender.data['items']} ${item_index} 292 Remove From List ${tender.data['items']} ${item_index}
179 Call Method ${USERS.users['${username}'].client} patch_tender ${tender} 293 Call Method ${USERS.users['${username}'].client} patch_tender ${tender}
180 294
  295 +Видалити предмет закупівлі плану
  296 + [Arguments] ${username} ${tender_uaid} ${item_id} ${lot_id}=${Empty}
  297 + ${tender}= openprocurement_client.Пошук плану по ідентифікатору ${username} ${tender_uaid}
  298 + ${item_index}= get_object_index_by_id ${tender.data['items']} ${item_id}
  299 + Remove From List ${tender.data['items']} ${item_index}
  300 + Call Method ${USERS.users['${username}'].client} patch_plan ${tender}
  301 +
181 ############################################################################## 302 ##############################################################################
182 # Lot operations 303 # Lot operations
183 ############################################################################## 304 ##############################################################################
@@ -247,6 +368,7 @@ Library openprocurement_client_helper.py @@ -247,6 +368,7 @@ Library openprocurement_client_helper.py
247 Скасувати лот 368 Скасувати лот
248 [Arguments] ${username} ${tender_uaid} ${lot_id} ${cancellation_reason} ${document} ${new_description} 369 [Arguments] ${username} ${tender_uaid} ${lot_id} ${cancellation_reason} ${document} ${new_description}
249 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} 370 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
  371 + ${lot_index}= get_object_index_by_id ${tender.data.lots} ${lot_id}
250 ${lot_id}= Get Variable Value ${tender.data.lots[${lot_index}].id} 372 ${lot_id}= Get Variable Value ${tender.data.lots[${lot_index}].id}
251 ${data}= Create dictionary 373 ${data}= Create dictionary
252 ... reason=${cancellation_reason} 374 ... reason=${cancellation_reason}
@@ -705,8 +827,16 @@ Library openprocurement_client_helper.py @@ -705,8 +827,16 @@ Library openprocurement_client_helper.py
705 # Bid operations 827 # Bid operations
706 ############################################################################## 828 ##############################################################################
707 829
  830 +Перевірити учасника за ЄДРПОУ
  831 + [Arguments] ${username} ${edrpou}
  832 + ${reply}= Call Method ${USERS.users['${username}'].edr_client} verify_member ${edrpou}
  833 + Log ${reply}
  834 +
  835 +
708 Подати цінову пропозицію 836 Подати цінову пропозицію
709 [Arguments] ${username} ${tender_uaid} ${bid} ${lots_ids}=${None} ${features_ids}=${None} 837 [Arguments] ${username} ${tender_uaid} ${bid} ${lots_ids}=${None} ${features_ids}=${None}
  838 + ${verify_response}= Run As ${username} Перевірити учасника за ЄДРПОУ ${bid.data.tenderers[0].identifier.id}
  839 + Log ${verify_response}
710 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} 840 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
711 ${lots_ids}= Run Keyword IF ${lots_ids} Set Variable ${lots_ids} 841 ${lots_ids}= Run Keyword IF ${lots_ids} Set Variable ${lots_ids}
712 ... ELSE Create List 842 ... ELSE Create List
@@ -722,12 +852,17 @@ Library openprocurement_client_helper.py @@ -722,12 +852,17 @@ Library openprocurement_client_helper.py
722 \ Set To Dictionary ${bid.data.parameters[${index}]} code=${code} 852 \ Set To Dictionary ${bid.data.parameters[${index}]} code=${code}
723 ${reply}= Call Method ${USERS.users['${username}'].client} create_bid ${tender} ${bid} 853 ${reply}= Call Method ${USERS.users['${username}'].client} create_bid ${tender} ${bid}
724 Log ${reply} 854 Log ${reply}
725 - ${status}= Set Variable If '${MODE}'=='openeu' pending active 855 + Set To Dictionary ${USERS.users['${username}']} bid_access_token=${reply.access.token}
  856 + ${tender}= set_access_key ${tender} ${USERS.users['${username}'].bid_access_token}
  857 + ${procurementMethodType}= Get variable value ${USERS.users['${username}'].tender_data.data.procurementMethodType}
  858 + ${status}= Set Variable If 'EU' in '${procurementMethodType}' or '${procurementMethodType}'=='competitiveDialogueUA' pending active
726 Set To Dictionary ${reply['data']} status=${status} 859 Set To Dictionary ${reply['data']} status=${status}
727 ${reply_active}= Call Method ${USERS.users['${username}'].client} patch_bid ${tender} ${reply} 860 ${reply_active}= Call Method ${USERS.users['${username}'].client} patch_bid ${tender} ${reply}
728 Set To Dictionary ${USERS.users['${username}']} access_token=${reply['access']['token']} 861 Set To Dictionary ${USERS.users['${username}']} access_token=${reply['access']['token']}
729 Set To Dictionary ${USERS.users['${username}'].bidresponses['bid'].data} id=${reply['data']['id']} 862 Set To Dictionary ${USERS.users['${username}'].bidresponses['bid'].data} id=${reply['data']['id']}
730 Log ${reply_active} 863 Log ${reply_active}
  864 + Set To Dictionary ${USERS.users['${username}']} bid_id=${reply['data']['id']}
  865 + Log ${reply}
731 866
732 867
733 Змінити цінову пропозицію 868 Змінити цінову пропозицію
@@ -762,13 +897,13 @@ Library openprocurement_client_helper.py @@ -762,13 +897,13 @@ Library openprocurement_client_helper.py
762 897
763 898
764 Змінити документ в ставці 899 Змінити документ в ставці
765 - [Arguments] ${username} ${tender_uaid} ${path} ${doc_id} 900 + [Arguments] ${username} ${tender_uaid} ${path} ${doc_id} ${doc_type}=documents
766 ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['bid'].data.id} 901 ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['bid'].data.id}
767 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} 902 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
768 ${tender}= set_access_key ${tender} ${USERS.users['${username}']['access_token']} 903 ${tender}= set_access_key ${tender} ${USERS.users['${username}']['access_token']}
769 ${bid}= openprocurement_client.Отримати пропозицію ${username} ${tender_uaid} 904 ${bid}= openprocurement_client.Отримати пропозицію ${username} ${tender_uaid}
770 ${bid_doc}= get_document_by_id ${bid.data} ${doc_id} 905 ${bid_doc}= get_document_by_id ${bid.data} ${doc_id}
771 - ${response}= Call Method ${USERS.users['${username}'].client} update_bid_document ${path} ${tender} ${bid_id} ${bid_doc['id']} 906 + ${response}= Call Method ${USERS.users['${username}'].client} update_bid_document ${path} ${tender} ${bid_id} ${bid_doc['id']} ${doc_type}
772 ${uploaded_file} = Create Dictionary 907 ${uploaded_file} = Create Dictionary
773 ... filepath=${path} 908 ... filepath=${path}
774 ... upload_response=${response} 909 ... upload_response=${response}
@@ -789,8 +924,8 @@ Library openprocurement_client_helper.py @@ -789,8 +924,8 @@ Library openprocurement_client_helper.py
789 Отримати пропозицію 924 Отримати пропозицію
790 [Arguments] ${username} ${tender_uaid} 925 [Arguments] ${username} ${tender_uaid}
791 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} 926 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
792 - ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['bid'].data.id}  
793 - ${token}= Get Variable Value ${USERS.users['${username}']['access_token']} 927 + ${bid_id}= Get Variable Value ${USERS.users['${username}'].bid_id}
  928 + ${token}= Get Variable Value ${USERS.users['${username}'].access_token}
794 ${reply}= Call Method ${USERS.users['${username}'].client} get_bid ${tender} ${bid_id} ${token} 929 ${reply}= Call Method ${USERS.users['${username}'].client} get_bid ${tender} ${bid_id} ${token}
795 ${reply}= munch_dict arg=${reply} 930 ${reply}= munch_dict arg=${reply}
796 [return] ${reply} 931 [return] ${reply}
@@ -806,6 +941,59 @@ Library openprocurement_client_helper.py @@ -806,6 +941,59 @@ Library openprocurement_client_helper.py
806 # Qualification operations 941 # Qualification operations
807 ############################################################################## 942 ##############################################################################
808 943
  944 +
  945 +Отримати список документів по прекваліфікації
  946 + [Documentation]
  947 + ... [Arguments] Username, tender uaid, qualification id
  948 + ... [Description] Return all qualification documents by id
  949 + ... [Return] Reply from API
  950 + [Arguments] ${username} ${tender_uaid} ${qualification_id}
  951 + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
  952 + ${doc_list}= Call Method ${USERS.users['${username}'].client} get_qualification_documents ${tender} ${qualification_id}
  953 + Log ${doc_list}
  954 + [Return] ${doc_list}
  955 +
  956 +
  957 +Отримати список документів по кваліфікації
  958 + [Documentation]
  959 + ... [Arguments] Username, tender uaid, award id
  960 + ... [Description] Return all awards documents by id
  961 + ... [Return] Reply from API
  962 + [Arguments] ${username} ${tender_uaid} ${award_id}
  963 + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
  964 + ${doc_list}= Call Method ${USERS.users['${username}'].client} get_awards_documents ${tender} ${award_id}
  965 + Log ${doc_list}
  966 + [Return] ${doc_list}
  967 +
  968 +
  969 +Отримати останній документ прекваліфікації з типом registerExtract
  970 + [Documentation]
  971 + ... [Arguments] Username, tender uaid, qualification id
  972 + ... [Description] Check documentType in last pre-quailfication document
  973 + ... [Return] Last document from pre-quailfication
  974 + [Arguments] ${username} ${tender_uaid} ${qualification_id}
  975 + ${docs}= Run As ${username} Отримати список документів по прекваліфікації ${tender_uaid} ${qualification_id}
  976 + :FOR ${item} IN @{docs['data']}
  977 + \ ${status} ${_}= Run Keyword And Ignore Error Dictionary Should Contain Key ${item} documentType
  978 + \ Run Keyword If '${status}' == 'PASS' Exit For Loop
  979 + Log ${item}
  980 + [Return] ${item}
  981 +
  982 +
  983 +Отримати останній документ кваліфікації з типом registerExtract
  984 + [Documentation]
  985 + ... [Arguments] Username, tender uaid, award id
  986 + ... [Description] Check documentType in last award document
  987 + ... [Return] Last document for
  988 + [Arguments] ${username} ${tender_uaid} ${award_id}
  989 + ${docs}= Run As ${username} Отримати список документів по кваліфікації ${tender_uaid} ${award_id}
  990 + :FOR ${item} IN @{docs['data']}
  991 + \ ${status} ${_}= Run Keyword And Ignore Error Dictionary Should Contain Key ${item} documentType
  992 + \ Run Keyword If '${status}' == 'PASS' Exit For Loop
  993 + Log ${item}
  994 + [Return] ${item}
  995 +
  996 +
809 Завантажити документ рішення кваліфікаційної комісії 997 Завантажити документ рішення кваліфікаційної комісії
810 [Documentation] 998 [Documentation]
811 ... [Arguments] Username, tender uaid, qualification number and document to upload 999 ... [Arguments] Username, tender uaid, qualification number and document to upload
@@ -956,19 +1144,6 @@ Library openprocurement_client_helper.py @@ -956,19 +1144,6 @@ Library openprocurement_client_helper.py
956 ${filename}= download_file_from_url ${document.url} ${OUTPUT_DIR}${/}${document.title} 1144 ${filename}= download_file_from_url ${document.url} ${OUTPUT_DIR}${/}${document.title}
957 [return] ${filename} 1145 [return] ${filename}
958 1146
959 -  
960 -Підтвердити підписання контракту  
961 - [Documentation]  
962 - ... [Arguments] Username, tender uaid, contract number  
963 - ... Find tender using uaid, get contract test_confirmation data and call patch_contract  
964 - ... [Return] Nothing  
965 - [Arguments] ${username} ${tender_uaid} ${contract_num}  
966 - ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}  
967 - ${data}= test_confirm_data ${tender['data']['contracts'][${contract_num}]['id']}  
968 - Log ${data}  
969 - ${reply}= Call Method ${USERS.users['${username}'].client} patch_contract ${tender} ${data}  
970 - Log ${reply}  
971 -  
972 ############################################################################## 1147 ##############################################################################
973 # OpenUA procedure 1148 # OpenUA procedure
974 ############################################################################## 1149 ##############################################################################
@@ -1069,3 +1244,217 @@ Library openprocurement_client_helper.py @@ -1069,3 +1244,217 @@ Library openprocurement_client_helper.py
1069 set_to_object ${tender} data.status active.tendering 1244 set_to_object ${tender} data.status active.tendering
1070 ${reply}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} 1245 ${reply}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender}
1071 Log ${reply} 1246 Log ${reply}
  1247 +
  1248 +##############################################################################
  1249 +# CONTRACT SIGNING
  1250 +##############################################################################
  1251 +
  1252 +Редагувати угоду
  1253 + [Arguments] ${username} ${tender_uaid} ${contract_index} ${fieldname} ${fieldvalue}
  1254 + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
  1255 + ${contract}= Create Dictionary data=${tender.data.contracts[${contract_index}]}
  1256 + Set_to_object ${contract.data} ${fieldname} ${fieldvalue}
  1257 + ${reply}= Call Method ${USERS.users['${username}'].client} patch_contract ${tender} ${contract}
  1258 + Log ${reply}
  1259 +
  1260 +
  1261 +Встановити дату підписання угоди
  1262 + [Arguments] ${username} ${tender_uaid} ${contract_index} ${fieldvalue}
  1263 + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
  1264 + ${contract}= Create Dictionary data=${tender.data.contracts[${contract_index}]}
  1265 + Set To Dictionary ${contract.data} dateSigned=${fieldvalue}
  1266 + ${reply}= Call Method ${USERS.users['${username}'].client} patch_contract ${tender} ${contract}
  1267 + Log ${reply}
  1268 +
  1269 +
  1270 +Вказати період дії угоди
  1271 + [Arguments] ${username} ${tender_uaid} ${contract_index} ${startDate} ${endDate}
  1272 + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
  1273 + ${period}= Create Dictionary startDate=${startDate}
  1274 + Set to Dictionary ${period} endDate=${endDate}
  1275 + ${contract}= Create Dictionary data=${tender.data.contracts[${contract_index}]}
  1276 + Set To Dictionary ${contract.data} period=${period}
  1277 + Log ${contract}
  1278 + ${reply}= Call Method ${USERS.users['${username}'].client} patch_contract ${tender} ${contract}
  1279 + Log ${reply}
  1280 +
  1281 +
  1282 +Завантажити документ в угоду
  1283 + [Arguments] ${username} ${path} ${tender_uaid} ${contract_index} ${doc_type}=documents
  1284 + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
  1285 + ${contract_id}= Get Variable Value ${tender.data.contracts[${contract_index}].id}
  1286 + ${tender}= set_access_key ${tender} ${USERS.users['${username}']['access_token']}
  1287 + ${response}= Call Method ${USERS.users['${username}'].client} upload_contract_document ${path} ${tender} ${contract_id} ${doc_type}
  1288 + ${uploaded_file} = Create Dictionary
  1289 + ... filepath=${path}
  1290 + ... upload_response=${response}
  1291 + Log object data ${uploaded_file}
  1292 +
  1293 +
  1294 +Підтвердити підписання контракту
  1295 + [Documentation]
  1296 + ... [Arguments] Username, tender uaid, contract number
  1297 + ... Find tender using uaid, get contract test_confirmation data and call patch_contract
  1298 + ... [Return] Nothing
  1299 + [Arguments] ${username} ${tender_uaid} ${contract_num}
  1300 + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
  1301 + ${data}= test_confirm_data ${tender['data']['contracts'][${contract_num}]['id']}
  1302 + Log ${data}
  1303 + ${reply}= Call Method ${USERS.users['${username}'].client} patch_contract ${tender} ${data}
  1304 + Log ${reply}
  1305 + [Return] ${reply}
  1306 +
  1307 +##############################################################################
  1308 +# CONTRACT MANAGEMENT
  1309 +##############################################################################
  1310 +
  1311 +Отримати internal id по UAid для договору
  1312 + [Arguments] ${username} ${contract_uaid}
  1313 + Log ${contract_uaid}
  1314 + Log ${USERS.users['${username}'].contracts_id_map}
  1315 + ${status}= Run Keyword And Return Status Dictionary Should Contain Key ${USERS.users['${username}'].contracts_id_map} ${contract_uaid}
  1316 + Run Keyword and Return If ${status} Get From Dictionary ${USERS.users['${username}'].contracts_id_map} ${contract_uaid}
  1317 + Call Method ${USERS.users['${username}'].contracting_client} get_contracts
  1318 + ${contract_id}= Wait Until Keyword Succeeds 15x 10 sec get_contract_id_by_uaid ${contract_uaid} ${USERS.users['${username}'].contracting_client}
  1319 + Set To Dictionary ${USERS.users['${username}'].contracts_id_map} ${contract_uaid} ${contract_id}
  1320 + [Return] ${contract_id}
  1321 +
  1322 +
  1323 +Оновити сторінку з договором
  1324 + [Arguments] ${username} ${contract_uaid}
  1325 + openprocurement_client.Пошук договору по ідентифікатору ${username} ${contract_uaid}
  1326 +
  1327 +
  1328 +Пошук договору по ідентифікатору
  1329 + [Arguments] ${username} ${contract_uaid}
  1330 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1331 + ${contract}= Call Method ${USERS.users['${username}'].contracting_client} get_contract ${internalid}
  1332 + ${contract}= munch_dict arg=${contract}
  1333 + Set To Dictionary ${USERS.users['${username}']} contract_data=${contract}
  1334 + Log ${contract}
  1335 + [return] ${contract}
  1336 +
  1337 +
  1338 +Отримати доступ до договору
  1339 + [Arguments] ${username} ${contract_uaid}
  1340 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1341 + ${contract}= Call Method ${USERS.users['${username}'].contracting_client} retrieve_contract_credentials ${internalid} ${USERS.users['${username}'].access_token}
  1342 + ${contract}= munch_dict arg=${contract}
  1343 + Set To Dictionary ${USERS.users['${username}']} contract_data=${contract}
  1344 + Set To Dictionary ${USERS.users['${username}']} contract_access_token=${contract.access.token}
  1345 + Log ${contract}
  1346 + [return] ${contract}
  1347 +
  1348 +
  1349 +Внести зміну в договір
  1350 + [Arguments] ${username} ${contract_uaid} ${change_data}
  1351 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1352 + ${reply}= Call Method ${USERS.users['${username}'].contracting_client} create_change ${internalid} ${USERS.users['${username}'].contract_access_token} ${change_data}
  1353 + # we need this to have change id in `Додати документацію до зміни в договорі` and `Застосувати зміну` keywords
  1354 + ${empty_list}= Create List
  1355 + ${changes}= Get variable value ${USERS.users['${username}'].changes} ${empty_list}
  1356 + Append to list ${changes} ${reply}
  1357 + Set to dictionary ${USERS.users['${username}']} changes=${changes}
  1358 + Log ${change_data}
  1359 + Log ${reply}
  1360 +
  1361 +
  1362 +Додати документацію до зміни в договорі
  1363 + [Arguments] ${username} ${contract_uaid} ${document}
  1364 + ${contract}= openprocurement_client.Пошук договору по ідентифікатору ${username} ${contract_uaid}
  1365 + ${contract}= set_access_key ${contract} ${USERS.users['${username}'].contract_access_token}
  1366 + ${reply_doc_create}= Call Method ${USERS.users['${username}'].contracting_client} upload_document ${document} ${contract}
  1367 + ${change_document}= test_change_document_data ${reply_doc_create} ${USERS.users['${username}'].changes[0].data.id}
  1368 + ${reply_doc_patch}= Call Method ${USERS.users['${username}'].contracting_client} patch_document ${contract} ${change_document}
  1369 + Log ${reply_doc_create}
  1370 + Log ${reply_doc_patch}
  1371 +
  1372 +
  1373 +Редагувати поле договору
  1374 + [Arguments] ${username} ${contract_uaid} ${fieldname} ${fieldvalue}
  1375 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1376 + ${contract}= openprocurement_client.Пошук договору по ідентифікатору ${username} ${contract_uaid}
  1377 + Set_To_Object ${contract.data} ${fieldname} ${fieldvalue}
  1378 + Log ${contract}
  1379 + ${contract}= Call Method ${USERS.users['${username}'].contracting_client} patch_contract ${internalid} ${USERS.users['${username}'].contract_access_token} ${contract}
  1380 + Log ${contract}
  1381 +
  1382 +
  1383 +Редагувати зміну
  1384 + [Arguments] ${username} ${contract_uaid} ${fieldname} ${fieldvalue}
  1385 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1386 + ${data}= Create Dictionary ${fieldname}=${fieldvalue}
  1387 + ${data}= Create Dictionary data=${data}
  1388 + ${changes}= Get variable value ${USERS.users['${username}'].changes}
  1389 + ${change}= munchify ${changes[-1]}
  1390 + Log ${change}
  1391 + ${reply}= Call Method ${USERS.users['${username}'].contracting_client} patch_change ${internalid} ${USERS.users['${username}'].changes[-1].data.id} ${USERS.users['${username}'].contract_access_token} ${data}
  1392 + Log ${data}
  1393 + Log ${reply}
  1394 +
  1395 +
  1396 +Застосувати зміну
  1397 + [Arguments] ${username} ${contract_uaid} ${dateSigned}
  1398 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1399 + ${data}= Create Dictionary status=active dateSigned=${dateSigned}
  1400 + ${data}= Create Dictionary data=${data}
  1401 + ${changes}= Get variable value ${USERS.users['${username}'].changes}
  1402 + ${change}= munchify ${changes[-1]}
  1403 + Log ${change}
  1404 + ${reply}= Call Method ${USERS.users['${username}'].contracting_client} patch_change ${internalid} ${USERS.users['${username}'].changes[-1].data.id} ${USERS.users['${username}'].contract_access_token} ${data}
  1405 + Log ${data}
  1406 + Log ${reply}
  1407 +
  1408 +
  1409 +Завантажити документацію до договору
  1410 + [Arguments] ${username} ${contract_uaid} ${document}
  1411 + ${contract}= openprocurement_client.Пошук договору по ідентифікатору ${username} ${contract_uaid}
  1412 + ${contract}= set_access_key ${contract} ${USERS.users['${username}'].contract_access_token}
  1413 + ${reply}= Call Method ${USERS.users['${username}'].contracting_client} upload_document ${document} ${contract}
  1414 + Log ${reply}
  1415 +
  1416 +
  1417 +Внести зміни в договір
  1418 + [Arguments] ${username} ${contract_uaid} ${data}
  1419 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1420 + ${reply}= Call Method ${USERS.users['${username}'].contracting_client} patch_contract ${internalid} ${USERS.users['${username}'].contract_access_token} ${data}
  1421 + Log ${reply}
  1422 +
  1423 +
  1424 +Завершити договір
  1425 + [Arguments] ${username} ${contract_uaid}
  1426 + ${internalid}= openprocurement_client.Отримати internal id по UAid для договору ${username} ${contract_uaid}
  1427 + ${data}= Create Dictionary status=terminated
  1428 + ${data}= Create Dictionary data=${data}
  1429 + ${reply}= Call Method ${USERS.users['${username}'].contracting_client} patch_contract ${internalid} ${USERS.users['${username}'].contract_access_token} ${data}
  1430 +
  1431 +
  1432 +Отримати інформацію із договору
  1433 + [Arguments] ${username} ${contract_uaid} ${field_name}
  1434 + openprocurement_client.Пошук договору по ідентифікатору
  1435 + ... ${username}
  1436 + ... ${contract_uaid}
  1437 +
  1438 + ${status} ${field_value}= Run keyword and ignore error
  1439 + ... Get from object
  1440 + ... ${USERS.users['${username}'].contract_data.data}
  1441 + ... ${field_name}
  1442 + Run Keyword if '${status}' == 'PASS' Return from keyword ${field_value}
  1443 +
  1444 + Fail Field not found: ${field_name}
  1445 +
  1446 +
  1447 +Отримати інформацію із документа до договору
  1448 + [Arguments] ${username} ${contract_uaid} ${doc_id} ${field_name}
  1449 + ${tender}= openprocurement_client.Пошук договору по ідентифікатору ${username} ${contract_uaid}
  1450 + ${document}= get_document_by_id ${tender.data} ${doc_id}
  1451 + Log ${document}
  1452 + [Return] ${document['${field_name}']}
  1453 +
  1454 +
  1455 +Отримати документ до договору
  1456 + [Arguments] ${username} ${contract_uaid} ${doc_id}
  1457 + ${tender}= openprocurement_client.Пошук договору по ідентифікатору ${username} ${contract_uaid}
  1458 + ${document}= get_document_by_id ${tender.data} ${doc_id}
  1459 + ${filename}= download_file_from_url ${document.url} ${OUTPUT_DIR}${/}${document.title}
  1460 + [return] ${filename}
1 -from openprocurement_client.client import Client  
2 -from openprocurement_client.utils import get_tender_id_by_uaid 1 +from openprocurement_client.client import Client, EDRClient
  2 +from openprocurement_client.document_service_client \
  3 + import DocumentServiceClient
  4 +from openprocurement_client.plan import PlansClient
  5 +from openprocurement_client.contract import ContractingClient
3 from openprocurement_client.exceptions import IdNotFound 6 from openprocurement_client.exceptions import IdNotFound
4 -from restkit.errors import RequestFailed, BadStatusLine 7 +from restkit.errors import RequestFailed, BadStatusLine, ResourceError
5 from retrying import retry 8 from retrying import retry
  9 +from time import sleep
6 import os 10 import os
7 import urllib 11 import urllib
8 12
9 -  
10 def retry_if_request_failed(exception): 13 def retry_if_request_failed(exception):
11 if isinstance(exception, RequestFailed): 14 if isinstance(exception, RequestFailed):
12 status_code = getattr(exception, 'status_int', None) 15 status_code = getattr(exception, 'status_int', None)
@@ -19,13 +22,54 @@ def retry_if_request_failed(exception): @@ -19,13 +22,54 @@ def retry_if_request_failed(exception):
19 22
20 23
21 class StableClient(Client): 24 class StableClient(Client):
22 - @retry(stop_max_attempt_number=100, wait_random_min=500, wait_random_max=4000, retry_on_exception=retry_if_request_failed) 25 + @retry(stop_max_attempt_number=100, wait_random_min=500,
  26 + wait_random_max=4000, retry_on_exception=retry_if_request_failed)
23 def request(self, *args, **kwargs): 27 def request(self, *args, **kwargs):
24 return super(StableClient, self).request(*args, **kwargs) 28 return super(StableClient, self).request(*args, **kwargs)
25 29
26 30
27 -def prepare_api_wrapper(key, resource, host_url, api_version):  
28 - return StableClient(key, resource, host_url, api_version) 31 +class StableDsClient(DocumentServiceClient):
  32 + @retry(stop_max_attempt_number=100, wait_random_min=500,
  33 + wait_random_max=4000, retry_on_exception=retry_if_request_failed)
  34 + def request(self, *args, **kwargs):
  35 + return super(StableDsClient, self).request(*args, **kwargs)
  36 +
  37 +
  38 +def prepare_api_wrapper(key, resource, host_url, api_version, ds_client=None):
  39 + return StableClient(key, resource, host_url, api_version,
  40 + ds_client=ds_client)
  41 +
  42 +
  43 +def prepare_ds_api_wrapper(ds_host_url, auth_ds):
  44 + return StableDsClient(ds_host_url, auth_ds)
  45 +
  46 +
  47 +class ContractingStableClient(ContractingClient):
  48 + @retry(stop_max_attempt_number=100, wait_random_min=500, wait_random_max=4000, retry_on_exception=retry_if_request_failed)
  49 + def request(self, *args, **kwargs):
  50 + return super(ContractingStableClient, self).request(*args, **kwargs)
  51 +
  52 +
  53 +def prepare_contract_api_wrapper(key, host_url, api_version, ds_client=None):
  54 + return ContractingStableClient(key, host_url, api_version, ds_client=ds_client)
  55 +
  56 +
  57 +class StableEDRClient(EDRClient):
  58 + @retry(stop_max_attempt_number=100, wait_random_min=500,
  59 + wait_random_max=4000, retry_on_exception=retry_if_request_failed)
  60 + def request(self, *args, **kwargs):
  61 + try:
  62 + res = super(StableEDRClient, self).request(*args, **kwargs)
  63 + except ResourceError as re:
  64 + if re.status_int == 429:
  65 + sleep(int(re.response.headers.get('Retry-After', '30')))
  66 + raise re
  67 + else:
  68 + return res
  69 +
  70 +
  71 +def prepare_edr_wrapper(host_url, api_version, username, password):
  72 + return StableEDRClient(host_url, api_version, username, password)
29 73
30 74
31 def get_complaint_internal_id(tender, complaintID): 75 def get_complaint_internal_id(tender, complaintID):
@@ -53,6 +97,10 @@ def get_document_by_id(data, doc_id): @@ -53,6 +97,10 @@ def get_document_by_id(data, doc_id):
53 for document in complaint.get('documents', []): 97 for document in complaint.get('documents', []):
54 if doc_id in document.get('title', ''): 98 if doc_id in document.get('title', ''):
55 return document 99 return document
  100 + for contract in data.get('contracts', []):
  101 + for document in contract.get('documents', []):
  102 + if doc_id in document.get('title', ''):
  103 + return document
56 for award in data.get('awards', []): 104 for award in data.get('awards', []):
57 for document in award.get('documents', []): 105 for document in award.get('documents', []):
58 if doc_id in document.get('title', ''): 106 if doc_id in document.get('title', ''):
@@ -77,3 +125,13 @@ def download_file_from_url(url, path_to_save_file): @@ -77,3 +125,13 @@ def download_file_from_url(url, path_to_save_file):
77 f.write(urllib.urlopen(url).read()) 125 f.write(urllib.urlopen(url).read())
78 f.close() 126 f.close()
79 return os.path.basename(f.name) 127 return os.path.basename(f.name)
  128 +
  129 +
  130 +class StableClient_plan(PlansClient):
  131 + @retry(stop_max_attempt_number=100, wait_random_min=500, wait_random_max=4000, retry_on_exception=retry_if_request_failed)
  132 + def request(self, *args, **kwargs):
  133 + return super(StableClient_plan, self).request(*args, **kwargs)
  134 +
  135 +
  136 +def prepare_plan_api_wrapper(key, host_url, api_version):
  137 + return StableClient_plan(key, host_url, api_version)
1 *** Settings *** 1 *** Settings ***
2 -Resource keywords.robot  
3 -Resource resource.robot 2 +Resource base_keywords.robot
4 Suite Setup Test Suite Setup 3 Suite Setup Test Suite Setup
5 Suite Teardown Test Suite Teardown 4 Suite Teardown Test Suite Teardown
6 5
7 *** Variables *** 6 *** Variables ***
8 -@{USED_ROLES} tender_owner viewer 7 +@{USED_ROLES} tender_owner viewer
9 8
10 9
11 *** Test Cases *** 10 *** Test Cases ***
12 -Можливість знайти закупівлю по ідентифікатору  
13 - [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору  
14 - ... viewer  
15 - ... ${USERS.users['${viewer}'].broker}  
16 - ... tender_cancelation lot_cancelation delete_lot  
17 - Завантажити дані про тендер  
18 - Run As ${viewer} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} 11 +Можливість оголосити тендер
  12 + [Tags] ${USERS.users['${tender_owner}'].broker}: Оголошення тендера
  13 + ... tender_owner
  14 + ... ${USERS.users['${tender_owner}'].broker}
  15 + ... create_tender
  16 + [Teardown] Оновити LAST_MODIFICATION_DATE
  17 + Можливість оголосити тендер
  18 +
  19 +
  20 +Можливість знайти тендер по ідентифікатору
  21 + [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера
  22 + ... viewer tender_owner
  23 + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker}
  24 + ... find_tender
  25 + [Teardown] Оновити LAST_MODIFICATION_DATE
  26 + :FOR ${username} IN ${tender_owner} ${viewer}
  27 + \ Можливість знайти тендер по ідентифікатору для користувача ${username}
19 28
20 ############################################################################################## 29 ##############################################################################################
21 -# TENDER CANCELLATION 30 +# LOT CANCELLATION
22 ############################################################################################## 31 ##############################################################################################
23 32
24 -Можливість скасувати тендер  
25 - [Tags] ${USERS.users['${tender_owner}'].broker}: Скасування тендера 33 +Можливість скасувати лот
  34 + [Tags] ${USERS.users['${tender_owner}'].broker}: Скасування лота
26 ... tender_owner 35 ... tender_owner
27 ... ${USERS.users['${tender_owner}'].broker} 36 ... ${USERS.users['${tender_owner}'].broker}
28 - ... tender_cancelation 37 + ... lot_cancellation
29 [Teardown] Оновити LAST_MODIFICATION_DATE 38 [Teardown] Оновити LAST_MODIFICATION_DATE
30 - Можливість скасувати тендер 39 + Можливість скасувати 0 лот
31 40
32 41
33 -Відображення активного статусу скасування тендера  
34 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування тендера 42 +Відображення активного статусу скасування лота
  43 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування лота
35 ... viewer 44 ... viewer
36 ... ${USERS.users['${viewer}'].broker} 45 ... ${USERS.users['${viewer}'].broker}
37 - ... tender_cancelation 46 + ... lot_cancellation
38 [Setup] Дочекатись синхронізації з майданчиком ${viewer} 47 [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  48 + ${cancellation_index}= Отримати останній індекс cancellations ${viewer}
39 Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']} 49 Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']}
40 ... active 50 ... active
41 - ... cancellations[0].status 51 + ... cancellations[${cancellation_index}].status
42 52
43 53
44 -Відображення причини скасування тендера  
45 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування тендера 54 +Відображення причини скасування лота
  55 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування лота
46 ... viewer 56 ... viewer
47 ... ${USERS.users['${viewer}'].broker} 57 ... ${USERS.users['${viewer}'].broker}
48 - ... tender_cancelation 58 + ... lot_cancellation
  59 + ${cancellation_index}= Отримати останній індекс cancellations ${viewer}
49 Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']} 60 Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']}
50 - ... ${USERS.users['${tender_owner}']['tender_cancellation_data']['cancellation_reason']}  
51 - ... cancellations[0].reason 61 + ... ${USERS.users['${tender_owner}']['lot_cancellation_data']['cancellation_reason']}
  62 + ... cancellations[${cancellation_index}].reason
52 63
53 64
54 -Відображення опису документа до скасування тендера  
55 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування тендера 65 +Відображення опису документа до скасування лота
  66 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування лота
56 ... viewer 67 ... viewer
57 ... ${USERS.users['${viewer}'].broker} 68 ... ${USERS.users['${viewer}'].broker}
58 - ... tender_cancelation  
59 - Звірити відображення поля description документа ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['tender_cancellation_data']['cancellation_id']} із ${USERS.users['${tender_owner}']['tender_cancellation_data']['description']} для користувача ${viewer} 69 + ... lot_cancellation
  70 + Звірити відображення поля description документа ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['lot_cancellation_data']['cancellation_id']} із ${USERS.users['${tender_owner}']['lot_cancellation_data']['description']} для користувача ${viewer}
60 71
61 72
62 -Відображення заголовку документа до скасування тендера  
63 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування тендера 73 +Відображення заголовку документа до скасування лота
  74 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування лота
64 ... viewer 75 ... viewer
65 ... ${USERS.users['${viewer}'].broker} 76 ... ${USERS.users['${viewer}'].broker}
66 - ... tender_cancelation  
67 - Звірити відображення поля title документа ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['tender_cancellation_data']['cancellation_id']} із ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_name']} для користувача ${viewer} 77 + ... lot_cancellation
  78 + Звірити відображення поля title документа ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['lot_cancellation_data']['cancellation_id']} із ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_name']} для користувача ${viewer}
68 79
69 80
70 -Відображення вмісту документа до скасування тендера  
71 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування тендера 81 +Відображення вмісту документа до скасування лота
  82 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування лота
72 ... viewer 83 ... viewer
73 ... ${USERS.users['${viewer}'].broker} 84 ... ${USERS.users['${viewer}'].broker}
74 - ... tender_cancelation  
75 - Звірити відображення вмісту документа ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['tender_cancellation_data']['cancellation_id']} з ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_content']} для користувача ${viewer} 85 + ... lot_cancellation
  86 + Звірити відображення вмісту документа ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['lot_cancellation_data']['cancellation_id']} з ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_content']} для користувача ${viewer}
76 87
77 ############################################################################################## 88 ##############################################################################################
78 -# LOT CANCELLATION 89 +# TENDER CANCELLATION
79 ############################################################################################## 90 ##############################################################################################
80 91
81 -Можливість скасувати лот  
82 - [Tags] ${USERS.users['${tender_owner}'].broker}: Скасування лота 92 +Можливість скасувати тендер
  93 + [Tags] ${USERS.users['${tender_owner}'].broker}: Скасування тендера
83 ... tender_owner 94 ... tender_owner
84 ... ${USERS.users['${tender_owner}'].broker} 95 ... ${USERS.users['${tender_owner}'].broker}
85 - ... lot_cancelation 96 + ... tender_cancellation
86 [Teardown] Оновити LAST_MODIFICATION_DATE 97 [Teardown] Оновити LAST_MODIFICATION_DATE
87 - Можливість скасувати лот 98 + Можливість скасувати тендер
88 99
89 100
90 -Відображення активного статусу скасування лота  
91 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування лота 101 +Відображення активного статусу скасування тендера
  102 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування тендера
92 ... viewer 103 ... viewer
93 ... ${USERS.users['${viewer}'].broker} 104 ... ${USERS.users['${viewer}'].broker}
94 - ... lot_cancelation 105 + ... tender_cancellation
95 [Setup] Дочекатись синхронізації з майданчиком ${viewer} 106 [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  107 + ${cancellation_index}= Отримати останній індекс cancellations ${viewer}
96 Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']} 108 Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']}
97 ... active 109 ... active
98 - ... cancellations[0].status 110 + ... cancellations[${cancellation_index}].status
99 111
100 112
101 -Відображення причини скасування лота  
102 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування лота 113 +Відображення причини скасування тендера
  114 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування тендера
103 ... viewer 115 ... viewer
104 ... ${USERS.users['${viewer}'].broker} 116 ... ${USERS.users['${viewer}'].broker}
105 - ... lot_cancelation 117 + ... tender_cancellation
  118 + ${cancellation_index}= Отримати останній індекс cancellations ${viewer}
106 Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']} 119 Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']}
107 - ... ${USERS.users['${tender_owner}']['lot_cancellation_data']['cancellation_reason']}  
108 - ... cancellations[0].reason 120 + ... ${USERS.users['${tender_owner}']['tender_cancellation_data']['cancellation_reason']}
  121 + ... cancellations[${cancellation_index}].reason
109 122
110 123
111 -Відображення опису документа до скасування лота  
112 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування лота 124 +Відображення опису документа до скасування тендера
  125 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування тендера
113 ... viewer 126 ... viewer
114 ... ${USERS.users['${viewer}'].broker} 127 ... ${USERS.users['${viewer}'].broker}
115 - ... lot_cancelation  
116 - Звірити відображення поля description документа ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['lot_cancellation_data']['cancellation_id']} із ${USERS.users['${tender_owner}']['lot_cancellation_data']['description']} для користувача ${viewer} 128 + ... tender_cancellation
  129 + Звірити відображення поля description документа ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['tender_cancellation_data']['cancellation_id']} із ${USERS.users['${tender_owner}']['tender_cancellation_data']['description']} для користувача ${viewer}
117 130
118 131
119 -Відображення заголовку документа до скасування лота  
120 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування лота 132 +Відображення заголовку документа до скасування тендера
  133 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування тендера
121 ... viewer 134 ... viewer
122 ... ${USERS.users['${viewer}'].broker} 135 ... ${USERS.users['${viewer}'].broker}
123 - ... lot_cancelation  
124 - Звірити відображення поля title документа ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['lot_cancellation_data']['cancellation_id']} із ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_name']} для користувача ${viewer} 136 + ... tender_cancellation
  137 + Звірити відображення поля title документа ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['tender_cancellation_data']['cancellation_id']} із ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_name']} для користувача ${viewer}
125 138
126 139
127 -Відображення вмісту документа до скасування лота  
128 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування лота 140 +Відображення вмісту документа до скасування тендера
  141 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення скасування тендера
129 ... viewer 142 ... viewer
130 ... ${USERS.users['${viewer}'].broker} 143 ... ${USERS.users['${viewer}'].broker}
131 - ... lot_cancelation  
132 - Звірити відображення вмісту документа ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['lot_cancellation_data']['cancellation_id']} з ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_content']} для користувача ${viewer} 144 + ... tender_cancellation
  145 + Звірити відображення вмісту документа ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['tender_cancellation_data']['cancellation_id']} з ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_content']} для користувача ${viewer}
133 146
134 ############################################################################################## 147 ##############################################################################################
135 # DELETING LOT 148 # DELETING LOT
@@ -141,7 +154,7 @@ Suite Teardown Test Suite Teardown @@ -141,7 +154,7 @@ Suite Teardown Test Suite Teardown
141 ... ${USERS.users['${tender_owner}'].broker} 154 ... ${USERS.users['${tender_owner}'].broker}
142 ... delete_lot 155 ... delete_lot
143 [Teardown] Оновити LAST_MODIFICATION_DATE 156 [Teardown] Оновити LAST_MODIFICATION_DATE
144 - Require Failure ${tender_owner} Видалити лот ${TENDER['TENDER_UAID']} ${TENDER['LOT_ID']} 157 + Run Keyword And Expect Error * Можливість видалення 1 лоту
145 158
146 159
147 *** Keywords *** 160 *** Keywords ***
@@ -156,12 +169,13 @@ Suite Teardown Test Suite Teardown @@ -156,12 +169,13 @@ Suite Teardown Test Suite Teardown
156 Set To Dictionary ${USERS.users['${tender_owner}']} tender_cancellation_data=${cancellation_data} 169 Set To Dictionary ${USERS.users['${tender_owner}']} tender_cancellation_data=${cancellation_data}
157 170
158 171
159 -Можливість скасувати лот 172 +Можливість скасувати ${index} лот
160 ${cancellation_data}= Підготувати дані про скасування 173 ${cancellation_data}= Підготувати дані про скасування
  174 + ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data.lots[${index}]}
161 Run As ${tender_owner} 175 Run As ${tender_owner}
162 ... Скасувати лот 176 ... Скасувати лот
163 ... ${TENDER['TENDER_UAID']} 177 ... ${TENDER['TENDER_UAID']}
164 - ... ${TENDER['LOT_ID']} 178 + ... ${lot_id}
165 ... ${cancellation_data['cancellation_reason']} 179 ... ${cancellation_data['cancellation_reason']}
166 ... ${cancellation_data['document']['doc_path']} 180 ... ${cancellation_data['document']['doc_path']}
167 ... ${cancellation_data['description']} 181 ... ${cancellation_data['description']}
  1 +*** Settings ***
  2 +Resource base_keywords.robot
  3 +Suite Setup Test Suite Setup
  4 +Suite Teardown Test Suite Teardown
  5 +
  6 +*** Variables ***
  7 +@{used_roles} tender_owner viewer
  8 +
  9 +
  10 +*** Test Cases ***
  11 +Можливість знайти закупівлю по ідентифікатору
  12 + [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера
  13 + ... ${USERS.users['${tender_owner}'].broker}: Пошук тендера
  14 + ... viewer tender_owner
  15 + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker}
  16 + ... find_tender
  17 + Завантажити дані про тендер
  18 + :FOR ${username} in @{used_roles}
  19 + \ Run As ${${username}} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']}
  20 + ${CONTRACT_UAID}= Get variable value ${USERS.users['${tender_owner}'].tender_data.data.contracts[1].contractID}
  21 + Set Suite Variable ${CONTRACT_UAID}
  22 +
  23 +
  24 +Можливість знайти договір по ідентифікатору
  25 + [Tags] ${USERS.users['${viewer}'].broker}: Пошук договору
  26 + ... ${USERS.users['${tender_owner}'].broker}: Пошук договору
  27 + ... viewer tender_owner
  28 + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker}
  29 + ... find_contract
  30 + :FOR ${username} IN @{used_roles}
  31 + \ Run As ${${username}} Пошук договору по ідентифікатору ${CONTRACT_UAID}
  32 +
  33 +
  34 +Можливість отримати доступ до договору
  35 + [Tags] ${USERS.users['${tender_owner}'].broker}: Отримання прав доступу до договору
  36 + ... tender_owner
  37 + ... ${USERS.users['${tender_owner}'].broker}
  38 + ... access_contract
  39 + Run As ${tender_owner} Отримати доступ до договору ${CONTRACT_UAID}
  40 +
  41 +
  42 +Можливість внести зміну до умов договору
  43 + [Tags] ${USERS.users['${tender_owner}'].broker}: Внесення зміни
  44 + ... tender_owner
  45 + ... ${USERS.users['${tender_owner}'].broker}
  46 + ... submit_change
  47 + [Teardown] Оновити LAST_MODIFICATION_DATE
  48 + ${change_data}= Підготувати дані про зміну до договору ${tender_owner}
  49 + Run As ${tender_owner} Внести зміну в договір ${CONTRACT_UAID} ${change_data}
  50 +
  51 +
  52 +Відображення опису причини зміни договору
  53 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни договору
  54 + ... tender_owner
  55 + ... ${USERS.users['${viewer}'].broker}
  56 + ... view_change
  57 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  58 + Звірити відображення поля rationale зміни до договору для користувача ${viewer}
  59 +
  60 +
  61 +Відображення причин зміни договору
  62 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни договору
  63 + ... tender_owner
  64 + ... ${USERS.users['${viewer}'].broker}
  65 + ... view_change
  66 + Звірити відображення причин зміни договору
  67 +
  68 +
  69 +Відображення опису причини зміни договору англійською мовою
  70 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни договору
  71 + ... tender_owner
  72 + ... ${USERS.users['${viewer}'].broker}
  73 + ... view_change
  74 + Звірити відображення поля rationale_en зміни до договору для користувача ${viewer}
  75 +
  76 +
  77 +Відображення опису причини зміни договору російською мовою
  78 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни договору
  79 + ... tender_owner
  80 + ... ${USERS.users['${viewer}'].broker}
  81 + ... view_change
  82 + Звірити відображення поля rationale_ru зміни до договору для користувача ${viewer}
  83 +
  84 +
  85 +Відображення непідтвердженого статусу зміни договору
  86 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни договору
  87 + ... tender_owner
  88 + ... ${USERS.users['${viewer}'].broker}
  89 + ... view_change
  90 + Звірити поле зміни до договору із значенням
  91 + ... ${viewer}
  92 + ... ${CONTRACT_UAID}
  93 + ... pending
  94 + ... status
  95 +
  96 +
  97 +Можливість додати документацію до зміни договору
  98 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  99 + ... tender_owner
  100 + ... ${USERS.users['${tender_owner}'].broker}
  101 + ... upload_change_document
  102 + [Teardown] Оновити LAST_MODIFICATION_DATE
  103 + Додати документацію до зміни договору
  104 +
  105 +
  106 +Відображення заголовку документації до зміни договору
  107 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  108 + ... viewer
  109 + ... ${USERS.users['${viewer}'].broker}
  110 + ... upload_change_document
  111 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  112 + Звірити відображення поля title документа ${USERS.users['${tender_owner}']['change_doc']['id']} до договору з ${USERS.users['${tender_owner}']['change_doc']['name']} для користувача ${viewer}
  113 +
  114 +
  115 +Відображення належності документа до зміни договору
  116 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  117 + ... viewer
  118 + ... ${USERS.users['${viewer}'].broker}
  119 + ... view_change_documentOf
  120 + Звірити відображення поля documentOf документа ${USERS.users['${tender_owner}']['change_doc']['id']} до договору з change для користувача ${viewer}
  121 +
  122 +
  123 +Відображення вмісту документації до зміни договору
  124 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  125 + ... viewer
  126 + ... ${USERS.users['${viewer}'].broker}
  127 + ... upload_change_document
  128 + Звірити відображення вмісту документа ${USERS.users['${tender_owner}']['change_doc']['id']} до договору з ${USERS.users['${tender_owner}']['change_doc']['content']} для користувача ${viewer}
  129 +
  130 +
  131 +Можливість редагувати опис договору
  132 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  133 + ... tender_owner
  134 + ... ${USERS.users['${tender_owner}'].broker}
  135 + ... modify_contract
  136 + [Teardown] Оновити LAST_MODIFICATION_DATE
  137 + ${description}= create_fake_sentence
  138 + Set to dictionary ${USERS.users['${tender_owner}']} new_description=${description}
  139 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} description ${description}
  140 +
  141 +
  142 +Можливість редагувати опис причини зміни договору
  143 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування зміни
  144 + ... tender_owner
  145 + ... ${USERS.users['${tender_owner}'].broker}
  146 + ... modify_change
  147 + [Teardown] Оновити LAST_MODIFICATION_DATE
  148 + ${new_rationale}= create_fake_sentence
  149 + Set to dictionary ${USERS.users['${tender_owner}']} new_rationale=${new_rationale}
  150 + Run As ${tender_owner} Редагувати зміну ${CONTRACT_UAID} rationale ${new_rationale}
  151 +
  152 +
  153 +Можливість редагувати назву договору
  154 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  155 + ... tender_owner
  156 + ... ${USERS.users['${tender_owner}'].broker}
  157 + ... modify_contract
  158 + [Teardown] Оновити LAST_MODIFICATION_DATE
  159 + ${title}= create_fake_title
  160 + Set to dictionary ${USERS.users['${tender_owner}']} new_title=${title}
  161 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} title ${title}
  162 +
  163 +
  164 +Можливість редагувати вартість договору
  165 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  166 + ... tender_owner
  167 + ... ${USERS.users['${tender_owner}'].broker}
  168 + ... modify_contract
  169 + [Teardown] Оновити LAST_MODIFICATION_DATE
  170 + ${value.amount}= create_fake_value_amount
  171 + Set to dictionary ${USERS.users['${tender_owner}']} new_amount=${value.amount}
  172 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} value.amount ${value.amount}
  173 +
  174 +
  175 +Можливість редагувати дату завершення дії договору
  176 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  177 + ... tender_owner
  178 + ... ${USERS.users['${tender_owner}'].broker}
  179 + ... modify_contract
  180 + [Teardown] Оновити LAST_MODIFICATION_DATE
  181 + ${endDate}= create_fake_date
  182 + Set to dictionary ${USERS.users['${tender_owner}']} new_endDate=${endDate}
  183 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} period.endDate ${endDate}
  184 +
  185 +
  186 +Можливість редагувати дату початку дії договору
  187 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  188 + ... tender_owner
  189 + ... ${USERS.users['${tender_owner}'].broker}
  190 + ... modify_contract
  191 + [Teardown] Оновити LAST_MODIFICATION_DATE
  192 + ${startDate}= create_fake_date
  193 + ${period.startDate}= add_minutes_to_date ${startDate} -20
  194 + Set to dictionary ${USERS.users['${tender_owner}']} new_startDate=${period.startDate}
  195 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} period.startDate ${period.startDate}
  196 +
  197 +
  198 +Можливість застосувати зміну договору
  199 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  200 + ... tender_owner
  201 + ... ${USERS.users['${tender_owner}'].broker}
  202 + ... apply_change
  203 + [Teardown] Оновити LAST_MODIFICATION_DATE
  204 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  205 + ${dateSigned}= create_fake_date
  206 + Run As ${tender_owner} Застосувати зміну ${CONTRACT_UAID} ${dateSigned}
  207 + Set to dictionary ${USERS.users['${tender_owner}'].change_data.data} status=active
  208 +
  209 +
  210 +Відображення відредагованого опису договору
  211 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  212 + ... viewer
  213 + ... ${USERS.users['${viewer}'].broker}
  214 + ... modify_contract
  215 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  216 + Звірити поле договору із значенням
  217 + ... ${viewer}
  218 + ... ${CONTRACT_UAID}
  219 + ... ${USERS.users['${tender_owner}'].new_description}
  220 + ... description
  221 +
  222 +
  223 +Відображення відредагованого опису причини зміни договору
  224 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування зміни договору
  225 + ... viewer
  226 + ... ${USERS.users['${viewer}'].broker}
  227 + ... modify_change
  228 + Remove From Dictionary ${USERS.users['${viewer}'].contract_data.data.changes[0]} rationale
  229 + Звірити поле договору із значенням
  230 + ... ${viewer}
  231 + ... ${CONTRACT_UAID}
  232 + ... ${USERS.users['${tender_owner}'].new_rationale}
  233 + ... changes[0].rationale
  234 +
  235 +
  236 +Відображення відредагованої назви договору
  237 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  238 + ... viewer
  239 + ... ${USERS.users['${viewer}'].broker}
  240 + ... modify_contract
  241 + Звірити поле договору із значенням
  242 + ... ${viewer}
  243 + ... ${CONTRACT_UAID}
  244 + ... ${USERS.users['${tender_owner}'].new_title}
  245 + ... title
  246 +
  247 +
  248 +Відображення відредагованої вартості договору
  249 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  250 + ... viewer
  251 + ... ${USERS.users['${viewer}'].broker}
  252 + ... modify_contract
  253 + Звірити поле договору із значенням
  254 + ... ${viewer}
  255 + ... ${CONTRACT_UAID}
  256 + ... ${USERS.users['${tender_owner}'].new_amount}
  257 + ... value.amount
  258 +
  259 +
  260 +Відображення відредагованої дати початку дії договору
  261 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  262 + ... viewer
  263 + ... ${USERS.users['${viewer}'].broker}
  264 + ... modify_contract
  265 + Звірити поле договору із значенням
  266 + ... ${viewer}
  267 + ... ${CONTRACT_UAID}
  268 + ... ${USERS.users['${tender_owner}'].new_startDate}
  269 + ... period.startDate
  270 +
  271 +
  272 +Відображення відредагованої дати завершення дії договору
  273 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  274 + ... viewer
  275 + ... ${USERS.users['${viewer}'].broker}
  276 + ... modify_contract
  277 + Звірити поле договору із значенням
  278 + ... ${viewer}
  279 + ... ${CONTRACT_UAID}
  280 + ... ${USERS.users['${tender_owner}'].new_endDate}
  281 + ... period.endDate
  282 +
  283 +
  284 +Відображення підтвердженого статусу зміни договору
  285 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення зміни договору
  286 + ... tender_owner
  287 + ... ${USERS.users['${viewer}'].broker}
  288 + ... apply_change
  289 + Звірити поле зміни до договору із значенням
  290 + ... ${viewer}
  291 + ... ${CONTRACT_UAID}
  292 + ... active
  293 + ... status
  294 +
  295 +
  296 +Неможливість додати документ до зміни договору після застосування зміни
  297 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  298 + ... tender_owner
  299 + ... ${USERS.users['${tender_owner}'].broker}
  300 + ... upload_change_document
  301 + [Teardown] Оновити LAST_MODIFICATION_DATE
  302 + Run keyword and expect error * Додати документацію до зміни договору
  303 +
  304 +
  305 +Неможливість редагувати опис причини зміни договору після застосування зміни
  306 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування зміни договору
  307 + ... tender_owner
  308 + ... ${USERS.users['${tender_owner}'].broker}
  309 + ... modify_change
  310 + [Teardown] Оновити LAST_MODIFICATION_DATE
  311 + ${new_rationale}= create_fake_sentence
  312 + Run keyword and expect error * Run As ${tender_owner} Редагувати зміну ${CONTRACT_UAID} rationale ${new_rationale}
  313 +
  314 +
  315 +Можливість завантажити документацію до договору
  316 + [Tags] ${USERS.users['${tender_owner}'].broker}: Додання документації до договору
  317 + ... tender_owner
  318 + ... ${USERS.users['${tender_owner}'].broker}
  319 + ... add_contract_doc
  320 + [Teardown] Оновити LAST_MODIFICATION_DATE
  321 + Додати документацію до договору
  322 +
  323 +
  324 +Відображення заголовку документації до договору
  325 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  326 + ... viewer
  327 + ... ${USERS.users['${viewer}'].broker}
  328 + ... add_contract_doc
  329 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  330 + Звірити відображення поля title документа ${USERS.users['${tender_owner}']['contract_doc']['id']} до договору з ${USERS.users['${tender_owner}']['contract_doc']['name']} для користувача ${viewer}
  331 +
  332 +
  333 +Відображення вмісту документації до договору
  334 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  335 + ... viewer
  336 + ... ${USERS.users['${viewer}'].broker}
  337 + ... add_contract_doc
  338 + Звірити відображення вмісту документа ${USERS.users['${tender_owner}']['contract_doc']['id']} до договору з ${USERS.users['${tender_owner}']['contract_doc']['content']} для користувача ${viewer}
  339 +
  340 +
  341 +Відображення належності документа до договору
  342 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  343 + ... viewer
  344 + ... ${USERS.users['${viewer}'].broker}
  345 + ... add_contract_doc
  346 + Звірити відображення поля documentOf документа ${USERS.users['${tender_owner}']['contract_doc']['id']} до договору з contract для користувача ${viewer}
  347 +
  348 +
  349 +Можливість вказати причини розірвання договору
  350 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  351 + ... tender_owner
  352 + ... ${USERS.users['${tender_owner}'].broker}
  353 + ... termination_reasons
  354 + [Teardown] Оновити LAST_MODIFICATION_DATE
  355 + ${terminationDetails}= create_fake_sentence
  356 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} terminationDetails ${terminationDetails}
  357 +
  358 +
  359 +Можливість редагувати причини розірвання договору
  360 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  361 + ... tender_owner
  362 + ... ${USERS.users['${tender_owner}'].broker}
  363 + ... termination_reasons
  364 + [Teardown] Оновити LAST_MODIFICATION_DATE
  365 + ${terminationDetails}= create_fake_sentence
  366 + Set to dictionary ${USERS.users['${tender_owner}']} new_termination_details=${terminationDetails}
  367 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} terminationDetails ${terminationDetails}
  368 +
  369 +
  370 +Відображення відредагованих причин розірвання договору
  371 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  372 + ... viewer
  373 + ... ${USERS.users['${viewer}'].broker}
  374 + ... termination_reasons
  375 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  376 + Звірити поле договору із значенням
  377 + ... ${viewer}
  378 + ... ${CONTRACT_UAID}
  379 + ... ${USERS.users['${tender_owner}'].new_termination_details}
  380 + ... terminationDetails
  381 +
  382 +
  383 +Можливість вказати дійсно оплачену суму
  384 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  385 + ... tender_owner
  386 + ... ${USERS.users['${tender_owner}'].broker}
  387 + ... amount_paid
  388 + [Teardown] Оновити LAST_MODIFICATION_DATE
  389 + Вказати дійсно оплачену суму
  390 +
  391 +
  392 +Можливість редагувати обсяг дійсно оплаченої суми
  393 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  394 + ... tender_owner
  395 + ... ${USERS.users['${tender_owner}'].broker}
  396 + ... amount_paid
  397 + [Teardown] Оновити LAST_MODIFICATION_DATE
  398 + ${amountPaid.amount}= create_fake_value_amount
  399 + Set to dictionary ${USERS.users['${tender_owner}']} new_amountPaid_amount=${amountPaid.amount}
  400 + Run As ${tender_owner} Редагувати поле договору ${CONTRACT_UAID} amountPaid.amount ${amountPaid.amount}
  401 +
  402 +
  403 +Відображення відредагованого обсягу дійсно оплаченої суми
  404 + [Tags] ${USERS.users['${viewer}'].broker}: Редагування договору
  405 + ... viewer
  406 + ... ${USERS.users['${viewer}'].broker}
  407 + ... amount_paid
  408 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  409 + Звірити поле договору із значенням
  410 + ... ${viewer}
  411 + ... ${CONTRACT_UAID}
  412 + ... ${USERS.users['${tender_owner}'].new_amountPaid_amount}
  413 + ... amountPaid.amount
  414 +
  415 +
  416 +Відображення врахованого ПДВ в дійсно оплачену суму в договорі
  417 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних договору
  418 + ... tender_owner
  419 + ... ${USERS.users['${viewer}'].broker}
  420 + ... amount_paid
  421 + Звірити відображення поля amountPaid.valueAddedTaxIncluded договору із ${USERS.users['${tender_owner}']['terminating_data'].data.amountPaid.valueAddedTaxIncluded} для користувача ${tender_owner}
  422 +
  423 +
  424 +Відображення валюти дійсно оплаченої суми в договорі
  425 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних договору
  426 + ... tender_owner
  427 + ... ${USERS.users['${viewer}'].broker}
  428 + ... amount_paid
  429 + Звірити відображення поля amountPaid.currency договору із ${USERS.users['${tender_owner}']['terminating_data'].data.amountPaid.currency} для користувача ${tender_owner}
  430 +
  431 +
  432 +Можливість завершити договір
  433 + [Tags] ${USERS.users['${tender_owner}'].broker}: Завершення договору
  434 + ... tender_owner
  435 + ... ${USERS.users['${tender_owner}'].broker}
  436 + ... contract_termination
  437 + [Teardown] Оновити LAST_MODIFICATION_DATE
  438 + Run As ${tender_owner} Завершити договір ${CONTRACT_UAID}
  439 +
  440 +
  441 +Звірити статус завершеного договору
  442 + [Tags] ${USERS.users['${viewer}'].broker}: Завершення договору
  443 + ... viewer
  444 + ... ${USERS.users['${viewer}'].broker}
  445 + ... contract_termination
  446 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  447 + Remove From Dictionary ${USERS.users['${viewer}'].contract_data.data} status
  448 + Звірити поле договору із значенням
  449 + ... ${viewer}
  450 + ... ${CONTRACT_UAID}
  451 + ... terminated
  452 + ... status
  453 +
  454 +
  455 +Неможливість редагувати догововір після його завершення
  456 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування договору
  457 + ... tender_owner
  458 + ... ${USERS.users['${tender_owner}'].broker}
  459 + ... modify_contract
  460 + [Teardown] Оновити LAST_MODIFICATION_DATE
  461 + Run keyword and expect error * Додати документацію до договору
1 *** Settings *** 1 *** Settings ***
2 -Resource keywords.robot  
3 -Resource resource.robot 2 +Resource base_keywords.robot
4 Suite Setup Test Suite Setup 3 Suite Setup Test Suite Setup
5 Suite Teardown Test Suite Teardown 4 Suite Teardown Test Suite Teardown
6 5
@@ -16,7 +15,7 @@ Suite Teardown Test Suite Teardown @@ -16,7 +15,7 @@ Suite Teardown Test Suite Teardown
16 ... find_tender level1 15 ... find_tender level1
17 Завантажити дані про тендер 16 Завантажити дані про тендер
18 :FOR ${username} IN ${viewer} ${tender_owner} 17 :FOR ${username} IN ${viewer} ${tender_owner}
19 - \ Run As ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} 18 + \ Run As ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']}
20 19
21 ############################################################################################## 20 ##############################################################################################
22 # CONTRACT 21 # CONTRACT
@@ -27,8 +26,9 @@ Suite Teardown Test Suite Teardown @@ -27,8 +26,9 @@ Suite Teardown Test Suite Teardown
27 ... tender_owner 26 ... tender_owner
28 ... ${USERS.users['${tender_owner}'].broker} 27 ... ${USERS.users['${tender_owner}'].broker}
29 ... tender_view 28 ... tender_view
  29 + ${award_index}= Отримати останній індекс awards ${viewer}
30 :FOR ${username} IN ${viewer} ${tender_owner} 30 :FOR ${username} IN ${viewer} ${tender_owner}
31 - \ Отримати дані із тендера ${username} ${TENDER['TENDER_UAID']} awards[-1].complaintPeriod.endDate 31 + \ Отримати дані із тендера ${username} ${TENDER['TENDER_UAID']} awards[${award_index}].complaintPeriod.endDate
32 32
33 33
34 Дочекатися закічення stand still періоду 34 Дочекатися закічення stand still періоду
@@ -36,24 +36,157 @@ Suite Teardown Test Suite Teardown @@ -36,24 +36,157 @@ Suite Teardown Test Suite Teardown
36 ... tender_owner 36 ... tender_owner
37 ... ${USERS.users['${tender_owner}'].broker} 37 ... ${USERS.users['${tender_owner}'].broker}
38 ... contract_sign 38 ... contract_sign
39 - ${standstillEnd}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data.data.awards[-1].complaintPeriod.endDate} 39 + ${award_index}= Отримати останній індекс awards ${viewer}
  40 + ${standstillEnd}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data.data.awards[${award_index}].complaintPeriod.endDate}
40 Дочекатись дати ${standstillEnd} 41 Дочекатись дати ${standstillEnd}
41 42
42 43
  44 +Відображення вартості угоди
  45 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних угоди
  46 + ... viewer
  47 + ... ${USERS.users['${viewer}'].broker}
  48 + ... contract_view
  49 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  50 + ${award_index}= Отримати останній індекс awards ${viewer}
  51 + Отримати дані із поля awards[${award_index}].value.amount тендера для користувача ${viewer}
  52 +
  53 +
  54 +Можливість редагувати вартість угоди
  55 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування угоди
  56 + ... tender_owner
  57 + ... ${USERS.users['${tender_owner}'].broker}
  58 + ... modify_contract
  59 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  60 + [Teardown] Оновити LAST_MODIFICATION_DATE
  61 + ${award_index}= Отримати останній індекс awards ${viewer}
  62 + ${contract_index}= Отримати останній індекс contracts ${viewer}
  63 + ${award_amount}= Get From Dictionary ${USERS.users['${viewer}'].tender_data.data.awards[${award_index}].value} amount
  64 + ${amount}= create_fake_amount ${award_amount}
  65 + Set to dictionary ${USERS.users['${tender_owner}']} new_amount=${amount}
  66 + Run As ${tender_owner} Редагувати угоду ${TENDER['TENDER_UAID']} ${contract_index} value.amount ${amount}
  67 +
  68 +
  69 +Відображення відредагованої вартості угоди
  70 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних угоди
  71 + ... viewer
  72 + ... ${USERS.users['${viewer}'].broker}
  73 + ... contract_view
  74 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  75 + ${contract_index}= Отримати останній індекс contracts ${viewer}
  76 + Remove From Dictionary ${USERS.users['${viewer}'].tender_data.data.contracts[${contract_index}].value} amount
  77 + Звірити відображення поля contracts[${contract_index}].value.amount тендера із ${USERS.users['${tender_owner}'].new_amount} для користувача ${viewer}
  78 +
  79 +
  80 +Можливість встановити дату підписання угоди
  81 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування угоди
  82 + ... tender_owner
  83 + ... ${USERS.users['${tender_owner}'].broker}
  84 + ... modify_contract
  85 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  86 + [Teardown] Оновити LAST_MODIFICATION_DATE
  87 + ${contract_index}= Отримати останній індекс contracts ${viewer}
  88 + ${dateSigned}= create_fake_date
  89 + Set to dictionary ${USERS.users['${tender_owner}']} dateSigned=${dateSigned}
  90 + Run As ${tender_owner} Встановити дату підписання угоди ${TENDER['TENDER_UAID']} ${contract_index} ${dateSigned}
  91 +
  92 +
  93 +Відображення дати підписання угоди
  94 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних угоди
  95 + ... viewer
  96 + ... ${USERS.users['${viewer}'].broker}
  97 + ... contract_view
  98 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  99 + ${contract_index}= Отримати останній індекс contracts ${viewer}
  100 + Звірити відображення поля contracts[${contract_index}].dateSigned тендера із ${USERS.users['${tender_owner}'].dateSigned} для користувача ${viewer}
  101 +
  102 +
  103 +Можливість вказати період дії угоди
  104 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування угоди
  105 + ... tender_owner
  106 + ... ${USERS.users['${tender_owner}'].broker}
  107 + ... modify_contract
  108 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  109 + [Teardown] Оновити LAST_MODIFICATION_DATE
  110 + ${contract_index}= Отримати останній індекс contracts ${viewer}
  111 + ${startDate}= create_fake_date
  112 + ${endDate}= add_minutes_to_date ${startDate} 10
  113 + Set to dictionary ${USERS.users['${tender_owner}']} contract_startDate=${startDate} contract_endDate=${endDate}
  114 + Run As ${tender_owner} Вказати період дії угоди ${TENDER['TENDER_UAID']} ${contract_index} ${startDate} ${endDate}
  115 +
  116 +
  117 +Відображення дати початку дії угоди
  118 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних угоди
  119 + ... viewer
  120 + ... ${USERS.users['${viewer}'].broker}
  121 + ... contract_view
  122 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  123 + ${contract_index}= Отримати останній індекс contracts ${viewer}
  124 + Звірити відображення поля contracts[${contract_index}].period.startDate тендера із ${USERS.users['${tender_owner}'].contract_startDate} для користувача ${viewer}
  125 +
  126 +
  127 +Відображення дати завершення дії угоди
  128 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних угоди
  129 + ... viewer
  130 + ... ${USERS.users['${viewer}'].broker}
  131 + ... contract_view
  132 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  133 + ${contract_index}= Отримати останній індекс contracts ${viewer}
  134 + Звірити відображення поля contracts[${contract_index}].period.endDate тендера із ${USERS.users['${tender_owner}'].contract_endDate} для користувача ${viewer}
  135 +
  136 +
  137 +Можливість завантажити документацію в угоду
  138 + [Tags] ${USERS.users['${tender_owner}'].broker}: Завантаження документації в угоду
  139 + ... tender_owner
  140 + ... ${USERS.users['${tender_owner}'].broker}
  141 + ... add_doc_to_contract
  142 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  143 + [Teardown] Оновити LAST_MODIFICATION_DATE
  144 + ${contract_index}= Отримати останній індекс contracts ${viewer}
  145 + Можливість завантажити документ в ${contract_index} угоду користувачем ${tender_owner}
  146 +
  147 +
  148 +Відображення заголовку документа
  149 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  150 + ... viewer
  151 + ... ${USERS.users['${viewer}'].broker}
  152 + ... add_doc_to_contract
  153 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  154 + Звірити відображення поля title документа ${USERS.users['${tender_owner}']['contract_doc']['id']} із ${USERS.users['${tender_owner}']['contract_doc']['name']} для користувача ${viewer}
  155 +
  156 +
  157 +Відображення вмісту документа
  158 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  159 + ... viewer
  160 + ... ${USERS.users['${viewer}'].broker}
  161 + ... add_doc_to_contract
  162 + Звірити відображення вмісту документа ${USERS.users['${tender_owner}']['contract_doc']['id']} із ${USERS.users['${tender_owner}']['contract_doc']['content']} для користувача ${viewer}
  163 +
  164 +
  165 +Відображення прив'язки документа до тендера
  166 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  167 + ... viewer
  168 + ... ${USERS.users['${viewer}'].broker}
  169 + ... add_doc_to_contract
  170 + Звірити відображення поля documentOf документа ${USERS.users['${tender_owner}']['contract_doc']['id']} із tender для користувача ${viewer}
  171 +
  172 +
43 Можливість укласти угоду для закупівлі 173 Можливість укласти угоду для закупівлі
44 - [Tags] ${USERS.users['${tender_owner}'].broker}: Процес укладання угоди  
45 - ... tender_owner  
46 - ... ${USERS.users['${tender_owner}'].broker}  
47 - ... contract_sign level1 174 + [Tags] ${USERS.users['${tender_owner}'].broker}: Процес укладання угоди
  175 + ... tender_owner
  176 + ... ${USERS.users['${tender_owner}'].broker}
  177 + ... contract_sign level1
  178 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
48 [Teardown] Оновити LAST_MODIFICATION_DATE 179 [Teardown] Оновити LAST_MODIFICATION_DATE
49 - Run As ${tender_owner} Підтвердити підписання контракту ${TENDER['TENDER_UAID']} -1 180 + ${contract_index}= Отримати останній індекс contracts ${viewer}
  181 + Run As ${tender_owner} Підтвердити підписання контракту ${TENDER['TENDER_UAID']} ${contract_index}
50 182
51 183
52 Відображення статусу підписаної угоди з постачальником закупівлі 184 Відображення статусу підписаної угоди з постачальником закупівлі
53 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних угоди  
54 - ... viewer  
55 - ... ${USERS.users['${viewer}'].broker}  
56 - ... contract_sign  
57 - [Setup] Дочекатись синхронізації з майданчиком ${viewer} 185 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних угоди
  186 + ... viewer
  187 + ... ${USERS.users['${viewer}'].broker}
  188 + ... contract_sign
  189 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  190 + ${contract_index}= Отримати останній індекс contracts ${viewer}
58 Run As ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} 191 Run As ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']}
59 - Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']} active contracts[-1].status 192 + Звірити відображення поля contracts[${contract_index}].status тендера із active для користувача ${viewer}
@@ -7,7 +7,7 @@ Default: @@ -7,7 +7,7 @@ Default:
7 # 7 #
8 # Each field is a mode name 8 # Each field is a mode name
9 # Current modes are: 9 # Current modes are:
10 - # single, multi, limited, openua, openeu 10 + # single, multi, limited, openua, openeu, openua_defense
11 # 11 #
12 # See `prepare_test_tender_data()` 12 # See `prepare_test_tender_data()`
13 # in `service_keywords.py` for more details 13 # in `service_keywords.py` for more details
@@ -32,12 +32,15 @@ Default: @@ -32,12 +32,15 @@ Default:
32 openua: 32 openua:
33 accelerator: 1440 33 accelerator: 1440
34 tender: [0, 15] 34 tender: [0, 15]
35 - # Please remember that openUA and openEU procedures 35 + # Please remember that openUA, openEU and openUA_defense procedures
36 # forbid anyone to set or modify enquiryPeriod 36 # forbid anyone to set or modify enquiryPeriod
37 # (it is set automatically) 37 # (it is set automatically)
38 openeu: 38 openeu:
39 accelerator: 1440 39 accelerator: 1440
40 tender: [0, 30] 40 tender: [0, 30]
  41 + openua_defense:
  42 + accelerator: 1440
  43 + tender: [0, 6]
41 open_competitive_dialogue: 44 open_competitive_dialogue:
42 accelerator: 1440 45 accelerator: 1440
43 tender: [0, 30] 46 tender: [0, 30]
@@ -52,6 +55,8 @@ Quinta: @@ -52,6 +55,8 @@ Quinta:
52 tender: [1, 30] 55 tender: [1, 30]
53 openeu: 56 openeu:
54 tender: [1, 35] 57 tender: [1, 35]
  58 + openua_defense:
  59 + tender: [0, 30]
55 open_competitive_dialogue: 60 open_competitive_dialogue:
56 accelerator: 1440 61 accelerator: 1440
57 tender: [0, 30] 62 tender: [0, 30]
@@ -151,9 +156,9 @@ ztv: @@ -151,9 +156,9 @@ ztv:
151 keywords_file: ztv 156 keywords_file: ztv
152 roles: 157 roles:
153 tender_owner: ztv_Owner 158 tender_owner: ztv_Owner
154 - provider: ztv_Provider  
155 - provider1: ztv_Provider1  
156 - viewer: ztv_Viewer 159 + provider: ztv_Provider
  160 + provider1: ztv_Provider1
  161 + viewer: ztv_Viewer
157 timeout_on_wait: 300 162 timeout_on_wait: 300
158 Newtend: 163 Newtend:
159 keywords_file: newtend 164 keywords_file: newtend
1 users: 1 users:
2 Tender_Owner: 2 Tender_Owner:
  3 + auth_ds:
  4 + tenders: [test.quintagroup.com, test.quintagroup.com]
  5 + auctions: [test.quintagroup.com, bc698baa8b814908bc75405ed3d63548]
3 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3 6 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3
4 broker: Quinta 7 broker: Quinta
  8 + auth_edr: [test.quintagroup.com, f5111c99a97a45348d8165ba8fcf0d62]
  9 + browser: phantomjs
  10 + position: [0, 0]
  11 + size: [1400, 900]
5 Tender_User: 12 Tender_User:
  13 + auth_ds:
  14 + tenders: [test.quintagroup.com, test.quintagroup.com]
  15 + auctions: [test.quintagroup.com, bc698baa8b814908bc75405ed3d63548]
6 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3 16 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3
7 broker: Quinta 17 broker: Quinta
  18 + auth_edr: [test.quintagroup.com, f5111c99a97a45348d8165ba8fcf0d62]
  19 + browser: phantomjs
  20 + position: [0, 0]
  21 + size: [1400, 900]
8 Tender_User1: 22 Tender_User1:
  23 + auth_ds:
  24 + tenders: [test.quintagroup.com, test.quintagroup.com]
  25 + auctions: [test.quintagroup.com, bc698baa8b814908bc75405ed3d63548]
9 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3 26 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3
10 broker: Quinta 27 broker: Quinta
  28 + auth_edr: [test.quintagroup.com, f5111c99a97a45348d8165ba8fcf0d62]
  29 + browser: phantomjs
  30 + position: [0, 0]
  31 + size: [1400, 900]
11 Tender_User2: 32 Tender_User2:
  33 + auth_ds:
  34 + tenders: [test.quintagroup.com, test.quintagroup.com]
  35 + auctions: [test.quintagroup.com, bc698baa8b814908bc75405ed3d63548]
12 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3 36 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3
13 broker: Quinta 37 broker: Quinta
  38 + auth_edr: [test.quintagroup.com, f5111c99a97a45348d8165ba8fcf0d62]
  39 + browser: phantomjs
  40 + position: [0, 0]
  41 + size: [1400, 900]
14 Tender_Viewer: 42 Tender_Viewer:
  43 + auth_ds:
  44 + tenders: [test.quintagroup.com, test.quintagroup.com]
  45 + auctions: [test.quintagroup.com, bc698baa8b814908bc75405ed3d63548]
15 api_key: "" 46 api_key: ""
16 broker: Quinta 47 broker: Quinta
17 browser: firefox 48 browser: firefox
  49 + auth_edr: [test.quintagroup.com, f5111c99a97a45348d8165ba8fcf0d62]
  50 + position: [0, 0]
  51 + size: [1400, 900]
18 Etender_Owner: 52 Etender_Owner:
19 broker: Etender 53 broker: Etender
20 homepage: "http://bid.uat.e-tender.biz/#/" 54 homepage: "http://bid.uat.e-tender.biz/#/"
1 # -*- coding: utf-8 - 1 # -*- coding: utf-8 -
2 import os 2 import os
3 import random 3 import random
  4 +import hashlib
4 from datetime import timedelta 5 from datetime import timedelta
5 from tempfile import NamedTemporaryFile 6 from tempfile import NamedTemporaryFile
6 from uuid import uuid4 7 from uuid import uuid4
@@ -17,7 +18,7 @@ fake_ru = Factory.create(locale='ru_RU') @@ -17,7 +18,7 @@ fake_ru = Factory.create(locale='ru_RU')
17 fake_uk = Factory.create(locale='uk_UA') 18 fake_uk = Factory.create(locale='uk_UA')
18 fake_uk.add_provider(OP_Provider) 19 fake_uk.add_provider(OP_Provider)
19 fake = fake_uk 20 fake = fake_uk
20 - 21 +used_identifier_id = []
21 # This workaround fixes an error caused by missing "catch_phrase" class method 22 # This workaround fixes an error caused by missing "catch_phrase" class method
22 # for the "ru_RU" locale in Faker >= 0.7.4 23 # for the "ru_RU" locale in Faker >= 0.7.4
23 fake_ru.add_provider(CompanyProviderEnUs) 24 fake_ru.add_provider(CompanyProviderEnUs)
@@ -28,6 +29,31 @@ def create_fake_sentence(): @@ -28,6 +29,31 @@ def create_fake_sentence():
28 return fake.sentence(nb_words=10, variable_nb_words=True) 29 return fake.sentence(nb_words=10, variable_nb_words=True)
29 30
30 31
  32 +def create_fake_amount(award_amount):
  33 + return round(random.uniform(1, award_amount), 2)
  34 +
  35 +
  36 +def create_fake_title():
  37 + return u"[ТЕСТУВАННЯ] {}".format(fake.title())
  38 +
  39 +
  40 +def create_fake_date():
  41 + return get_now().isoformat()
  42 +
  43 +
  44 +def subtraction(value1, value2):
  45 + if "." in str (value1) or "." in str (value2):
  46 + return (float (value1) - float (value2))
  47 + else:
  48 + return (int (value1) - int (value2))
  49 +
  50 +
  51 +def create_fake_value_amount():
  52 + return fake.random_int(min=1)
  53 +
  54 +def get_number_of_minutes(days, accelerator):
  55 + return 1440 * int(days) / accelerator
  56 +
31 def field_with_id(prefix, sentence): 57 def field_with_id(prefix, sentence):
32 return u"{}-{}: {}".format(prefix, fake.uuid4()[:8], sentence) 58 return u"{}-{}: {}".format(prefix, fake.uuid4()[:8], sentence)
33 59
@@ -39,6 +65,10 @@ def translate_country_en(country): @@ -39,6 +65,10 @@ def translate_country_en(country):
39 raise Exception(u"Cannot translate country to english: {}".format(country)) 65 raise Exception(u"Cannot translate country to english: {}".format(country))
40 66
41 67
  68 +def convert_amount(amount):
  69 + return (("{:,}".format(float (amount))).replace(',',' ').replace('.',','))
  70 +
  71 +
42 def translate_country_ru(country): 72 def translate_country_ru(country):
43 if country == u"Україна": 73 if country == u"Україна":
44 return u"Украина" 74 return u"Украина"
@@ -63,7 +93,7 @@ def test_tender_data(params, @@ -63,7 +93,7 @@ def test_tender_data(params,
63 submissionMethodDetails = submissionMethodDetails \ 93 submissionMethodDetails = submissionMethodDetails \
64 if submissionMethodDetails else "quick" 94 if submissionMethodDetails else "quick"
65 now = get_now() 95 now = get_now()
66 - value_amount = round(random.uniform(3000, 99999999999.99), 2) # max value equals to budget of Ukraine in hryvnias 96 + value_amount = round(random.uniform(3000, 99999999.99), 2) # max value equals to budget of Ukraine in hryvnias
67 data = { 97 data = {
68 "mode": "test", 98 "mode": "test",
69 "submissionMethodDetails": submissionMethodDetails, 99 "submissionMethodDetails": submissionMethodDetails,
@@ -145,6 +175,56 @@ def test_tender_data(params, @@ -145,6 +175,56 @@ def test_tender_data(params,
145 return munchify(data) 175 return munchify(data)
146 176
147 177
  178 +def test_tender_data_planning(params):
  179 + data = {
  180 + "budget": {
  181 + "amountNet": round(random.uniform(3000, 999999999.99), 2),
  182 + "description": fake.description(),
  183 + "project": {
  184 + "id": str(fake.random_int(min=1, max=999)),
  185 + "name": fake.description(),
  186 + },
  187 + "currency": "UAH",
  188 + "amount": round(random.uniform(3000, 99999999999.99), 2),
  189 + "id": str(fake.random_int(min=1, max=99999999999)) + "-" + str(fake.random_int(min=1, max=9)),
  190 + },
  191 + "procuringEntity": {
  192 + "identifier": {
  193 + "scheme": "UA-EDR",
  194 + "id": str(fake.random_int(min=1, max=999)),
  195 + "legalName": fake.description(),
  196 + },
  197 + "name": fake.description(),
  198 + },
  199 + "tender": {
  200 + "procurementMethod": "open",
  201 + "procurementMethodType": "belowThreshold",
  202 + "tenderPeriod": {
  203 + "startDate": (get_now().isoformat())
  204 + }
  205 + },
  206 + "items": []
  207 + }
  208 + id_cpv=fake.cpv()[:4]
  209 + cpv_data=test_item_data(id_cpv)
  210 + data.update(cpv_data)
  211 + del data['deliveryDate']
  212 + del data['description']
  213 + del data['description_en']
  214 + del data['description_ru']
  215 + del data['deliveryAddress']
  216 + del data['deliveryLocation']
  217 + del data['quantity']
  218 + del data['unit']
  219 + for i in range(params['number_of_items']):
  220 + item_data=test_item_data(id_cpv)
  221 + del item_data['deliveryAddress']
  222 + del item_data['deliveryLocation']
  223 + del item_data['deliveryDate']['startDate']
  224 + data['items'].append(item_data)
  225 + return munchify(data)
  226 +
  227 +
148 def test_tender_data_limited(params): 228 def test_tender_data_limited(params):
149 data = test_tender_data(params) 229 data = test_tender_data(params)
150 del data["submissionMethodDetails"] 230 del data["submissionMethodDetails"]
@@ -274,6 +354,33 @@ def test_complaint_reply_data(): @@ -274,6 +354,33 @@ def test_complaint_reply_data():
274 }) 354 })
275 355
276 356
  357 +def test_bid_competitive_data():
  358 + bid = munchify({
  359 + "data": {
  360 + "tenderers": [
  361 + fake.procuringEntity()
  362 + ]
  363 + }
  364 + })
  365 + if len(used_identifier_id) == 3:
  366 + del used_identifier_id[0]
  367 + id = bid.data.tenderers[0].identifier.id
  368 + while (id in used_identifier_id):
  369 + bid = munchify({
  370 + "data": {
  371 + "tenderers": [
  372 + fake.procuringEntity()
  373 + ]
  374 + }
  375 + })
  376 + id = bid.data.tenderers[0].identifier.id
  377 + used_identifier_id.append(id)
  378 + bid.data.tenderers[0].address.countryName_en = translate_country_en(bid.data.tenderers[0].address.countryName)
  379 + bid.data.tenderers[0].address.countryName_ru = translate_country_ru(bid.data.tenderers[0].address.countryName)
  380 + bid.data['status'] = 'draft'
  381 + return bid
  382 +
  383 +
277 def test_bid_data(): 384 def test_bid_data():
278 bid = munchify({ 385 bid = munchify({
279 "data": { 386 "data": {
@@ -292,7 +399,7 @@ def test_bid_value(max_value_amount): @@ -292,7 +399,7 @@ def test_bid_value(max_value_amount):
292 return munchify({ 399 return munchify({
293 "value": { 400 "value": {
294 "currency": "UAH", 401 "currency": "UAH",
295 - "amount": round(random.uniform(1, max_value_amount), 2), 402 + "amount": round(random.uniform((0.95 * max_value_amount), max_value_amount), 2),
296 "valueAddedTaxIncluded": True 403 "valueAddedTaxIncluded": True
297 } 404 }
298 }) 405 })
@@ -376,6 +483,10 @@ def test_lot_document_data(document, lot_id): @@ -376,6 +483,10 @@ def test_lot_document_data(document, lot_id):
376 document.data.update({"documentOf": "lot", "relatedItem": lot_id}) 483 document.data.update({"documentOf": "lot", "relatedItem": lot_id})
377 return munchify(document) 484 return munchify(document)
378 485
  486 +def test_change_document_data(document, change_id):
  487 + document.data.update({"documentOf": "change", "relatedItem": change_id})
  488 + return munchify(document)
  489 +
379 490
380 def test_tender_data_openua(params, submissionMethodDetails): 491 def test_tender_data_openua(params, submissionMethodDetails):
381 # We should not provide any values for `enquiryPeriod` when creating 492 # We should not provide any values for `enquiryPeriod` when creating
@@ -387,6 +498,16 @@ def test_tender_data_openua(params, submissionMethodDetails): @@ -387,6 +498,16 @@ def test_tender_data_openua(params, submissionMethodDetails):
387 return data 498 return data
388 499
389 500
  501 +def test_tender_data_openua_defense(params, submissionMethodDetails):
  502 + """We should not provide any values for `enquiryPeriod` when creating
  503 + an openUA, openEU or openUA_defense procedure. That field should not be present at all.
  504 + Therefore, we pass a nondefault list of periods to `test_tender_data()`."""
  505 + data = test_tender_data(params, ('tender',), submissionMethodDetails)
  506 + data['procurementMethodType'] = 'aboveThresholdUA.defense'
  507 + data['procuringEntity']['kind'] = 'defense'
  508 + return data
  509 +
  510 +
390 def test_tender_data_openeu(params, submissionMethodDetails): 511 def test_tender_data_openeu(params, submissionMethodDetails):
391 # We should not provide any values for `enquiryPeriod` when creating 512 # We should not provide any values for `enquiryPeriod` when creating
392 # an openUA or openEU procedure. That field should not be present at all. 513 # an openUA or openEU procedure. That field should not be present at all.
@@ -422,3 +543,21 @@ def test_tender_data_competitive_dialogue(params, submissionMethodDetails): @@ -422,3 +543,21 @@ def test_tender_data_competitive_dialogue(params, submissionMethodDetails):
422 data['procuringEntity']['identifier']['legalName_en'] = fake_en.sentence(nb_words=10, variable_nb_words=True) 543 data['procuringEntity']['identifier']['legalName_en'] = fake_en.sentence(nb_words=10, variable_nb_words=True)
423 data['procuringEntity']['kind'] = 'general' 544 data['procuringEntity']['kind'] = 'general'
424 return data 545 return data
  546 +
  547 +
  548 +def test_change_data():
  549 + return munchify(
  550 + {
  551 + "data":
  552 + {
  553 + "rationale": fake.description(),
  554 + "rationale_en": fake_en.sentence(nb_words=10, variable_nb_words=True),
  555 + "rationale_ru": fake_ru.sentence(nb_words=10, variable_nb_words=True),
  556 + "rationaleTypes": fake.rationaleTypes(amount=3),
  557 + "status": "pending"
  558 + }
  559 + })
  560 +
  561 +
  562 +def get_hash(file_contents):
  563 + return ("md5:"+hashlib.md5(file_contents).hexdigest())
@@ -49,7 +49,7 @@ Set Suite Variable With Default Value @@ -49,7 +49,7 @@ Set Suite Variable With Default Value
49 ${repo}= Run git remote -v 49 ${repo}= Run git remote -v
50 ${branch}= Run git branch -vva 50 ${branch}= Run git branch -vva
51 ${status}= Run git status 51 ${status}= Run git status
52 - ${diff}= Run git diff 52 + ${diff}= Run git diff
53 ${reflog}= Run git reflog 53 ${reflog}= Run git reflog
54 Log ${commit} 54 Log ${commit}
55 Log ${repo} 55 Log ${repo}
@@ -174,6 +174,11 @@ Get Broker Property By Username @@ -174,6 +174,11 @@ Get Broker Property By Username
174 Run Keyword And Ignore Error Set To Dictionary ${artifact} tender_owner_access_token=${USERS.users['${tender_owner}'].access_token} 174 Run Keyword And Ignore Error Set To Dictionary ${artifact} tender_owner_access_token=${USERS.users['${tender_owner}'].access_token}
175 Run Keyword And Ignore Error Set To Dictionary ${artifact} provider_access_token=${USERS.users['${provider}'].access_token} 175 Run Keyword And Ignore Error Set To Dictionary ${artifact} provider_access_token=${USERS.users['${provider}'].access_token}
176 Run Keyword And Ignore Error Set To Dictionary ${artifact} provider1_access_token=${USERS.users['${provider1}'].access_token} 176 Run Keyword And Ignore Error Set To Dictionary ${artifact} provider1_access_token=${USERS.users['${provider1}'].access_token}
  177 + Run Keyword And Ignore Error Set To Dictionary ${artifact} provider_bid_id=${USERS.users['${provider}'].bid_id}
  178 + Run Keyword And Ignore Error Set To Dictionary ${artifact} provider1_bid_id=${USERS.users['${provider1}'].bid_id}
  179 + Run Keyword And Ignore Error Set To Dictionary ${artifact}
  180 + ... tender_file_properties=${USERS.users['${tender_owner}'].tender_document.file_properties}
  181 + ... lot_file_properties=${USERS.users['${tender_owner}'].lots_documents[0].file_properties}
177 ${status} ${lots_ids}= Run Keyword And Ignore Error Отримати ідентифікатори об’єктів ${viewer} lots 182 ${status} ${lots_ids}= Run Keyword And Ignore Error Отримати ідентифікатори об’єктів ${viewer} lots
178 Run Keyword If '${status}'=='PASS' 183 Run Keyword If '${status}'=='PASS'
179 ... Set To Dictionary ${artifact} lots=${lots_ids} 184 ... Set To Dictionary ${artifact} lots=${lots_ids}
@@ -193,8 +198,12 @@ Get Broker Property By Username @@ -193,8 +198,12 @@ Get Broker Property By Username
193 Run Keyword And Ignore Error Set To Dictionary ${TENDER} LOT_ID=${ARTIFACT.lots[${lot_index}]} 198 Run Keyword And Ignore Error Set To Dictionary ${TENDER} LOT_ID=${ARTIFACT.lots[${lot_index}]}
194 ${MODE}= Get Variable Value ${MODE} ${ARTIFACT.mode} 199 ${MODE}= Get Variable Value ${MODE} ${ARTIFACT.mode}
195 Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${tender_owner}']} access_token=${ARTIFACT.tender_owner_access_token} 200 Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${tender_owner}']} access_token=${ARTIFACT.tender_owner_access_token}
  201 + Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${viewer}']} tender_file_properties=${ARTIFACT.tender_file_properties}
  202 + Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${viewer}']} lot_file_properties=${ARTIFACT.lot_file_properties}
196 Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${provider}']} access_token=${ARTIFACT.provider_access_token} 203 Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${provider}']} access_token=${ARTIFACT.provider_access_token}
197 Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${provider1}']} access_token=${ARTIFACT.provider1_access_token} 204 Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${provider1}']} access_token=${ARTIFACT.provider1_access_token}
  205 + Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${provider}']} bid_id=${ARTIFACT.provider_bid_id}
  206 + Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${provider1}']} bid_id=${ARTIFACT.provider1_bid_id}
198 Set Suite Variable ${MODE} 207 Set Suite Variable ${MODE}
199 Set Suite Variable ${lot_index} 208 Set Suite Variable ${lot_index}
200 Set Suite Variable ${TENDER} 209 Set Suite Variable ${TENDER}
@@ -219,6 +228,15 @@ Get Broker Property By Username @@ -219,6 +228,15 @@ Get Broker Property By Username
219 [Return] ${item} 228 [Return] ${item}
220 229
221 230
  231 +Підготувати дані для створення предмету закупівлі плану
  232 + [Arguments] ${cpv}
  233 + ${item}= test_item_data ${cpv[0:4]}
  234 + Remove From Dictionary ${item} deliveryAddress
  235 + Remove From Dictionary ${item} deliveryLocation
  236 + Remove From Dictionary ${item} deliveryDate.startDate
  237 + [Return] ${item}
  238 +
  239 +
222 Підготувати дані для створення лоту 240 Підготувати дані для створення лоту
223 [Arguments] ${max_lot_value_amount} 241 [Arguments] ${max_lot_value_amount}
224 ${lot}= test_lot_data ${max_lot_value_amount} 242 ${lot}= test_lot_data ${max_lot_value_amount}
@@ -263,7 +281,7 @@ Get Broker Property By Username @@ -263,7 +281,7 @@ Get Broker Property By Username
263 281
264 Підготувати дані для подання пропозиції для другого етапу 282 Підготувати дані для подання пропозиції для другого етапу
265 [Arguments] ${index}=0 283 [Arguments] ${index}=0
266 - ${bid}= generate_test_bid_data_second_stage ${USERS.users['${tender_owner}'].initialdata.data} ${index} 284 + ${bid}= generate_test_bid_data_second_stage ${USERS.users['${tender_owner}'].tender_data.data} ${index}
267 [Return] ${bid} 285 [Return] ${bid}
268 286
269 287
@@ -298,6 +316,14 @@ Get Broker Property By Username @@ -298,6 +316,14 @@ Get Broker Property By Username
298 [Return] ${cancellation_data} 316 [Return] ${cancellation_data}
299 317
300 318
  319 +Підготувати дані про зміну до договору
  320 + [Arguments] ${username}
  321 + ${change_data}= test_change_data
  322 + Set To Dictionary ${USERS.users['${username}']} change_data=${change_data}
  323 + Log ${change_data}
  324 + [Return] ${change_data}
  325 +
  326 +
301 Адаптувати дані для оголошення тендера 327 Адаптувати дані для оголошення тендера
302 [Arguments] ${tender_data} 328 [Arguments] ${tender_data}
303 # munchify is used to make deep copy of ${tender_data} 329 # munchify is used to make deep copy of ${tender_data}
@@ -405,24 +431,67 @@ Log differences between dicts @@ -405,24 +431,67 @@ Log differences between dicts
405 ... ${last_modification_date_corrected} 431 ... ${last_modification_date_corrected}
406 ... ${USERS.users['${username}']['LAST_REFRESH_DATE']} 432 ... ${USERS.users['${username}']['LAST_REFRESH_DATE']}
407 ${LAST_REFRESH_DATE}= Get Current TZdate 433 ${LAST_REFRESH_DATE}= Get Current TZdate
408 - Run Keyword If ${time_diff} > 0 Run keywords  
409 - ... Run As ${username} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} 434 + Run Keyword If ${time_diff} > 0 Run Keywords
  435 + ... Оновити сторінку ${username}
410 ... AND 436 ... AND
411 ... Set To Dictionary ${USERS.users['${username}']} LAST_REFRESH_DATE=${LAST_REFRESH_DATE} 437 ... Set To Dictionary ${USERS.users['${username}']} LAST_REFRESH_DATE=${LAST_REFRESH_DATE}
412 438
413 439
  440 +Оновити сторінку
  441 + [Arguments] ${username}
  442 + Run Keyword If '${MODE}' == 'planning' Run As ${username} Оновити сторінку з планом ${TENDER['TENDER_UAID']}
  443 + ... ELSE Run As ${username} Оновити сторінку з тендером ${TENDER['TENDER_UAID']}
  444 +
  445 +
414 Звірити поле тендера 446 Звірити поле тендера
415 [Arguments] ${username} ${tender_uaid} ${tender_data} ${field} 447 [Arguments] ${username} ${tender_uaid} ${tender_data} ${field}
416 ${left}= get_from_object ${tender_data.data} ${field} 448 ${left}= get_from_object ${tender_data.data} ${field}
417 Звірити поле тендера із значенням ${username} ${tender_uaid} ${left} ${field} 449 Звірити поле тендера із значенням ${username} ${tender_uaid} ${left} ${field}
418 450
419 451
  452 +Звірити поле плану
  453 + [Arguments] ${username} ${tender_uaid} ${tender_data} ${field}
  454 + ${left}= get_from_object ${tender_data.data} ${field}
  455 + Звірити поле плану із значенням ${username} ${tender_uaid} ${left} ${field}
  456 +
  457 +
  458 +Звірити поле плану із значенням
  459 + [Arguments] ${username} ${tender_uaid} ${left} ${field} ${object_id}=${Empty}
  460 + ${right}= Отримати дані із плану ${username} ${tender_uaid} ${field} ${object_id}
  461 + Порівняти об'єкти ${left} ${right}
  462 +
  463 +
420 Звірити поле тендера із значенням 464 Звірити поле тендера із значенням
421 [Arguments] ${username} ${tender_uaid} ${left} ${field} ${object_id}=${Empty} 465 [Arguments] ${username} ${tender_uaid} ${left} ${field} ${object_id}=${Empty}
422 ${right}= Отримати дані із тендера ${username} ${tender_uaid} ${field} ${object_id} 466 ${right}= Отримати дані із тендера ${username} ${tender_uaid} ${field} ${object_id}
423 Порівняти об'єкти ${left} ${right} 467 Порівняти об'єкти ${left} ${right}
424 468
425 469
  470 +Звірити поле договору
  471 + [Arguments] ${username} ${contract_uaid} ${cotract_data} ${field}
  472 + ${left}= get_from_object ${contract_data.data} ${field}
  473 + Звірити поле договору із значенням ${username} ${contract_uaid} ${left} ${field}
  474 +
  475 +
  476 +Звірити поле договору із значенням
  477 + [Arguments] ${username} ${contract_uaid} ${left} ${field}
  478 + ${right}= Отримати дані із договору ${username} ${contract_uaid} ${field}
  479 + Порівняти об'єкти ${left} ${right}
  480 +
  481 +
  482 +Звірити поле зміни до договору
  483 + [Arguments] ${username} ${contract_uaid} ${change_data} ${field}
  484 + ${left}= get_from_object ${change_data.data} ${field}
  485 + Звірити поле зміни до договору із значенням ${username} ${contract_uaid} ${left} ${field}
  486 +
  487 +
  488 +Звірити поле зміни до договору із значенням
  489 + [Arguments] ${username} ${contract_uaid} ${left} ${field}
  490 + ${field}= Evaluate "{}{}".format('changes[0].', '${field}')
  491 + ${right}= Отримати дані із договору ${username} ${contract_uaid} ${field}
  492 + Порівняти об'єкти ${left} ${right}
  493 +
  494 +
426 Порівняти об'єкти 495 Порівняти об'єкти
427 [Arguments] ${left} ${right} 496 [Arguments] ${left} ${right}
428 Log ${left} 497 Log ${left}
@@ -531,6 +600,44 @@ Log differences between dicts @@ -531,6 +600,44 @@ Log differences between dicts
531 [return] ${field_value} 600 [return] ${field_value}
532 601
533 602
  603 +Отримати дані із плану
  604 + [Arguments] ${username} ${tender_uaid} ${field_name} ${object_id}=${Empty}
  605 + ${field}= Run Keyword If '${object_id}' Отримати шлях до поля об’єкта ${username} ${field_name} ${object_id}
  606 + ... ELSE Set Variable ${field_name}
  607 + ${status} ${field_value}= Run keyword and ignore error
  608 + ... get_from_object
  609 + ... ${USERS.users['${username}'].tender_data.data}
  610 + ... ${field}
  611 + # If field in cache, return its value
  612 + Run Keyword if '${status}' == 'PASS' Return from keyword ${field_value}
  613 + # Else call broker to find field
  614 + ${field_value}= Run As ${username} Отримати інформацію із плану ${tender_uaid} ${field}
  615 + # And caching its value before return
  616 + Set_To_Object ${USERS.users['${username}'].tender_data.data} ${field} ${field_value}
  617 + ${data}= munch_dict arg=${USERS.users['${username}'].tender_data.data}
  618 + Set To Dictionary ${USERS.users['${username}'].tender_data} data=${data}
  619 + Log ${USERS.users['${username}'].tender_data.data}
  620 + [return] ${field_value}
  621 +
  622 +
  623 +Отримати дані із договору
  624 + [Arguments] ${username} ${contract_uaid} ${field}
  625 + ${status} ${field_value}= Run keyword and ignore error
  626 + ... get_from_object
  627 + ... ${USERS.users['${username}'].contract_data.data}
  628 + ... ${field}
  629 + # If field in cache, return its value
  630 + Run Keyword if '${status}' == 'PASS' Return from keyword ${field_value}
  631 + # Else call broker to find field
  632 + ${field_value}= Run As ${username} Отримати інформацію із договору ${contract_uaid} ${field}
  633 + # And caching its value before return
  634 + Set_To_Object ${USERS.users['${username}'].contract_data.data} ${field} ${field_value}
  635 + ${data}= munch_dict arg=${USERS.users['${username}'].contract_data.data}
  636 + Set To Dictionary ${USERS.users['${username}'].contract_data} data=${data}
  637 + Log ${USERS.users['${username}'].contract_data.data}
  638 + [return] ${field_value}
  639 +
  640 +
534 Отримати шлях до поля об’єкта 641 Отримати шлях до поля об’єкта
535 [Arguments] ${username} ${field_name} ${object_id} 642 [Arguments] ${username} ${field_name} ${object_id}
536 ${object_type}= get_object_type_by_id ${object_id} 643 ${object_type}= get_object_type_by_id ${object_id}
@@ -660,6 +767,20 @@ Require Failure @@ -660,6 +767,20 @@ Require Failure
660 ... ${next_status} 767 ... ${next_status}
661 768
662 769
  770 +Дочекатись дати закінчення періоду уточнень
  771 + [Arguments] ${username}
  772 + Дочекатись дати ${USERS.users['${username}'].tender_data.data.enquiryPeriod.endDate}
  773 + Оновити LAST_MODIFICATION_DATE
  774 + Дочекатись синхронізації з майданчиком ${username}
  775 +
  776 +
  777 +Дочекатись дати закінчення періоду відповідей на запитання
  778 + [Arguments] ${username}
  779 + Дочекатись дати ${USERS.users['${username}'].tender_data.data.enquiryPeriod.clarificationsUntil}
  780 + Оновити LAST_MODIFICATION_DATE
  781 + Дочекатись синхронізації з майданчиком ${username}
  782 +
  783 +
663 Звірити статус тендера 784 Звірити статус тендера
664 [Arguments] ${username} ${tender_uaid} ${left} 785 [Arguments] ${username} ${tender_uaid} ${left}
665 ${right}= Run as ${username} Отримати інформацію із тендера ${tender_uaid} status 786 ${right}= Run as ${username} Отримати інформацію із тендера ${tender_uaid} status
@@ -695,7 +816,7 @@ Require Failure @@ -695,7 +816,7 @@ Require Failure
695 Оновити LAST_MODIFICATION_DATE 816 Оновити LAST_MODIFICATION_DATE
696 Дочекатись синхронізації з майданчиком ${username} 817 Дочекатись синхронізації з майданчиком ${username}
697 Wait until keyword succeeds 818 Wait until keyword succeeds
698 - ... 5 min 15 sec 819 + ... 30 min 15 sec
699 ... 15 sec 820 ... 15 sec
700 ... Звірити статус тендера 821 ... Звірити статус тендера
701 ... ${username} 822 ... ${username}
@@ -717,7 +838,7 @@ Require Failure @@ -717,7 +838,7 @@ Require Failure
717 Оновити LAST_MODIFICATION_DATE 838 Оновити LAST_MODIFICATION_DATE
718 Дочекатись синхронізації з майданчиком ${username} 839 Дочекатись синхронізації з майданчиком ${username}
719 Wait until keyword succeeds 840 Wait until keyword succeeds
720 - ... 5 min 15 sec 841 + ... 40 min 15 sec
721 ... 15 sec 842 ... 15 sec
722 ... Run Keyword And Expect Error * 843 ... Run Keyword And Expect Error *
723 ... Звірити статус тендера 844 ... Звірити статус тендера
@@ -740,7 +861,7 @@ Require Failure @@ -740,7 +861,7 @@ Require Failure
740 Оновити LAST_MODIFICATION_DATE 861 Оновити LAST_MODIFICATION_DATE
741 Дочекатись синхронізації з майданчиком ${username} 862 Дочекатись синхронізації з майданчиком ${username}
742 Wait until keyword succeeds 863 Wait until keyword succeeds
743 - ... 5 min 15 sec 864 + ... 20 min 15 sec
744 ... 15 sec 865 ... 15 sec
745 ... Звірити статус тендера 866 ... Звірити статус тендера
746 ... ${username} 867 ... ${username}
@@ -803,7 +924,7 @@ Require Failure @@ -803,7 +924,7 @@ Require Failure
803 Оновити LAST_MODIFICATION_DATE 924 Оновити LAST_MODIFICATION_DATE
804 Дочекатись синхронізації з майданчиком ${username} 925 Дочекатись синхронізації з майданчиком ${username}
805 Wait until keyword succeeds 926 Wait until keyword succeeds
806 - ... 10 min 15 sec 927 + ... 40 min 15 sec
807 ... 15 sec 928 ... 15 sec
808 ... Звірити статус тендера 929 ... Звірити статус тендера
809 ... ${username} 930 ... ${username}
@@ -855,3 +976,12 @@ Require Failure @@ -855,3 +976,12 @@ Require Failure
855 ${LAST_MODIFICATION_DATE}= Get Current TZdate 976 ${LAST_MODIFICATION_DATE}= Get Current TZdate
856 ${status}= Get Variable Value ${TEST_STATUS} PASS 977 ${status}= Get Variable Value ${TEST_STATUS} PASS
857 Run Keyword If '${status}' == 'PASS' Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE=${LAST_MODIFICATION_DATE} 978 Run Keyword If '${status}' == 'PASS' Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE=${LAST_MODIFICATION_DATE}
  979 +
  980 +
  981 +Отримати останній індекс
  982 + [Arguments] ${object} ${username}
  983 + ${status}= Run Keyword And Return Status List Should Contain Value ${USERS.users['${username}'].tender_data.data} ${object}
  984 + Run Keyword If '${status}' == 'False' Fail ${object} not found in \${USERS.users['${username}'].tender_data.data}
  985 + ${len_of_object}= Get Length ${USERS.users['${username}'].tender_data.data.${object}}
  986 + ${index}= subtraction ${len_of_object} 1
  987 + [Return] ${index}
1 # -*- coding: utf-8 -*- 1 # -*- coding: utf-8 -*-
2 from faker.providers import BaseProvider 2 from faker.providers import BaseProvider
  3 +from faker.generator import random
3 from copy import deepcopy 4 from copy import deepcopy
4 from munch import Munch 5 from munch import Munch
5 from json import load 6 from json import load
@@ -17,13 +18,14 @@ def load_data_from_file(file_name): @@ -17,13 +18,14 @@ def load_data_from_file(file_name):
17 18
18 19
19 class OP_Provider(BaseProvider): 20 class OP_Provider(BaseProvider):
20 - __fake_data = load_data_from_file("op_faker_data.json")  
21 - word_list = __fake_data.words  
22 - procuringEntities = __fake_data.procuringEntities  
23 - addresses = __fake_data.addresses  
24 - classifications = __fake_data.classifications  
25 - cpvs = __fake_data.cpvs  
26 - items_base_data = __fake_data.items_base_data 21 + _fake_data = load_data_from_file("op_faker_data.json")
  22 + word_list = _fake_data.words
  23 + procuringEntities = _fake_data.procuringEntities
  24 + addresses = _fake_data.addresses
  25 + classifications = _fake_data.classifications
  26 + cpvs = _fake_data.cpvs
  27 + items_base_data = _fake_data.items_base_data
  28 + rationale_types = _fake_data.rationale_types
27 29
28 @classmethod 30 @classmethod
29 def randomize_nb_elements(self, number=10, le=60, ge=140): 31 def randomize_nb_elements(self, number=10, le=60, ge=140):
@@ -150,3 +152,7 @@ class OP_Provider(BaseProvider): @@ -150,3 +152,7 @@ class OP_Provider(BaseProvider):
150 "description_en": item_base_data["description_en"] 152 "description_en": item_base_data["description_en"]
151 }) 153 })
152 return deepcopy(item) 154 return deepcopy(item)
  155 +
  156 + @classmethod
  157 + def rationaleTypes(self, amount=3):
  158 + return random.sample(self.rationale_types, amount)
@@ -518,7 +518,7 @@ @@ -518,7 +518,7 @@
518 }, 518 },
519 "identifier": { 519 "identifier": {
520 "scheme": "UA-EDR", 520 "scheme": "UA-EDR",
521 - "id": "02544394", 521 + "id": "13313462",
522 "legalName": "Київський професійний будівельний ліцей" 522 "legalName": "Київський професійний будівельний ліцей"
523 }, 523 },
524 "name": "Київський професійний будівельний ліцей", 524 "name": "Київський професійний будівельний ліцей",
@@ -540,7 +540,7 @@ @@ -540,7 +540,7 @@
540 }, 540 },
541 "identifier": { 541 "identifier": {
542 "scheme": "UA-EDR", 542 "scheme": "UA-EDR",
543 - "id": "01994008", 543 + "id": "00037256",
544 "legalName": "Київська міська клінічна шкірно-венерологічна лікарня" 544 "legalName": "Київська міська клінічна шкірно-венерологічна лікарня"
545 }, 545 },
546 "name": "Київська міська клінічна шкірно-венерологічна лікарня", 546 "name": "Київська міська клінічна шкірно-венерологічна лікарня",
@@ -562,7 +562,7 @@ @@ -562,7 +562,7 @@
562 }, 562 },
563 "identifier": { 563 "identifier": {
564 "scheme": "UA-EDR", 564 "scheme": "UA-EDR",
565 - "id": "37405111", 565 + "id": "21725150",
566 "legalName": "Шевченківська районна в місті Києві державна адміністрація" 566 "legalName": "Шевченківська районна в місті Києві державна адміністрація"
567 }, 567 },
568 "name": "Шевченківська районна в місті Києві державна адміністрація", 568 "name": "Шевченківська районна в місті Києві державна адміністрація",
@@ -573,512 +573,6 @@ @@ -573,512 +573,6 @@
573 "region": "Київська область", 573 "region": "Київська область",
574 "locality": "Переяслав-Хмельницький" 574 "locality": "Переяслав-Хмельницький"
575 } 575 }
576 - },  
577 - {  
578 - "contactPoint": {  
579 - "url": "http://e-tender.biz",  
580 - "telephone": "457-98-17",  
581 - "email": "poliklinika1solom@yandex.ua",  
582 - "name": "Чепіков Олександр Миколайович",  
583 - "faxNumber": "408-23-33"  
584 - },  
585 - "identifier": {  
586 - "scheme": "UA-EDR",  
587 - "id": "04593340",  
588 - "legalName": "Комунальне некомерційне підприємство \"Консультативно-діагностичний центр\" Солом’янського району міста Києва"  
589 - },  
590 - "name": "Комунальне некомерційне підприємство \"Консультативно-діагностичний центр\" Солом’янського району міста Києва",  
591 - "address": {  
592 - "postalCode": "03067",  
593 - "countryName": "Україна",  
594 - "streetAddress": "проспект Космонавта Комарова, 36, 4А",  
595 - "region": "місто Київ",  
596 - "locality": "Київ"  
597 - }  
598 - },  
599 - {  
600 - "contactPoint": {  
601 - "url": "http://osvita.kaniv.info",  
602 - "telephone": "0473632433",  
603 - "email": "kanvo@ukr.net",  
604 - "name": "П'яткова Оксана Дмитрівна",  
605 - "faxNumber": "0473632384"  
606 - },  
607 - "identifier": {  
608 - "scheme": "UA-EDR",  
609 - "id": "02147115",  
610 - "legalName": "Відділ освіти Канівської районної державної адміністрації Черкаської області"  
611 - },  
612 - "name": "Відділ освіти Канівської районної державної адміністрації Черкаської області",  
613 - "address": {  
614 - "postalCode": "19003",  
615 - "countryName": "Україна",  
616 - "streetAddress": "Леніна, 60",  
617 - "region": "Черкаська",  
618 - "locality": "Канів"  
619 - }  
620 - },  
621 - {  
622 - "contactPoint": {  
623 - "url": "http://www.pcenter.org.ua",  
624 - "telephone": "5228755",  
625 - "email": "pcenter_ekonomist@ukr.net",  
626 - "name": "Пуніна Ірина Пилипівна",  
627 - "faxNumber": "5228745"  
628 - },  
629 - "identifier": {  
630 - "scheme": "UA-EDR",  
631 - "id": "22964365",  
632 - "legalName": "Перинатальний центр м.Києва"  
633 - },  
634 - "name": "Перинатальний центр м.Києва",  
635 - "address": {  
636 - "postalCode": "03150",  
637 - "countryName": "Україна",  
638 - "streetAddress": "вулиця Івана Федорова, 9, 5А",  
639 - "region": "місто Київ",  
640 - "locality": "Київ"  
641 - }  
642 - },  
643 - {  
644 - "contactPoint": {  
645 - "url": "http://kneu.edu.ua/",  
646 - "telephone": "456-12-01",  
647 - "email": "tender01@kneu.kiev.ua",  
648 - "name": "Узунов Лев Олександрович",  
649 - "faxNumber": "371-61-72"  
650 - },  
651 - "identifier": {  
652 - "scheme": "UA-EDR",  
653 - "id": "02070884",  
654 - "legalName": "Державний вищий навчальний заклад \" Київський національний економічний університет імені Вадима Гетьмана\""  
655 - },  
656 - "name": "Державний вищий навчальний заклад \" Київський національний економічний університет імені Вадима Гетьмана\"",  
657 - "address": {  
658 - "postalCode": "03680",  
659 - "countryName": "Україна",  
660 - "streetAddress": "проспект Перемоги, 54/1",  
661 - "region": "місто Київ",  
662 - "locality": "Київ"  
663 - }  
664 - },  
665 - {  
666 - "contactPoint": {  
667 - "url": "http://vk.com/id1",  
668 - "telephone": "+380123456789",  
669 - "email": "me@example.invalid",  
670 - "name": "Гвідо ван Россум",  
671 - "faxNumber": "8-800-500-35-35"  
672 - },  
673 - "identifier": {  
674 - "scheme": "UA-EDR",  
675 - "id": "02544394",  
676 - "legalName": "Піу піу піу програміст"  
677 - },  
678 - "name": "Супер професійний освічений чуйний добрий класний милий чудовий піу піу піу програміст",  
679 - "address": {  
680 - "postalCode": "01488",  
681 - "countryName": "Україна",  
682 - "streetAddress": "вулиця Лінуса Торвальдса, 228",  
683 - "region": "Тернопільська область",  
684 - "locality": "Козятин"  
685 - }  
686 - },  
687 - {  
688 - "contactPoint": {  
689 - "url": "http://gorsvet.kiev.ua",  
690 - "telephone": "0444580520",  
691 - "email": "kievgorsvet_z@ukr.net",  
692 - "name": "Зайченко Марина Григорівна",  
693 - "faxNumber": "0444580520"  
694 - },  
695 - "identifier": {  
696 - "scheme": "UA-EDR",  
697 - "id": "03360905",  
698 - "legalName": "Комунальне підприємство електромереж зовнішнього освітлення м. Києва «Київміськсвітло»"  
699 - },  
700 - "name": "Комунальне підприємство електромереж зовнішнього освітлення м. Києва «Київміськсвітло»",  
701 - "address": {  
702 - "postalCode": "03680",  
703 - "countryName": "Україна",  
704 - "streetAddress": "вулиця Виборзька, 40, 95",  
705 - "region": "місто Київ",  
706 - "locality": "Київ"  
707 - }  
708 - },  
709 - {  
710 - "contactPoint": {  
711 - "url": "http://dk.kievcity.gov.ua",  
712 - "telephone": "0442346071",  
713 - "email": "buhkapela@ukr.net",  
714 - "name": "Литвин Наталія Миколаївна",  
715 - "faxNumber": "0442346071"  
716 - },  
717 - "identifier": {  
718 - "scheme": "UA-EDR",  
719 - "id": "02226079",  
720 - "legalName": "\"Концертний заклад культури \"Муніципальна академічна чоловіча хорова капела ім. Л.М. Ревуцького\""  
721 - },  
722 - "name": "\"Концертний заклад культури \"Муніципальна академічна чоловіча хорова капела ім. Л.М. Ревуцького\"",  
723 - "address": {  
724 - "postalCode": "01004",  
725 - "countryName": "Україна",  
726 - "streetAddress": "Крутий узвіз, 1/2, 2/1",  
727 - "region": "місто Київ",  
728 - "locality": "Київ"  
729 - }  
730 - },  
731 - {  
732 - "contactPoint": {  
733 - "url": "http://honchar.org.ua",  
734 - "telephone": "280-29-31",  
735 - "email": "chayka.pl@gmail.com",  
736 - "name": "Полякова Лариса Михайлівна",  
737 - "faxNumber": "288-92-68"  
738 - },  
739 - "identifier": {  
740 - "scheme": "UA-EDR",  
741 - "id": "21657170",  
742 - "legalName": "Національний центр народної культури \"Музей Івана Гончара\""  
743 - },  
744 - "name": "Національний центр народної культури \"Музей Івана Гончара\"",  
745 - "address": {  
746 - "postalCode": "01015",  
747 - "countryName": "Україна",  
748 - "streetAddress": "вулиця Лаврська, 19",  
749 - "region": "місто Київ",  
750 - "locality": "Київ"  
751 - }  
752 - },  
753 - {  
754 - "contactPoint": {  
755 - "url": "http://gorsvet.kiev.ua",  
756 - "telephone": "0444580520",  
757 - "email": "kievgorsvet_z@ukr.net",  
758 - "name": "Зайченко Марина Григорівна",  
759 - "faxNumber": "0444580520"  
760 - },  
761 - "identifier": {  
762 - "scheme": "UA-EDR",  
763 - "id": "03360905",  
764 - "legalName": "Комунальне підприємство електромереж зовнішнього освітлення м. Києва «Київміськсвітло»"  
765 - },  
766 - "name": "Комунальне підприємство електромереж зовнішнього освітлення м. Києва «Київміськсвітло»",  
767 - "address": {  
768 - "postalCode": "03680",  
769 - "countryName": "Україна",  
770 - "streetAddress": "вулиця Виборзька, 40, 95",  
771 - "region": "місто Київ",  
772 - "locality": "Київ"  
773 - }  
774 - },  
775 - {  
776 - "contactPoint": {  
777 - "url": "http://ksli.at.ua/",  
778 - "telephone": "0444082566",  
779 - "email": "kcli@ukr.net",  
780 - "name": "Бондар Наталія Сергіївна",  
781 - "faxNumber": "0444082566"  
782 - },  
783 - "identifier": {  
784 - "scheme": "UA-EDR",  
785 - "id": "23516367",  
786 - "legalName": "Загальноосвітній навчальний заклад \"Київський спортивний ліцей-інтернат\""  
787 - },  
788 - "name": "Загальноосвітній навчальний заклад \"Київський спортивний ліцей-інтернат\"",  
789 - "address": {  
790 - "postalCode": "03126",  
791 - "countryName": "Україна",  
792 - "streetAddress": "вулиця Михайла Донця, 46, 26",  
793 - "region": "місто Київ",  
794 - "locality": "Київ"  
795 - }  
796 - },  
797 - {  
798 - "contactPoint": {  
799 - "url": "http://kpt.kiev.ua/",  
800 - "telephone": "0999826173",  
801 - "email": "kpt-t@ukr.net",  
802 - "name": "ГУЛАЙ ОЛЕКСАНДР ВІКТОРОВИЧ",  
803 - "faxNumber": "0442546580"  
804 - },  
805 - "identifier": {  
806 - "scheme": "UA-EDR",  
807 - "id": "31725604",  
808 - "legalName": "КОМУНАЛЬНЕ ПІДПРИЄМСТВО \"КИЇВПАСТРАНС\""  
809 - },  
810 - "name": "КОМУНАЛЬНЕ ПІДПРИЄМСТВО \"КИЇВПАСТРАНС\"",  
811 - "address": {  
812 - "postalCode": "04070",  
813 - "countryName": "Україна",  
814 - "streetAddress": "Набережне шосе, 2",  
815 - "region": "місто Київ",  
816 - "locality": "Київ"  
817 - }  
818 - },  
819 - {  
820 - "contactPoint": {  
821 - "url": "http://www.energoatom.kiev.ua/ua/separated/atc/",  
822 - "telephone": "044-406-56-84",  
823 - "email": "tverdovska@atc.gov.ua",  
824 - "name": "Твердовська Тетяна Нінелівна",  
825 - "faxNumber": "044-406-56-84"  
826 - },  
827 - "identifier": {  
828 - "scheme": "UA-EDR",  
829 - "id": "20055078",  
830 - "legalName": "ВП «Аварійно-технічний центр» ДП «НАЕК «Енергоатом»"  
831 - },  
832 - "name": "ВП «Аварійно-технічний центр» ДП «НАЕК «Енергоатом»",  
833 - "address": {  
834 - "postalCode": "08140",  
835 - "countryName": "Україна",  
836 - "streetAddress": "вулиця Припятська, 2",  
837 - "region": "Київська область",  
838 - "locality": "Білогородка"  
839 - }  
840 - },  
841 - {  
842 - "contactPoint": {  
843 - "url": "http://www.delta-pilot.ua/",  
844 - "telephone": "0512501151",  
845 - "email": "kryukovsky@delta-pilot.ua",  
846 - "name": "Філія \"Дельта-лоцман\" державного підприємства \"Адміністрація морських портів України\"",  
847 - "faxNumber": "0512501162"  
848 - },  
849 - "identifier": {  
850 - "scheme": "UA-EDR",  
851 - "id": "38728507",  
852 - "legalName": "Філія \"Дельта-лоцман\" державного підприємства \"Адміністрація морських портів України\""  
853 - },  
854 - "name": "Філія \"Дельта-лоцман\" державного підприємства \"Адміністрація морських портів України\"",  
855 - "address": {  
856 - "postalCode": "54017",  
857 - "countryName": "Україна",  
858 - "streetAddress": "вулиця Лягіна, 26",  
859 - "region": "Миколаївська область",  
860 - "locality": "Миколаїв"  
861 - }  
862 - },  
863 - {  
864 - "contactPoint": {  
865 - "url": "http://plus.google.com/106215980992271934972/about?gl=ua&hl=ru",  
866 - "telephone": "0445646186",  
867 - "email": "darnsp@health.kiev.ua",  
868 - "name": "Сірук Олексій Вікторович",  
869 - "faxNumber": "0445646186"  
870 - },  
871 - "identifier": {  
872 - "scheme": "UA-EDR",  
873 - "id": "16466597",  
874 - "legalName": "Стоматологічна поліклініка Дарницького району м. Києва"  
875 - },  
876 - "name": "Стоматологічна поліклініка Дарницького району м. Києва",  
877 - "address": {  
878 - "postalCode": "02091",  
879 - "countryName": "Україна",  
880 - "streetAddress": "Харківське шосе, 3Б, 168Е",  
881 - "region": "місто Київ",  
882 - "locality": "Київ"  
883 - }  
884 - },  
885 - {  
886 - "contactPoint": {  
887 - "url": "http://2422171.kiev.ua",  
888 - "telephone": "0442422339",  
889 - "email": "sol-ruotender@ukr.net",  
890 - "name": "Несвятипасха Тетяна Іллівна",  
891 - "faxNumber": "0442420728"  
892 - },  
893 - "identifier": {  
894 - "scheme": "UA-EDR",  
895 - "id": "37485490",  
896 - "legalName": "Управління освіти Солом'янської районної в місті Києві державної адміністрації"  
897 - },  
898 - "name": "Управління освіти Солом'янської районної в місті Києві державної адміністрації",  
899 - "address": {  
900 - "postalCode": "03087",  
901 - "countryName": "Україна",  
902 - "streetAddress": "Пітерська вулиця, 12, 12",  
903 - "region": "місто Київ",  
904 - "locality": "Київ"  
905 - }  
906 - },  
907 - {  
908 - "contactPoint": {  
909 - "url": "http://www.kievcity.gov.ua",  
910 - "telephone": "235-23-87",  
911 - "email": "chevchcrp@ukr.net",  
912 - "name": "Савенко Наталія Іванівна",  
913 - "faxNumber": "482-06-85"  
914 - },  
915 - "identifier": {  
916 - "scheme": "UA-EDR",  
917 - "id": "38947811",  
918 - "legalName": "Комунальне некомерційне підприємство \"Консультативно-діагностичний центр\" Шевченківського району міста Києва"  
919 - },  
920 - "name": "Комунальне некомерційне підприємство \"Консультативно-діагностичний центр\" Шевченківського району міста Києва",  
921 - "address": {  
922 - "postalCode": "01032",  
923 - "countryName": "Україна",  
924 - "streetAddress": "вулиця Назарівська, 98, 23",  
925 - "region": "місто Київ",  
926 - "locality": "Київ"  
927 - }  
928 - },  
929 - {  
930 - "contactPoint": {  
931 - "url": "http://www.uspa.gov.ua/",  
932 - "telephone": "380512508797",  
933 - "email": "shyrikm@ukr.net",  
934 - "name": "МФ ДП \"АМПУ\" (адміністрація Миколаївського МП)",  
935 - "faxNumber": "380512508818"  
936 - },  
937 - "identifier": {  
938 - "scheme": "UA-EDR",  
939 - "id": "38728444",  
940 - "legalName": "МФ ДП \"АМПУ\" (адміністрація Миколаївського МП)"  
941 - },  
942 - "name": "МФ ДП \"АМПУ\" (адміністрація Миколаївського МП)",  
943 - "address": {  
944 - "postalCode": "54020",  
945 - "countryName": "Україна",  
946 - "streetAddress": "вулиця Млинна, 23, 23",  
947 - "region": "Миколаївська область",  
948 - "locality": "Миколаїв"  
949 - }  
950 - },  
951 - {  
952 - "contactPoint": {  
953 - "url": "http://www.uspa.gov.ua/",  
954 - "telephone": "380512508797",  
955 - "email": "shyrikm@ukr.net",  
956 - "name": "МФ ДП \"АМПУ\" (адміністрація Миколаївського МП)",  
957 - "faxNumber": "380512508818"  
958 - },  
959 - "identifier": {  
960 - "scheme": "UA-EDR",  
961 - "id": "38728444",  
962 - "legalName": "МФ ДП \"АМПУ\" (адміністрація Миколаївського МП)"  
963 - },  
964 - "name": "МФ ДП \"АМПУ\" (адміністрація Миколаївського МП)",  
965 - "address": {  
966 - "postalCode": "54020",  
967 - "countryName": "Україна",  
968 - "streetAddress": "вулиця Млинна, 23, 23",  
969 - "region": "Миколаївська область",  
970 - "locality": "Миколаїв"  
971 - }  
972 - },  
973 - {  
974 - "contactPoint": {  
975 - "url": "http://www.shevruo.kiev.ua/",  
976 - "telephone": "489-02-47",  
977 - "email": "lkovalenko@meta.ua",  
978 - "name": "Коваленко Леся Аркадіївна",  
979 - "faxNumber": "489-02-47"  
980 - },  
981 - "identifier": {  
982 - "scheme": "UA-EDR",  
983 - "id": "37470086",  
984 - "legalName": "Управління освіти Шевченківської районної в місті Києві державної адміністрації"  
985 - },  
986 - "name": "Управління освіти Шевченківської районної в місті Києві державної адміністрації",  
987 - "address": {  
988 - "postalCode": "04119",  
989 - "countryName": "Україна",  
990 - "streetAddress": "вулиця Молдавська, 6А",  
991 - "region": "місто Київ",  
992 - "locality": "Київ"  
993 - }  
994 - },  
995 - {  
996 - "contactPoint": {  
997 - "url": "http://www.ruo-obolon.kiev.ua/",  
998 - "telephone": "0444109322",  
999 - "email": "katorgina@ukr.net",  
1000 - "name": "Циганок Анджела Михайлівна",  
1001 - "faxNumber": "0444197359"  
1002 - },  
1003 - "identifier": {  
1004 - "scheme": "UA-EDR",  
1005 - "id": "37445442",  
1006 - "legalName": "Управління освіти Оболонської районної в місті Києві державної адміністрації"  
1007 - },  
1008 - "name": "Управління освіти Оболонської районної в місті Києві державної адміністрації",  
1009 - "address": {  
1010 - "postalCode": "04211",  
1011 - "countryName": "Україна",  
1012 - "streetAddress": "Оболонський проспект, 11А, 8А",  
1013 - "region": "місто Київ",  
1014 - "locality": "Київ"  
1015 - }  
1016 - },  
1017 - {  
1018 - "contactPoint": {  
1019 - "url": "http://dsmsu.gov.ua",  
1020 - "telephone": "2897782",  
1021 - "email": "anton.gubin@ukr.net",  
1022 - "name": "Губін Антон Борисович",  
1023 - "faxNumber": "2897788"  
1024 - },  
1025 - "identifier": {  
1026 - "scheme": "UA-EDR",  
1027 - "id": "03767831",  
1028 - "legalName": "Державна установа \"Управління збірних команд та забезпечення спортивних заходів \"Укрспортзабезпечення\""  
1029 - },  
1030 - "name": "Державна установа \"Управління збірних команд та забезпечення спортивних заходів \"Укрспортзабезпечення\"",  
1031 - "address": {  
1032 - "postalCode": "01001",  
1033 - "countryName": "Україна",  
1034 - "streetAddress": "вулиця Саксаганського, 30Б, 4Б",  
1035 - "region": "місто Київ",  
1036 - "locality": "Київ"  
1037 - }  
1038 - },  
1039 - {  
1040 - "contactPoint": {  
1041 - "url": "http://www.shev.gov.ua/",  
1042 - "telephone": "2341170",  
1043 - "email": "buh510@ukr.net",  
1044 - "name": "Ліповець Євген Іванович",  
1045 - "faxNumber": "2343591"  
1046 - },  
1047 - "identifier": {  
1048 - "scheme": "UA-EDR",  
1049 - "id": "37405111",  
1050 - "legalName": "Шевченківська районна в місті Києві державна адміністрація"  
1051 - },  
1052 - "name": "Шевченківська районна в місті Києві державна адміністрація",  
1053 - "address": {  
1054 - "postalCode": "01030",  
1055 - "countryName": "Україна",  
1056 - "streetAddress": "Богдана Хмельницького вулиця, 21-29",  
1057 - "region": "Київська область",  
1058 - "locality": "Переяслав-Хмельницький"  
1059 - }  
1060 - },  
1061 - {  
1062 - "contactPoint": {  
1063 - "url": "http://don.kievcity.gov.ua",  
1064 - "telephone": "0442798301",  
1065 - "email": "ssrv1970@ukr.net",  
1066 - "name": "Сорокун Рімма Вікторівна",  
1067 - "faxNumber": "0442798301"  
1068 - },  
1069 - "identifier": {  
1070 - "scheme": "UA-EDR",  
1071 - "id": "02147629",  
1072 - "legalName": "Департамент освіти і науки, молоді та спорту виконавчого органу Київської міської ради (Київської міської державної адміністрації)"  
1073 - },  
1074 - "name": "Департамент освіти і науки, молоді та спорту виконавчого органу Київської міської ради (Київської міської державної адміністрації)",  
1075 - "address": {  
1076 - "postalCode": "01004",  
1077 - "countryName": "Україна",  
1078 - "streetAddress": "вулиця Пушкіна, 3, 1",  
1079 - "region": "Київська область",  
1080 - "locality": "Яготин"  
1081 - }  
1082 } 576 }
1083 ], 577 ],
1084 "addresses": [ 578 "addresses": [
@@ -8121,5 +7615,15 @@ @@ -8121,5 +7615,15 @@
8121 "name": "набір" 7615 "name": "набір"
8122 } 7616 }
8123 } 7617 }
  7618 + ],
  7619 + "rationale_types": [
  7620 + "volumeCuts",
  7621 + "itemPriceVariation",
  7622 + "qualityImprovement",
  7623 + "durationExtension",
  7624 + "priceReduction",
  7625 + "taxRate",
  7626 + "thirdParty",
  7627 + "fiscalYearExtension"
8124 ] 7628 ]
8125 } 7629 }
@@ -476,6 +476,42 @@ ${ITEM_MEAT} ${True} @@ -476,6 +476,42 @@ ${ITEM_MEAT} ${True}
476 Звірити відображення поля title документа ${USERS.users['${tender_owner}']['tender_document']['doc_id']} із ${USERS.users['${tender_owner}'].tender_document.doc_name} для користувача ${viewer} 476 Звірити відображення поля title документа ${USERS.users['${tender_owner}']['tender_document']['doc_id']} із ${USERS.users['${tender_owner}'].tender_document.doc_name} для користувача ${viewer}
477 477
478 478
  479 +Можливість отримати інформацію про документацію до тендера
  480 + [Tags] ${USERS.users['${tender_owner}'].broker}: Відображення документації
  481 + ... tender_owner
  482 + ... ${USERS.users['${tender_owner}'].broker}
  483 + ... get_file_properties
  484 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  485 + Отримати інформацію про документ тендера ${USERS.users['${tender_owner}'].tender_document.doc_id} ${tender_owner}
  486 +
  487 +
  488 +Можливість отримати інформацію про документацію до лотів
  489 + [Tags] ${USERS.users['${tender_owner}'].broker}: Відображення документації
  490 + ... tender_owner
  491 + ... ${USERS.users['${tender_owner}'].broker}
  492 + ... get_file_properties
  493 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  494 + Отримати інформацію про документ лотів ${USERS.users['${tender_owner}'].lots_documents[0].doc_id} ${tender_owner}
  495 +
  496 +
  497 +Можливість перевірити інформацію про документацію до тендера
  498 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  499 + ... viewer
  500 + ... ${USERS.users['${viewer}'].broker}
  501 + ... compare_file_properties
  502 + Завантажити дані про тендер
  503 + Звірити інформацію про документацію ${USERS.users['${viewer}'].tender_file_properties} ${viewer}
  504 +
  505 +
  506 +Можливість перевірити інформацію про документацію до лотів
  507 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
  508 + ... viewer
  509 + ... ${USERS.users['${viewer}'].broker}
  510 + ... compare_file_properties
  511 + Завантажити дані про тендер
  512 + Звірити інформацію про документацію ${USERS.users['${viewer}'].lot_file_properties} ${viewer}
  513 +
  514 +
479 Відображення заголовку документації до всіх лотів 515 Відображення заголовку документації до всіх лотів
480 [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації 516 [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
481 ... viewer 517 ... viewer
@@ -1002,7 +1038,7 @@ ${ITEM_MEAT} ${True} @@ -1002,7 +1038,7 @@ ${ITEM_MEAT} ${True}
1002 ... ${USERS.users['${tender_owner}'].broker} 1038 ... ${USERS.users['${tender_owner}'].broker}
1003 ... answer_tender_claim 1039 ... answer_tender_claim
1004 [Teardown] Оновити LAST_MODIFICATION_DATE 1040 [Teardown] Оновити LAST_MODIFICATION_DATE
1005 - Можливість відповісти на вимогу про виправлення умов закупівлі 1041 + Можливість відповісти resolved на вимогу про виправлення умов tender
1006 1042
1007 1043
1008 Відображення статусу 'answered' вимоги про виправлення умов закупівлі 1044 Відображення статусу 'answered' вимоги про виправлення умов закупівлі
@@ -1189,7 +1225,7 @@ ${ITEM_MEAT} ${True} @@ -1189,7 +1225,7 @@ ${ITEM_MEAT} ${True}
1189 ... ${USERS.users['${tender_owner}'].broker} 1225 ... ${USERS.users['${tender_owner}'].broker}
1190 ... answer_lot_claim 1226 ... answer_lot_claim
1191 [Teardown] Оновити LAST_MODIFICATION_DATE 1227 [Teardown] Оновити LAST_MODIFICATION_DATE
1192 - Можливість відповісти на вимогу про виправлення умов лоту 1228 + Можливість відповісти resolved на вимогу про виправлення умов lot
1193 1229
1194 1230
1195 Відображення статусу 'answered' вимоги про виправлення умов лоту 1231 Відображення статусу 'answered' вимоги про виправлення умов лоту
@@ -1364,7 +1400,7 @@ ${ITEM_MEAT} ${True} @@ -1364,7 +1400,7 @@ ${ITEM_MEAT} ${True}
1364 [Tags] ${USERS.users['${provider}'].broker}: Подання пропозиції 1400 [Tags] ${USERS.users['${provider}'].broker}: Подання пропозиції
1365 ... provider 1401 ... provider
1366 ... ${USERS.users['${provider}'].broker} 1402 ... ${USERS.users['${provider}'].broker}
1367 - ... modify_bid_by_provider 1403 + ... add_doc_to_bid_by_provider
1368 ... critical 1404 ... critical
1369 [Teardown] Оновити LAST_MODIFICATION_DATE 1405 [Teardown] Оновити LAST_MODIFICATION_DATE
1370 Можливість завантажити документ в пропозицію користувачем ${provider} 1406 Можливість завантажити документ в пропозицію користувачем ${provider}
@@ -1391,6 +1427,15 @@ ${ITEM_MEAT} ${True} @@ -1391,6 +1427,15 @@ ${ITEM_MEAT} ${True}
1391 Можливість подати цінову пропозицію користувачем ${provider1} 1427 Можливість подати цінову пропозицію користувачем ${provider1}
1392 1428
1393 1429
  1430 +Можливість зменшити пропозицію на 5% другим учасником
  1431 + [Tags] ${USERS.users['${provider1}'].broker}: Подання пропозиції
  1432 + ... provider1
  1433 + ... ${USERS.users['${provider1}'].broker}
  1434 + ... modify_bid_by_provider1
  1435 + [Teardown] Оновити LAST_MODIFICATION_DATE
  1436 + Можливість зменшити пропозицію до 95 відсотків користувачем ${provider1}
  1437 +
  1438 +
1394 Можливість подати пропозицію третім учасником 1439 Можливість подати пропозицію третім учасником
1395 [Tags] ${USERS.users['${provider1}'].broker}: Подання пропозиції 1440 [Tags] ${USERS.users['${provider1}'].broker}: Подання пропозиції
1396 ... provider2 1441 ... provider2
@@ -1445,6 +1490,66 @@ ${ITEM_MEAT} ${True} @@ -1445,6 +1490,66 @@ ${ITEM_MEAT} ${True}
1445 Можливість завантажити eligibility_documents документ до пропозиції учасником ${provider} 1490 Можливість завантажити eligibility_documents документ до пропозиції учасником ${provider}
1446 1491
1447 1492
  1493 +Неможливість задати запитання на тендер після завершення періоду уточнень
  1494 + [Tags] ${USERS.users['${provider}'].broker}: Задання запитання
  1495 + ... provider
  1496 + ... ${USERS.users['${provider}'].broker}
  1497 + ... ask_question_after_enquiry_period
  1498 + [Setup] Дочекатись дати закінчення періоду уточнень ${provider}
  1499 + Run Keyword And Expect Error * Можливість задати запитання на тендер користувачем ${provider}
  1500 +
  1501 +
  1502 +Неможливість подати вимогу про виправлення умов закупівлі після закінчення періоду подання скарг
  1503 + [Tags] ${USERS.users['${provider}'].broker}: Процес оскарження
  1504 + ... provider
  1505 + ... ${USERS.users['${provider}'].broker}
  1506 + ... create_tender_complaint_after_complaint_period
  1507 + [Setup] Дочекатись дати закінчення періоду подання скарг ${provider}
  1508 + Run Keyword And Expect Error * Можливість створити вимогу про виправлення умов закупівлі із документацією
  1509 +
  1510 +
  1511 +Неможливість відповісти на запитання до тендера після завершення періоду відповідей
  1512 + [Tags] ${USERS.users['${tender_owner}'].broker}: Відповідь на запитання
  1513 + ... tender_owner
  1514 + ... ${USERS.users['${tender_owner}'].broker}
  1515 + ... answer_question_after_clarifications_period
  1516 + [Setup] Дочекатись дати закінчення періоду відповідей на запитання ${tender_owner}
  1517 + Run Keyword And Expect Error * Можливість відповісти resolved на вимогу про виправлення умов tender
  1518 +
  1519 +
  1520 +Неможливість редагувати однопредметний тендер менше ніж за 2 дні до завершення періоду подання пропозицій
  1521 + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість редагувати тендер
  1522 + ... tender_owner
  1523 + ... ${USERS.users['${tender_owner}'].broker}
  1524 + ... modify_tender_in_tendering_period
  1525 + ${new_description}= create_fake_sentence
  1526 + Run Keyword And Expect Error * Можливість змінити поле description тендера на ${new_description}
  1527 +
  1528 +
  1529 +Можливість відповісти на запитання до тендера після продовження періоду прийому пропозицій
  1530 + [Tags] ${USERS.users['${tender_owner}'].broker}: Відповідь на запитання
  1531 + ... tender_owner
  1532 + ... ${USERS.users['${tender_owner}'].broker}
  1533 + ... answer_question_after_clarifications_period
  1534 + ... extend_enquiry_period
  1535 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  1536 + [Teardown] Оновити LAST_MODIFICATION_DATE
  1537 + Можливість продовжити період подання пропозиції на 3 днів
  1538 + Можливість відповісти на запитання на тендер
  1539 +
  1540 +
  1541 +Можливість редагувати тендер після продовження періоду прийому пропозицій
  1542 + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість редагувати тендер
  1543 + ... tender_owner
  1544 + ... ${USERS.users['${tender_owner}'].broker}
  1545 + ... modify_tender_in_tendering_period
  1546 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  1547 + [Teardown] Оновити LAST_MODIFICATION_DATE
  1548 + ${new_description}= create_fake_sentence
  1549 + Можливість змінити поле description тендера на ${new_description}
  1550 + Remove From Dictionary ${USERS.users['${tender_owner}'].tender_data.data} description
  1551 +
  1552 +
1448 Можливість редагувати однопредметний тендер більше ніж за 7 днів до завершення періоду подання пропозицій 1553 Можливість редагувати однопредметний тендер більше ніж за 7 днів до завершення періоду подання пропозицій
1449 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість редагувати тендер 1554 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість редагувати тендер
1450 ... tender_owner 1555 ... tender_owner
@@ -1531,12 +1636,12 @@ ${ITEM_MEAT} ${True} @@ -1531,12 +1636,12 @@ ${ITEM_MEAT} ${True}
1531 ############################################################################################## 1636 ##############################################################################################
1532 1637
1533 Неможливість завантажити документ першим учасником після закінчення прийому пропозицій 1638 Неможливість завантажити документ першим учасником після закінчення прийому пропозицій
1534 - [Tags] ${USERS.users['${provider1}'].broker}: Подання пропозиції 1639 + [Tags] ${USERS.users['${provider}'].broker}: Подання пропозиції
1535 ... provider 1640 ... provider
1536 - ... ${USERS.users['${provider1}'].broker} 1641 + ... ${USERS.users['${provider}'].broker}
1537 ... add_bid_doc_after_tendering_period_by_provider 1642 ... add_bid_doc_after_tendering_period_by_provider
1538 ... non-critical 1643 ... non-critical
1539 - [Setup] Дочекатись дати закінчення прийому пропозицій ${viewer} ${TENDER['TENDER_UAID']} 1644 + [Setup] Дочекатись дати закінчення прийому пропозицій ${provider} ${TENDER['TENDER_UAID']}
1540 Run Keyword And Expect Error * Можливість завантажити документ в пропозицію користувачем ${provider} 1645 Run Keyword And Expect Error * Можливість завантажити документ в пропозицію користувачем ${provider}
1541 1646
1542 1647
@@ -1652,6 +1757,15 @@ ${ITEM_MEAT} ${True} @@ -1652,6 +1757,15 @@ ${ITEM_MEAT} ${True}
1652 Можливість завантажити документ у кваліфікацію 0 пропозиції 1757 Можливість завантажити документ у кваліфікацію 0 пропозиції
1653 1758
1654 1759
  1760 +Можливість дочекатися перевірки учасників по ЄДРПОУ
  1761 + [Tags] ${USERS.users['${viewer}'].broker}: Перевірка користувачів по ЄДРПОУ
  1762 + ... tender_owner
  1763 + ... ${USERS.users['${tender_owner}'].broker}
  1764 + ... pre-qualifications_check_by_edrpou
  1765 + [Setup] Дочекатись дати початку періоду прекваліфікації ${tender_owner} ${TENDER['TENDER_UAID']}
  1766 + Дочекатися перевірки прекваліфікацій ${tender_owner} ${TENDER['TENDER_UAID']}
  1767 +
  1768 +
1655 Можливість підтвердити першу пропозицію кваліфікації 1769 Можливість підтвердити першу пропозицію кваліфікації
1656 [Tags] ${USERS.users['${tender_owner}'].broker}: Кваліфікація 1770 [Tags] ${USERS.users['${tender_owner}'].broker}: Кваліфікація
1657 ... tender_owner 1771 ... tender_owner
  1 +*** Settings ***
  2 +Resource base_keywords.robot
  3 +Suite Setup Test Suite Setup
  4 +Suite Teardown Test Suite Teardown
  5 +
  6 +*** Variables ***
  7 +${MODE} planning
  8 +@{USED_ROLES} tender_owner viewer
  9 +
  10 +${NUMBER_OF_ITEMS} ${2}
  11 +${TENDER_MEAT} ${False}
  12 +${ITEM_MEAT} ${False}
  13 +
  14 +*** Test Cases ***
  15 +Можливість створити план закупівлі
  16 + [Tags] ${USERS.users['${tender_owner}'].broker}: Оголошення плану
  17 + ... tender_owner
  18 + ... ${USERS.users['${tender_owner}'].broker}
  19 + ... create_plan
  20 + [Teardown] Оновити LAST_MODIFICATION_DATE
  21 + Можливість створити план закупівлі
  22 +
  23 +
  24 +Можливість знайти план по ідентифікатору
  25 + [Tags] ${USERS.users['${viewer}'].broker}: Пошук плану
  26 + ... viewer tender_owner
  27 + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker}
  28 + ... find_plan
  29 + Можливість знайти план по ідентифікатору
  30 +
  31 +
  32 +Відображення суми бюджету
  33 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  34 + ... viewer
  35 + ... ${USERS.users['${viewer}'].broker}
  36 + ... plan_view
  37 + [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  38 + Звірити відображення поля budget.amount плану для користувача ${viewer}
  39 +
  40 +
  41 +Відображення amountNet бюджету
  42 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  43 + ... viewer
  44 + ... ${USERS.users['${viewer}'].broker}
  45 + ... plan_view
  46 + Звірити відображення поля budget.amountNet плану для користувача ${viewer}
  47 +
  48 +
  49 +Відображення опису бюджету
  50 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  51 + ... viewer
  52 + ... ${USERS.users['${viewer}'].broker}
  53 + ... plan_view
  54 + Звірити відображення поля budget.description плану для користувача ${viewer}
  55 +
  56 +
  57 +Відображення валюти бюджету
  58 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  59 + ... viewer
  60 + ... ${USERS.users['${viewer}'].broker}
  61 + ... plan_view
  62 + Звірити відображення поля budget.currency плану для користувача ${viewer}
  63 +
  64 +
  65 +Відображення id бюджету
  66 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  67 + ... viewer
  68 + ... ${USERS.users['${viewer}'].broker}
  69 + ... plan_view
  70 + Звірити відображення поля budget.id плану для користувача ${viewer}
  71 +
  72 +
  73 +Відображення id проекту в бюджеті
  74 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  75 + ... viewer
  76 + ... ${USERS.users['${viewer}'].broker}
  77 + ... plan_view
  78 + Звірити відображення поля budget.project.id плану для користувача ${viewer}
  79 +
  80 +
  81 +Відображення назви проекту в бюджеті
  82 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  83 + ... viewer
  84 + ... ${USERS.users['${viewer}'].broker}
  85 + ... plan_view
  86 + Звірити відображення поля budget.project.name плану для користувача ${viewer}
  87 +
  88 +
  89 +Відображення назви організації
  90 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  91 + ... viewer
  92 + ... ${USERS.users['${viewer}'].broker}
  93 + ... plan_view
  94 + Звірити відображення поля procuringEntity.name плану для користувача ${viewer}
  95 +
  96 +
  97 +Відображення схеми ідентифікатора організації
  98 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  99 + ... viewer
  100 + ... ${USERS.users['${viewer}'].broker}
  101 + ... plan_view
  102 + Звірити відображення поля procuringEntity.identifier.scheme плану для користувача ${viewer}
  103 +
  104 +
  105 +Відображення ідентифікатора організації
  106 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  107 + ... viewer
  108 + ... ${USERS.users['${viewer}'].broker}
  109 + ... plan_view
  110 + Звірити відображення поля procuringEntity.identifier.id плану для користувача ${viewer}
  111 +
  112 +
  113 +Відображення легально зареєстрованої назви організації
  114 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  115 + ... viewer
  116 + ... ${USERS.users['${viewer}'].broker}
  117 + ... plan_view
  118 + Звірити відображення поля procuringEntity.identifier.legalName плану для користувача ${viewer}
  119 +
  120 +
  121 +Відображення опису класифікації
  122 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  123 + ... viewer
  124 + ... ${USERS.users['${viewer}'].broker}
  125 + ... plan_view
  126 + Звірити відображення поля classification.description плану для користувача ${viewer}
  127 +
  128 +
  129 +Відображення схеми класифікації
  130 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  131 + ... viewer
  132 + ... ${USERS.users['${viewer}'].broker}
  133 + ... plan_view
  134 + Звірити відображення поля classification.scheme плану для користувача ${viewer}
  135 +
  136 +
  137 +Відображення коду класифікації
  138 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  139 + ... viewer
  140 + ... ${USERS.users['${viewer}'].broker}
  141 + ... plan_view
  142 + Звірити відображення поля classification.id плану для користувача ${viewer}
  143 +
  144 +
  145 +Відображення дати початку періоду подання пропозицій
  146 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  147 + ... viewer
  148 + ... ${USERS.users['${viewer}'].broker}
  149 + ... plan_view
  150 + Звірити відображення поля tender.tenderPeriod.startDate плану для користувача ${viewer}
  151 +
  152 +
  153 +Відображення опису об'єкта
  154 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  155 + ... viewer
  156 + ... ${USERS.users['${viewer}'].broker}
  157 + ... plan_view level2
  158 + Звірити відображення description усіх предметів плану для користувача ${viewer}
  159 +
  160 +
  161 +Відображення кількості необхідних одиниць об'єкта
  162 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  163 + ... viewer
  164 + ... ${USERS.users['${viewer}'].broker}
  165 + ... plan_view
  166 + Звірити відображення quantity усіх предметів плану для користувача ${viewer}
  167 +
  168 +
  169 +Відображення кінцевої дати доставки
  170 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  171 + ... viewer
  172 + ... ${USERS.users['${viewer}'].broker}
  173 + ... plan_view
  174 + Звірити відображення deliveryDate.endDate усіх предметів плану для користувача ${viewer}
  175 +
  176 +
  177 +Відображення коду одиниці виміру
  178 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  179 + ... viewer
  180 + ... ${USERS.users['${viewer}'].broker}
  181 + ... plan_view
  182 + Звірити відображення unit.code усіх предметів плану для користувача ${viewer}
  183 +
  184 +
  185 +Відображення назви одиниці виміру
  186 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  187 + ... viewer
  188 + ... ${USERS.users['${viewer}'].broker}
  189 + ... plan_view
  190 + Звірити відображення unit.name усіх предметів плану для користувача ${viewer}
  191 +
  192 +
  193 +Відображення опису класифікації об'єкта
  194 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  195 + ... viewer
  196 + ... ${USERS.users['${viewer}'].broker}
  197 + ... plan_view
  198 + Звірити відображення classification.description усіх предметів плану для користувача ${viewer}
  199 +
  200 +
  201 +Відображення схеми класифікації об'єкта
  202 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  203 + ... viewer
  204 + ... ${USERS.users['${viewer}'].broker}
  205 + ... plan_view
  206 + Звірити відображення classification.scheme усіх предметів плану для користувача ${viewer}
  207 +
  208 +
  209 +Відображення коду класифікації об'єкта
  210 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних плану
  211 + ... viewer
  212 + ... ${USERS.users['${viewer}'].broker}
  213 + ... plan_view
  214 + Звірити відображення classification.id усіх предметів плану для користувача ${viewer}
  215 +
  216 +
  217 +Можливість змінити опис бюджету
  218 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування плану
  219 + ... tender_owner
  220 + ... ${USERS.users['${tender_owner}'].broker}
  221 + ... modify_plan
  222 + [Teardown] Оновити LAST_MODIFICATION_DATE
  223 + ${new_description}= create_fake_sentence
  224 + Можливість змінити поле budget.description плану на ${new_description}
  225 +
  226 +
  227 +Можливість змінити суму бюджету
  228 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування плану
  229 + ... tender_owner
  230 + ... ${USERS.users['${tender_owner}'].broker}
  231 + ... modify_plan
  232 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  233 + [Teardown] Оновити LAST_MODIFICATION_DATE
  234 + ${new_amount}= create_fake_value_amount
  235 + Можливість змінити поле budget.amount плану на ${new_amount}
  236 +
  237 +
  238 +Можливість змінити кінцеву дату доставки
  239 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування плану
  240 + ... tender_owner
  241 + ... ${USERS.users['${tender_owner}'].broker}
  242 + ... modify_plan
  243 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  244 + [Teardown] Оновити LAST_MODIFICATION_DATE
  245 + ${new_date}= create_fake_date
  246 + Можливість змінити поле items[0].deliveryDate.endDate плану на ${new_date}
  247 +
  248 +
  249 +Можливість змінити кількість одиниць предмету закупівлі
  250 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування плану
  251 + ... tender_owner
  252 + ... ${USERS.users['${tender_owner}'].broker}
  253 + ... modify_plan
  254 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  255 + [Teardown] Оновити LAST_MODIFICATION_DATE
  256 + ${new_quantity}= create_fake_value_amount
  257 + Можливість змінити поле items[0].quantity плану на ${new_quantity}
  258 +
  259 +
  260 +Можливість додати предмет закупівлі
  261 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування плану
  262 + ... tender_owner
  263 + ... ${USERS.users['${tender_owner}'].broker}
  264 + ... add_item
  265 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  266 + [Teardown] Оновити LAST_MODIFICATION_DATE
  267 + Можливість додати предмет закупівлі в план
  268 +
  269 +
  270 +Можливість видалити предмет закупівлі
  271 + [Tags] ${USERS.users['${tender_owner}'].broker}: Редагування плану
  272 + ... tender_owner
  273 + ... ${USERS.users['${tender_owner}'].broker}
  274 + ... delete_item
  275 + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
  276 + [Teardown] Оновити LAST_MODIFICATION_DATE
  277 + Можливість видалити предмет закупівлі з плану
@@ -99,7 +99,7 @@ ${award_index} ${0} @@ -99,7 +99,7 @@ ${award_index} ${0}
99 ... answer_award_claim 99 ... answer_award_claim
100 [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} 100 [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
101 [Teardown] Оновити LAST_MODIFICATION_DATE 101 [Teardown] Оновити LAST_MODIFICATION_DATE
102 - Можливість відповісти на вимогу про виправлення визначення ${award_index} переможця 102 + Можливість відповісти resolved на вимогу про виправлення визначення ${award_index} переможця
103 103
104 104
105 Відображення статусу 'answered' вимоги про виправлення визначення переможця 105 Відображення статусу 'answered' вимоги про виправлення визначення переможця
@@ -211,6 +211,15 @@ ${award_index} ${0} @@ -211,6 +211,15 @@ ${award_index} ${0}
211 # QUALIFICATION 211 # QUALIFICATION
212 ############################################################################################## 212 ##############################################################################################
213 213
  214 +Можливість дочекатися перевірки переможців по ЄДРПОУ
  215 + [Tags] ${USERS.users['${tender_owner}'].broker}: Перевірка користувача по ЄДРПОУ
  216 + ... tender_owner
  217 + ... ${USERS.users['${tender_owner}'].broker}
  218 + ... qualifications_check_by_edrpou
  219 + [Setup] Дочекатись дати початку періоду кваліфікації ${tender_owner} ${TENDER['TENDER_UAID']}
  220 + Дочекатися перевірки кваліфікацій ${tender_owner} ${TENDER['TENDER_UAID']}
  221 +
  222 +
214 Можливість завантажити документ рішення кваліфікаційної комісії для підтвердження постачальника 223 Можливість завантажити документ рішення кваліфікаційної комісії для підтвердження постачальника
215 [Tags] ${USERS.users['${tender_owner}'].broker}: Процес кваліфікації 224 [Tags] ${USERS.users['${tender_owner}'].broker}: Процес кваліфікації
216 ... tender_owner 225 ... tender_owner
@@ -252,4 +261,4 @@ ${award_index} ${0} @@ -252,4 +261,4 @@ ${award_index} ${0}
252 ... tender_owner 261 ... tender_owner
253 ... ${USERS.users['${tender_owner}'].broker} 262 ... ${USERS.users['${tender_owner}'].broker}
254 ... qualification_approve_second_award level1 263 ... qualification_approve_second_award level1
255 - Run As ${tender_owner} Підтвердити постачальника ${TENDER['TENDER_UAID']} -1 264 + Run As ${tender_owner} Підтвердити постачальника ${TENDER['TENDER_UAID']} 1
1 *** Variables *** 1 *** Variables ***
  2 +${RESOURCE} tenders # possible values: tenders, auctions
2 ${API_HOST_URL} https://lb.api-sandbox.openprocurement.org 3 ${API_HOST_URL} https://lb.api-sandbox.openprocurement.org
3 ${API_VERSION} 2.3 4 ${API_VERSION} 2.3
4 ${BROKER} Quinta 5 ${BROKER} Quinta
  6 +${DS_HOST_URL} https://upload.docs-sandbox.openprocurement.org
5 ${ROLE} viewer 7 ${ROLE} viewer
6 -${RESOURCE} tenders 8 +${EDR_HOST_URL} https://lb.edr-sandbox.openprocurement.org
  9 +${EDR_VERSION} 0
@@ -19,10 +19,14 @@ from robot.output.loggerhelper import Message @@ -19,10 +19,14 @@ from robot.output.loggerhelper import Message
19 from .initial_data import ( 19 from .initial_data import (
20 create_fake_doc, 20 create_fake_doc,
21 create_fake_sentence, 21 create_fake_sentence,
  22 + create_fake_amount,
  23 + create_fake_date,
22 fake, 24 fake,
  25 + subtraction,
23 field_with_id, 26 field_with_id,
24 test_bid_data, 27 test_bid_data,
25 test_bid_value, 28 test_bid_value,
  29 + test_change_data,
26 test_claim_answer_data, 30 test_claim_answer_data,
27 test_claim_data, 31 test_claim_data,
28 test_complaint_data, 32 test_complaint_data,
@@ -42,10 +46,19 @@ from .initial_data import ( @@ -42,10 +46,19 @@ from .initial_data import (
42 test_tender_data_limited, 46 test_tender_data_limited,
43 test_tender_data_openeu, 47 test_tender_data_openeu,
44 test_tender_data_openua, 48 test_tender_data_openua,
  49 + test_tender_data_planning,
  50 + test_tender_data_openua_defense,
  51 + test_bid_competitive_data,
  52 + create_fake_title,
  53 + create_fake_value_amount,
  54 + test_change_document_data,
  55 + convert_amount,
  56 + get_number_of_minutes,
  57 + get_hash,
45 ) 58 )
46 from barbecue import chef 59 from barbecue import chef
47 from restkit import request 60 from restkit import request
48 -# End of non-pointless imports 61 +# End of non-pointless import
49 import os 62 import os
50 import re 63 import re
51 64
@@ -307,6 +320,9 @@ def prepare_test_tender_data(procedure_intervals, @@ -307,6 +320,9 @@ def prepare_test_tender_data(procedure_intervals,
307 elif mode == 'openua': 320 elif mode == 'openua':
308 return munchify({'data': test_tender_data_openua( 321 return munchify({'data': test_tender_data_openua(
309 tender_parameters, submissionMethodDetails)}) 322 tender_parameters, submissionMethodDetails)})
  323 + elif mode == 'openua_defense':
  324 + return munchify({'data': test_tender_data_openua_defense(
  325 + tender_parameters, submissionMethodDetails)})
310 elif mode == 'open_competitive_dialogue': 326 elif mode == 'open_competitive_dialogue':
311 return munchify({'data': test_tender_data_competitive_dialogue( 327 return munchify({'data': test_tender_data_competitive_dialogue(
312 tender_parameters, submissionMethodDetails)}) 328 tender_parameters, submissionMethodDetails)})
@@ -317,6 +333,9 @@ def prepare_test_tender_data(procedure_intervals, @@ -317,6 +333,9 @@ def prepare_test_tender_data(procedure_intervals,
317 tender_parameters, 333 tender_parameters,
318 submissionMethodDetails=submissionMethodDetails, 334 submissionMethodDetails=submissionMethodDetails,
319 accelerator=accelerator)}) 335 accelerator=accelerator)})
  336 + elif mode == 'planning':
  337 + return munchify({'data': test_tender_data_planning(
  338 + tender_parameters)})
320 # The previous line needs an explicit keyword argument because, 339 # The previous line needs an explicit keyword argument because,
321 # unlike previous functions, this one has three arguments. 340 # unlike previous functions, this one has three arguments.
322 raise ValueError("Invalid mode for prepare_test_tender_data") 341 raise ValueError("Invalid mode for prepare_test_tender_data")
@@ -500,10 +519,18 @@ def get_object_by_id(data, given_object_id, slice_element, object_id): @@ -500,10 +519,18 @@ def get_object_by_id(data, given_object_id, slice_element, object_id):
500 519
501 520
502 def generate_test_bid_data(tender_data): 521 def generate_test_bid_data(tender_data):
503 - bid = test_bid_data()  
504 - if tender_data.get('procurementMethodType', '')[:-2] in ('aboveThreshold', 'competitiveDialogue'): 522 + if tender_data.get('procurementMethodType', '') in (
  523 + 'aboveThresholdUA',
  524 + 'aboveThresholdUA.defense',
  525 + 'aboveThresholdEU',
  526 + 'competitiveDialogueUA',
  527 + 'competitiveDialogueEU'
  528 + ):
  529 + bid = test_bid_competitive_data()
505 bid.data.selfEligible = True 530 bid.data.selfEligible = True
506 bid.data.selfQualified = True 531 bid.data.selfQualified = True
  532 + else:
  533 + bid = test_bid_data()
507 if 'lots' in tender_data: 534 if 'lots' in tender_data:
508 bid.data.lotValues = [] 535 bid.data.lotValues = []
509 for lot in tender_data['lots']: 536 for lot in tender_data['lots']:
@@ -533,8 +560,8 @@ def generate_test_bid_data_second_stage(tender_data, index='0'): @@ -533,8 +560,8 @@ def generate_test_bid_data_second_stage(tender_data, index='0'):
533 bid['data']['tenderers'][0]['identifier']['id'] = tender_data['shortlistedFirms'][index]['identifier']['id'] 560 bid['data']['tenderers'][0]['identifier']['id'] = tender_data['shortlistedFirms'][index]['identifier']['id']
534 bid['data']['tenderers'][0]['identifier']['scheme'] = tender_data['shortlistedFirms'][index]['identifier']['scheme'] 561 bid['data']['tenderers'][0]['identifier']['scheme'] = tender_data['shortlistedFirms'][index]['identifier']['scheme']
535 bid['data']['tenderers'][0]['identifier']['legalName'] = tender_data['shortlistedFirms'][index]['identifier']['legalName'] 562 bid['data']['tenderers'][0]['identifier']['legalName'] = tender_data['shortlistedFirms'][index]['identifier']['legalName']
536 -  
537 - if tender_data.get('procurementMethodType', '')[:-2] in ('aboveThreshold', 'competitiveDialogue'): 563 + bid['data']['tenderers'][0]['name'] = tender_data['shortlistedFirms'][index]['name']
  564 + if tender_data.get('procurementMethodType', '') in ('competitiveDialogueEU.stage2', 'competitiveDialogueUA.stage2'):
538 bid.data.selfEligible = True 565 bid.data.selfEligible = True
539 bid.data.selfQualified = True 566 bid.data.selfQualified = True
540 if 'lots' in tender_data: 567 if 'lots' in tender_data:
@@ -551,3 +578,12 @@ def generate_test_bid_data_second_stage(tender_data, index='0'): @@ -551,3 +578,12 @@ def generate_test_bid_data_second_stage(tender_data, index='0'):
551 parameter = {"value": fake.random_element(elements=(0.05, 0.01, 0)), "code": feature.get('code', '')} 578 parameter = {"value": fake.random_element(elements=(0.05, 0.01, 0)), "code": feature.get('code', '')}
552 bid.data.parameters.append(parameter) 579 bid.data.parameters.append(parameter)
553 return bid 580 return bid
  581 +
  582 +
  583 +def convert_amount_string_to_float(amount_string):
  584 + return float(amount_string.replace(' ', '').replace(',', '.'))
  585 +
  586 +
  587 +def compare_rationale_types(type1, type2):
  588 + return set(type1) == set(type2)
  589 +
@@ -78,4 +78,19 @@ @@ -78,4 +78,19 @@
78 -i qualification_add_doc_to_second_award 78 -i qualification_add_doc_to_second_award
79 -i qualification_approve_second_award 79 -i qualification_approve_second_award
80 80
81 --i contract_sign  
  81 +-i contract_view
  82 +-i modify_contract
  83 +-i add_doc_to_contract
  84 +-i contract_sign
  85 +
  86 +-i find_contract
  87 +-i access_contract
  88 +-i submit_change
  89 +-i view_change
  90 +-i upload_change_document
  91 +-i modify_change
  92 +-i apply_change
  93 +-i add_contract_doc
  94 +-i termination_reasons
  95 +-i amount_paid
  96 +-i contract_termination
@@ -15,6 +15,7 @@ @@ -15,6 +15,7 @@
15 15
16 -i make_bid_by_provider 16 -i make_bid_by_provider
17 -i make_bid_by_provider1 17 -i make_bid_by_provider1
  18 +-i modify_bid_by_provider1
18 19
19 -i auction 20 -i auction
20 21
  1 +-v MODE:openeu
  2 +
  3 +-v NUMBER_OF_ITEMS:1
  4 +-v NUMBER_OF_LOTS:2
  5 +
  6 +-v TENDER_MEAT:True
  7 +-v ITEM_MEAT:True
  8 +-v LOT_MEAT:True
  9 +
  10 +-i create_tender
  11 +-i find_tender
  12 +-i tender_cancellation
  13 +-i lot_cancellation
  14 +-i delete_lot
@@ -52,7 +52,6 @@ @@ -52,7 +52,6 @@
52 52
53 -i make_bid_without_related_lot 53 -i make_bid_without_related_lot
54 -i make_bid_by_provider 54 -i make_bid_by_provider
55 - -i modify_bid_by_provider  
56 -i add_doc_to_bid_by_provider 55 -i add_doc_to_bid_by_provider
57 -i make_bid_by_provider1 56 -i make_bid_by_provider1
58 -i make_bid_by_provider2 57 -i make_bid_by_provider2
@@ -81,6 +80,8 @@ @@ -81,6 +80,8 @@
81 80
82 -i pre-qualification_view 81 -i pre-qualification_view
83 82
  83 +#-i pre-qualifications_check_by_edrpou
  84 +
84 -i pre-qualification_add_doc_to_first_bid 85 -i pre-qualification_add_doc_to_first_bid
85 -i pre-qualification_approve_first_bid 86 -i pre-qualification_approve_first_bid
86 87
  1 +-v MODE:open_competitive_dialogue
  2 +
  3 +-v DIALOGUE_TYPE:UA
  4 +
  5 +-v NUMBER_OF_ITEMS:1
  6 +-v NUMBER_OF_LOTS:1
  7 +
  8 +-v TENDER_MEAT:False
  9 +-v ITEM_MEAT:False
  10 +-v LOT_MEAT:False
  11 +
  12 +
  13 +-i create_tender
  14 +-i find_tender
  15 +-i tender_view
  16 +
  17 +-i make_bid_by_provider
  18 +-i make_bid_by_provider1
  19 +-i make_bid_by_provider2
  20 +
  21 +-i open_tender_view
  22 +
  23 +#-i pre-qualifications_check_by_edrpou
  24 +
  25 +-i pre-qualification_approve_first_bid
  26 +-i pre-qualification_approve_second_bid
  27 +-i pre-qualification_approve_third_bid
  28 +
  29 +-i pre-qualification_approve_qualifications
  30 +
  31 +-i stage2_pending_status_view
  32 +
  33 +-i wait_bridge_for_work
  34 +
  35 +-i get_second_stage
  36 +
  37 +-i compare_stages
  38 +
  39 +-i save_tender_second_stage
  40 +
  41 +-i activate_second_stage
  42 +
  43 +-i make_bid_by_provider_second_stage
  44 +-i make_bid_by_provider1_second_stage
  45 +
  46 +-i auction
  47 +
  48 +-i qualification_approve_first_award
  49 +
  50 +-i contract_sign
1 --s openProcedure  
2 -  
3 -v MODE:open_competitive_dialogue 1 -v MODE:open_competitive_dialogue
4 2
5 3
@@ -21,6 +19,8 @@ @@ -21,6 +19,8 @@
21 19
22 -i open_tender_view 20 -i open_tender_view
23 21
  22 +#-i pre-qualifications_check_by_edrpou
  23 +
24 -i pre-qualification_approve_first_bid 24 -i pre-qualification_approve_first_bid
25 -i pre-qualification_approve_second_bid 25 -i pre-qualification_approve_second_bid
26 -i pre-qualification_approve_third_bid 26 -i pre-qualification_approve_third_bid
@@ -42,6 +42,8 @@ @@ -42,6 +42,8 @@
42 -i make_bid_by_provider_second_stage 42 -i make_bid_by_provider_second_stage
43 -i make_bid_by_provider1_second_stage 43 -i make_bid_by_provider1_second_stage
44 44
  45 +#-i qualifications_check_by_edrpou
  46 +
45 -i pre-qualification_approve_first_bid_second_stage 47 -i pre-qualification_approve_first_bid_second_stage
46 -i pre-qualification_approve_second_bid_second_stage 48 -i pre-qualification_approve_second_bid_second_stage
47 49
  1 +-v MODE:reporting
  2 +
  3 +-v NUMBER_OF_ITEMS:1
  4 +-v NUMBER_OF_LOTS:0
  5 +
  6 +-v TENDER_MEAT:False
  7 +-v ITEM_MEAT:False
  8 +-v LOT_MEAT:False
  9 +
  10 +-i create_tender
  11 +-i find_tender
  12 +-i tender_cancellation
1 --i create_tender  
2 --i find_tender  
3 --i tender_cancelation  
1 --i create_tender  
2 --i find_tender  
3 --i tender_cancelation  
  1 +-v MODE:openua_defense
  2 +
  3 +-v NUMBER_OF_ITEMS:1
  4 +-v NUMBER_OF_LOTS:1
  5 +
  6 +-v TENDER_MEAT:True
  7 +-v ITEM_MEAT:True
  8 +-v LOT_MEAT:True
  9 +
  10 +
  11 +-i create_tender
  12 +-i find_tender
  13 +-i tender_view
  14 +-i meat_view
  15 +-i lot_view
  16 +-i open_tender_view
  17 +
  18 +-i extend_tendering_period
  19 +-i add_tender_doc
  20 +-i add_lot_doc
  21 +-i modify_lot_value_amount
  22 +-i add_lot
  23 + -i delete_lot
  24 +-i add_item
  25 + -i delete_item
  26 +-i add_tender_meat
  27 + -i delete_tender_meat
  28 +-i add_lot_meat
  29 + -i delete_lot_meat
  30 +-i add_item_meat
  31 + -i delete_item_meat
  32 +
  33 +-i ask_question_to_tender
  34 +-i ask_question_to_item
  35 + -i answer_question_to_item
  36 +-i ask_question_to_lot
  37 + -i answer_question_to_lot
  38 +-i modify_tender_after_questions
  39 +-i modify_lot_after_questions
  40 +
  41 +-i create_tender_claim
  42 + -i answer_tender_claim
  43 + -i resolve_tender_claim
  44 +-i modify_tender_after_claim
  45 +
  46 +-i create_lot_claim
  47 + -i answer_lot_claim
  48 + -i resolve_lot_claim
  49 +-i modify_lot_after_claim
  50 +
  51 +-i make_bid_without_related_lot
  52 +-i make_bid_without_parameters
  53 +-i make_bid_by_provider
  54 + -i modify_bid_by_provider
  55 + -i add_doc_to_bid_by_provider
  56 +-i ask_question_after_enquiry_period
  57 +-i create_tender_complaint_after_complaint_period
  58 +-i answer_question_after_clarifications_period
  59 +-i modify_tender_in_tendering_period
  60 + -i open_confirm_first_bid
  61 +-i bid_view_in_tendering_period
  62 +
  63 +-i add_bid_doc_after_tendering_period_by_provider
  64 +
  65 +-i qualification_add_doc_to_first_award
  66 +-i qualification_approve_first_award
  67 +
  68 +-i contract_sign
@@ -80,6 +80,8 @@ @@ -80,6 +80,8 @@
80 80
81 -i pre-qualification_view 81 -i pre-qualification_view
82 82
  83 +#-i pre-qualifications_check_by_edrpou
  84 +
83 -i pre-qualification_add_doc_to_first_bid 85 -i pre-qualification_add_doc_to_first_bid
84 -i pre-qualification_approve_first_bid 86 -i pre-qualification_approve_first_bid
85 87
@@ -93,9 +95,27 @@ @@ -93,9 +95,27 @@
93 -i auction 95 -i auction
94 96
95 -i qualification_add_doc_to_first_award 97 -i qualification_add_doc_to_first_award
  98 +
  99 +#-i qualifications_check_by_edrpou
  100 +
96 -i qualification_approve_first_award 101 -i qualification_approve_first_award
97 -i qualification_cancel_first_award_qualification 102 -i qualification_cancel_first_award_qualification
98 -i qualification_add_doc_to_second_award 103 -i qualification_add_doc_to_second_award
99 -i qualification_approve_second_award 104 -i qualification_approve_second_award
100 105
101 --i contract_sign  
  106 +-i contract_view
  107 +-i modify_contract
  108 +-i add_doc_to_contract
  109 +-i contract_sign
  110 +
  111 +-i find_contract
  112 +-i access_contract
  113 +-i submit_change
  114 +-i view_change
  115 +-i upload_change_document
  116 +-i modify_change
  117 +-i apply_change
  118 +-i add_contract_doc
  119 +-i termination_reasons
  120 +-i amount_paid
  121 +-i contract_termination
@@ -18,12 +18,15 @@ @@ -18,12 +18,15 @@
18 18
19 -i open_tender_view 19 -i open_tender_view
20 20
  21 +#-i pre-qualifications_check_by_edrpou
  22 +
21 -i pre-qualification_approve_first_bid 23 -i pre-qualification_approve_first_bid
22 -i pre-qualification_approve_second_bid 24 -i pre-qualification_approve_second_bid
23 -i pre-qualification_approve_qualifications 25 -i pre-qualification_approve_qualifications
24 26
25 -i auction 27 -i auction
26 28
  29 +#-i qualifications_check_by_edrpou
27 -i qualification_approve_first_award 30 -i qualification_approve_first_award
28 31
29 -i contract_sign 32 -i contract_sign
@@ -73,9 +73,25 @@ @@ -73,9 +73,25 @@
73 -i auction 73 -i auction
74 74
75 -i qualification_add_doc_to_first_award 75 -i qualification_add_doc_to_first_award
  76 +#-i qualifications_check_by_edrpou
76 -i qualification_approve_first_award 77 -i qualification_approve_first_award
77 -i qualification_cancel_first_award_qualification 78 -i qualification_cancel_first_award_qualification
78 -i qualification_add_doc_to_second_award 79 -i qualification_add_doc_to_second_award
79 -i qualification_approve_second_award 80 -i qualification_approve_second_award
80 81
81 --i contract_sign  
  82 +-i contract_view
  83 +-i modify_contract
  84 +-i add_doc_to_contract
  85 +-i contract_sign
  86 +
  87 +-i find_contract
  88 +-i access_contract
  89 +-i submit_change
  90 +-i view_change
  91 +-i upload_change_document
  92 +-i modify_change
  93 +-i apply_change
  94 +-i add_contract_doc
  95 +-i termination_reasons
  96 +-i amount_paid
  97 +-i contract_termination
@@ -17,6 +17,8 @@ @@ -17,6 +17,8 @@
17 17
18 -i auction 18 -i auction
19 19
  20 +#-i qualifications_check_by_edrpou
  21 +
20 -i qualification_approve_first_award 22 -i qualification_approve_first_award
21 23
22 -i contract_sign 24 -i contract_sign
1 --i create_tender  
2 --i find_tender  
3 --i tender_cancelation  
Please register or login to post a comment