Commit 222e9062c1e8b6b9e3b41823fd18765dadbbb1cc

Authored by kosaniak
Committed by GitHub
2 parents 2943e696 cccadce9

Merge pull request #594 from kosaniak/master

Merge devel into master
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 79 robot_tests.broker.uub = git ${remotes:gh}openprocurement/robot_tests.broker.uub.git
80 80 robot_tests.broker.aps = git ${remotes:gh}openprocurement/robot_tests.broker.aps.git
81 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 84 [versions]
85 85 Faker = 0.7.7
... ...
... ... @@ -14,9 +14,12 @@ Resource base_keywords.robot
14 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 21 Можливість змінити поле tenderPeriod.endDate тендера на ${endDate}
  22 + Remove From Dictionary ${USERS.users['${tender_owner}'].tender_data.data.tenderPeriod} endDate
20 23
21 24 ##############################################################################################
22 25 # BIDDING
... ... @@ -31,7 +34,7 @@ Resource base_keywords.robot
31 34
32 35 Можливість підтвердити цінову пропозицію учасником ${username}
33 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 38 Run As ${username} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} status ${status}
36 39
37 40 ##############################################################################################
... ...
... ... @@ -102,4 +102,4 @@ Suite Teardown Test Suite Teardown
102 102 ... Run Keywords
103 103 ... Wait Until Keyword Succeeds 5 times 30 s Page should not contain очікуємо розкриття учасників
104 104 ... AND
105   - ... Close browser
  105 + ... Close browser
\ No newline at end of file
... ...
  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 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 57 :FOR ${username} IN ${tender_owner} ${provider} ${provider1} ${viewer}
42 58 \ Можливість знайти тендер по ідентифікатору для користувача ${username}
... ... @@ -47,6 +63,16 @@ Resource resource.robot
47 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 76 Можливість знайти тендер по ідентифікатору ${tender_id} та зберегти його в ${save_location} для користувача ${username}
51 77 Дочекатись синхронізації з майданчиком ${username}
52 78 Run as ${username} Пошук тендера по ідентифікатору ${tender_id} ${save_location}
... ... @@ -56,6 +82,10 @@ Resource resource.robot
56 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 90 ${file_path} ${file_name} ${file_content}= create_fake_doc
61 91 Run As ${tender_owner} Завантажити документ ${file_path} ${TENDER['TENDER_UAID']}
... ... @@ -79,10 +109,25 @@ Resource resource.robot
79 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 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 131 Звірити відображення поля ${field} документа ${doc_id} із ${left} для користувача ${username}
87 132 ${right}= Run As ${username} Отримати інформацію із документа ${TENDER['TENDER_UAID']} ${doc_id} ${field}
88 133 Порівняти об'єкти ${left} ${right}
... ... @@ -101,6 +146,10 @@ Resource resource.robot
101 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 154 Run as ${tender_owner} Отримати тендер другого етапу та зберегти його ${USERS.users['${tender_owner}'].tender_data.data.stage2TenderID}
106 155 ${TENDER_UAID_second_stage}= BuiltIn.Catenate SEPARATOR= ${TENDER['TENDER_UAID']} .2
... ... @@ -115,6 +164,25 @@ Resource resource.robot
115 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 186 Звірити відображення дати ${date} тендера для усіх користувачів
119 187 :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1}
120 188 \ Звірити відображення дати ${date} тендера для користувача ${username}
... ... @@ -146,6 +214,17 @@ Resource resource.robot
146 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 228 Звірити відображення поля ${field} ${item_index} предмету для користувача ${username}
150 229 ${item_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data['items'][${item_index}]}
151 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 492 :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1}
414 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 561 # QUESTIONS
418 562 ##############################################################################################
... ... @@ -669,7 +813,7 @@ Resource resource.robot
669 813
670 814 Можливість скасувати вимогу про виправлення визначення ${award_index} переможця
671 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 817 ${data}= Create Dictionary
674 818 ... status=${status}
675 819 ... cancellationReason=${cancellation_reason}
... ... @@ -682,7 +826,6 @@ Resource resource.robot
682 826 ... ${cancellation_data}
683 827 ... ${award_index}
684 828 Set To Dictionary ${USERS.users['${provider}'].claim_data} cancellation ${cancellation_data}
685   - ${status}= Set variable if 'open' in '${MODE}' stopping cancelled
686 829 Wait until keyword succeeds
687 830 ... 40 min 15 sec
688 831 ... 15 sec
... ... @@ -971,6 +1114,7 @@ Resource resource.robot
971 1114 ... ELSE Set Variable ${None}
972 1115 Run As ${username} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} ${lots_ids} ${features_ids}
973 1116
  1117 +
974 1118 Неможливість подати цінову пропозицію без прив’язки до лоту користувачем ${username}
975 1119 ${bid}= Підготувати дані для подання пропозиції
976 1120 ${values}= Get Variable Value ${bid.data.lotValues[0]}
... ... @@ -1042,9 +1186,65 @@ Resource resource.robot
1042 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 1202 Run as ${tender_owner}
1047 1203 ... Підтвердити підписання контракту
1048 1204 ... ${TENDER['TENDER_UAID']}
1049 1205 ... ${0}
1050 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
\ No newline at end of file
... ...
1 1 *** Settings ***
2 2 Library openprocurement_client_helper.py
  3 +Library openprocurement_client.utils
3 4
4 5
5 6 *** Keywords ***
... ... @@ -16,16 +17,51 @@ Library openprocurement_client_helper.py
16 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 34 [Arguments] ${username}
21   - [Documentation] Відкрити браузер, створити об’єкт api wrapper, тощо
  35 + [Documentation] Відкрити браузер, створити об’єкти api wrapper і
  36 + ... ds api wrapper, приєднати їх атрибутами до користувача, тощо
  37 + Log ${RESOURCE}
22 38 Log ${API_HOST_URL}
23 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 51 Set To Dictionary ${USERS.users['${username}']} client=${api_wrapper}
26 52 Set To Dictionary ${USERS.users['${username}']} access_token=${EMPTY}
27 53 ${id_map}= Create Dictionary
28 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 65 Log Variables
30 66
31 67
... ... @@ -35,11 +71,11 @@ Library openprocurement_client_helper.py
35 71 Log ${tender_uaid}
36 72 Log ${filepath}
37 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 75 ${reply}= Call Method ${USERS.users['${username}'].client} upload_document ${filepath} ${tender}
40 76 Log object data ${reply} reply
41 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 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 99 [Arguments] ${username} ${tender_uaid} ${doc_id}
55 100 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
... ... @@ -58,6 +103,13 @@ Library openprocurement_client_helper.py
58 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 114 [Arguments] ${username} ${tender_uaid} ${lot_id}=${Empty}
63 115 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
... ... @@ -103,6 +155,20 @@ Library openprocurement_client_helper.py
103 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 173 [Arguments] ${username} ${tender_uaid} ${save_key}=tender_data
108 174 ${internalid}= openprocurement_client.Отримати internal id по UAid ${username} ${tender_uaid}
... ... @@ -114,6 +180,17 @@ Library openprocurement_client_helper.py
114 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 195 [Arguments] ${username} ${tender_id}
119 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 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 214 [Arguments] ${username} ${tender_uaid} ${field_name}
133 215 openprocurement_client.Пошук тендера по ідентифікатору
... ... @@ -143,6 +225,21 @@ Library openprocurement_client_helper.py
143 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 244 [Arguments] ${username} ${tender_uaid} ${fieldname} ${fieldvalue}
148 245 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
... ... @@ -154,6 +251,16 @@ Library openprocurement_client_helper.py
154 251 ${tender}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender}
155 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 265 # Item operations
159 266 ##############################################################################
... ... @@ -165,6 +272,13 @@ Library openprocurement_client_helper.py
165 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 283 [Arguments] ${username} ${tender_uaid} ${item_id} ${field_name}
170 284 ${field_name}= Отримати шлях до поля об’єкта ${username} ${field_name} ${item_id}
... ... @@ -178,6 +292,13 @@ Library openprocurement_client_helper.py
178 292 Remove From List ${tender.data['items']} ${item_index}
179 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 303 # Lot operations
183 304 ##############################################################################
... ... @@ -247,6 +368,7 @@ Library openprocurement_client_helper.py
247 368 Скасувати лот
248 369 [Arguments] ${username} ${tender_uaid} ${lot_id} ${cancellation_reason} ${document} ${new_description}
249 370 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
  371 + ${lot_index}= get_object_index_by_id ${tender.data.lots} ${lot_id}
250 372 ${lot_id}= Get Variable Value ${tender.data.lots[${lot_index}].id}
251 373 ${data}= Create dictionary
252 374 ... reason=${cancellation_reason}
... ... @@ -705,8 +827,16 @@ Library openprocurement_client_helper.py
705 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 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 840 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
711 841 ${lots_ids}= Run Keyword IF ${lots_ids} Set Variable ${lots_ids}
712 842 ... ELSE Create List
... ... @@ -722,12 +852,17 @@ Library openprocurement_client_helper.py
722 852 \ Set To Dictionary ${bid.data.parameters[${index}]} code=${code}
723 853 ${reply}= Call Method ${USERS.users['${username}'].client} create_bid ${tender} ${bid}
724 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 859 Set To Dictionary ${reply['data']} status=${status}
727 860 ${reply_active}= Call Method ${USERS.users['${username}'].client} patch_bid ${tender} ${reply}
728 861 Set To Dictionary ${USERS.users['${username}']} access_token=${reply['access']['token']}
729 862 Set To Dictionary ${USERS.users['${username}'].bidresponses['bid'].data} id=${reply['data']['id']}
730 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 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 901 ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['bid'].data.id}
767 902 ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid}
768 903 ${tender}= set_access_key ${tender} ${USERS.users['${username}']['access_token']}
769 904 ${bid}= openprocurement_client.Отримати пропозицію ${username} ${tender_uaid}
770 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 907 ${uploaded_file} = Create Dictionary
773 908 ... filepath=${path}
774 909 ... upload_response=${response}
... ... @@ -789,8 +924,8 @@ Library openprocurement_client_helper.py
789 924 Отримати пропозицію
790 925 [Arguments] ${username} ${tender_uaid}
791 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 929 ${reply}= Call Method ${USERS.users['${username}'].client} get_bid ${tender} ${bid_id} ${token}
795 930 ${reply}= munch_dict arg=${reply}
796 931 [return] ${reply}
... ... @@ -806,6 +941,59 @@ Library openprocurement_client_helper.py
806 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 998 [Documentation]
811 999 ... [Arguments] Username, tender uaid, qualification number and document to upload
... ... @@ -956,19 +1144,6 @@ Library openprocurement_client_helper.py
956 1144 ${filename}= download_file_from_url ${document.url} ${OUTPUT_DIR}${/}${document.title}
957 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 1148 # OpenUA procedure
974 1149 ##############################################################################
... ... @@ -1069,3 +1244,217 @@ Library openprocurement_client_helper.py
1069 1244 set_to_object ${tender} data.status active.tendering
1070 1245 ${reply}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender}
1071 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 6 from openprocurement_client.exceptions import IdNotFound
4   -from restkit.errors import RequestFailed, BadStatusLine
  7 +from restkit.errors import RequestFailed, BadStatusLine, ResourceError
5 8 from retrying import retry
  9 +from time import sleep
6 10 import os
7 11 import urllib
8 12
9   -
10 13 def retry_if_request_failed(exception):
11 14 if isinstance(exception, RequestFailed):
12 15 status_code = getattr(exception, 'status_int', None)
... ... @@ -19,13 +22,54 @@ def retry_if_request_failed(exception):
19 22
20 23
21 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 27 def request(self, *args, **kwargs):
24 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 75 def get_complaint_internal_id(tender, complaintID):
... ... @@ -53,6 +97,10 @@ def get_document_by_id(data, doc_id):
53 97 for document in complaint.get('documents', []):
54 98 if doc_id in document.get('title', ''):
55 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 104 for award in data.get('awards', []):
57 105 for document in award.get('documents', []):
58 106 if doc_id in document.get('title', ''):
... ... @@ -77,3 +125,13 @@ def download_file_from_url(url, path_to_save_file):
77 125 f.write(urllib.urlopen(url).read())
78 126 f.close()
79 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 1 *** Settings ***
2   -Resource keywords.robot
3   -Resource resource.robot
  2 +Resource base_keywords.robot
4 3 Suite Setup Test Suite Setup
5 4 Suite Teardown Test Suite Teardown
6 5
7 6 *** Variables ***
8   -@{USED_ROLES} tender_owner viewer
  7 +@{USED_ROLES} tender_owner viewer
9 8
10 9
11 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 35 ... tender_owner
27 36 ... ${USERS.users['${tender_owner}'].broker}
28   - ... tender_cancelation
  37 + ... lot_cancellation
29 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 44 ... viewer
36 45 ... ${USERS.users['${viewer}'].broker}
37   - ... tender_cancelation
  46 + ... lot_cancellation
38 47 [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  48 + ${cancellation_index}= Отримати останній індекс cancellations ${viewer}
39 49 Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']}
40 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 56 ... viewer
47 57 ... ${USERS.users['${viewer}'].broker}
48   - ... tender_cancelation
  58 + ... lot_cancellation
  59 + ${cancellation_index}= Отримати останній індекс cancellations ${viewer}
49 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 67 ... viewer
57 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 75 ... viewer
65 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 83 ... viewer
73 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 94 ... tender_owner
84 95 ... ${USERS.users['${tender_owner}'].broker}
85   - ... lot_cancelation
  96 + ... tender_cancellation
86 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 103 ... viewer
93 104 ... ${USERS.users['${viewer}'].broker}
94   - ... lot_cancelation
  105 + ... tender_cancellation
95 106 [Setup] Дочекатись синхронізації з майданчиком ${viewer}
  107 + ${cancellation_index}= Отримати останній індекс cancellations ${viewer}
96 108 Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']}
97 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 115 ... viewer
104 116 ... ${USERS.users['${viewer}'].broker}
105   - ... lot_cancelation
  117 + ... tender_cancellation
  118 + ${cancellation_index}= Отримати останній індекс cancellations ${viewer}
106 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 126 ... viewer
114 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 134 ... viewer
122 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 142 ... viewer
130 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 148 # DELETING LOT
... ... @@ -141,7 +154,7 @@ Suite Teardown Test Suite Teardown
141 154 ... ${USERS.users['${tender_owner}'].broker}
142 155 ... delete_lot
143 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 160 *** Keywords ***
... ... @@ -156,12 +169,13 @@ Suite Teardown Test Suite Teardown
156 169 Set To Dictionary ${USERS.users['${tender_owner}']} tender_cancellation_data=${cancellation_data}
157 170
158 171
159   -Можливість скасувати лот
  172 +Можливість скасувати ${index} лот
160 173 ${cancellation_data}= Підготувати дані про скасування
  174 + ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data.lots[${index}]}
161 175 Run As ${tender_owner}
162 176 ... Скасувати лот
163 177 ... ${TENDER['TENDER_UAID']}
164   - ... ${TENDER['LOT_ID']}
  178 + ... ${lot_id}
165 179 ... ${cancellation_data['cancellation_reason']}
166 180 ... ${cancellation_data['document']['doc_path']}
167 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 1 *** Settings ***
2   -Resource keywords.robot
3   -Resource resource.robot
  2 +Resource base_keywords.robot
4 3 Suite Setup Test Suite Setup
5 4 Suite Teardown Test Suite Teardown
6 5
... ... @@ -16,7 +15,7 @@ Suite Teardown Test Suite Teardown
16 15 ... find_tender level1
17 16 Завантажити дані про тендер
18 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 21 # CONTRACT
... ... @@ -27,8 +26,9 @@ Suite Teardown Test Suite Teardown
27 26 ... tender_owner
28 27 ... ${USERS.users['${tender_owner}'].broker}
29 28 ... tender_view
  29 + ${award_index}= Отримати останній індекс awards ${viewer}
30 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 34 Дочекатися закічення stand still періоду
... ... @@ -36,24 +36,157 @@ Suite Teardown Test Suite Teardown
36 36 ... tender_owner
37 37 ... ${USERS.users['${tender_owner}'].broker}
38 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 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 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 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 #
8 8 # Each field is a mode name
9 9 # Current modes are:
10   - # single, multi, limited, openua, openeu
  10 + # single, multi, limited, openua, openeu, openua_defense
11 11 #
12 12 # See `prepare_test_tender_data()`
13 13 # in `service_keywords.py` for more details
... ... @@ -32,12 +32,15 @@ Default:
32 32 openua:
33 33 accelerator: 1440
34 34 tender: [0, 15]
35   - # Please remember that openUA and openEU procedures
  35 + # Please remember that openUA, openEU and openUA_defense procedures
36 36 # forbid anyone to set or modify enquiryPeriod
37 37 # (it is set automatically)
38 38 openeu:
39 39 accelerator: 1440
40 40 tender: [0, 30]
  41 + openua_defense:
  42 + accelerator: 1440
  43 + tender: [0, 6]
41 44 open_competitive_dialogue:
42 45 accelerator: 1440
43 46 tender: [0, 30]
... ... @@ -52,6 +55,8 @@ Quinta:
52 55 tender: [1, 30]
53 56 openeu:
54 57 tender: [1, 35]
  58 + openua_defense:
  59 + tender: [0, 30]
55 60 open_competitive_dialogue:
56 61 accelerator: 1440
57 62 tender: [0, 30]
... ... @@ -151,9 +156,9 @@ ztv:
151 156 keywords_file: ztv
152 157 roles:
153 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 162 timeout_on_wait: 300
158 163 Newtend:
159 164 keywords_file: newtend
... ...
1 1 users:
2 2 Tender_Owner:
  3 + auth_ds:
  4 + tenders: [test.quintagroup.com, test.quintagroup.com]
  5 + auctions: [test.quintagroup.com, bc698baa8b814908bc75405ed3d63548]
3 6 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3
4 7 broker: Quinta
  8 + auth_edr: [test.quintagroup.com, f5111c99a97a45348d8165ba8fcf0d62]
  9 + browser: phantomjs
  10 + position: [0, 0]
  11 + size: [1400, 900]
5 12 Tender_User:
  13 + auth_ds:
  14 + tenders: [test.quintagroup.com, test.quintagroup.com]
  15 + auctions: [test.quintagroup.com, bc698baa8b814908bc75405ed3d63548]
6 16 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3
7 17 broker: Quinta
  18 + auth_edr: [test.quintagroup.com, f5111c99a97a45348d8165ba8fcf0d62]
  19 + browser: phantomjs
  20 + position: [0, 0]
  21 + size: [1400, 900]
8 22 Tender_User1:
  23 + auth_ds:
  24 + tenders: [test.quintagroup.com, test.quintagroup.com]
  25 + auctions: [test.quintagroup.com, bc698baa8b814908bc75405ed3d63548]
9 26 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3
10 27 broker: Quinta
  28 + auth_edr: [test.quintagroup.com, f5111c99a97a45348d8165ba8fcf0d62]
  29 + browser: phantomjs
  30 + position: [0, 0]
  31 + size: [1400, 900]
11 32 Tender_User2:
  33 + auth_ds:
  34 + tenders: [test.quintagroup.com, test.quintagroup.com]
  35 + auctions: [test.quintagroup.com, bc698baa8b814908bc75405ed3d63548]
12 36 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3
13 37 broker: Quinta
  38 + auth_edr: [test.quintagroup.com, f5111c99a97a45348d8165ba8fcf0d62]
  39 + browser: phantomjs
  40 + position: [0, 0]
  41 + size: [1400, 900]
14 42 Tender_Viewer:
  43 + auth_ds:
  44 + tenders: [test.quintagroup.com, test.quintagroup.com]
  45 + auctions: [test.quintagroup.com, bc698baa8b814908bc75405ed3d63548]
15 46 api_key: ""
16 47 broker: Quinta
17 48 browser: firefox
  49 + auth_edr: [test.quintagroup.com, f5111c99a97a45348d8165ba8fcf0d62]
  50 + position: [0, 0]
  51 + size: [1400, 900]
18 52 Etender_Owner:
19 53 broker: Etender
20 54 homepage: "http://bid.uat.e-tender.biz/#/"
... ...
1 1 # -*- coding: utf-8 -
2 2 import os
3 3 import random
  4 +import hashlib
4 5 from datetime import timedelta
5 6 from tempfile import NamedTemporaryFile
6 7 from uuid import uuid4
... ... @@ -17,7 +18,7 @@ fake_ru = Factory.create(locale='ru_RU')
17 18 fake_uk = Factory.create(locale='uk_UA')
18 19 fake_uk.add_provider(OP_Provider)
19 20 fake = fake_uk
20   -
  21 +used_identifier_id = []
21 22 # This workaround fixes an error caused by missing "catch_phrase" class method
22 23 # for the "ru_RU" locale in Faker >= 0.7.4
23 24 fake_ru.add_provider(CompanyProviderEnUs)
... ... @@ -28,6 +29,31 @@ def create_fake_sentence():
28 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 57 def field_with_id(prefix, sentence):
32 58 return u"{}-{}: {}".format(prefix, fake.uuid4()[:8], sentence)
33 59
... ... @@ -39,6 +65,10 @@ def translate_country_en(country):
39 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 72 def translate_country_ru(country):
43 73 if country == u"Україна":
44 74 return u"Украина"
... ... @@ -63,7 +93,7 @@ def test_tender_data(params,
63 93 submissionMethodDetails = submissionMethodDetails \
64 94 if submissionMethodDetails else "quick"
65 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 97 data = {
68 98 "mode": "test",
69 99 "submissionMethodDetails": submissionMethodDetails,
... ... @@ -145,6 +175,56 @@ def test_tender_data(params,
145 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 228 def test_tender_data_limited(params):
149 229 data = test_tender_data(params)
150 230 del data["submissionMethodDetails"]
... ... @@ -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 384 def test_bid_data():
278 385 bid = munchify({
279 386 "data": {
... ... @@ -292,7 +399,7 @@ def test_bid_value(max_value_amount):
292 399 return munchify({
293 400 "value": {
294 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 403 "valueAddedTaxIncluded": True
297 404 }
298 405 })
... ... @@ -376,6 +483,10 @@ def test_lot_document_data(document, lot_id):
376 483 document.data.update({"documentOf": "lot", "relatedItem": lot_id})
377 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 491 def test_tender_data_openua(params, submissionMethodDetails):
381 492 # We should not provide any values for `enquiryPeriod` when creating
... ... @@ -387,6 +498,16 @@ def test_tender_data_openua(params, submissionMethodDetails):
387 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 511 def test_tender_data_openeu(params, submissionMethodDetails):
391 512 # We should not provide any values for `enquiryPeriod` when creating
392 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 543 data['procuringEntity']['identifier']['legalName_en'] = fake_en.sentence(nb_words=10, variable_nb_words=True)
423 544 data['procuringEntity']['kind'] = 'general'
424 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())
\ No newline at end of file
... ...
... ... @@ -49,7 +49,7 @@ Set Suite Variable With Default Value
49 49 ${repo}= Run git remote -v
50 50 ${branch}= Run git branch -vva
51 51 ${status}= Run git status
52   - ${diff}= Run git diff
  52 + ${diff}= Run git diff
53 53 ${reflog}= Run git reflog
54 54 Log ${commit}
55 55 Log ${repo}
... ... @@ -174,6 +174,11 @@ Get Broker Property By Username
174 174 Run Keyword And Ignore Error Set To Dictionary ${artifact} tender_owner_access_token=${USERS.users['${tender_owner}'].access_token}
175 175 Run Keyword And Ignore Error Set To Dictionary ${artifact} provider_access_token=${USERS.users['${provider}'].access_token}
176 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 182 ${status} ${lots_ids}= Run Keyword And Ignore Error Отримати ідентифікатори об’єктів ${viewer} lots
178 183 Run Keyword If '${status}'=='PASS'
179 184 ... Set To Dictionary ${artifact} lots=${lots_ids}
... ... @@ -193,8 +198,12 @@ Get Broker Property By Username
193 198 Run Keyword And Ignore Error Set To Dictionary ${TENDER} LOT_ID=${ARTIFACT.lots[${lot_index}]}
194 199 ${MODE}= Get Variable Value ${MODE} ${ARTIFACT.mode}
195 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 203 Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${provider}']} access_token=${ARTIFACT.provider_access_token}
197 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 207 Set Suite Variable ${MODE}
199 208 Set Suite Variable ${lot_index}
200 209 Set Suite Variable ${TENDER}
... ... @@ -219,6 +228,15 @@ Get Broker Property By Username
219 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 241 [Arguments] ${max_lot_value_amount}
224 242 ${lot}= test_lot_data ${max_lot_value_amount}
... ... @@ -263,7 +281,7 @@ Get Broker Property By Username
263 281
264 282 Підготувати дані для подання пропозиції для другого етапу
265 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 285 [Return] ${bid}
268 286
269 287
... ... @@ -298,6 +316,14 @@ Get Broker Property By Username
298 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 328 [Arguments] ${tender_data}
303 329 # munchify is used to make deep copy of ${tender_data}
... ... @@ -405,24 +431,67 @@ Log differences between dicts
405 431 ... ${last_modification_date_corrected}
406 432 ... ${USERS.users['${username}']['LAST_REFRESH_DATE']}
407 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 436 ... AND
411 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 447 [Arguments] ${username} ${tender_uaid} ${tender_data} ${field}
416 448 ${left}= get_from_object ${tender_data.data} ${field}
417 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 465 [Arguments] ${username} ${tender_uaid} ${left} ${field} ${object_id}=${Empty}
422 466 ${right}= Отримати дані із тендера ${username} ${tender_uaid} ${field} ${object_id}
423 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 496 [Arguments] ${left} ${right}
428 497 Log ${left}
... ... @@ -531,6 +600,44 @@ Log differences between dicts
531 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 642 [Arguments] ${username} ${field_name} ${object_id}
536 643 ${object_type}= get_object_type_by_id ${object_id}
... ... @@ -660,6 +767,20 @@ Require Failure
660 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 785 [Arguments] ${username} ${tender_uaid} ${left}
665 786 ${right}= Run as ${username} Отримати інформацію із тендера ${tender_uaid} status
... ... @@ -695,7 +816,7 @@ Require Failure
695 816 Оновити LAST_MODIFICATION_DATE
696 817 Дочекатись синхронізації з майданчиком ${username}
697 818 Wait until keyword succeeds
698   - ... 5 min 15 sec
  819 + ... 30 min 15 sec
699 820 ... 15 sec
700 821 ... Звірити статус тендера
701 822 ... ${username}
... ... @@ -717,7 +838,7 @@ Require Failure
717 838 Оновити LAST_MODIFICATION_DATE
718 839 Дочекатись синхронізації з майданчиком ${username}
719 840 Wait until keyword succeeds
720   - ... 5 min 15 sec
  841 + ... 40 min 15 sec
721 842 ... 15 sec
722 843 ... Run Keyword And Expect Error *
723 844 ... Звірити статус тендера
... ... @@ -740,7 +861,7 @@ Require Failure
740 861 Оновити LAST_MODIFICATION_DATE
741 862 Дочекатись синхронізації з майданчиком ${username}
742 863 Wait until keyword succeeds
743   - ... 5 min 15 sec
  864 + ... 20 min 15 sec
744 865 ... 15 sec
745 866 ... Звірити статус тендера
746 867 ... ${username}
... ... @@ -803,7 +924,7 @@ Require Failure
803 924 Оновити LAST_MODIFICATION_DATE
804 925 Дочекатись синхронізації з майданчиком ${username}
805 926 Wait until keyword succeeds
806   - ... 10 min 15 sec
  927 + ... 40 min 15 sec
807 928 ... 15 sec
808 929 ... Звірити статус тендера
809 930 ... ${username}
... ... @@ -855,3 +976,12 @@ Require Failure
855 976 ${LAST_MODIFICATION_DATE}= Get Current TZdate
856 977 ${status}= Get Variable Value ${TEST_STATUS} PASS
857 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}
\ No newline at end of file
... ...
1 1 # -*- coding: utf-8 -*-
2 2 from faker.providers import BaseProvider
  3 +from faker.generator import random
3 4 from copy import deepcopy
4 5 from munch import Munch
5 6 from json import load
... ... @@ -17,13 +18,14 @@ def load_data_from_file(file_name):
17 18
18 19
19 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 30 @classmethod
29 31 def randomize_nb_elements(self, number=10, le=60, ge=140):
... ... @@ -150,3 +152,7 @@ class OP_Provider(BaseProvider):
150 152 "description_en": item_base_data["description_en"]
151 153 })
152 154 return deepcopy(item)
  155 +
  156 + @classmethod
  157 + def rationaleTypes(self, amount=3):
  158 + return random.sample(self.rationale_types, amount)
\ No newline at end of file
... ...
... ... @@ -518,7 +518,7 @@
518 518 },
519 519 "identifier": {
520 520 "scheme": "UA-EDR",
521   - "id": "02544394",
  521 + "id": "13313462",
522 522 "legalName": "Київський професійний будівельний ліцей"
523 523 },
524 524 "name": "Київський професійний будівельний ліцей",
... ... @@ -540,7 +540,7 @@
540 540 },
541 541 "identifier": {
542 542 "scheme": "UA-EDR",
543   - "id": "01994008",
  543 + "id": "00037256",
544 544 "legalName": "Київська міська клінічна шкірно-венерологічна лікарня"
545 545 },
546 546 "name": "Київська міська клінічна шкірно-венерологічна лікарня",
... ... @@ -562,7 +562,7 @@
562 562 },
563 563 "identifier": {
564 564 "scheme": "UA-EDR",
565   - "id": "37405111",
  565 + "id": "21725150",
566 566 "legalName": "Шевченківська районна в місті Києві державна адміністрація"
567 567 },
568 568 "name": "Шевченківська районна в місті Києві державна адміністрація",
... ... @@ -573,512 +573,6 @@
573 573 "region": "Київська область",
574 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 578 "addresses": [
... ... @@ -8121,5 +7615,15 @@
8121 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 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 516 [Tags] ${USERS.users['${viewer}'].broker}: Відображення документації
481 517 ... viewer
... ... @@ -1002,7 +1038,7 @@ ${ITEM_MEAT} ${True}
1002 1038 ... ${USERS.users['${tender_owner}'].broker}
1003 1039 ... answer_tender_claim
1004 1040 [Teardown] Оновити LAST_MODIFICATION_DATE
1005   - Можливість відповісти на вимогу про виправлення умов закупівлі
  1041 + Можливість відповісти resolved на вимогу про виправлення умов tender
1006 1042
1007 1043
1008 1044 Відображення статусу 'answered' вимоги про виправлення умов закупівлі
... ... @@ -1189,7 +1225,7 @@ ${ITEM_MEAT} ${True}
1189 1225 ... ${USERS.users['${tender_owner}'].broker}
1190 1226 ... answer_lot_claim
1191 1227 [Teardown] Оновити LAST_MODIFICATION_DATE
1192   - Можливість відповісти на вимогу про виправлення умов лоту
  1228 + Можливість відповісти resolved на вимогу про виправлення умов lot
1193 1229
1194 1230
1195 1231 Відображення статусу 'answered' вимоги про виправлення умов лоту
... ... @@ -1364,7 +1400,7 @@ ${ITEM_MEAT} ${True}
1364 1400 [Tags] ${USERS.users['${provider}'].broker}: Подання пропозиції
1365 1401 ... provider
1366 1402 ... ${USERS.users['${provider}'].broker}
1367   - ... modify_bid_by_provider
  1403 + ... add_doc_to_bid_by_provider
1368 1404 ... critical
1369 1405 [Teardown] Оновити LAST_MODIFICATION_DATE
1370 1406 Можливість завантажити документ в пропозицію користувачем ${provider}
... ... @@ -1391,6 +1427,15 @@ ${ITEM_MEAT} ${True}
1391 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 1440 [Tags] ${USERS.users['${provider1}'].broker}: Подання пропозиції
1396 1441 ... provider2
... ... @@ -1445,6 +1490,66 @@ ${ITEM_MEAT} ${True}
1445 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 1553 Можливість редагувати однопредметний тендер більше ніж за 7 днів до завершення періоду подання пропозицій
1449 1554 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість редагувати тендер
1450 1555 ... tender_owner
... ... @@ -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 1640 ... provider
1536   - ... ${USERS.users['${provider1}'].broker}
  1641 + ... ${USERS.users['${provider}'].broker}
1537 1642 ... add_bid_doc_after_tendering_period_by_provider
1538 1643 ... non-critical
1539   - [Setup] Дочекатись дати закінчення прийому пропозицій ${viewer} ${TENDER['TENDER_UAID']}
  1644 + [Setup] Дочекатись дати закінчення прийому пропозицій ${provider} ${TENDER['TENDER_UAID']}
1540 1645 Run Keyword And Expect Error * Можливість завантажити документ в пропозицію користувачем ${provider}
1541 1646
1542 1647
... ... @@ -1652,6 +1757,15 @@ ${ITEM_MEAT} ${True}
1652 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 1770 [Tags] ${USERS.users['${tender_owner}'].broker}: Кваліфікація
1657 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 + Можливість видалити предмет закупівлі з плану
\ No newline at end of file
... ...
... ... @@ -99,7 +99,7 @@ ${award_index} ${0}
99 99 ... answer_award_claim
100 100 [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
101 101 [Teardown] Оновити LAST_MODIFICATION_DATE
102   - Можливість відповісти на вимогу про виправлення визначення ${award_index} переможця
  102 + Можливість відповісти resolved на вимогу про виправлення визначення ${award_index} переможця
103 103
104 104
105 105 Відображення статусу 'answered' вимоги про виправлення визначення переможця
... ... @@ -211,6 +211,15 @@ ${award_index} ${0}
211 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 224 [Tags] ${USERS.users['${tender_owner}'].broker}: Процес кваліфікації
216 225 ... tender_owner
... ... @@ -252,4 +261,4 @@ ${award_index} ${0}
252 261 ... tender_owner
253 262 ... ${USERS.users['${tender_owner}'].broker}
254 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 1 *** Variables ***
  2 +${RESOURCE} tenders # possible values: tenders, auctions
2 3 ${API_HOST_URL} https://lb.api-sandbox.openprocurement.org
3 4 ${API_VERSION} 2.3
4 5 ${BROKER} Quinta
  6 +${DS_HOST_URL} https://upload.docs-sandbox.openprocurement.org
5 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 19 from .initial_data import (
20 20 create_fake_doc,
21 21 create_fake_sentence,
  22 + create_fake_amount,
  23 + create_fake_date,
22 24 fake,
  25 + subtraction,
23 26 field_with_id,
24 27 test_bid_data,
25 28 test_bid_value,
  29 + test_change_data,
26 30 test_claim_answer_data,
27 31 test_claim_data,
28 32 test_complaint_data,
... ... @@ -42,10 +46,19 @@ from .initial_data import (
42 46 test_tender_data_limited,
43 47 test_tender_data_openeu,
44 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 59 from barbecue import chef
47 60 from restkit import request
48   -# End of non-pointless imports
  61 +# End of non-pointless import
49 62 import os
50 63 import re
51 64
... ... @@ -307,6 +320,9 @@ def prepare_test_tender_data(procedure_intervals,
307 320 elif mode == 'openua':
308 321 return munchify({'data': test_tender_data_openua(
309 322 tender_parameters, submissionMethodDetails)})
  323 + elif mode == 'openua_defense':
  324 + return munchify({'data': test_tender_data_openua_defense(
  325 + tender_parameters, submissionMethodDetails)})
310 326 elif mode == 'open_competitive_dialogue':
311 327 return munchify({'data': test_tender_data_competitive_dialogue(
312 328 tender_parameters, submissionMethodDetails)})
... ... @@ -317,6 +333,9 @@ def prepare_test_tender_data(procedure_intervals,
317 333 tender_parameters,
318 334 submissionMethodDetails=submissionMethodDetails,
319 335 accelerator=accelerator)})
  336 + elif mode == 'planning':
  337 + return munchify({'data': test_tender_data_planning(
  338 + tender_parameters)})
320 339 # The previous line needs an explicit keyword argument because,
321 340 # unlike previous functions, this one has three arguments.
322 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 519
501 520
502 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 530 bid.data.selfEligible = True
506 531 bid.data.selfQualified = True
  532 + else:
  533 + bid = test_bid_data()
507 534 if 'lots' in tender_data:
508 535 bid.data.lotValues = []
509 536 for lot in tender_data['lots']:
... ... @@ -533,8 +560,8 @@ def generate_test_bid_data_second_stage(tender_data, index='0'):
533 560 bid['data']['tenderers'][0]['identifier']['id'] = tender_data['shortlistedFirms'][index]['identifier']['id']
534 561 bid['data']['tenderers'][0]['identifier']['scheme'] = tender_data['shortlistedFirms'][index]['identifier']['scheme']
535 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 565 bid.data.selfEligible = True
539 566 bid.data.selfQualified = True
540 567 if 'lots' in tender_data:
... ... @@ -551,3 +578,12 @@ def generate_test_bid_data_second_stage(tender_data, index='0'):
551 578 parameter = {"value": fake.random_element(elements=(0.05, 0.01, 0)), "code": feature.get('code', '')}
552 579 bid.data.parameters.append(parameter)
553 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 78 -i qualification_add_doc_to_second_award
79 79 -i qualification_approve_second_award
80 80
81   --i contract_sign
\ No newline at end of file
  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
\ No newline at end of file
... ...
... ... @@ -15,6 +15,7 @@
15 15
16 16 -i make_bid_by_provider
17 17 -i make_bid_by_provider1
  18 +-i modify_bid_by_provider1
18 19
19 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
\ No newline at end of file
... ...
... ... @@ -52,7 +52,6 @@
52 52
53 53 -i make_bid_without_related_lot
54 54 -i make_bid_by_provider
55   - -i modify_bid_by_provider
56 55 -i add_doc_to_bid_by_provider
57 56 -i make_bid_by_provider1
58 57 -i make_bid_by_provider2
... ... @@ -81,6 +80,8 @@
81 80
82 81 -i pre-qualification_view
83 82
  83 +#-i pre-qualifications_check_by_edrpou
  84 +
84 85 -i pre-qualification_add_doc_to_first_bid
85 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
\ No newline at end of file
... ...
1   --s openProcedure
2   -
3 1 -v MODE:open_competitive_dialogue
4 2
5 3
... ... @@ -21,6 +19,8 @@
21 19
22 20 -i open_tender_view
23 21
  22 +#-i pre-qualifications_check_by_edrpou
  23 +
24 24 -i pre-qualification_approve_first_bid
25 25 -i pre-qualification_approve_second_bid
26 26 -i pre-qualification_approve_third_bid
... ... @@ -42,6 +42,8 @@
42 42 -i make_bid_by_provider_second_stage
43 43 -i make_bid_by_provider1_second_stage
44 44
  45 +#-i qualifications_check_by_edrpou
  46 +
45 47 -i pre-qualification_approve_first_bid_second_stage
46 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
\ No newline at end of file
... ...
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
\ No newline at end of file
... ...
... ... @@ -80,6 +80,8 @@
80 80
81 81 -i pre-qualification_view
82 82
  83 +#-i pre-qualifications_check_by_edrpou
  84 +
83 85 -i pre-qualification_add_doc_to_first_bid
84 86 -i pre-qualification_approve_first_bid
85 87
... ... @@ -93,9 +95,27 @@
93 95 -i auction
94 96
95 97 -i qualification_add_doc_to_first_award
  98 +
  99 +#-i qualifications_check_by_edrpou
  100 +
96 101 -i qualification_approve_first_award
97 102 -i qualification_cancel_first_award_qualification
98 103 -i qualification_add_doc_to_second_award
99 104 -i qualification_approve_second_award
100 105
101   --i contract_sign
\ No newline at end of file
  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
\ No newline at end of file
... ...
... ... @@ -18,12 +18,15 @@
18 18
19 19 -i open_tender_view
20 20
  21 +#-i pre-qualifications_check_by_edrpou
  22 +
21 23 -i pre-qualification_approve_first_bid
22 24 -i pre-qualification_approve_second_bid
23 25 -i pre-qualification_approve_qualifications
24 26
25 27 -i auction
26 28
  29 +#-i qualifications_check_by_edrpou
27 30 -i qualification_approve_first_award
28 31
29 32 -i contract_sign
\ No newline at end of file
... ...
... ... @@ -73,9 +73,25 @@
73 73 -i auction
74 74
75 75 -i qualification_add_doc_to_first_award
  76 +#-i qualifications_check_by_edrpou
76 77 -i qualification_approve_first_award
77 78 -i qualification_cancel_first_award_qualification
78 79 -i qualification_add_doc_to_second_award
79 80 -i qualification_approve_second_award
80 81
81   --i contract_sign
\ No newline at end of file
  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
\ No newline at end of file
... ...
... ... @@ -17,6 +17,8 @@
17 17
18 18 -i auction
19 19
  20 +#-i qualifications_check_by_edrpou
  21 +
20 22 -i qualification_approve_first_award
21 23
22 24 -i contract_sign
\ No newline at end of file
... ...
1   --i create_tender
2   --i find_tender
3   --i tender_cancelation
Please register or login to post a comment