Showing
17 changed files
with
1710 additions
and
1242 deletions
... | ... | @@ -37,6 +37,7 @@ gh_push = git@github.com: |
37 | 37 | [sources] |
38 | 38 | barbecue = git ${remotes:gh}openprocurement/barbecue.git |
39 | 39 | openprocurement_client = git ${remotes:gh}openprocurement/openprocurement.client.python.git |
40 | +robot_tests.broker.dzo = git ${remotes:gh}openprocurement/robot_tests.broker.dzo.git | |
40 | 41 | robot_tests.broker.etender = git ${remotes:gh}openprocurement/robot_tests.broker.etender.git |
41 | 42 | robot_tests.broker.newtend = git ${remotes:gh}openprocurement/robot_tests.broker.newtend.git |
42 | 43 | robot_tests.broker.privatmarket = git ${remotes:gh}openprocurement/robot_tests.broker.privatmarket.git | ... | ... |
1 | -*** Settings *** | |
2 | -Library Selenium2Screenshots | |
3 | -Library String | |
4 | -Library DateTime | |
5 | -Library netcast_service.py | |
6 | - | |
7 | -*** Variables *** | |
8 | -${locator.tenderId} xpath=//td[./text()='TenderID']/following-sibling::td[1] | |
9 | -${locator.title} xpath=//td[./text()='Загальна назва закупівлі']/following-sibling::td[1] | |
10 | -${locator.description} xpath=//td[./text()='Предмет закупівлі']/following-sibling::td[1] | |
11 | -${locator.value.amount} xpath=//td[./text()='Максимальний бюджет']/following-sibling::td[1] | |
12 | -${locator.minimalStep.amount} xpath=//td[./text()='Мінімальний крок зменшення ціни']/following-sibling::td[1] | |
13 | -${locator.enquiryPeriod.endDate} xpath=//td[./text()='Завершення періоду обговорення']/following-sibling::td[1] | |
14 | -${locator.tenderPeriod.endDate} xpath=//td[./text()='Завершення періоду прийому пропозицій']/following-sibling::td[1] | |
15 | -${locator.items[0].deliveryAddress.countryName} xpath=//td[@class='nameField'][./text()='Адреса поставки']/following-sibling::td[1] | |
16 | -${locator.items[0].deliveryDate.endDate} xpath=//td[./text()='Кінцева дата поставки']/following-sibling::td[1] | |
17 | -${locator.items[0].classification.scheme} xpath=//td[@class = 'nameField'][./text()='Клас CPV'] | |
18 | -${locator.items[0].classification.id} xpath=//td[./text()='Клас CPV']/following-sibling::td[1]/span[1] | |
19 | -${locator.items[0].classification.description} xpath=//td[./text()='Клас CPV']/following-sibling::td[1]/span[2] | |
20 | -${locator.items[0].additionalClassifications[0].scheme} xpath=//td[@class = 'nameField'][./text()='Клас ДКПП'] | |
21 | -${locator.items[0].additionalClassifications[0].id} xpath=//td[./text()='Клас ДКПП']/following-sibling::td[1]/span[1] | |
22 | -${locator.items[0].additionalClassifications[0].description} xpath=//td[./text()='Клас ДКПП']/following-sibling::td[1]/span[2] | |
23 | -${locator.items[0].quantity} xpath=//td[./text()='Кількість']/following-sibling::td[1]/span[1] | |
24 | -${locator.items[0].unit.code} xpath=//td[./text()='Кількість']/following-sibling::td[1]/span[2] | |
25 | -${locator.questions[0].title} xpath=//div[@class = 'question relative']//div[@class = 'title'] | |
26 | -${locator.questions[0].description} xpath = //div[@class='text'] | |
27 | -${locator.questions[0].date} xpath = //div[@class='date'] | |
28 | -${locator.questions[0].answer} xpath=//div[@class = 'answer relative']//div[@class = 'text'] | |
29 | - | |
30 | -*** Keywords *** | |
31 | -Підготувати клієнт для користувача | |
32 | - [Arguments] @{ARGUMENTS} | |
33 | - [Documentation] Відкрити браузер, створити об’єкт api wrapper, тощо | |
34 | - ... ${ARGUMENTS[0]} == username | |
35 | - Open Browser | |
36 | - ... ${USERS.users['${ARGUMENTS[0]}'].homepage} | |
37 | - ... ${USERS.users['${ARGUMENTS[0]}'].browser} | |
38 | - ... alias=${ARGUMENTS[0]} | |
39 | - Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size} | |
40 | - Set Window Position @{USERS.users['${ARGUMENTS[0]}'].position} | |
41 | - Run Keyword And Ignore Error Pre Login ${ARGUMENTS[0]} | |
42 | - Wait Until Page Contains Element jquery=a[href="/cabinet"] | |
43 | - Click Element jquery=a[href="/cabinet"] | |
44 | - Run Keyword If '${username}' != 'Netcast_Viewer' Login | |
45 | - | |
46 | -Login | |
47 | - [Arguments] @{ARGUMENTS} | |
48 | - Wait Until Page Contains Element name=email 10 | |
49 | - Sleep 1 | |
50 | - Input text name=email ${USERS.users['${username}'].login} | |
51 | - Sleep 2 | |
52 | - Input text name=psw ${USERS.users['${username}'].password} | |
53 | - Wait Until Page Contains Element xpath=//button[contains(@class, 'btn')][./text()='Вхід в кабінет'] 20 | |
54 | - Click Element xpath=//button[contains(@class, 'btn')][./text()='Вхід в кабінет'] | |
55 | - | |
56 | -Pre Login | |
57 | - [Arguments] @{ARGUMENTS} | |
58 | - [Documentation] | |
59 | - ... ${ARGUMENTS[0]} == username | |
60 | - ${login}= Get Broker Property By Username ${ARGUMENTS[0]} login | |
61 | - ${password}= Get Broker Property By Username ${ARGUMENTS[0]} password | |
62 | - Wait Until Page Contains Element name=siteLogin 10 | |
63 | - Input Text name=siteLogin ${login} | |
64 | - Input Text name=sitePass ${password} | |
65 | - Click Button xpath=.//*[@id='table1']/tbody/tr/td/form/p[3]/input | |
66 | - | |
67 | -Створити тендер | |
68 | - [Arguments] @{ARGUMENTS} | |
69 | - [Documentation] | |
70 | - ... ${ARGUMENTS[0]} == username | |
71 | - ... ${ARGUMENTS[1]} == tender_data | |
72 | - #{tender_data}= Add_time_for_GUI_FrontEnds ${ARGUMENTS[1]} | |
73 | - ${items}= Get From Dictionary ${ARGUMENTS[1].data} items | |
74 | - ${title}= Get From Dictionary ${ARGUMENTS[1].data} title | |
75 | - ${description}= Get From Dictionary ${ARGUMENTS[1].data} description | |
76 | - ${budget}= Get From Dictionary ${ARGUMENTS[1].data.value} amount | |
77 | - ${step_rate}= Get From Dictionary ${ARGUMENTS[1].data.minimalStep} amount | |
78 | - | |
79 | - ${items_description}= Get From Dictionary ${ARGUMENTS[1].data} description | |
80 | - ${quantity}= Get From Dictionary ${items[0]} quantity | |
81 | - ${countryName}= Get From Dictionary ${ARGUMENTS[1].data.procuringEntity.address} countryName | |
82 | - ${delivery_end_date}= Get From Dictionary ${items[0].deliveryDate} endDate | |
83 | - ${delivery_end_date}= convert_date_to_slash_format ${delivery_end_date} | |
84 | - ${cpv}= Convert To String Картонки | |
85 | - ${cpv_id}= Get From Dictionary ${items[0].classification} id | |
86 | - ${cpv_id1}= Replace String ${cpv_id} - _ | |
87 | - ${dkpp_desc}= Get From Dictionary ${items[0].additionalClassifications[0]} description | |
88 | - ${dkpp_id}= Get From Dictionary ${items[0].additionalClassifications[0]} id | |
89 | - ${dkpp_id1}= Replace String ${dkpp_id} - _ | |
90 | - | |
91 | - ${enquiry_end_date}= Get From Dictionary ${ARGUMENTS[1].data.enquiryPeriod} endDate | |
92 | - ${enquiry_end_date}= convert_date_to_slash_format ${enquiry_end_date} | |
93 | - ${end_date}= Get From Dictionary ${ARGUMENTS[1].data.tenderPeriod} endDate | |
94 | - ${end_date}= convert_date_to_slash_format ${end_date} | |
95 | - | |
96 | - Selenium2Library.Switch Browser ${ARGUMENTS[0]} | |
97 | - Wait Until Page Contains Element jquery=a[href="/tenders/new"] 30 | |
98 | - Click Element jquery=a[href="/tenders/new"] | |
99 | - Wait Until Page Contains Element name=tender_title 30 | |
100 | - Input text name=tender_title ${title} | |
101 | - Input text name=tender_description ${description} | |
102 | - Input text name=tender_value_amount ${budget} | |
103 | - Input text name=tender_minimalStep_amount ${step_rate} | |
104 | - | |
105 | -# Додати специфікацю початок | |
106 | - Input text name=items[0][item_description] ${items_description} | |
107 | - Input text name=items[0][item_quantity] ${quantity} | |
108 | - Input text name=items[0][item_deliveryAddress_countryName] ${countryName} | |
109 | - Input text name=items[0][item_deliveryDate_endDate] ${delivery_end_date} | |
110 | - Click Element xpath=//a[contains(@data-class, 'cpv')][./text()='Визначити за довідником'] | |
111 | - Select Frame xpath=//iframe[contains(@src,'/js/classifications/cpv/uk.htm?relation=true')] | |
112 | - Input text id=search ${cpv} | |
113 | - Wait Until Page Contains ${cpv_id} | |
114 | - Click Element xpath=//a[contains(@id,'${cpv_id1}')] | |
115 | - Click Element xpath=.//*[@id='select'] | |
116 | - Unselect Frame | |
117 | - Click Element xpath=//a[contains(@data-class, 'dkpp')][./text()='Визначити за довідником'] | |
118 | - Select Frame xpath=//iframe[contains(@src,'/js/classifications/dkpp/uk.htm?relation=true')] | |
119 | - Input text id=search ${dkpp_desc} | |
120 | - Wait Until Page Contains ${dkpp_id} | |
121 | - Click Element xpath=//a[contains(@id,'${dkpp_id1}')] | |
122 | - Click Element xpath=.//*[@id='select'] | |
123 | -# Додати специфікацю кінець | |
124 | - | |
125 | - Unselect Frame | |
126 | - Input text name=plan_date ${enquiry_end_date} | |
127 | - Input text name=tender_enquiryPeriod_endDate ${enquiry_end_date} | |
128 | - Input text name=tender_tenderPeriod_endDate ${end_date} | |
129 | - | |
130 | - Додати предмет ${items[0]} 0 | |
131 | - Run Keyword if '${mode}' == 'multi' Додати багато предметів items | |
132 | - Unselect Frame | |
133 | - | |
134 | - Click Element xpath= //button[@value='publicate'] | |
135 | - Wait Until Page Contains Тендер опубліковано 30 | |
136 | - | |
137 | - ${tender_UAid}= Get Text xpath=//*/section[6]/table/tbody/tr[2]/td[2] | |
138 | - ${Ids}= Convert To String ${tender_UAid} | |
139 | - Run keyword if '${mode}' == 'multi' Set Multi Ids ${tender_UAid} | |
140 | - [return] ${Ids} | |
141 | - | |
142 | -Set Multi Ids | |
143 | - [Arguments] @{ARGUMENTS} | |
144 | - [Documentation] | |
145 | - ... ${ARGUMENTS[1]} == ${tender_UAid} | |
146 | - ${id}= Get Text xpath=//*/section[6]/table/tbody/tr[1]/td[2] | |
147 | - ${Ids}= Create List ${tender_UAid} ${id} | |
148 | - | |
149 | -Додати предмет | |
150 | - [Arguments] @{ARGUMENTS} | |
151 | - [Documentation] | |
152 | - ... ${ARGUMENTS[0]} == items | |
153 | - ... ${ARGUMENTS[1]} == ${INDEX} | |
154 | - ${dkpp_desc1}= Get From Dictionary ${ARGUMENTS[0].additionalClassifications[0]} description | |
155 | - ${dkpp_id11}= Get From Dictionary ${ARGUMENTS[0].additionalClassifications[0]} id | |
156 | - ${dkpp_1id}= Replace String ${dkpp_id11} - _ | |
157 | - | |
158 | - Wait Until Page Contains Element xpath=//a[contains(@class, 'addMultiItem')][./text()='Додати предмет закупівлі'] | |
159 | - Click Element xpath=//a[contains(@class, 'addMultiItem')][./text()='Додати предмет закупівлі'] | |
160 | - ${index} = Convert To Integer ${ARGUMENTS[1]} | |
161 | - ${index} = Convert To Integer ${index + 1} | |
162 | - Wait Until Page Contains Element name=items[${index}][item_description] 30 | |
163 | - Input text name=items[${index}][item_description] ${description} | |
164 | - Input text name=items[${index}][item_quantity] ${quantity} | |
165 | - | |
166 | - Click Element xpath=(//a[contains(@data-class, 'cpv')][./text()='Визначити за довідником'])[${index} + 1] | |
167 | - Select Frame xpath=//iframe[contains(@src,'/js/classifications/cpv/uk.htm?relation=true')] | |
168 | - Input text id=search ${cpv} | |
169 | - Wait Until Page Contains ${cpv_id} | |
170 | - Click Element xpath=//a[contains(@id,'${cpv_id1}')] | |
171 | - Click Element xpath=.//*[@id='select'] | |
172 | - Unselect Frame | |
173 | - Click Element xpath=(//a[contains(@data-class, 'dkpp')][./text()='Визначити за довідником'])[${index} + 1] | |
174 | - Select Frame xpath=//iframe[contains(@src,'/js/classifications/dkpp/uk.htm?relation=true')] | |
175 | - Input text id=search ${dkpp_desc1} | |
176 | - Wait Until Page Contains ${dkpp_id11} | |
177 | - Click Element xpath=//a[contains(@id,'${dkpp_1id}')] | |
178 | - Click Element xpath=.//*[@id='select'] | |
179 | - Unselect Frame | |
180 | - Capture Page Screenshot | |
181 | - | |
182 | -Додати багато предметів | |
183 | - [Arguments] @{ARGUMENTS} | |
184 | - [Documentation] | |
185 | - ... ${ARGUMENTS[0]} == items | |
186 | - ${Items_length}= Get Length ${items} | |
187 | - : FOR ${INDEX} IN RANGE 1 ${Items_length} | |
188 | - \ Додати предмет ${items[${INDEX}]} ${INDEX} | |
189 | - | |
190 | -додати предмети закупівлі | |
191 | - [Arguments] @{ARGUMENTS} | |
192 | - [Documentation] | |
193 | - ... ${ARGUMENTS[0]} = username | |
194 | - ... ${ARGUMENTS[1]} = ${TENDER_UAID} | |
195 | - ... ${ARGUMENTS[2]} = 3 | |
196 | - ${period_interval}= Get Broker Property By Username ${ARGUMENTS[0]} period_interval | |
197 | - ${tender_data}= prepare_test_tender_data ${period_interval} multi | |
198 | - | |
199 | - ${items}= Get From Dictionary ${tender_data.data} items | |
200 | - ${description}= Get From Dictionary ${tender_data.data} description | |
201 | - ${quantity}= Get From Dictionary ${items[0]} quantity | |
202 | - ${cpv}= Convert To String Картонки | |
203 | - ${cpv_id}= Get From Dictionary ${items[0].classification} id | |
204 | - ${cpv_id1}= Replace String ${cpv_id} - _ | |
205 | - ${dkpp_desc}= Get From Dictionary ${items[0].additionalClassifications[0]} description | |
206 | - ${dkpp_id}= Get From Dictionary ${items[0].additionalClassifications[0]} id | |
207 | - ${dkpp_id1}= Replace String ${dkpp_id} - _ | |
208 | - | |
209 | - Selenium2Library.Switch Browser ${ARGUMENTS[0]} | |
210 | - Run keyword if '${TEST NAME}' == 'Можливість додати позицію закупівлі в тендер' додати позицію | |
211 | - Run keyword if '${TEST NAME}' != 'Можливість додати позицію закупівлі в тендер' видалити позиції | |
212 | - | |
213 | -додати позицію | |
214 | - netcast.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]} | |
215 | - Wait Until Page Contains Element xpath=//a[./text()='Редагувати'] 30 | |
216 | - Click Element xpath=//a[./text()='Редагувати'] | |
217 | - Додати багато предметів ${ARGUMENTS[2]} | |
218 | - Wait Until Page Contains Element xpath=//button[./text()='Зберегти'] 30 | |
219 | - Click Element xpath=//button[./text()='Зберегти'] | |
220 | - | |
221 | -видалити позиції | |
222 | - netcast.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]} | |
223 | - Wait Until Page Contains Element xpath=//a[./text()='Редагувати'] 30 | |
224 | - Click Element xpath=//a[./text()='Редагувати'] | |
225 | - : FOR ${INDEX} IN RANGE 1 ${ARGUMENTS[2]}-1 | |
226 | - \ sleep 5 | |
227 | - \ Click Element xpath=//a[@class='deleteMultiItem'][last()] | |
228 | - \ sleep 5 | |
229 | - \ Click Element xpath=//a[@class='jBtn green'] | |
230 | - Wait Until Page Contains Element xpath=//button[./text()='Зберегти'] 30 | |
231 | - Click Element xpath=//button[./text()='Зберегти'] | |
232 | - | |
233 | -Пошук тендера по ідентифікатору | |
234 | - [Arguments] @{ARGUMENTS} | |
235 | - [Documentation] | |
236 | - ... ${ARGUMENTS[0]} == username | |
237 | - ... ${ARGUMENTS[1]} == tenderId | |
238 | - Switch browser ${ARGUMENTS[0]} | |
239 | - Go To ${USERS.users['${ARGUMENTS[0]}'].homepage} | |
240 | - Wait Until Page Contains Держзакупівлі.онлайн 10 | |
241 | - Click Element xpath=//a[text()='Закупівлі'] | |
242 | - sleep 1 | |
243 | - Click Element xpath=//select[@name='filter[object]']/option[@value='tenderID'] | |
244 | - Input text xpath=//input[@name='filter[search]'] ${ARGUMENTS[1]} | |
245 | - Click Element xpath=//button[@class='btn'][./text()='Пошук'] | |
246 | - Wait Until Page Contains ${ARGUMENTS[1]} 10 | |
247 | - Capture Page Screenshot | |
248 | - sleep 1 | |
249 | - Click Element xpath=//a[@class='reverse tenderLink'] | |
250 | - | |
251 | -Задати питання | |
252 | - [Arguments] @{ARGUMENTS} | |
253 | - [Documentation] | |
254 | - ... ${ARGUMENTS[0]} == username | |
255 | - ... ${ARGUMENTS[1]} == tenderUaId | |
256 | - ... ${ARGUMENTS[2]} == questionId | |
257 | - ${title}= Get From Dictionary ${ARGUMENTS[2].data} title | |
258 | - ${description}= Get From Dictionary ${ARGUMENTS[2].data} description | |
259 | - | |
260 | - Selenium2Library.Switch Browser ${ARGUMENTS[0]} | |
261 | - netcast.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]} | |
262 | - sleep 1 | |
263 | - Execute Javascript window.scroll(2500,2500) | |
264 | - Wait Until Page Contains Element xpath=//a[@class='reverse openCPart'][span[text()='Обговорення']] 20 | |
265 | - Click Element xpath=//a[@class='reverse openCPart'][span[text()='Обговорення']] | |
266 | - Wait Until Page Contains Element name=title 20 | |
267 | - Input text name=title ${title} | |
268 | - Input text xpath=//textarea[@name='description'] ${description} | |
269 | - Click Element xpath=//div[contains(@class, 'buttons')]//button[@type='submit'] | |
270 | - Wait Until Page Contains ${title} 30 | |
271 | - Capture Page Screenshot | |
272 | - | |
273 | -Відповісти на питання | |
274 | - [Arguments] @{ARGUMENTS} | |
275 | - [Documentation] | |
276 | - ... ${ARGUMENTS[0]} = username | |
277 | - ... ${ARGUMENTS[1]} = tenderUaId | |
278 | - ... ${ARGUMENTS[2]} = 0 | |
279 | - ... ${ARGUMENTS[3]} = answer_data | |
280 | - | |
281 | - ${answer}= Get From Dictionary ${ARGUMENTS[3].data} answer | |
282 | - Selenium2Library.Switch Browser ${ARGUMENTS[0]} | |
283 | - | |
284 | - netcast.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]} | |
285 | - Execute Javascript window.scroll(1500,1500) | |
286 | - Wait Until Page Contains Element xpath=//a[@class='reverse openCPart'][span[text()='Обговорення']] 20 | |
287 | - Click Element xpath=//a[@class='reverse openCPart'][span[text()='Обговорення']] | |
288 | - Wait Until Page Contains Element xpath=//textarea[@name='answer'] 20 | |
289 | - Input text xpath=//textarea[@name='answer'] ${answer} | |
290 | - Click Element xpath=//div[1]/div[3]/form/div/table/tbody/tr/td[2]/button | |
291 | - Wait Until Page Contains ${answer} 30 | |
292 | - Capture Page Screenshot | |
293 | - | |
294 | -Подати скаргу | |
295 | - [Arguments] @{ARGUMENTS} | |
296 | - [Documentation] | |
297 | - ... ${ARGUMENTS[0]} = username | |
298 | - ... ${ARGUMENTS[1]} = tenderUaId | |
299 | - ... ${ARGUMENTS[2]} = complaintsId | |
300 | - ${complaint}= Get From Dictionary ${ARGUMENTS[2].data} title | |
301 | - ${description}= Get From Dictionary ${ARGUMENTS[2].data} description | |
302 | - | |
303 | - Selenium2Library.Switch Browser ${ARGUMENTS[0]} | |
304 | - netcast.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]} | |
305 | - sleep 1 | |
306 | - Execute Javascript window.scroll(1500,1500) | |
307 | - Click Element xpath=//a[@class='reverse openCPart'][span[text()='Скарги']] | |
308 | - Wait Until Page Contains Element name=title 20 | |
309 | - Input text name=title ${complaint} | |
310 | - Input text xpath=//textarea[@name='description'] ${description} | |
311 | - Click Element xpath=//div[contains(@class, 'buttons')]//button[@type='submit'] | |
312 | - Wait Until Page Contains ${complaint} 30 | |
313 | - Capture Page Screenshot | |
314 | - | |
315 | -Порівняти скаргу | |
316 | - [Arguments] @{ARGUMENTS} | |
317 | - [Documentation] | |
318 | - ... ${ARGUMENTS[0]} = username | |
319 | - ... ${ARGUMENTS[1]} = tenderUaId | |
320 | - ... ${ARGUMENTS[2]} = complaintsData | |
321 | - ${complaint}= Get From Dictionary ${ARGUMENTS[2].data} title | |
322 | - ${description}= Get From Dictionary ${ARGUMENTS[2].data} description | |
323 | - | |
324 | - Selenium2Library.Switch Browser ${ARGUMENTS[0]} | |
325 | - netcast.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]} | |
326 | - sleep 1 | |
327 | - Execute Javascript window.scroll(1500,1500) | |
328 | - Click Element xpath=//a[@class='reverse openCPart'][span[text()='Скарги']] | |
329 | - Wait Until Page Contains ${complaint} 30 | |
330 | - Capture Page Screenshot | |
331 | - | |
332 | -Внести зміни в тендер | |
333 | - # Тест написано для уже існуючого тендеру, що знаходиться у чернетках користувача | |
334 | - [Arguments] @{ARGUMENTS} | |
335 | - [Documentation] | |
336 | - ... ${ARGUMENTS[0]} = username | |
337 | - ... ${ARGUMENTS[1]} = description | |
338 | - | |
339 | - Selenium2Library.Switch Browser ${ARGUMENTS[0]} | |
340 | - Click Element xpath=//a[@class='reverse'][./text()='Мої закупівлі'] | |
341 | - Wait Until Page Contains Element xpath=//a[@class='reverse'][./text()='Чернетки'] 30 | |
342 | - Click Element xpath=//a[@class='reverse'][./text()='Чернетки'] | |
343 | - Wait Until Page Contains Element xpath=//a[@class='reverse tenderLink'] 30 | |
344 | - Click Element xpath=//a[@class='reverse tenderLink'] | |
345 | - sleep 1 | |
346 | - Click Element xpath=//a[@class='button save'][./text()='Редагувати'] | |
347 | - sleep 1 | |
348 | - Input text name=tender_title ${ARGUMENTS[1]} | |
349 | - sleep 1 | |
350 | - Click Element xpath=//button[@class='saveDraft'] | |
351 | - Wait Until Page Contains ${ARGUMENTS[1]} 30 | |
352 | - Capture Page Screenshot | |
353 | - | |
354 | -обновити сторінку з тендером | |
355 | - [Arguments] @{ARGUMENTS} | |
356 | - [Documentation] | |
357 | - ... ${ARGUMENTS[0]} = username | |
358 | - ... ${ARGUMENTS[1]} = tenderUaId | |
359 | - | |
360 | - Selenium2Library.Switch Browser ${ARGUMENTS[0]} | |
361 | - netcast.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]} | |
362 | - Reload Page | |
363 | - | |
364 | -отримати інформацію із тендера | |
365 | - [Arguments] @{ARGUMENTS} | |
366 | - [Documentation] | |
367 | - ... ${ARGUMENTS[0]} == username | |
368 | - ... ${ARGUMENTS[1]} == fieldname | |
369 | - Switch browser ${ARGUMENTS[0]} | |
370 | - Run Keyword And Return Отримати інформацію про ${ARGUMENTS[1]} | |
371 | - | |
372 | -Отримати текст із поля і показати на сторінці | |
373 | - [Arguments] ${fieldname} | |
374 | - sleep 1 | |
375 | - ${return_value}= Get Text ${locator.${fieldname}} | |
376 | - [return] ${return_value} | |
377 | - | |
378 | -отримати інформацію про title | |
379 | - ${title}= Отримати текст із поля і показати на сторінці title | |
380 | - [return] ${title.split('.')[0]} | |
381 | - | |
382 | -отримати інформацію про description | |
383 | - ${description}= Отримати текст із поля і показати на сторінці description | |
384 | - [return] ${description} | |
385 | - | |
386 | -отримати інформацію про tenderId | |
387 | - ${tenderId}= Отримати текст із поля і показати на сторінці tenderId | |
388 | - [return] ${tenderId} | |
389 | - | |
390 | -отримати інформацію про value.amount | |
391 | - ${valueAmount}= Отримати текст із поля і показати на сторінці value.amount | |
392 | - ${valueAmount}= Convert To Number ${valueAmount.split(' ')[0]} | |
393 | - [return] ${valueAmount} | |
394 | - | |
395 | -отримати інформацію про minimalStep.amount | |
396 | - ${minimalStepAmount}= Отримати текст із поля і показати на сторінці minimalStep.amount | |
397 | - ${minimalStepAmount}= Convert To Number ${minimalStepAmount.split(' ')[0]} | |
398 | - [return] ${minimalStepAmount} | |
399 | - | |
400 | -отримати інформацію про enquiryPeriod.endDate | |
401 | - ${enquiryPeriodEndDate}= Отримати текст із поля і показати на сторінці enquiryPeriod.endDate | |
402 | - ${enquiryPeriodEndDate}= subtract_from_time ${enquiryPeriodEndDate} 6 5 | |
403 | - [return] ${enquiryPeriodEndDate} | |
404 | - | |
405 | -отримати інформацію про tenderPeriod.endDate | |
406 | - ${tenderPeriodEndDate}= Отримати текст із поля і показати на сторінці tenderPeriod.endDate | |
407 | - ${tenderPeriodEndDate}= subtract_from_time ${tenderPeriodEndDate} 11 0 | |
408 | - [return] ${tenderPeriodEndDate} | |
409 | - | |
410 | -отримати інформацію про items[0].deliveryAddress.countryName | |
411 | - ${countryName}= Отримати текст із поля і показати на сторінці items[0].deliveryAddress.countryName | |
412 | - [return] ${countryName} | |
413 | - | |
414 | -отримати інформацію про items[0].classification.scheme | |
415 | - ${classificationScheme}= Отримати текст із поля і показати на сторінці items[0].classification.scheme | |
416 | - [return] ${classificationScheme.split(' ')[1]} | |
417 | - | |
418 | -отримати інформацію про items[0].additionalClassifications[0].scheme | |
419 | - ${additionalClassificationsScheme}= Отримати текст із поля і показати на сторінці items[0].additionalClassifications[0].scheme | |
420 | - [return] ${additionalClassificationsScheme.split(' ')[1]} | |
421 | - | |
422 | -отримати інформацію про questions[0].title | |
423 | - sleep 1 | |
424 | - Click Element xpath=//a[@class='reverse tenderLink'] | |
425 | - sleep 1 | |
426 | - Click Element xpath=//a[@class='reverse openCPart'][span[text()='Обговорення']] | |
427 | - ${questionsTitle}= Отримати текст із поля і показати на сторінці questions[0].title | |
428 | - ${questionsTitle}= Convert To Lowercase ${questionsTitle} | |
429 | - [return] ${questionsTitle.capitalize().split('.')[0] + '.'} | |
430 | - | |
431 | -отримати інформацію про questions[0].description | |
432 | - ${questionsDescription}= Отримати текст із поля і показати на сторінці questions[0].description | |
433 | - [return] ${questionsDescription} | |
434 | - | |
435 | -отримати інформацію про questions[0].date | |
436 | - ${questionsDate}= Отримати текст із поля і показати на сторінці questions[0].date | |
437 | - log ${questionsDate} | |
438 | - [return] ${questionsDate} | |
439 | - | |
440 | -отримати інформацію про questions[0].answer | |
441 | - sleep 1 | |
442 | - Click Element xpath=//a[@class='reverse tenderLink'] | |
443 | - sleep 1 | |
444 | - Click Element xpath=//a[@class='reverse openCPart'][span[text()='Обговорення']] | |
445 | - ${questionsAnswer}= Отримати текст із поля і показати на сторінці questions[0].answer | |
446 | - [return] ${questionsAnswer} | |
447 | - | |
448 | -отримати інформацію про items[0].deliveryDate.endDate | |
449 | - ${deliveryDateEndDate}= Отримати текст із поля і показати на сторінці items[0].deliveryDate.endDate | |
450 | - ${deliveryDateEndDate}= subtract_from_time ${deliveryDateEndDate} 15 0 | |
451 | - [return] ${deliveryDateEndDate} | |
452 | - | |
453 | -отримати інформацію про items[0].classification.id | |
454 | - ${classificationId}= Отримати текст із поля і показати на сторінці items[0].classification.id | |
455 | - [return] ${classificationId} | |
456 | - | |
457 | -отримати інформацію про items[0].classification.description | |
458 | - ${classificationDescription}= Отримати текст із поля і показати на сторінці items[0].classification.description | |
459 | - Run Keyword And Return If '${classificationDescription}' == 'Картонки' Convert To String Cartons | |
460 | - [return] ${classificationDescription} | |
461 | - | |
462 | -отримати інформацію про items[0].additionalClassifications[0].id | |
463 | - ${additionalClassificationsId}= Отримати текст із поля і показати на сторінці items[0].additionalClassifications[0].id | |
464 | - [return] ${additionalClassificationsId} | |
465 | - | |
466 | -отримати інформацію про items[0].additionalClassifications[0].description | |
467 | - ${additionalClassificationsDescription}= Отримати текст із поля і показати на сторінці items[0].additionalClassifications[0].description | |
468 | - ${additionalClassificationsDescription}= Convert To Lowercase ${additionalClassificationsDescription} | |
469 | - [return] ${additionalClassificationsDescription} | |
470 | - | |
471 | -отримати інформацію про items[0].quantity | |
472 | - ${itemsQuantity}= Отримати текст із поля і показати на сторінці items[0].quantity | |
473 | - ${itemsQuantity}= Convert To Integer ${itemsQuantity} | |
474 | - [return] ${itemsQuantity} | |
475 | - | |
476 | -отримати інформацію про items[0].unit.code | |
477 | - ${unitCode}= Отримати текст із поля і показати на сторінці items[0].unit.code | |
478 | - Run Keyword And Return If '${unitCode}'== 'кг' Convert To String KGM | |
479 | - [return] ${unitCode} | |
480 | - | |
481 | -отримати інформацію про procuringEntity.name | |
482 | - Log | Viewer can't see this information on Netcast console=yes | |
483 | - | |
484 | -отримати інформацію про enquiryPeriod.startDate | |
485 | - Log | Viewer can't see this information on Netcast console=yes | |
486 | - | |
487 | -отримати інформацію про tenderPeriod.startDate | |
488 | - Log | Viewer can't see this information on Netcast console=yes | |
489 | - | |
490 | -отримати інформацію про items[0].deliveryLocation.longitude | |
491 | - Log | Viewer can't see this information on Netcast console=yes | |
492 | - | |
493 | -отримати інформацію про items[0].deliveryLocation.latitude | |
494 | - Log | Viewer can't see this information on Netcast console=yes | |
495 | - | |
496 | -отримати інформацію про items[0].deliveryAddress.postalCode | |
497 | - Log | Viewer can't see this information on Netcast console=yes | |
498 | - | |
499 | -отримати інформацію про items[0].deliveryAddress.locality | |
500 | - Log | Viewer can't see this information on Netcast console=yes | |
501 | - | |
502 | -отримати інформацію про items[0].deliveryAddress.streetAddress | |
503 | - Log | Viewer can't see this information on Netcast console=yes | |
504 | - | |
505 | -отримати інформацію про items[0].deliveryAddress.region | |
506 | - Log | Viewer can't see this information on Netcast console=yes | |
507 | - | |
508 | -отримати інформацію про items[0].unit.name | |
509 | - Log | Viewer can't see this information on Netcast console=yes |
... | ... | @@ -80,6 +80,9 @@ Library openprocurement_client_helper.py |
80 | 80 | [Arguments] ${username} ${tender_uaid} ${fieldname} ${fieldvalue} |
81 | 81 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
82 | 82 | Set_To_Object ${tender.data} ${fieldname} ${fieldvalue} |
83 | + ${procurementMethodType}= Get From Object ${tender.data} procurementMethodType | |
84 | + Run Keyword If '${procurementMethodType}' == 'aboveThresholdUA' or '${procurementMethodType}' == 'aboveThresholdEU' | |
85 | + ... Remove From Dictionary ${tender.data} enquiryPeriod | |
83 | 86 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} |
84 | 87 | ${tender}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} |
85 | 88 | Set_To_Object ${USERS.users['${username}'].tender_data} ${fieldname} ${fieldvalue} |
... | ... | @@ -131,25 +134,30 @@ Library openprocurement_client_helper.py |
131 | 134 | |
132 | 135 | |
133 | 136 | Відповісти на питання |
134 | - [Arguments] ${username} ${tender_uaid} ${question_id} ${answer_data} | |
137 | + [Arguments] ${username} ${tender_uaid} ${question} ${answer_data} | |
135 | 138 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
136 | 139 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} |
137 | - ${answer_data.data.id}= Set Variable ${tender.data.questions[${question_id}].id} | |
140 | + ${answer_data.data.id}= Set Variable ${question.data.id} | |
138 | 141 | ${question_with_answer}= Call Method ${USERS.users['${username}'].client} patch_question ${tender} ${answer_data} |
139 | 142 | Log object data ${question_with_answer} question_with_answer |
143 | + [return] ${question_with_answer} | |
140 | 144 | |
141 | 145 | |
142 | 146 | Подати цінову пропозицію |
143 | 147 | [Arguments] ${username} ${tender_uaid} ${bid} |
144 | 148 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
145 | 149 | ${biddingresponse}= Call Method ${USERS.users['${username}'].client} create_bid ${tender} ${bid} |
150 | + Set To Dictionary ${USERS.users['${username}'].bidresponses['bid'].data} id ${biddingresponse['data']['id']} | |
146 | 151 | Log ${biddingresponse} |
147 | 152 | [return] ${biddingresponse} |
148 | 153 | |
149 | 154 | |
150 | 155 | Змінити цінову пропозицію |
151 | - [Arguments] ${username} ${tender_uaid} ${bid} | |
156 | + [Arguments] ${username} ${tender_uaid} ${fieldname} ${fieldvalue} | |
152 | 157 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
158 | + ${bid}= Отримати пропозицію ${username} ${tender_uaid} | |
159 | + Set_To_Object ${bid.data} ${fieldname} ${fieldvalue} | |
160 | + ${tender}= set_access_key ${tender} ${USERS.users['${username}'].bidresponses['resp'].access.token} | |
153 | 161 | ${changed_bid}= Call Method ${USERS.users['${username}'].client} patch_bid ${tender} ${bid} |
154 | 162 | Log ${changed_bid} |
155 | 163 | [return] ${changed_bid} |
... | ... | @@ -158,6 +166,8 @@ Library openprocurement_client_helper.py |
158 | 166 | Скасувати цінову пропозицію |
159 | 167 | [Arguments] ${username} ${tender_uaid} ${bid} |
160 | 168 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
169 | + Set To Dictionary ${bid.data} id ${USERS.users['${username}'].bidresponses['bid'].data.id} | |
170 | + ${tender}= set_access_key ${tender} ${USERS.users['${username}'].bidresponses['resp'].access.token} | |
161 | 171 | ${changed_bid}= Call Method ${USERS.users['${username}'].client} delete_bid ${tender} ${bid} |
162 | 172 | Log ${changed_bid} |
163 | 173 | [return] ${changed_bid} |
... | ... | @@ -174,11 +184,11 @@ Library openprocurement_client_helper.py |
174 | 184 | |
175 | 185 | |
176 | 186 | Завантажити документ в ставку |
177 | - [Arguments] ${username} ${path} ${tender_uaid} | |
187 | + [Arguments] ${username} ${path} ${tender_uaid} ${doc_type}=documents | |
178 | 188 | ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['resp'].data.id} |
179 | 189 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
180 | 190 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].bidresponses['resp'].access.token} |
181 | - ${response}= Call Method ${USERS.users['${username}'].client} upload_bid_document ${path} ${tender} ${bid_id} | |
191 | + ${response}= Call Method ${USERS.users['${username}'].client} upload_bid_document ${path} ${tender} ${bid_id} ${doc_type} | |
182 | 192 | ${uploaded_file} = Create Dictionary filepath ${path} upload_response ${response} |
183 | 193 | Log ${response} |
184 | 194 | Log object data ${uploaded_file} |
... | ... | @@ -195,6 +205,13 @@ Library openprocurement_client_helper.py |
195 | 205 | Log object data ${uploaded_file} |
196 | 206 | [return] ${uploaded_file} |
197 | 207 | |
208 | +Змінити документацію в ставці | |
209 | + [Arguments] ${username} ${doc_data} ${bidid} ${docid} | |
210 | + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${TENDER['TENDER_UAID']} | |
211 | + ${tender}= set_access_key ${tender} ${USERS.users['${username}'].bidresponses['resp'].access.token} | |
212 | + ${response}= Call Method ${USERS.users['${username}'].client} patch_bid_document ${tender} ${doc_data} ${bidid} ${docid} | |
213 | + Log ${response} | |
214 | + [return] ${response} | |
198 | 215 | |
199 | 216 | Завантажити документ |
200 | 217 | [Arguments] ${username} ${filepath} ${tender_uaid} |
... | ... | @@ -378,16 +395,17 @@ Library openprocurement_client_helper.py |
378 | 395 | Log ${reply} |
379 | 396 | |
380 | 397 | |
381 | -Додати постачальника | |
398 | +Додати і підтвердити постачальника | |
382 | 399 | [Documentation] |
383 | - ... [Arguments] Username and tender uaid | |
384 | - ... Find tender using uaid, get data from Підготувати дані про постачальника and call create_award | |
400 | + ... [Arguments] Username, tender uaid and supplier data | |
401 | + ... Find tender using uaid and call create_award | |
385 | 402 | ... [Return] Nothing |
386 | - [Arguments] ${username} ${tender_uaid} | |
403 | + [Arguments] ${username} ${tender_uaid} ${supplier_data} | |
387 | 404 | ${tender}= Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
388 | - ${supplier_data}= Підготувати дані про постачальника ${username} | |
389 | 405 | ${reply}= Call Method ${USERS.users['${username}'].client} create_award ${tender} ${supplier_data} |
390 | 406 | Log ${reply} |
407 | + ${supplier_number}= Set variable 0 | |
408 | + Підтвердити постачальника ${username} ${tender_uaid} ${supplier_number} | |
391 | 409 | |
392 | 410 | |
393 | 411 | Підтвердити постачальника |
... | ... | @@ -403,46 +421,56 @@ Library openprocurement_client_helper.py |
403 | 421 | Log ${reply} |
404 | 422 | |
405 | 423 | |
406 | -Додати запит на скасування | |
424 | +Скасувати закупівлю | |
407 | 425 | [Documentation] |
408 | - ... [Arguments] Username, tender uaid and cancellation reason | |
409 | - ... Find tender using uaid, set cancellation reason, get data from test_cancel_tender | |
426 | + ... [Arguments] Username, tender uaid, cancellation reason, | |
427 | + ... document and new description of document | |
428 | + ... [Description] Find tender using uaid, set cancellation reason, get data from cancel_tender | |
410 | 429 | ... and call create_cancellation |
430 | + ... After that add document to cancellation and change description of document | |
411 | 431 | ... [Return] Nothing |
412 | - [Arguments] ${username} ${tender_uaid} ${cancellation_reason} | |
432 | + [Arguments] ${username} ${tender_uaid} ${cancellation_reason} ${document} ${new_description} | |
413 | 433 | ${tender}= Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
414 | 434 | ${data}= test_cancel_tender_data ${cancellation_reason} |
415 | 435 | Log ${data} |
416 | - Set To Dictionary ${USERS.users['${tender_owner}']} cancellation_reason ${data} | |
417 | - ${reply}= Call Method ${USERS.users['${username}'].client} create_cancellation ${tender} ${data} | |
418 | - Log ${reply} | |
436 | + ${cancel_reply}= Call Method ${USERS.users['${username}'].client} create_cancellation ${tender} ${data} | |
437 | + Log ${cancel_reply} | |
438 | + ${cancellation_id}= Set variable ${cancel_reply.data.id} | |
439 | + | |
440 | + | |
441 | + ${document_id}= Завантажити документацію до запиту на скасування ${username} ${tender_uaid} ${cancellation_id} ${document} | |
442 | + | |
443 | + | |
444 | + Змінити опис документа в скасуванні ${username} ${tender_uaid} ${cancellation_id} ${document_id} ${new_description} | |
445 | + | |
446 | + | |
447 | + Підтвердити скасування закупівлі ${username} ${tender_uaid} ${cancellation_id} | |
419 | 448 | |
420 | 449 | |
421 | 450 | Завантажити документацію до запиту на скасування |
422 | 451 | [Documentation] |
423 | - ... [Arguments] Username, tender uaid and number of cancellation | |
424 | - ... Find tender using uaid, create fake documentation and call upload_cancellation_document | |
425 | - ... [Return] Nothing | |
426 | - [Arguments] ${username} ${tender_uaid} ${cancel_num} | |
452 | + ... [Arguments] Username, tender uaid, cancellation id and document to upload | |
453 | + ... [Description] Find tender using uaid, and call upload_cancellation_document | |
454 | + ... [Return] ID of added document | |
455 | + [Arguments] ${username} ${tender_uaid} ${cancellation_id} ${document} | |
427 | 456 | ${tender}= Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
428 | - ${first_cancel_doc}= create_fake_doc | |
429 | - Set To Dictionary ${USERS.users['${tender_owner}']} first_cancel_doc ${first_cancel_doc} | |
430 | - ${reply}= Call Method ${USERS.users['${username}'].client} upload_cancellation_document ${first_cancel_doc} ${tender} ${tender['data']['cancellations'][${cancel_num}]['id']} | |
431 | - Log ${reply} | |
457 | + ${doc_reply}= Call Method ${USERS.users['${username}'].client} upload_cancellation_document ${document} ${tender} ${cancellation_id} | |
458 | + Log ${doc_reply} | |
459 | + [Return] ${doc_reply.data.id} | |
432 | 460 | |
433 | 461 | |
434 | 462 | Змінити опис документа в скасуванні |
435 | 463 | [Documentation] |
436 | - ... [Arguments] Username, tender uaid, cancellation number and cancellation document number | |
437 | - ... Find tender using uaid, get data from test_change_cancellation_document_field and call | |
464 | + ... [Arguments] Username, tender uaid, cancellation id, document id and new description of document | |
465 | + ... [Description] Find tender using uaid, create dict with data about description and call | |
438 | 466 | ... patch_cancellation_document |
439 | 467 | ... [Return] Nothing |
440 | - [Arguments] ${username} ${tender_uaid} ${cancel_num} ${doc_num} ${field} ${value} | |
468 | + [Arguments] ${username} ${tender_uaid} ${cancellation_id} ${document_id} ${new_description} | |
469 | + ${field}= Set variable description | |
441 | 470 | ${tender}= Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
442 | - ${temp}= Create Dictionary ${field} ${value} | |
471 | + ${temp}= Create Dictionary ${field} ${new_description} | |
443 | 472 | ${data}= Create Dictionary data ${temp} |
444 | - Log ${data} | |
445 | - ${reply}= Call Method ${USERS.users['${username}'].client} patch_cancellation_document ${tender} ${data} ${tender['data']['cancellations'][${cancel_num}]['id']} ${tender['data']['cancellations'][${cancel_num}]['documents'][${doc_num}]['id']} | |
473 | + ${reply}= Call Method ${USERS.users['${username}'].client} patch_cancellation_document ${tender} ${data} ${cancellation_id} ${document_id} | |
446 | 474 | Log ${reply} |
447 | 475 | |
448 | 476 | |
... | ... | @@ -465,9 +493,9 @@ Library openprocurement_client_helper.py |
465 | 493 | ... [Arguments] Username, tender uaid, cancellation number |
466 | 494 | ... Find tender using uaid, get cancellation test_confirmation data and call patch_cancellation |
467 | 495 | ... [Return] Nothing |
468 | - [Arguments] ${username} ${tender_uaid} ${cancel_num} | |
496 | + [Arguments] ${username} ${tender_uaid} ${cancel_id} | |
469 | 497 | ${tender}= Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
470 | - ${data}= test_confirm_data ${tender['data']['cancellations'][${cancel_num}]['id']} | |
498 | + ${data}= test_confirm_data ${cancel_id} | |
471 | 499 | Log ${data} |
472 | 500 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_cancellation ${tender} ${data} |
473 | 501 | Log ${reply} |
... | ... | @@ -484,3 +512,57 @@ Library openprocurement_client_helper.py |
484 | 512 | Log ${data} |
485 | 513 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_contract ${tender} ${data} |
486 | 514 | Log ${reply} |
515 | + | |
516 | +############################################################################## | |
517 | +# OpenUA procedure | |
518 | +############################################################################## | |
519 | + | |
520 | +Підтвердити кваліфікацію | |
521 | + [Documentation] | |
522 | + ... [Arguments] Username, tender uaid and qualification number | |
523 | + ... [Description] Find tender using uaid, create data dict with active status and call patch_qualification | |
524 | + ... [Return] Reply of API | |
525 | + [Arguments] ${username} ${tender_uid} ${qualification_num} | |
526 | + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uid} | |
527 | + ${qualification}= create_data_dict data.status active | |
528 | + Set To Dictionary ${qualification.data} id ${tender.data.qualifications[${qualification_num}].id} | |
529 | + ${reply}= Call Method ${USERS.users['${username}'].client} patch_qualification ${tender} ${qualification} | |
530 | + Log ${reply} | |
531 | + [Return] ${reply} | |
532 | + | |
533 | +Відхилити кваліфікацію | |
534 | + [Documentation] | |
535 | + ... [Arguments] Username, tender uaid and qualification number | |
536 | + ... [Description] Find tender using uaid, create data dict with unsuccessful status and call patch_qualification | |
537 | + ... [Return] Reply of API | |
538 | + [Arguments] ${username} ${tender_uid} ${qualification_num} | |
539 | + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uid} | |
540 | + ${qualification}= create_data_dict data.status unsuccessful | |
541 | + Set To Dictionary ${qualification.data} id ${tender.data.qualifications[${qualification_num}].id} | |
542 | + ${reply}= Call Method ${USERS.users['${username}'].client} patch_qualification ${tender} ${qualification} | |
543 | + Log ${reply} | |
544 | + [Return] ${reply} | |
545 | + | |
546 | +Завантажити документ у кваліфікацію | |
547 | + [Documentation] | |
548 | + ... [Arguments] Username, tender uaid, qualification number and document to upload | |
549 | + ... [Description] Find tender using uaid, and call upload_qualification_document | |
550 | + ... [Return] Reply of API | |
551 | + [Arguments] ${username} ${document} ${tender_uaid} ${qualification_num} | |
552 | + ${tender}= Пошук тендера по ідентифікатору ${username} ${tender_uaid} | |
553 | + ${doc_reply}= Call Method ${USERS.users['${username}'].client} upload_qualification_document ${document} ${tender} ${tender.data.qualifications[${qualification_num}].id} | |
554 | + Log ${doc_reply} | |
555 | + [Return] ${doc_reply} | |
556 | + | |
557 | +Скасувати кваліфікацію | |
558 | + [Documentation] | |
559 | + ... [Arguments] Username, tender uaid and qualification number | |
560 | + ... [Description] Find tender using uaid, create data dict with cancelled status and call patch_qualification | |
561 | + ... [Return] Reply of API | |
562 | + [Arguments] ${username} ${tender_uid} ${qualification_num} | |
563 | + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uid} | |
564 | + ${qualification}= create_data_dict data.status cancelled | |
565 | + Set To Dictionary ${qualification.data} id ${tender.data.qualifications[${qualification_num}].id} | |
566 | + ${reply}= Call Method ${USERS.users['${username}'].client} patch_qualification ${tender} ${qualification} | |
567 | + Log ${reply} | |
568 | + [Return] ${reply} | ... | ... |
1 | 1 | Default: |
2 | - # These values are used by default unless a | |
3 | - # specific broker entry overrides them. | |
4 | - intervals: # Time in minutes | |
5 | - enquiry: | |
6 | - - 0 # Delay before period starts (for startDate) | |
7 | - - 11 # Duration of period (for endDate) | |
8 | - tender: | |
9 | - - 0 | |
10 | - - 31 | |
11 | - timeout_on_wait: 300 # Time in seconds | |
2 | + # Default dictionary: | |
3 | + # These values are used unless a | |
4 | + # specific broker entry overrides them | |
5 | + intervals: | |
6 | + # intervals: Interval values for each "mode" | |
7 | + # | |
8 | + # Each field is a mode name | |
9 | + # Current modes are: | |
10 | + # single, multi, limited, openua, openeu | |
11 | + # | |
12 | + # See `prepare_test_tender_data()` | |
13 | + # in `service_keywords.py` for more details | |
14 | + # | |
15 | + # If some mode is not specified, | |
16 | + # time values are taken from "default" | |
17 | + default: | |
18 | + # default: Used for modes that are not present in `intervals` | |
19 | + # | |
20 | + # enquiry, tender: Period names with corresponding time values | |
21 | + # | |
22 | + # Other mode-specific fields are allowed too | |
23 | + # | |
24 | + # First number in list: Delay before period starts (for startDate) | |
25 | + # Second number in list: Duration of period (for endDate) | |
26 | + enquiry: [0, 11] | |
27 | + tender: [0, 31] | |
28 | + openua: | |
29 | + # accelerator: Integer value | |
30 | + # This is not a name of period | |
31 | + # Please refer to API documentation to find out what's this | |
32 | + accelerator: 1440 | |
33 | + tender: [0, 15] | |
34 | + # Please remember that openUA and openEU procedures | |
35 | + # forbid anyone to set or modify enquiryPeriod | |
36 | + # (it is set automatically) | |
37 | + openeu: | |
38 | + accelerator: 1440 | |
39 | + tender: [0, 30] | |
40 | + # Synchronization delay, in seconds | |
41 | + timeout_on_wait: 300 | |
12 | 42 | Quinta: |
13 | -# intervals: | |
14 | -# enquiry: | |
15 | -# - 0 | |
16 | -# - 2 | |
17 | -# tender: | |
18 | -# - 0 | |
19 | -# - 5 | |
43 | + intervals: | |
44 | + default: | |
45 | + enquiry: [0, 2] | |
46 | + tender: [0, 5] | |
47 | + openua: | |
48 | + accelerator: 1440 | |
49 | + tender: [0, 15] | |
50 | + openeu: | |
51 | + accelerator: 1440 | |
52 | + tender: [0, 30] | |
20 | 53 | keywords_file: openprocurement_client |
21 | 54 | roles: |
22 | - tender_owner: Tender_Owner | |
23 | 55 | provider: Tender_User |
24 | 56 | provider1: Tender_User1 |
57 | + tender_owner: Tender_Owner | |
25 | 58 | viewer: Tender_Viewer |
26 | 59 | timeout_on_wait: 15 |
27 | 60 | E-tender: |
28 | 61 | keywords_file: etender |
29 | 62 | roles: |
30 | - tender_owner: E-tender_Owner | |
31 | 63 | provider: E-tender_Provider1 |
32 | 64 | provider1: E-tender_Provider2 |
65 | + tender_owner: E-tender_Owner | |
33 | 66 | viewer: E-tender_Viewer |
34 | 67 | timeout_on_wait: 600 |
35 | -Netcast: | |
36 | - keywords_file: netcast | |
68 | +DZO: | |
69 | + keywords_file: dzo | |
37 | 70 | login: admin |
38 | 71 | password: uStudio |
39 | 72 | roles: |
40 | - tender_owner: Netcast_Owner | |
41 | - provider: Netcast_Provider1 | |
42 | - viewer: Netcast_Viewer | |
73 | + provider: DZO_Provider1 | |
74 | + tender_owner: DZO_Owner | |
75 | + viewer: DZO_Viewer | |
43 | 76 | Newtend: |
44 | 77 | keywords_file: newtend |
45 | 78 | roles: |
46 | - tender_owner: Newtend_Owner | |
47 | 79 | provider: Newtend_Provider1 |
80 | + tender_owner: Newtend_Owner | |
48 | 81 | viewer: Newtend_Viewer |
49 | 82 | PrivatMarket: |
50 | 83 | intervals: |
51 | - enquiry: | |
52 | - - 0 | |
53 | - - 2 | |
54 | - tender: | |
55 | - - 0 | |
56 | - - 5 | |
84 | + default: | |
85 | + enquiry: [0, 2] | |
86 | + tender: [0, 5] | |
57 | 87 | keywords_file: privatmarket |
58 | 88 | roles: |
59 | - viewer: PrivatMarket_Viewer | |
60 | 89 | provider: PrivatMarket_Provider |
61 | 90 | provider1: PrivatMarket_Provider1 |
91 | + viewer: PrivatMarket_Viewer | |
62 | 92 | timeout_on_wait: 30 |
63 | 93 | Prom: |
64 | 94 | intervals: |
65 | - enquiry: | |
66 | - - 8 | |
67 | - - 8 | |
68 | - tender: | |
69 | - - 0 | |
70 | - - 31 | |
95 | + default: | |
96 | + enquiry: [10, 10] | |
97 | + tender: [0, 45] | |
71 | 98 | keywords_file: prom |
72 | 99 | roles: |
73 | 100 | tender_owner: Prom_Owner |
74 | 101 | viewer: Prom_Viewer |
75 | 102 | Publicbid: |
103 | + intervals: | |
104 | + default: | |
105 | + enquiry: [21, 15] | |
106 | + tender: [1, 15] | |
76 | 107 | keywords_file: publicbid |
77 | 108 | roles: |
109 | + provider: Publicbid_Provider1 | |
78 | 110 | tender_owner: Publicbid_Owner |
79 | 111 | viewer: Publicbid_Viewer |
80 | - intervals: | |
81 | - enquiry: | |
82 | - - 21 # Delay before period starts (for startDate) | |
83 | - - 15 # Duration of period (for endDate) | |
84 | - tender: | |
85 | - - 1 | |
86 | - - 15 | |
87 | 112 | PublicPortal: |
88 | 113 | keywords_file: publicportal |
89 | 114 | roles: |
90 | 115 | viewer: PublicPortal_Viewer |
91 | 116 | SmartTender: |
117 | + intervals: | |
118 | + default: | |
119 | + enquiry: [5, 10] | |
120 | + tender: [0, 15] | |
92 | 121 | keywords_file: smarttender |
93 | 122 | roles: |
123 | + provider: SmartTender_Provider1 | |
124 | + provider1: SmartTender_Provider2 | |
125 | + tender_owner: SmartTender_Owner | |
94 | 126 | viewer: SmartTender_Viewer |
127 | + timeout_on_wait: 300 | ... | ... |
... | ... | @@ -13,7 +13,7 @@ users: |
13 | 13 | broker: Quinta |
14 | 14 | E-tender_Owner: |
15 | 15 | broker: E-tender |
16 | - homepage: "http://bid.uat.e-tender.biz/#/profile" | |
16 | + homepage: "http://bid.uat.e-tender.biz/#" | |
17 | 17 | login: Misha2 |
18 | 18 | password: Password1 |
19 | 19 | browser: chrome |
... | ... | @@ -21,7 +21,7 @@ users: |
21 | 21 | size: [800, 800] |
22 | 22 | E-tender_Provider1: |
23 | 23 | broker: E-tender |
24 | - homepage: "http://bid.uat.e-tender.biz/#/profile" | |
24 | + homepage: "http://bid.uat.e-tender.biz/#" | |
25 | 25 | login: st_org |
26 | 26 | password: 12345678 |
27 | 27 | browser: chrome |
... | ... | @@ -29,7 +29,7 @@ users: |
29 | 29 | size: [700, 800] |
30 | 30 | E-tender_Provider2: |
31 | 31 | broker: E-tender |
32 | - homepage: "http://bid.uat.e-tender.biz/#/profile" | |
32 | + homepage: "http://bid.uat.e-tender.biz/#" | |
33 | 33 | login: provider2 |
34 | 34 | password: Qa123456 |
35 | 35 | browser: chrome |
... | ... | @@ -41,24 +41,24 @@ users: |
41 | 41 | browser: chrome |
42 | 42 | position: [0, 0] |
43 | 43 | size: [640, 450] |
44 | - Netcast_Owner: | |
45 | - broker: Netcast | |
44 | + DZO_Owner: | |
45 | + broker: DZO | |
46 | 46 | homepage: "http://dz2.byustudio.in.ua" |
47 | 47 | login: ovramet.s@gmail.com |
48 | 48 | password: Password1 |
49 | 49 | browser: chrome |
50 | 50 | position: [0, 0] |
51 | 51 | size: [700, 800] |
52 | - Netcast_Provider1: | |
53 | - broker: Netcast | |
52 | + DZO_Provider1: | |
53 | + broker: DZO | |
54 | 54 | homepage: "http://dz2.byustudio.in.ua" |
55 | 55 | login: halyna.khimka@gmail.com |
56 | 56 | password: JHO5VUp5n |
57 | 57 | browser: chrome |
58 | 58 | position: [0, 0] |
59 | 59 | size: [600, 800] |
60 | - Netcast_Viewer: | |
61 | - broker: Netcast | |
60 | + DZO_Viewer: | |
61 | + broker: DZO | |
62 | 62 | homepage: "http://dz2.byustudio.in.ua" |
63 | 63 | browser: chrome |
64 | 64 | position: [0, 0] |
... | ... | @@ -111,7 +111,8 @@ users: |
111 | 111 | size: [1000, 1000] |
112 | 112 | Prom_Owner: |
113 | 113 | broker: Prom |
114 | - homepage: "http://my.dz-test.net/cabinet/purchases/state_purchase/list" | |
114 | + homepage: "http://zakupki.dz-test.net/" | |
115 | + default_page: "http://my.dz-test.net/cabinet/purchases/state_purchase/list" | |
115 | 116 | login: test@test12.com |
116 | 117 | password: 1234 |
117 | 118 | browser: chrome |
... | ... | @@ -119,8 +120,9 @@ users: |
119 | 120 | size: [1280, 1024] |
120 | 121 | Prom_Viewer: |
121 | 122 | broker: Prom |
122 | - homepage: "http://my.dz-test.net/cabinet/purchases/state_purchase/list" | |
123 | - login: r.zaporozhets@smartweb.com.ua | |
123 | + homepage: "http://zakupki.dz-test.net/" | |
124 | + default_page: "http://my.dz-test.net/cabinet/purchases/state_purchase/list" | |
125 | + login: test@test13.com | |
124 | 126 | password: 1234 |
125 | 127 | browser: chrome |
126 | 128 | position: [640, 0] |
... | ... | @@ -155,7 +157,31 @@ users: |
155 | 157 | size: [640, 480] |
156 | 158 | SmartTender_Viewer: |
157 | 159 | broker: SmartTender |
158 | - homepage: "http://smarttender.biz/tenders" | |
160 | + homepage: "https://m.it.ua/cp_smart/test-tenders?allcat=1" | |
161 | + browser: chrome | |
162 | + position: [0, 450] | |
163 | + size: [640, 450] | |
164 | + SmartTender_Provider1: | |
165 | + broker: SmartTender | |
166 | + homepage: "https://m.it.ua/cp_smart/test-tenders?allcat=1" | |
167 | + login: bened@it.ua | |
168 | + password: 111111 | |
159 | 169 | browser: chrome |
160 | 170 | position: [0, 450] |
161 | 171 | size: [640, 450] |
172 | + SmartTender_Provider2: | |
173 | + broker: SmartTender | |
174 | + homepage: "https://m.it.ua/cp_smart/test-tenders?allcat=1" | |
175 | + login: my.mail.rudenko@gmail.com | |
176 | + password: qwerty123 | |
177 | + browser: chrome | |
178 | + position: [0, 450] | |
179 | + size: [640, 450] | |
180 | + SmartTender_Owner: | |
181 | + broker: SmartTender | |
182 | + homepage: "https://m.it.ua/cp_smart/" | |
183 | + login: PPR_BV | |
184 | + password: 123321 | |
185 | + browser: chrome | |
186 | + position: [0, 0] | |
187 | + size: [1400, 900] | ... | ... |
... | ... | @@ -10,6 +10,10 @@ fake_ru = Factory.create('ru') |
10 | 10 | fake_en = Factory.create() |
11 | 11 | |
12 | 12 | |
13 | +def create_fake_sentence(): | |
14 | + return fake.sentence(nb_words=10, variable_nb_words=True) | |
15 | + | |
16 | + | |
13 | 17 | def create_fake_doc(): |
14 | 18 | content = fake.text() |
15 | 19 | suffix = fake.random_element(('.txt', '.doc', '.docx', '.pdf')) |
... | ... | @@ -19,7 +23,7 @@ def create_fake_doc(): |
19 | 23 | return tf.name |
20 | 24 | |
21 | 25 | |
22 | -def test_tender_data(intervals): | |
26 | +def test_tender_data(intervals, periods=("enquiry", "tender")): | |
23 | 27 | now = get_now() |
24 | 28 | t_data = { |
25 | 29 | "title": u"[ТЕСТУВАННЯ] " + fake.catch_phrase(), |
... | ... | @@ -104,7 +108,7 @@ def test_tender_data(intervals): |
104 | 108 | } |
105 | 109 | period_dict = {} |
106 | 110 | inc_dt = now |
107 | - for period_name in ("enquiry", "tender"): | |
111 | + for period_name in periods: | |
108 | 112 | period_dict[period_name + "Period"] = {} |
109 | 113 | for i, j in zip(range(2), ("start", "end")): |
110 | 114 | inc_dt += timedelta(minutes=intervals[period_name][i]) |
... | ... | @@ -190,189 +194,31 @@ def test_tender_data_limited(intervals): |
190 | 194 | |
191 | 195 | |
192 | 196 | def test_tender_data_multiple_items(intervals): |
193 | - now = get_now() | |
194 | 197 | t_data = test_tender_data(intervals) |
195 | - t_data.update({ | |
196 | - "items": [ | |
197 | - { | |
198 | - "description": fake.catch_phrase(), | |
199 | - "deliveryDate": { | |
200 | - "endDate": (now + timedelta(days=5)).isoformat() | |
201 | - }, | |
202 | - "deliveryLocation": { | |
203 | - "latitude": 49.8500, | |
204 | - "longitude": 24.0167 | |
205 | - }, | |
206 | - "deliveryAddress": { | |
207 | - "countryName": u"Україна", | |
208 | - "countryName_ru": u"Украина", | |
209 | - "countryName_en": "Ukraine", | |
210 | - "postalCode": "01008", | |
211 | - "region": u"м. Київ", | |
212 | - "locality": u"м. Київ", | |
213 | - "streetAddress": u"ул. Грушевского, 12/2" | |
214 | - }, | |
215 | - "classification": { | |
216 | - "scheme": u"CPV", | |
217 | - "id": u"44617100-9", | |
218 | - "description": u"Картонки", | |
219 | - "description_ru": u"Большие картонные коробки", | |
220 | - "description_en": u"Cartons" | |
221 | - }, | |
222 | - "additionalClassifications": [ | |
223 | - { | |
224 | - "scheme": u"ДКПП", | |
225 | - "id": u"17.29.12-00.00", | |
226 | - "description": u"Блоки, плити та пластини фільтрувальні, з паперової маси" | |
227 | - } | |
228 | - ], | |
229 | - "unit": { | |
230 | - "name": u"кілограм", | |
231 | - "name_ru": u"килограмм", | |
232 | - "name_en": "kilogram", | |
233 | - "code": u"KGM" | |
234 | - }, | |
235 | - "quantity": fake.pyint() | |
236 | - }, | |
237 | - { | |
238 | - "description": fake.catch_phrase(), | |
239 | - "deliveryDate": { | |
240 | - "endDate": (now + timedelta(days=5)).isoformat() | |
241 | - }, | |
242 | - "deliveryLocation": { | |
243 | - "latitude": 49.8500, | |
244 | - "longitude": 24.0167 | |
245 | - }, | |
246 | - "deliveryAddress": { | |
247 | - "countryName": u"Україна", | |
248 | - "countryName_ru": u"Украина", | |
249 | - "countryName_en": "Ukraine", | |
250 | - "postalCode": fake.postalcode(), | |
251 | - "region": u"м. Київ", | |
252 | - "locality": u"м. Київ", | |
253 | - "streetAddress": fake.street_address() | |
254 | - }, | |
255 | - "classification": { | |
256 | - "scheme": u"CPV", | |
257 | - "id": u"44617100-9", | |
258 | - "description": u"Картонки", | |
259 | - "description_ru": u"Большие картонные коробки", | |
260 | - "description_en": u"Cartons" | |
261 | - }, | |
262 | - "additionalClassifications": [ | |
263 | - { | |
264 | - "scheme": u"ДКПП", | |
265 | - "id": u"17.21.99-00.00", | |
266 | - "description": u"Роботи субпідрядні як частина виробництва гофрованих паперу й картону, паперової та картонної тари" | |
267 | - } | |
268 | - ], | |
269 | - "unit": { | |
270 | - "name": u"кілограм", | |
271 | - "name_ru": u"килограмм", | |
272 | - "name_en": "kilogram", | |
273 | - "code": u"KGM" | |
274 | - }, | |
275 | - "quantity": fake.pyint() | |
276 | - }, | |
277 | - { | |
278 | - "description": fake.catch_phrase(), | |
279 | - "deliveryDate": { | |
280 | - "endDate": (now + timedelta(days=5)).isoformat() | |
281 | - }, | |
282 | - "deliveryLocation": { | |
283 | - "latitude": 49.3418, | |
284 | - "longitude": 39.1829 | |
285 | - }, | |
286 | - "deliveryAddress": { | |
287 | - "countryName": u"Україна", | |
288 | - "countryName_ru": u"Украина", | |
289 | - "countryName_en": "Ukraine", | |
290 | - "postalCode": fake.postalcode(), | |
291 | - "region": u"Луганська область", | |
292 | - "locality": u"м. Луганськ", | |
293 | - "streetAddress": u"Вул. Оборонна 28" | |
294 | - }, | |
295 | - "classification": { | |
296 | - "scheme": u"CPV", | |
297 | - "id": u"44617100-9", | |
298 | - "description": u"Картонки", | |
299 | - "description_ru": u"Большие картонные коробки", | |
300 | - "description_en": u"Cartons" | |
301 | - }, | |
302 | - "additionalClassifications": [ | |
303 | - { | |
304 | - "scheme": u"ДКПП", | |
305 | - "id": u"17.22.12-40.00", | |
306 | - "description": u"Вата; вироби з вати, інші" | |
307 | - } | |
308 | - ], | |
309 | - "unit": { | |
310 | - "name": u"кілограм", | |
311 | - "name_ru": u"килограмм", | |
312 | - "name_en": "kilogram", | |
313 | - "code": u"KGM" | |
314 | - }, | |
315 | - "quantity": fake.pyint() | |
316 | - }, | |
317 | - { | |
318 | - "description": fake.catch_phrase(), | |
319 | - "deliveryDate": { | |
320 | - "endDate": (now + timedelta(days=5)).isoformat() | |
321 | - }, | |
322 | - "deliveryLocation": { | |
323 | - "latitude": 49.8500, | |
324 | - "longitude": 24.0167 | |
325 | - }, | |
326 | - "deliveryAddress": { | |
327 | - "countryName": u"Україна", | |
328 | - "countryName_ru": u"Украина", | |
329 | - "countryName_en": "Ukraine", | |
330 | - "postalCode": fake.postalcode(), | |
331 | - "region": u"м. Київ", | |
332 | - "locality": u"м. Київ", | |
333 | - "streetAddress": fake.street_address() | |
334 | - }, | |
335 | - "classification": { | |
336 | - "scheme": u"CPV", | |
337 | - "id": u"44617100-9", | |
338 | - "description": u"Картонки", | |
339 | - "description_ru": u"Большие картонные коробки", | |
340 | - "description_en": u"Cartons" | |
341 | - }, | |
342 | - "additionalClassifications": [ | |
343 | - { | |
344 | - "scheme": u"ДКПП", | |
345 | - "id": u"17.22.12-50.00", | |
346 | - "description": u"Одяг і речі до одягу з паперової маси, паперу, целюлозної вати чи полотна з целюлозного волокна (крім носових хусточок, наголовних уборів)" | |
347 | - } | |
348 | - ], | |
349 | - "unit": { | |
350 | - "name": u"кілограм", | |
351 | - "name_ru": u"килограмм", | |
352 | - "name_en": "kilogram", | |
353 | - "code": u"KGM" | |
354 | - }, | |
355 | - "quantity": fake.pyint() | |
356 | - } | |
357 | - ] | |
358 | - }) | |
198 | + for _ in range(4): | |
199 | + new_item = test_item_data() | |
200 | + t_data['items'].append(new_item) | |
359 | 201 | return t_data |
360 | 202 | |
361 | 203 | |
362 | 204 | def test_tender_data_multiple_lots(t_data): |
363 | - for i in range(3): | |
364 | - t_data['data']['items'][i]['relatedLot'] = "3c8f387879de4c38957402dbdb8b31af" | |
365 | - t_data['data']['items'][3]['relatedLot'] = "bcac8d2ceb5f4227b841a2211f5cb646" | |
205 | + first_lot_id = "3c8f387879de4c38957402dbdb8b31af" | |
206 | + second_lot_id = "bcac8d2ceb5f4227b841a2211f5cb646" | |
207 | + | |
208 | + for item in t_data['data']['items'][:-1]: | |
209 | + item['relatedLot'] = first_lot_id | |
210 | + t_data['data']['items'][-1]['relatedLot'] = second_lot_id | |
211 | + | |
366 | 212 | t_data['data']['lots'] = [ |
367 | 213 | { |
368 | - "id": "3c8f387879de4c38957402dbdb8b31af", | |
214 | + "id": first_lot_id, | |
369 | 215 | "title": "Lot #1: Kyiv stationery", |
370 | 216 | "description": "Items for Kyiv office", |
371 | 217 | "value": {"currency": "UAH", "amount": 34000.0, "valueAddedTaxIncluded": "true"}, |
372 | 218 | "minimalStep": {"currency": "UAH", "amount": 30.0, "valueAddedTaxIncluded": "true"}, |
373 | 219 | "status": "active" |
374 | 220 | }, { |
375 | - "id": "bcac8d2ceb5f4227b841a2211f5cb646", | |
221 | + "id": second_lot_id, | |
376 | 222 | "title": "Lot #2: Lviv stationery", |
377 | 223 | "description": "Items for Lviv office", |
378 | 224 | "value": {"currency": "UAH", "amount": 9000.0, "valueAddedTaxIncluded": "true"}, |
... | ... | @@ -436,8 +282,8 @@ def test_meat_tender_data(tender): |
436 | 282 | return tender |
437 | 283 | |
438 | 284 | |
439 | -def test_question_data(): | |
440 | - return munchify({ | |
285 | +def test_question_data(lot=False): | |
286 | + data = munchify({ | |
441 | 287 | "data": { |
442 | 288 | "author": { |
443 | 289 | "address": { |
... | ... | @@ -464,6 +310,9 @@ def test_question_data(): |
464 | 310 | "title": fake.sentence(nb_words=6, variable_nb_words=True) |
465 | 311 | } |
466 | 312 | }) |
313 | + if lot: | |
314 | + data = test_lot_question_data(data) | |
315 | + return data | |
467 | 316 | |
468 | 317 | |
469 | 318 | def test_question_answer_data(): |
... | ... | @@ -474,7 +323,40 @@ def test_question_answer_data(): |
474 | 323 | }) |
475 | 324 | |
476 | 325 | |
477 | -def test_complaint_data(): | |
326 | +def test_complaint_data(lot=False): | |
327 | + data = munchify({ | |
328 | + "data": { | |
329 | + "author": { | |
330 | + "address": { | |
331 | + "countryName": u"Україна", | |
332 | + "countryName_ru": u"Украина", | |
333 | + "countryName_en": "Ukraine", | |
334 | + "locality": u"м. Вінниця", | |
335 | + "postalCode": "21100", | |
336 | + "region": u"Вінницька область", | |
337 | + "streetAddress": fake.street_address() | |
338 | + }, | |
339 | + "contactPoint": { | |
340 | + "name": fake.name(), | |
341 | + "telephone": fake.phone_number() | |
342 | + }, | |
343 | + "identifier": { | |
344 | + "scheme": u"UA-EDR", | |
345 | + "id": u"{:08d}".format(fake.pyint()), | |
346 | + "uri": fake.image_url(width=None, height=None) | |
347 | + }, | |
348 | + "name": fake.company() | |
349 | + }, | |
350 | + "description": fake.sentence(nb_words=10, variable_nb_words=True), | |
351 | + "title": fake.sentence(nb_words=6, variable_nb_words=True) | |
352 | + } | |
353 | + }) | |
354 | + if lot: | |
355 | + data = test_lot_complaint_data(data) | |
356 | + return data | |
357 | + | |
358 | + | |
359 | +def test_claim_data(): | |
478 | 360 | return munchify({ |
479 | 361 | "data": { |
480 | 362 | "author": { |
... | ... | @@ -674,97 +556,57 @@ def test_bid_data(): |
674 | 556 | } |
675 | 557 | ], |
676 | 558 | "value": { |
677 | - "amount": 500 | |
559 | + "currency": "UAH", | |
560 | + "amount": 500, | |
561 | + "valueAddedTaxIncluded": "true" | |
678 | 562 | } |
679 | 563 | } |
680 | 564 | }) |
681 | 565 | |
682 | 566 | |
683 | 567 | def test_bid_data_meat_tender(): |
684 | - return munchify({ | |
685 | - "data": { | |
686 | - "tenderers": [ | |
687 | - { | |
688 | - "address": { | |
689 | - "countryName": "Україна", | |
690 | - "locality": "м. Вінниця", | |
691 | - "postalCode": "21100", | |
692 | - "region": "м. Вінниця", | |
693 | - "streetAddress": fake.street_address() | |
694 | - }, | |
695 | - "contactPoint": { | |
696 | - "name": fake.name(), | |
697 | - "telephone": fake.phone_number() | |
698 | - }, | |
699 | - "identifier": { | |
700 | - "scheme": u"UA-EDR", | |
701 | - "id": u"{:08d}".format(fake.pyint()), | |
702 | - }, | |
703 | - "name": fake.company() | |
704 | - } | |
705 | - ], | |
706 | - "parameters": [ | |
707 | - { | |
708 | - "code": "ee3e24bc17234a41bd3e3a04cc28e9c6", | |
709 | - "value": fake.random_element(elements=(0.15, 0.1, 0.05, 0)) | |
710 | - }, | |
711 | - { | |
712 | - "code": "48cfd91612c04125ab406374d7cc8d93", | |
713 | - "value": fake.random_element(elements=(0.05, 0.01, 0)) | |
714 | - } | |
715 | - ], | |
716 | - "value": { | |
717 | - "amount": 500 | |
568 | + bid = test_bid_data() | |
569 | + bid.data.update({ | |
570 | + "parameters": [ | |
571 | + { | |
572 | + "code": "ee3e24bc17234a41bd3e3a04cc28e9c6", | |
573 | + "value": fake.random_element(elements=(0.15, 0.1, 0.05, 0)) | |
574 | + }, | |
575 | + { | |
576 | + "code": "48cfd91612c04125ab406374d7cc8d93", | |
577 | + "value": fake.random_element(elements=(0.05, 0.01, 0)) | |
718 | 578 | } |
719 | - } | |
579 | + ] | |
720 | 580 | }) |
581 | + return bid | |
721 | 582 | |
722 | 583 | |
723 | 584 | def test_lots_bid_data(): |
724 | - return munchify({ | |
725 | - "data": { | |
726 | - "tenderers": [ | |
727 | - { | |
728 | - "address": { | |
729 | - "countryName": "Україна", | |
730 | - "locality": "м. Вінниця", | |
731 | - "postalCode": "21100", | |
732 | - "region": "м. Вінниця", | |
733 | - "streetAddress": fake.street_address() | |
734 | - }, | |
735 | - "contactPoint": { | |
736 | - "name": fake.name(), | |
737 | - "telephone": fake.phone_number() | |
738 | - }, | |
739 | - "identifier": { | |
740 | - "scheme": u"UA-EDR", | |
741 | - "id": u"{:08d}".format(fake.pyint()), | |
742 | - }, | |
743 | - "name": fake.company() | |
744 | - } | |
745 | - ], | |
746 | - "lotValues": [ | |
747 | - { | |
748 | - "value": { | |
749 | - "currency": "UAH", | |
750 | - "amount": 1000 + fake.pyfloat(left_digits=3, right_digits=0, positive=True), | |
751 | - "valueAddedTaxIncluded": "true" | |
752 | - }, | |
753 | - "relatedLot": "3c8f387879de4c38957402dbdb8b31af", | |
754 | - "date": "2015-11-01T12:43:12.482645+02:00" | |
585 | + bid = test_bid_data() | |
586 | + del bid.data.value | |
587 | + bid.data.update({ | |
588 | + "lotValues": [ | |
589 | + { | |
590 | + "value": { | |
591 | + "currency": "UAH", | |
592 | + "amount": fake.random_int(max=1999), | |
593 | + "valueAddedTaxIncluded": "true" | |
755 | 594 | }, |
756 | - { | |
757 | - "value": { | |
758 | - "currency": "UAH", | |
759 | - "amount": 1000 + fake.pyfloat(left_digits=3, right_digits=0, positive=True), | |
760 | - "valueAddedTaxIncluded": "true" | |
761 | - }, | |
762 | - "relatedLot": "bcac8d2ceb5f4227b841a2211f5cb646", | |
763 | - "date": "2015-11-01T12:43:12.482645+02:00" | |
764 | - } | |
765 | - ] | |
766 | - } | |
595 | + "relatedLot": "3c8f387879de4c38957402dbdb8b31af", | |
596 | + "date": "2015-11-01T12:43:12.482645+02:00" | |
597 | + }, | |
598 | + { | |
599 | + "value": { | |
600 | + "currency": "UAH", | |
601 | + "amount": fake.random_int(max=1999), | |
602 | + "valueAddedTaxIncluded": "true" | |
603 | + }, | |
604 | + "relatedLot": "bcac8d2ceb5f4227b841a2211f5cb646", | |
605 | + "date": "2015-11-01T12:43:12.482645+02:00" | |
606 | + } | |
607 | + ] | |
767 | 608 | }) |
609 | + return bid | |
768 | 610 | |
769 | 611 | |
770 | 612 | def auction_bid(): |
... | ... | @@ -875,14 +717,6 @@ def test_invalid_features_data(): |
875 | 717 | "title": "180 днів та більше" |
876 | 718 | }, |
877 | 719 | { |
878 | - "value": 0.1, | |
879 | - "title": "90-179 днів", | |
880 | - }, | |
881 | - { | |
882 | - "value": 0.05, | |
883 | - "title": "30-89 днів" | |
884 | - }, | |
885 | - { | |
886 | 720 | "value": 0, |
887 | 721 | "title": "Менше 30 днів" |
888 | 722 | } |
... | ... | @@ -900,10 +734,6 @@ def test_invalid_features_data(): |
900 | 734 | "title": "Вищий" |
901 | 735 | }, |
902 | 736 | { |
903 | - "value": 0.01, | |
904 | - "title": "Перший", | |
905 | - }, | |
906 | - { | |
907 | 737 | "value": 0, |
908 | 738 | "title": "Другий" |
909 | 739 | } |
... | ... | @@ -948,3 +778,38 @@ def test_lot_complaint_data(complaint, lot_id="3c8f387879de4c38957402dbdb8b31af" |
948 | 778 | lot_complaint = {"complaintOf": "lot", "relatedItem": lot_id} |
949 | 779 | lot_complaint.update(complaint.data) |
950 | 780 | return munchify({"data": lot_complaint}) |
781 | + | |
782 | + | |
783 | +def test_tender_data_openua(intervals): | |
784 | + accelerator = intervals['accelerator'] | |
785 | + # Since `accelerator` field is not really a list containing timings | |
786 | + # for a period called `acceleratorPeriod`, let's remove it :) | |
787 | + del intervals['accelerator'] | |
788 | + # We should not provide any values for `enquiryPeriod` when creating | |
789 | + # an openUA or openEU procedure. That field should not be present at all. | |
790 | + # Therefore, we pass a nondefault list of periods to `test_tender_data()`. | |
791 | + t_data = test_tender_data(intervals, periods=('tender',)) | |
792 | + t_data['procurementMethodType'] = 'aboveThresholdUA' | |
793 | + t_data['procurementMethodDetails'] = 'quick, ' \ | |
794 | + 'accelerator={}'.format(accelerator) | |
795 | + return t_data | |
796 | + | |
797 | +def test_tender_data_openeu(intervals): | |
798 | + accelerator = intervals['accelerator'] | |
799 | + # Since `accelerator` field is not really a list containing timings | |
800 | + # for a period called `acceleratorPeriod`, let's remove it :) | |
801 | + del intervals['accelerator'] | |
802 | + # We should not provide any values for `enquiryPeriod` when creating | |
803 | + # an openUA or openEU procedure. That field should not be present at all. | |
804 | + # Therefore, we pass a nondefault list of periods to `test_tender_data()`. | |
805 | + t_data = test_tender_data(intervals, periods=('tender',)) | |
806 | + t_data['procurementMethodType'] = 'aboveThresholdEU' | |
807 | + t_data['procurementMethodDetails'] = 'quick, ' \ | |
808 | + 'accelerator={}'.format(accelerator) | |
809 | + t_data['title_en'] = "[TESTING]" | |
810 | + for item_number, item in enumerate(t_data['items']): | |
811 | + item['description_en'] = "Test item #{}".format(item_number) | |
812 | + t_data['procuringEntity']['contactPoint']['name_en'] = fake_en.name() | |
813 | + t_data['procuringEntity']['contactPoint']['availableLanguage'] = "en" | |
814 | + t_data['procuringEntity']['identifier']['legalName_en'] = "Institution \"Vinnytsia City Council primary and secondary general school № 10\"" | |
815 | + return t_data | ... | ... |
1 | 1 | *** Settings *** |
2 | -Resource resource.robot | |
3 | 2 | Library op_robot_tests.tests_files.service_keywords |
4 | 3 | Library String |
5 | 4 | Library Collections |
... | ... | @@ -7,13 +6,21 @@ Library Selenium2Library |
7 | 6 | Library DateTime |
8 | 7 | Library DebugLibrary |
9 | 8 | |
9 | +Documentation | |
10 | +... This resource file contains keywords that are used directly by | |
11 | +... test suites or by brokers' keyword libraries (also known as drivers). | |
10 | 12 | |
11 | 13 | *** Keywords *** |
12 | -TestSuiteSetup | |
14 | +Test Suite Setup | |
13 | 15 | Set Selenium Implicit Wait 5 s |
14 | 16 | Set Selenium Timeout 10 s |
15 | 17 | Завантажуємо дані про користувачів і майданчики |
16 | 18 | |
19 | +Test Suite Teardown | |
20 | + Close all browsers | |
21 | + ${artifact}= Create Dictionary tender_uaid=${TENDER['TENDER_UAID']} access_token=${USERS.users['${tender_owner}'].access_token} | |
22 | + log_object_data ${artifact} arctifact | |
23 | + | |
17 | 24 | |
18 | 25 | Set Suite Variable With Default Value |
19 | 26 | [Arguments] ${suite_var} ${def_value} |
... | ... | @@ -27,8 +34,8 @@ Set Suite Variable With Default Value |
27 | 34 | |
28 | 35 | ${file_path}= Get Variable Value ${BROKERS_FILE} brokers.yaml |
29 | 36 | ${BROKERS}= load_initial_data_from ${file_path} |
30 | - log ${BROKERS} | |
31 | - Set Global Variable ${BROKERS} | |
37 | + Log ${BROKERS} | |
38 | + Set Suite Variable ${BROKERS} | |
32 | 39 | |
33 | 40 | ${file_path}= Get Variable Value ${USERS_FILE} users.yaml |
34 | 41 | ${USERS}= load_initial_data_from ${file_path} |
... | ... | @@ -39,19 +46,19 @@ Set Suite Variable With Default Value |
39 | 46 | Set Suite Variable With Default Value provider Tender_User |
40 | 47 | Set Suite Variable With Default Value provider1 Tender_User1 |
41 | 48 | Set Suite Variable With Default Value viewer Tender_Viewer |
42 | - ${active_users}= Create Dictionary tender_owner ${tender_owner} provider ${provider} provider1 ${provider1} viewer ${viewer} | |
49 | + ${active_users}= Create Dictionary tender_owner=${tender_owner} provider=${provider} provider1=${provider1} viewer=${viewer} | |
43 | 50 | |
44 | - ${users_list}= Get Dictionary Items ${USERS.users} | |
45 | - :FOR ${username} ${user_data} IN @{users_list} | |
46 | - \ log ${active_users} | |
47 | - \ log ${username} | |
51 | + ${users_list}= Get Dictionary Items ${USERS.users} | |
52 | + :FOR ${username} ${user_data} IN @{users_list} | |
53 | + \ Log ${active_users} | |
54 | + \ Log ${username} | |
48 | 55 | \ ${munch_dict}= munch_dict data=${True} |
49 | 56 | \ Log Many ${munch_dict} |
50 | - \ ${status}= Run Keyword And Return Status Dictionary Should Contain Value ${active_users} ${username} | |
57 | + \ ${status}= Run Keyword And Return Status Dictionary Should Contain Value ${active_users} ${username} | |
51 | 58 | \ ${keywords_file}= Get Broker Property By Username ${username} keywords_file |
52 | - \ Run Keyword If '${status}' == 'True' Завантажуємо бібліотеку з реалізацією для майданчика ${keywords_file} | |
53 | - \ Run Keyword If '${status}' == 'True' Викликати для учасника ${username} Підготувати клієнт для користувача | |
54 | - \ Run Keyword If '${status}' == 'True' Set To Dictionary ${USERS.users['${username}']} tender_data ${munch_dict} | |
59 | + \ Run Keyword If ${status} Завантажуємо бібліотеку з реалізацією для майданчика ${keywords_file} | |
60 | + \ Run Keyword If ${status} Викликати для учасника ${username} Підготувати клієнт для користувача | |
61 | + \ Run Keyword If ${status} Set To Dictionary ${USERS.users['${username}']} tender_data=${munch_dict} | |
55 | 62 | |
56 | 63 | |
57 | 64 | Get Broker Property |
... | ... | @@ -77,25 +84,7 @@ Get Broker Property By Username |
77 | 84 | Run Keyword And Return Get Broker Property ${broker_name} ${property} |
78 | 85 | |
79 | 86 | |
80 | -Підготовка початкових даних | |
81 | - @{QUESTIONS}= Create list | |
82 | - ${question}= test question data | |
83 | - ${question_lot}= test_lot_question_data ${question} | |
84 | - Append to list ${QUESTIONS} ${question} ${question_lot} | |
85 | - Set Global Variable @{QUESTIONS} | |
86 | - @{ANSWERS}= Create list | |
87 | - ${answer}= test_question_answer_data | |
88 | - Append to list ${ANSWERS} ${answer} | |
89 | - Set Global Variable @{ANSWERS} | |
90 | - @{COMPLAINTS}= Create list | |
91 | - ${complaint}= test_complaint_data | |
92 | - ${complaint_lot}= test_lot_complaint_data ${complaint} | |
93 | - Append to list ${COMPLAINTS} ${complaint} ${complaint_lot} | |
94 | - Set Global Variable @{COMPLAINTS} | |
95 | - @{REPLIES}= Create list | |
96 | - ${reply}= test_complaint_reply_data | |
97 | - Append to list ${REPLIES} ${reply} | |
98 | - Set Global Variable @{REPLIES} | |
87 | +Підготовка даних для створення тендера | |
99 | 88 | ${custom_intervals}= Get Broker Property By Username ${tender_owner} intervals |
100 | 89 | ${default_intervals}= Get Broker Property Default intervals |
101 | 90 | ${period_intervals}= merge_dicts ${default_intervals} ${custom_intervals} |
... | ... | @@ -107,6 +96,34 @@ Get Broker Property By Username |
107 | 96 | [return] ${tender_data} |
108 | 97 | |
109 | 98 | |
99 | +Підготовка даних для подання вимоги | |
100 | + ${claim}= test_claim_data | |
101 | + [Return] ${claim} | |
102 | + | |
103 | + | |
104 | + | |
105 | +Підготовка даних для подання скарги | |
106 | + [Arguments] ${lot}=${False} | |
107 | + ${complaint}= test_complaint_data ${lot} | |
108 | + [Return] ${complaint} | |
109 | + | |
110 | + | |
111 | +Підготовка даних для відповіді на скаргу | |
112 | + ${reply}= test_complaint_reply_data | |
113 | + [Return] ${reply} | |
114 | + | |
115 | + | |
116 | +Підготовка даних для запитання | |
117 | + [Arguments] ${lot}=${False} | |
118 | + ${question}= test_question_data ${lot} | |
119 | + [Return] ${question} | |
120 | + | |
121 | + | |
122 | +Підготовка даних для відповіді на запитання | |
123 | + ${answer}= test_question_answer_data | |
124 | + [Return] ${answer} | |
125 | + | |
126 | + | |
110 | 127 | Підготувати дані про постачальника |
111 | 128 | [Arguments] ${username} |
112 | 129 | ${supplier_data}= test_supplier_data |
... | ... | @@ -115,23 +132,60 @@ Get Broker Property By Username |
115 | 132 | [Return] ${supplier_data} |
116 | 133 | |
117 | 134 | |
135 | +Підготувати дані про скасування | |
136 | + [Arguments] ${username} | |
137 | + ${cancellation_reason}= create_fake_sentence | |
138 | + ${document}= create_fake_doc | |
139 | + ${new_description}= create_fake_sentence | |
140 | + ${cancellation_data}= Create Dictionary cancellation_reason=${cancellation_reason} document=${document} description=${new_description} | |
141 | + Set To Dictionary ${USERS.users['${username}']} cancellation_data ${cancellation_data} | |
142 | + [Return] ${cancellation_data} | |
143 | + | |
118 | 144 | Завантажуємо бібліотеку з реалізацією для майданчика ${keywords_file} |
119 | - ${bundled_st}= Run Keyword And Return Status Import Resource ${CURDIR}/brokers/${keywords_file}.robot | |
120 | - ${external_st}= Run Keyword And Return Status Import Resource ${CURDIR}/../../src/robot_tests.broker.${keywords_file}/${keywords_file}.robot | |
145 | + ${bundled_st}= Run Keyword And Return Status Import Resource ${CURDIR}${/}brokers${/}${keywords_file}.robot | |
146 | + ${external_st}= Run Keyword And Return Status Import Resource ${CURDIR}${/}..${/}..${/}src${/}robot_tests.broker.${keywords_file}${/}${keywords_file}.robot | |
121 | 147 | Run Keyword If ${bundled_st} == ${external_st} == ${False} Fail Resource file ${keywords_file}.robot not found |
122 | - Run Keyword If ${bundled_st} == ${external_st} == ${True} Fail Resource file ${keywords_file}.robot found in both brokers/ and src/ | |
148 | + Run Keyword If ${bundled_st} == ${external_st} == ${True} Fail Resource file ${keywords_file}.robot found in both brokers${/} and src${/} | |
123 | 149 | |
124 | 150 | |
125 | 151 | Дочекатись синхронізації з майданчиком |
126 | 152 | [Arguments] ${username} |
127 | 153 | [Documentation] |
128 | - ... Get ${wait_timeout} for specified user and wait | |
129 | - ... until that timeout runs out. | |
154 | + ... Find out how much time has passed since the procurement was modified | |
155 | + ... and store the result in `delta`, | |
156 | + ... then get `timeout_on_wait` for ``username``, | |
157 | + ... then wait for `sleep` seconds, where: | |
158 | + ... | |
159 | + ... sleep = timeout_on_wait - delta | |
160 | + ... | |
161 | + ... Thus, when this keyword is executed several times in a row, | |
162 | + ... it will wait for as long as really needed. | |
163 | + ... | |
164 | + ... Example: | |
165 | + ... | |
166 | + ... The procurement is modified. | |
167 | + ... In 5 seconds, this keyword is called for `viewer`. | |
168 | + ... Immediately, this keyword is called for `provider`. | |
169 | + ... Timeout for `viewer` is 60. | |
170 | + ... Timeout for `provider` is 300. | |
171 | + ... First call (for `viewer`) will trigger `Sleep 55`. | |
172 | + ... Second call (for `provider`) will trigger `Sleep 235`. | |
173 | + ... As a result, the delay will end in 300 seconds | |
174 | + ... since last modification date. | |
175 | + ... | |
176 | + ... Another example (a variation of previous one): | |
177 | + ... | |
178 | + ... Timeout for `viewer` is 120. | |
179 | + ... Timeout for `provider` is 30. | |
180 | + ... First call will trigger `Sleep 115`. | |
181 | + ... Second call will trigger `Sleep 0`, | |
182 | + ... since we have already slept for 120 seconds | |
183 | + ... and there is no need to sleep any longer. | |
130 | 184 | ${now}= Get Current TZdate |
131 | 185 | ${delta}= Subtract Date From Date ${now} ${TENDER['LAST_MODIFICATION_DATE']} |
132 | 186 | ${timeout_on_wait}= Get Broker Property By Username ${username} timeout_on_wait |
133 | - ${wait_timeout}= Subtract Time From Time ${timeout_on_wait} ${delta} | |
134 | - Run Keyword If ${wait_timeout}>0 Sleep ${wait_timeout} | |
187 | + ${sleep}= Subtract Time From Time ${timeout_on_wait} ${delta} | |
188 | + Run Keyword If ${sleep} > 0 Sleep ${sleep} | |
135 | 189 | |
136 | 190 | |
137 | 191 | Звірити поле тендера |
... | ... | @@ -151,9 +205,11 @@ Get Broker Property By Username |
151 | 205 | |
152 | 206 | Порівняти об'єкти |
153 | 207 | [Arguments] ${left} ${right} |
208 | + Log ${left} | |
209 | + Log ${right} | |
154 | 210 | Should Not Be Equal ${left} ${None} |
155 | 211 | Should Not Be Equal ${right} ${None} |
156 | - Should Be Equal ${left} ${right} | |
212 | + Should Be Equal ${left} ${right} msg=Objects are not equal | |
157 | 213 | |
158 | 214 | |
159 | 215 | Звірити дату тендера |
... | ... | @@ -165,36 +221,43 @@ Get Broker Property By Username |
165 | 221 | Звірити дату тендера із значенням |
166 | 222 | [Arguments] ${username} ${left} ${field} |
167 | 223 | ${right}= Викликати для учасника ${username} Отримати інформацію із тендера ${field} |
168 | - Звірити дату ${left} ${right} | |
224 | + Порівняти дати ${left} ${right} | |
169 | 225 | Set_To_Object ${USERS.users['${username}'].tender_data.data} ${field} ${left} |
170 | 226 | |
171 | 227 | |
172 | -Звірити дату | |
173 | - [Arguments] ${left} ${right} | |
228 | +Порівняти дати | |
229 | + [Documentation] | |
230 | + ... Compare dates with specified ``accuracy`` (in seconds). | |
231 | + ... Default is `60`. | |
232 | + ... | |
233 | + ... The keyword will fail if the difference between | |
234 | + ... ``left`` and ``right`` dates is more than ``accuracy``, | |
235 | + ... otherwise it will pass. | |
236 | + [Arguments] ${left} ${right} ${accuracy}=60 | |
237 | + Log ${left} | |
238 | + Log ${right} | |
174 | 239 | Should Not Be Equal ${left} ${None} |
175 | 240 | Should Not Be Equal ${right} ${None} |
176 | - ${status}= compare_date ${left} ${right} | |
177 | - Should Be True ${status} | |
241 | + ${status}= compare_date ${left} ${right} ${accuracy} | |
242 | + Should Be True ${status} msg=Dates are not equal: ${left} != ${right} | |
178 | 243 | |
179 | 244 | |
180 | 245 | Звірити поля предметів закупівлі багатопредметного тендера |
181 | 246 | [Arguments] ${username} ${tender_data} ${field} |
182 | - Дочекатись синхронізації з майданчиком ${username} | |
183 | 247 | @{items}= Get_From_Object ${tender_data.data} items |
184 | - ${len_of_items}= Get Length ${items} | |
185 | - :FOR ${index} IN RANGE ${len_of_items} | |
186 | - \ Log ${index} | |
187 | - \ Звірити поле тендера ${viewer} ${tender_data} items[${index}].${field} | |
248 | + ${len_of_items}= Get Length ${items} | |
249 | + :FOR ${index} IN RANGE ${len_of_items} | |
250 | + \ Log ${index} | |
251 | + \ Звірити поле тендера ${viewer} ${tender_data} items[${index}].${field} | |
188 | 252 | |
189 | 253 | |
190 | 254 | Звірити дату предметів закупівлі багатопредметного тендера |
191 | 255 | [Arguments] ${username} ${tender_data} ${field} |
192 | - Дочекатись синхронізації з майданчиком ${username} | |
193 | 256 | @{items}= Get_From_Object ${tender_data.data} items |
194 | - ${len_of_items}= Get Length ${items} | |
195 | - :FOR ${index} IN RANGE ${len_of_items} | |
196 | - \ Log ${index} | |
197 | - \ Звірити дату тендера ${viewer} ${tender_data} items[${index}].${field} | |
257 | + ${len_of_items}= Get Length ${items} | |
258 | + :FOR ${index} IN RANGE ${len_of_items} | |
259 | + \ Log ${index} | |
260 | + \ Звірити дату тендера ${viewer} ${tender_data} items[${index}].${field} | |
198 | 261 | |
199 | 262 | |
200 | 263 | Викликати для учасника |
... | ... | @@ -235,29 +298,61 @@ SwitchState |
235 | 298 | |
236 | 299 | Дочекатись дати |
237 | 300 | [Arguments] ${date} |
238 | - ${wait_timeout}= wait_to_date ${date} | |
239 | - Run Keyword If ${wait_timeout}>0 Sleep ${wait_timeout} | |
301 | + ${sleep}= wait_to_date ${date} | |
302 | + Run Keyword If ${sleep} > 0 Sleep ${sleep} | |
240 | 303 | |
241 | 304 | |
242 | 305 | Дочекатись дати початку прийому пропозицій |
243 | 306 | [Arguments] ${username} |
244 | - log ${username} | |
245 | - Дочекатись дати ${USERS.users['${username}'].tender_data.data.tenderPeriod.startDate} | |
307 | + Log ${username} | |
308 | + # This tries to get the date from current user's procurement data cache. | |
309 | + # On failure, it reads from tender_owner's cached initial_data. | |
310 | + # XXX: This is a dirty hack! | |
311 | + # HACK: It was left here only for backward compatibiliy. | |
312 | + # HACK: Before caching was implemented, this keyword used to look into | |
313 | + # HACK: tender_owner's initial_data. | |
314 | + # HACK: This should be cleaned up as soon as each broker implements reading | |
315 | + # HACK: of the needed dates from tender's page. | |
316 | + ${status} ${date}= Run Keyword And Ignore Error | |
317 | + ... Set Variable | |
318 | + ... ${USERS.users['${username}'].tender_data.data.tenderPeriod.startDate} | |
319 | + # By default if condition is not satisfied, variable is set to None. | |
320 | + # The third argument sets the variable to itself instead of None. | |
321 | + ${date}= Set Variable If | |
322 | + ... '${status}' == 'FAIL' | |
323 | + ... ${USERS.users['${tender_owner}'].initial_data.data.tenderPeriod.startDate} | |
324 | + ... ${date} | |
325 | + Дочекатись дати ${date} | |
246 | 326 | |
247 | 327 | |
248 | 328 | Дочекатись дати закінчення прийому пропозицій |
249 | 329 | [Arguments] ${username} |
250 | - log ${username} | |
251 | - Дочекатись дати ${USERS.users['${username}'].tender_data.data.tenderPeriod.endDate} | |
330 | + Log ${username} | |
331 | + # XXX: HACK: Same as above | |
332 | + ${status} ${date}= Run Keyword And Ignore Error | |
333 | + ... Set Variable | |
334 | + ... ${USERS.users['${username}'].tender_data.data.tenderPeriod.endDate} | |
335 | + ${date}= Set Variable If | |
336 | + ... '${status}' == 'FAIL' | |
337 | + ... ${USERS.users['${tender_owner}'].initial_data.data.tenderPeriod.endDate} | |
338 | + ... ${date} | |
339 | + Дочекатись дати ${date} | |
252 | 340 | |
253 | 341 | |
254 | 342 | Дочекатись дати початку аукціону |
255 | 343 | [Arguments] ${username} |
256 | - log ${username} | |
344 | + Log ${username} | |
345 | + # Can't use that dirty hack here since we don't know | |
346 | + # the date of auction when creating the procurement :) | |
257 | 347 | Дочекатись дати ${USERS.users['${username}'].tender_data.data.auctionPeriod.startDate} |
258 | 348 | |
259 | 349 | |
260 | 350 | Дочекатись дати закінчення аукціону |
261 | 351 | [Arguments] ${username} |
262 | - log ${username} | |
352 | + Log ${username} | |
263 | 353 | Дочекатись дати ${USERS.users['${username}'].tender_data.data.auctionPeriod.endDate} |
354 | + | |
355 | +Дочекатись дати закінчення періоду подання скарг | |
356 | + [Arguments] ${username} | |
357 | + log ${username} | |
358 | + Дочекатись дати ${USERS.users['${username}'].tender_data.data.complaintPeriod.endDate} | ... | ... |
... | ... | @@ -3,7 +3,7 @@ Library op_robot_tests.tests_files.service_keywords |
3 | 3 | Library Collections |
4 | 4 | Resource keywords.robot |
5 | 5 | Resource resource.robot |
6 | -Suite Setup TestSuiteSetup | |
6 | +Suite Setup Test Suite Setup | |
7 | 7 | Suite Teardown Close all browsers |
8 | 8 | |
9 | 9 | |
... | ... | @@ -22,7 +22,7 @@ ${broker} Quinta |
22 | 22 | ... tender_owner |
23 | 23 | ... ${USERS.users['${tender_owner}'].broker} |
24 | 24 | ... minimal |
25 | - ${tender_data}= Підготовка початкових даних | |
25 | + ${tender_data}= Підготовка даних для створення тендера | |
26 | 26 | ${TENDER_UAID}= Викликати для учасника ${tender_owner} |
27 | 27 | ... Створити тендер |
28 | 28 | ... ${tender_data} |
... | ... | @@ -34,59 +34,23 @@ ${broker} Quinta |
34 | 34 | Log ${TENDER} |
35 | 35 | |
36 | 36 | |
37 | -Можливість сформувати запит на скасування прямої закупівлі | |
38 | - [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість сформувати запит на скасування прямої закупівлі | |
37 | +Можливість скасувати пряму закупівлю | |
38 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість скасувати пряму закупівлю | |
39 | 39 | ... tender_owner |
40 | 40 | ... ${USERS.users['${tender_owner}'].broker} |
41 | - ... critical level 2 | |
41 | + ... level2 | |
42 | 42 | [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} |
43 | - ${CANCEL_NUM}= Set variable 0 | |
44 | - Set suite variable ${CANCEL_NUM} | |
45 | - ${cancellation_reason}= Set variable prosto tak :) | |
43 | + ${cancellation_data}= Підготувати дані про скасування ${tender_owner} | |
46 | 44 | Викликати для учасника ${tender_owner} |
47 | - ... Додати запит на скасування | |
45 | + ... Скасувати закупівлю | |
48 | 46 | ... ${TENDER['TENDER_UAID']} |
49 | - ... ${cancellation_reason} | |
50 | - Викликати для учасника ${tender_owner} | |
51 | - ... Завантажити документацію до запиту на скасування | |
52 | - ... ${TENDER['TENDER_UAID']} | |
53 | - ... ${CANCEL_NUM} | |
54 | - | |
55 | - | |
56 | -Можливість змінити опис документа в скасуванні прямої закупівлі | |
57 | - [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість змінити опис документа в скасуванні прямої закупівлі | |
58 | - ... tender_owner | |
59 | - ... ${USERS.users['${tender_owner}'].broker} | |
60 | - ${FIRST_DOC}= Set variable 0 | |
61 | - Set Suite Variable ${FIRST_DOC} | |
62 | - ${field}= Set variable description | |
63 | - ${value}= Set variable test description | |
64 | - Викликати для учасника ${tender_owner} | |
65 | - ... Змінити опис документа в скасуванні | |
66 | - ... ${TENDER['TENDER_UAID']} ${CANCEL_NUM} ${FIRST_DOC} | |
67 | - ... ${field} | |
68 | - ... ${value} | |
69 | - Set To Dictionary ${USERS.users['${tender_owner}']} cancellation_document_description ${value} | |
70 | - | |
71 | - | |
72 | -Можливість завантажити нову версію документа до запиту на скасування прямої закупівлі | |
73 | - [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість завантажити нову версію документа до запиту на скасування прямої закупівлі | |
74 | - ... tender_owner | |
75 | - ... ${USERS.users['${tender_owner}'].broker} | |
76 | - Викликати для учасника ${tender_owner} | |
77 | - ... Завантажити нову версію документа до запиту на скасування | |
78 | - ... ${TENDER['TENDER_UAID']} ${CANCEL_NUM} ${FIRST_DOC} | |
79 | - | |
80 | - | |
81 | -Можливість активувати скасування прямої закупівлі | |
82 | - [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість активувати скасування прямої закупівлі | |
83 | - ... tender_owner | |
84 | - ... ${USERS.users['${tender_owner}'].broker} | |
85 | - ... critical level 2 | |
86 | - Викликати для учасника ${tender_owner} | |
87 | - ... Підтвердити скасування закупівлі | |
88 | - ... ${TENDER['TENDER_UAID']} | |
89 | - ... ${CANCEL_NUM} | |
47 | + ... ${cancellation_data['cancellation_reason']} | |
48 | + ... ${cancellation_data['document']} | |
49 | + ... ${cancellation_data['description']} | |
50 | + ${CANCEL_NUM}= Set variable 0 | |
51 | + Set suite variable ${CANCEL_NUM} | |
52 | + ${DOC_NUM}= Set variable 0 | |
53 | + Set suite variable ${DOC_NUM} | |
90 | 54 | |
91 | 55 | |
92 | 56 | Відображення активного статусу скасування прямої закупівлі |
... | ... | @@ -104,7 +68,7 @@ ${broker} Quinta |
104 | 68 | ... viewer |
105 | 69 | ... ${USERS.users['${viewer}'].broker} |
106 | 70 | Звірити поле тендера із значенням ${viewer} |
107 | - ... ${USERS.users['${tender_owner}']['cancellation_reason']['data']['reason']} | |
71 | + ... ${USERS.users['${tender_owner}']['cancellation_data']['cancellation_reason']} | |
108 | 72 | ... cancellations[${CANCEL_NUM}].reason |
109 | 73 | |
110 | 74 | |
... | ... | @@ -113,27 +77,17 @@ ${broker} Quinta |
113 | 77 | ... viewer |
114 | 78 | ... ${USERS.users['${viewer}'].broker} |
115 | 79 | Звірити поле тендера із значенням ${viewer} |
116 | - ... ${USERS.users['${tender_owner}']['cancellation_document_description']} | |
117 | - ... cancellations[${CANCEL_NUM}].documents[${FIRST_DOC}].description | |
80 | + ... ${USERS.users['${tender_owner}']['cancellation_data']['description']} | |
81 | + ... cancellations[${CANCEL_NUM}].documents[${DOC_NUM}].description | |
118 | 82 | |
119 | 83 | |
120 | -Відображення заголовку першого документа скасування прямої закупівлі | |
121 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення заголовку першого документа скасування прямої закупівлі | |
84 | +Відображення заголовку документа скасування прямої закупівлі | |
85 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення заголовку документа скасування прямої закупівлі | |
122 | 86 | ... viewer |
123 | 87 | ... ${USERS.users['${viewer}'].broker} |
124 | 88 | Звірити поле тендера із значенням ${viewer} |
125 | - ... ${USERS.users['${tender_owner}']['first_cancel_doc']} | |
126 | - ... cancellations[${CANCEL_NUM}].documents[${FIRST_DOC}].title | |
127 | - | |
128 | - | |
129 | -Відображення заголовку другого документа скасування прямої закупівлі | |
130 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення заголовку другого документа скасування прямої закупівлі | |
131 | - ... viewer | |
132 | - ... ${USERS.users['${viewer}'].broker} | |
133 | - ${second_doc_num}= Set variable 1 | |
134 | - Звірити поле тендера із значенням ${viewer} | |
135 | - ... ${USERS.users['${tender_owner}']['second_cancel_doc']} | |
136 | - ... cancellations[${CANCEL_NUM}].documents[${second_doc_num}].title | |
89 | + ... ${USERS.users['${tender_owner}']['cancellation_data']['document']} | |
90 | + ... cancellations[${CANCEL_NUM}].documents[${DOC_NUM}].title | |
137 | 91 | |
138 | 92 | ############################################################################################## |
139 | 93 | # MAIN |
... | ... | @@ -144,7 +98,7 @@ ${broker} Quinta |
144 | 98 | ... tender_owner |
145 | 99 | ... ${USERS.users['${tender_owner}'].broker} |
146 | 100 | ... minimal |
147 | - ${tender_data}= Підготовка початкових даних | |
101 | + ${tender_data}= Підготовка даних для створення тендера | |
148 | 102 | ${TENDER_UAID}= Викликати для учасника ${tender_owner} |
149 | 103 | ... Створити тендер |
150 | 104 | ... ${tender_data} |
... | ... | @@ -197,13 +151,11 @@ ${broker} Quinta |
197 | 151 | ... minimal |
198 | 152 | ${SUPP_NUM}= Set variable 0 |
199 | 153 | Set Suite Variable ${SUPP_NUM} |
154 | + ${supplier_data}= Підготувати дані про постачальника ${tender_owner} | |
200 | 155 | Викликати для учасника ${tender_owner} |
201 | - ... Додати постачальника | |
156 | + ... Додати і підтвердити постачальника | |
202 | 157 | ... ${TENDER['TENDER_UAID']} |
203 | - Викликати для учасника ${tender_owner} | |
204 | - ... Підтвердити постачальника | |
205 | - ... ${TENDER['TENDER_UAID']} | |
206 | - ... ${SUPP_NUM} | |
158 | + ... ${supplier_data} | |
207 | 159 | |
208 | 160 | ############################################################################################## |
209 | 161 | # MAIN DATA |
... | ... | @@ -219,33 +171,6 @@ ${broker} Quinta |
219 | 171 | ... title |
220 | 172 | |
221 | 173 | |
222 | -Відображення власника прямої закупівлі | |
223 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення власника прямої закупівлі | |
224 | - ... viewer | |
225 | - ... ${USERS.users['${viewer}'].broker} | |
226 | - Звірити поле тендера ${viewer} | |
227 | - ... ${USERS.users['${tender_owner}'].initial_data} | |
228 | - ... owner | |
229 | - | |
230 | - | |
231 | -Відображення методу прямої закупівлі | |
232 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення методу прямої закупівлі | |
233 | - ... viewer | |
234 | - ... ${USERS.users['${viewer}'].broker} | |
235 | - Звірити поле тендера ${viewer} | |
236 | - ... ${USERS.users['${tender_owner}'].initial_data} | |
237 | - ... procurementMethod | |
238 | - | |
239 | - | |
240 | -Відображення типу методу прямої закупівлі | |
241 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення типу методу прямої закупівлі | |
242 | - ... viewer | |
243 | - ... ${USERS.users['${viewer}'].broker} | |
244 | - Звірити поле тендера ${viewer} | |
245 | - ... ${USERS.users['${tender_owner}'].initial_data} | |
246 | - ... procurementMethodType | |
247 | - | |
248 | - | |
249 | 174 | Відображення ідентифікатора прямої закупівлі |
250 | 175 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення ідентифікатора прямої закупівлі |
251 | 176 | ... viewer |
... | ... | @@ -297,8 +222,8 @@ ${broker} Quinta |
297 | 222 | ... procuringEntity.address.countryName |
298 | 223 | |
299 | 224 | |
300 | -Відображення міста замовника прямої закупівлі | |
301 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення міста замовника прямої закупівлі | |
225 | +Відображення населеного пункту замовника прямої закупівлі | |
226 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення населеного пункту замовника прямої закупівлі | |
302 | 227 | ... viewer |
303 | 228 | ... ${USERS.users['${viewer}'].broker} |
304 | 229 | Звірити поле тендера ${viewer} |
... | ... | @@ -370,7 +295,7 @@ ${broker} Quinta |
370 | 295 | |
371 | 296 | |
372 | 297 | Відображення схеми ідентифікації замовника прямої закупівлі |
373 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення схеми замовника прямої закупівлі | |
298 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення схеми ідентифікації замовника прямої закупівлі | |
374 | 299 | ... viewer |
375 | 300 | ... ${USERS.users['${viewer}'].broker} |
376 | 301 | Звірити поле тендера ${viewer} |
... | ... | @@ -574,8 +499,8 @@ ${broker} Quinta |
574 | 499 | ... items[${ITEMS_NUM}].deliveryAddress.region |
575 | 500 | |
576 | 501 | |
577 | -Відображення міста адреси доставки номенклатури прямої закупівлі | |
578 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення locality адреси доставки номенклатури прямої закупівлі | |
502 | +Відображення населеного пункту адреси доставки номенклатури прямої закупівлі | |
503 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення населеного пункту адреси доставки номенклатури прямої закупівлі | |
579 | 504 | ... viewer |
580 | 505 | ... ${USERS.users['${viewer}'].broker} |
581 | 506 | Звірити поле тендера ${viewer} |
... | ... | @@ -692,7 +617,7 @@ ${broker} Quinta |
692 | 617 | |
693 | 618 | |
694 | 619 | Відображення схеми ідентифікації постачальника прямої закупівлі |
695 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення контактного імейлу постачальника прямої закупівлі | |
620 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення схеми ідентифікації постачальника прямої закупівлі | |
696 | 621 | ... viewer |
697 | 622 | ... ${USERS.users['${viewer}'].broker} |
698 | 623 | Звірити поле тендера із значенням ${viewer} | ... | ... |
... | ... | @@ -6,8 +6,8 @@ Library Selenium2Library |
6 | 6 | Library DebugLibrary |
7 | 7 | Resource keywords.robot |
8 | 8 | Resource resource.robot |
9 | -Suite Setup TestSuiteSetup | |
10 | -Suite Teardown Close all browsers | |
9 | +Suite Setup Test Suite Setup | |
10 | +Suite Teardown Test Suite Teardown | |
11 | 11 | |
12 | 12 | *** Variables *** |
13 | 13 | ${mode} single |
... | ... | @@ -17,9 +17,12 @@ ${broker} Quinta |
17 | 17 | |
18 | 18 | *** Test Cases *** |
19 | 19 | Можливість оголосити однопредметний тендер з неціновим показником |
20 | - [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
20 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер з неціновим показником | |
21 | + ... tender_owner | |
22 | + ... ${USERS.users['${tender_owner}'].broker} | |
23 | + ... minimal | |
21 | 24 | [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера), |
22 | - ${base_tender_data}= Підготовка початкових даних | |
25 | + ${base_tender_data}= Підготовка даних для створення тендера | |
23 | 26 | ${tender_data}= test_meat_tender_data ${base_tender_data} |
24 | 27 | ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data} |
25 | 28 | ${LAST_MODIFICATION_DATE}= Get Current TZdate |
... | ... | @@ -28,18 +31,25 @@ ${broker} Quinta |
28 | 31 | Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE} |
29 | 32 | Log ${TENDER} |
30 | 33 | |
34 | + | |
31 | 35 | Можливість знайти однопредметний тендер по ідентифікатору |
32 | 36 | [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору |
33 | - ... viewer | |
34 | - ... ${USERS.users['${viewer}'].broker} | |
37 | + ... viewer tender_owner provider provider1 | |
38 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} | |
39 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
35 | 40 | ... minimal |
36 | - Дочекатись синхронізації з майданчиком ${viewer} | |
37 | - ${usernames}= Create List ${viewer} ${tender_owner} ${provider} ${provider1} | |
38 | - :FOR ${username} IN @{usernames} | |
41 | + :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} | |
42 | + \ Дочекатись синхронізації з майданчиком ${username} | |
39 | 43 | \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} |
40 | 44 | |
45 | + | |
41 | 46 | Неможливість перевищити ліміт для нецінових критеріїв |
47 | + [Documentation] | |
48 | + ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed" | |
42 | 49 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
50 | + ... tender_owner | |
51 | + ... ${USERS.users['${tender_owner}'].broker} | |
52 | + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | |
43 | 53 | ${invalid_features}= test_invalid_features_data |
44 | 54 | ${fail}= Викликати для учасника ${tender_owner} Внести зміни в тендер shouldfail ${TENDER['TENDER_UAID']} features ${invalid_features} |
45 | 55 | Log ${fail} |
... | ... | @@ -48,58 +58,76 @@ ${broker} Quinta |
48 | 58 | #Подання пропозицій |
49 | 59 | |
50 | 60 | Відображення початку періоду прийому пропозицій оголошеного тендера |
51 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
52 | - ... viewer | |
53 | - ... ${USERS.users['${viewer}'].broker} | |
61 | + [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору | |
62 | + ... viewer provider provider1 | |
63 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${provider}'].broker} | |
64 | + ... ${USERS.users['${provider1}'].broker} | |
54 | 65 | ... minimal |
55 | - ${usernames}= Create List ${viewer} ${provider} ${provider1} | |
56 | - :FOR ${username} IN @{usernames} | |
66 | + :FOR ${username} IN ${viewer} ${provider} ${provider1} | |
67 | + \ Дочекатись синхронізації з майданчиком ${username} | |
57 | 68 | \ Звірити дату тендера ${username} ${USERS.users['${tender_owner}'].initial_data} tenderPeriod.startDate |
58 | 69 | |
70 | + | |
59 | 71 | Неможливість подати цінову пропозицію без нецінового показника |
72 | + [Documentation] | |
73 | + ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed" | |
60 | 74 | [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію |
75 | + ... provider | |
76 | + ... ${USERS.users['${provider}'].broker} | |
77 | + [Setup] Дочекатись синхронізації з майданчиком ${provider} | |
61 | 78 | Дочекатись дати початку прийому пропозицій ${provider} |
62 | 79 | sleep 90 |
63 | 80 | ${bid}= test bid data |
64 | 81 | Log ${bid} |
65 | - ${biddingresponse0}= Викликати для учасника ${provider} Подати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${bid} | |
66 | - log ${biddingresponse0} | |
82 | + ${failbid}= Викликати для учасника ${provider} Подати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${bid} | |
83 | + log ${failbid} | |
67 | 84 | |
68 | -Подати цінову пропозицію з неціновим показником | |
85 | + | |
86 | +Можливість подати цінову пропозицію з неціновим показником | |
69 | 87 | [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію |
88 | + ... provider | |
89 | + ... ${USERS.users['${provider}'].broker} | |
70 | 90 | ${bid}= test bid data meat tender |
71 | 91 | Log ${bid} |
92 | + ${bidresponses}= Create Dictionary | |
93 | + Set To Dictionary ${bidresponses} bid ${bid} | |
94 | + Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} | |
72 | 95 | ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} |
73 | - ${biddingresponse0}= Create Dictionary | |
74 | - Set To Dictionary ${biddingresponse0} resp ${resp} | |
75 | - Set To Dictionary ${USERS.users['${provider}']} biddingresponse0 ${biddingresponse0} | |
96 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} resp ${resp} | |
76 | 97 | log ${resp} |
77 | 98 | |
99 | + | |
78 | 100 | Можливість змінити неціновий показник повторної цінової пропозиції до 0 |
79 | 101 | [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію |
80 | - Set To Dictionary ${USERS.users['${provider}'].biddingresponse0['resp'].data.parameters[0]} value 0 | |
81 | - Log ${USERS.users['${provider}'].biddingresponse0['resp'].data.parameters[0]} | |
82 | - ${fixbidparamsto0resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].biddingresponse0['resp']} | |
83 | - Set To Dictionary ${USERS.users['${provider}'].biddingresponse0} fixbidparamsto0resp ${fixbidparamsto0resp} | |
102 | + ... provider | |
103 | + ... ${USERS.users['${provider}'].broker} | |
104 | + ${fixbidparamsto0resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} parameters.0.value 0 | |
105 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} fixbidparamsto0resp ${fixbidparamsto0resp} | |
84 | 106 | log ${fixbidparamsto0resp} |
85 | 107 | |
108 | + | |
86 | 109 | Можливість змінити неціновий показник повторної цінової пропозиції до 0.15 |
87 | 110 | [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію |
88 | - Set To Dictionary ${USERS.users['${provider}'].biddingresponse0['resp'].data.parameters[0]} value 0.15 | |
89 | - Log ${USERS.users['${provider}'].biddingresponse0['resp'].data.parameters[0]} | |
90 | - ${fixbidparamsto015resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].biddingresponse0['resp']} | |
91 | - Set To Dictionary ${USERS.users['${provider}'].biddingresponse0} fixbidparamsto015resp ${fixbidparamsto015resp} | |
111 | + ... provider | |
112 | + ... ${USERS.users['${provider}'].broker} | |
113 | + ${fixbidparamsto015resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} parameters.0.value 0.15 | |
114 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} fixbidparamsto015resp ${fixbidparamsto015resp} | |
92 | 115 | log ${fixbidparamsto015resp} |
93 | 116 | |
94 | -Подати цінову пропозицію з неціновим показником другим учасником | |
117 | + | |
118 | +Можливість подати цінову пропозицію з неціновим показником другим учасником | |
95 | 119 | [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію |
120 | + ... provider1 | |
121 | + ... ${USERS.users['${provider1}'].broker} | |
122 | + [Setup] Дочекатись синхронізації з майданчиком ${provider1} | |
96 | 123 | Дочекатись дати початку прийому пропозицій ${provider1} |
97 | 124 | ${bid}= test bid data meat tender |
98 | 125 | Log ${bid} |
99 | 126 | ${bidresponses}= Create Dictionary |
100 | - ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
101 | - Set To Dictionary ${bidresponses} resp ${resp} | |
127 | + Set To Dictionary ${bidresponses} bid ${bid} | |
102 | 128 | Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} |
129 | + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
130 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp ${resp} | |
103 | 131 | log ${resp} |
104 | 132 | log ${USERS.users['${provider1}'].bidresponses} |
105 | 133 | |
... | ... | @@ -111,15 +139,23 @@ ${broker} Quinta |
111 | 139 | ... viewer |
112 | 140 | ... ${USERS.users['${viewer}'].broker} |
113 | 141 | ... minimal |
142 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
114 | 143 | Викликати для учасника ${viewer} Отримати інформацію із тендера auctionPeriod.startDate |
115 | 144 | |
116 | 145 | |
117 | 146 | Очікування аукціону |
147 | + [Tags] ${USERS.users['${viewer}'].broker}: Очікування аукціону | |
148 | + ... viewer | |
149 | + ... ${USERS.users['${viewer}'].broker} | |
118 | 150 | Дочекатись дати початку аукціону ${viewer} |
119 | 151 | sleep 1500 |
120 | 152 | |
121 | -Завершення аукціону | |
122 | - Дочекатись синхронізації з майданчиком ${tender_owner} | |
153 | + | |
154 | +Можливість отримати результати аукціону | |
155 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Результати аукціону | |
156 | + ... tender_owner | |
157 | + ... ${USERS.users['${tender_owner}'].broker} | |
158 | + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | |
123 | 159 | ${tender_data}= Викликати для учасника ${tender_owner} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} |
124 | 160 | ${result}= chef ${tender_data.data.bids} ${tender_data.data.features} |
125 | 161 | Log Many ${result[0]} ${tender_data.data.awards[0]} | ... | ... |
... | ... | @@ -6,8 +6,8 @@ Library Selenium2Library |
6 | 6 | Library DebugLibrary |
7 | 7 | Resource keywords.robot |
8 | 8 | Resource resource.robot |
9 | -Suite Setup TestSuiteSetup | |
10 | -Suite Teardown Close all browsers | |
9 | +Suite Setup Test Suite Setup | |
10 | +Suite Teardown Test Suite Teardown | |
11 | 11 | |
12 | 12 | *** Variables *** |
13 | 13 | ${mode} multi |
... | ... | @@ -18,7 +18,10 @@ ${broker} Quinta |
18 | 18 | *** Test Cases *** |
19 | 19 | Можливість оголосити багатопредметний тендер |
20 | 20 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
21 | - ${tender_data}= Підготовка початкових даних | |
21 | + ... tender_owner | |
22 | + ... ${USERS.users['${tender_owner}'].broker} | |
23 | + ... minimal | |
24 | + ${tender_data}= Підготовка даних для створення тендера | |
22 | 25 | ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data} |
23 | 26 | ${LAST_MODIFICATION_DATE}= Get Current TZdate |
24 | 27 | Set To Dictionary ${USERS.users['${tender_owner}']} initial_data ${tender_data} |
... | ... | @@ -26,93 +29,152 @@ ${broker} Quinta |
26 | 29 | Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE} |
27 | 30 | log ${TENDER} |
28 | 31 | |
29 | -Отримати багатопредметний тендер по ідентифікатору | |
32 | +Можливість знайти багатопредметний тендер по ідентифікатору | |
30 | 33 | [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору |
31 | - Дочекатись синхронізації з майданчиком ${viewer} | |
32 | - ${usernames}= Create List ${viewer} ${tender_owner} ${provider} ${provider1} | |
33 | - :FOR ${username} IN @{usernames} | |
34 | + ... viewer tender_owner provider provider1 | |
35 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} | |
36 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
37 | + ... minimal | |
38 | + :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} | |
39 | + \ Дочекатись синхронізації з майданчиком ${username} | |
34 | 40 | \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} |
35 | 41 | |
36 | 42 | Відображення опису позицій закупівлі багатопредметного тендера |
37 | 43 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
44 | + ... viewer | |
45 | + ... ${USERS.users['${viewer}'].broker} | |
46 | + ... minimal | |
38 | 47 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} description |
39 | 48 | |
40 | 49 | Відображення дати доставки позицій закупівлі багатопредметного тендера |
41 | 50 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
51 | + ... viewer | |
52 | + ... ${USERS.users['${viewer}'].broker} | |
53 | + ... critical level 3 | |
42 | 54 | Звірити дату предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} deliveryDate.endDate |
43 | 55 | |
44 | 56 | Відображення координат широти доставки позицій закупівлі багатопредметного тендера |
45 | 57 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
58 | + ... viewer | |
59 | + ... ${USERS.users['${viewer}'].broker} | |
46 | 60 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} deliveryLocation.latitude |
47 | 61 | |
48 | 62 | Відображення координат довготи доставки позицій закупівлі багатопредметного тендера |
49 | 63 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
64 | + ... viewer | |
65 | + ... ${USERS.users['${viewer}'].broker} | |
50 | 66 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} deliveryLocation.longitude |
51 | 67 | |
52 | 68 | Відображення назви нас. пункту доставки позицій закупівлі багатопредметного тендера |
53 | 69 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
70 | + ... viewer | |
71 | + ... ${USERS.users['${viewer}'].broker} | |
72 | + ... critical level 3 | |
54 | 73 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} deliveryAddress.countryName |
55 | 74 | |
56 | 75 | Відображення пошт. коду доставки позицій закупівлі багатопредметного тендера |
57 | 76 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
77 | + ... viewer | |
78 | + ... ${USERS.users['${viewer}'].broker} | |
58 | 79 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} deliveryAddress.postalCode |
59 | 80 | |
60 | 81 | Відображення регіону доставки позицій закупівлі багатопредметного тендера |
61 | 82 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
83 | + ... viewer | |
84 | + ... ${USERS.users['${viewer}'].broker} | |
85 | + ... critical level 3 | |
62 | 86 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} deliveryAddress.region |
63 | 87 | |
64 | 88 | Відображення locality адреси доставки позицій закупівлі багатопредметного тендера |
65 | 89 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
90 | + ... viewer | |
91 | + ... ${USERS.users['${viewer}'].broker} | |
66 | 92 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} deliveryAddress.locality |
67 | 93 | |
68 | 94 | Відображення вулиці доставки позицій закупівлі багатопредметного тендера |
69 | 95 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
96 | + ... viewer | |
97 | + ... ${USERS.users['${viewer}'].broker} | |
70 | 98 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} deliveryAddress.streetAddress |
71 | 99 | |
72 | 100 | Відображення схеми класифікації позицій закупівлі багатопредметного тендера |
73 | 101 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
102 | + ... viewer | |
103 | + ... ${USERS.users['${viewer}'].broker} | |
74 | 104 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} classification.scheme |
75 | 105 | |
76 | 106 | Відображення ідентифікатора класифікації позицій закупівлі багатопредметного тендера |
77 | 107 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
108 | + ... viewer | |
109 | + ... ${USERS.users['${viewer}'].broker} | |
110 | + ... critical level 3 | |
78 | 111 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} classification.id |
79 | 112 | |
80 | 113 | Відображення опису класифікації позицій закупівлі багатопредметного тендера |
81 | 114 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
115 | + ... viewer | |
116 | + ... ${USERS.users['${viewer}'].broker} | |
117 | + ... critical level 3 | |
82 | 118 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} classification.description |
83 | 119 | |
84 | 120 | Відображення схеми додаткової класифікації позицій закупівлі багатопредметного тендера |
85 | 121 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
122 | + ... viewer | |
123 | + ... ${USERS.users['${viewer}'].broker} | |
86 | 124 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} additionalClassifications[0].scheme |
87 | 125 | |
88 | 126 | Відображення ідентифікатора додаткової класифікації позицій закупівлі багатопредметного тендера |
89 | 127 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
128 | + ... viewer | |
129 | + ... ${USERS.users['${viewer}'].broker} | |
130 | + ... critical level 3 | |
90 | 131 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} additionalClassifications[0].id |
91 | 132 | |
92 | 133 | Відображення опису додаткової класифікації позицій закупівлі багатопредметного тендера |
93 | 134 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
135 | + ... viewer | |
136 | + ... ${USERS.users['${viewer}'].broker} | |
137 | + ... critical level 3 | |
94 | 138 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} additionalClassifications[0].description |
95 | 139 | |
96 | 140 | Відображення назви одиниці позицій закупівлі багатопредметного тендера |
97 | 141 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
142 | + ... viewer | |
143 | + ... ${USERS.users['${viewer}'].broker} | |
144 | + ... critical level 3 | |
98 | 145 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} unit.name |
99 | 146 | |
100 | 147 | Відображення коду одиниці позицій закупівлі багатопредметного тендера |
101 | 148 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
149 | + ... viewer | |
150 | + ... ${USERS.users['${viewer}'].broker} | |
102 | 151 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} unit.code |
103 | 152 | |
104 | 153 | Відображення кількості позицій закупівлі багатопредметного тендера |
105 | 154 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
155 | + ... viewer | |
156 | + ... ${USERS.users['${viewer}'].broker} | |
157 | + ... critical level 3 | |
106 | 158 | Звірити поля предметів закупівлі багатопредметного тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} quantity |
107 | 159 | |
108 | 160 | Можливість редагувати багатопредметний тендер |
109 | 161 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
162 | + ... tender_owner | |
163 | + ... ${USERS.users['${tender_owner}'].broker} | |
164 | + ... critical level 2 | |
165 | + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | |
110 | 166 | Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} description description |
111 | 167 | |
112 | 168 | Можливість додати позицію закупівлі в тендер |
113 | 169 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
170 | + ... tender_owner | |
171 | + ... ${USERS.users['${tender_owner}'].broker} | |
172 | + ... critical level 2 | |
114 | 173 | Викликати для учасника ${tender_owner} Додати предмети закупівлі ${TENDER['TENDER_UAID']} 3 |
115 | 174 | |
116 | 175 | Можливість видалити позиції закупівлі тендера |
117 | 176 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
177 | + ... tender_owner | |
178 | + ... ${USERS.users['${tender_owner}'].broker} | |
179 | + ... critical level 2 | |
118 | 180 | Викликати для учасника ${tender_owner} Відняти предмети закупівлі ${TENDER['TENDER_UAID']} 2 | ... | ... |
... | ... | @@ -6,8 +6,8 @@ Library Selenium2Library |
6 | 6 | Library DebugLibrary |
7 | 7 | Resource keywords.robot |
8 | 8 | Resource resource.robot |
9 | -Suite Setup TestSuiteSetup | |
10 | -Suite Teardown Close all browsers | |
9 | +Suite Setup Test Suite Setup | |
10 | +Suite Teardown Test Suite Teardown | |
11 | 11 | |
12 | 12 | *** Variables *** |
13 | 13 | ${mode} multi |
... | ... | @@ -21,7 +21,10 @@ ${complaint_id} 1 |
21 | 21 | *** Test Cases *** |
22 | 22 | Можливість оголосити мультилотовий тендер |
23 | 23 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити мультилотовий тендер |
24 | - ${tender_data}= Підготовка початкових даних | |
24 | + ... tender_owner | |
25 | + ... ${USERS.users['${tender_owner}'].broker} | |
26 | + ... minimal | |
27 | + ${tender_data}= Підготовка даних для створення тендера | |
25 | 28 | ${tender_data}= test_tender_data_multiple_lots ${tender_data} |
26 | 29 | ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data} |
27 | 30 | ${LAST_MODIFICATION_DATE}= Get Current TZdate |
... | ... | @@ -30,21 +33,24 @@ ${complaint_id} 1 |
30 | 33 | Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE} |
31 | 34 | Log ${TENDER} |
32 | 35 | |
33 | -Пошук мультилотового тендера по ідентифікатору | |
36 | +Можливість знайти мультилотовий тендер по ідентифікатору | |
34 | 37 | [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору |
35 | - Дочекатись синхронізації з майданчиком ${viewer} | |
36 | - ${usernames}= Create List ${viewer} ${tender_owner} ${provider} ${provider1} | |
37 | - :FOR ${username} IN @{usernames} | |
38 | + ... viewer tender_owner provider provider1 | |
39 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} | |
40 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
41 | + ... minimal | |
42 | + :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} | |
43 | + \ Дочекатись синхронізації з майданчиком ${username} | |
38 | 44 | \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} |
39 | 45 | |
40 | -Отримання тендера | |
41 | - Дочекатись синхронізації з майданчиком ${tender_owner} | |
42 | - Викликати для учасника ${tender_owner} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | |
43 | - | |
44 | 46 | ####### |
45 | 47 | #Операції з лотом |
46 | 48 | |
47 | -Створення лоту | |
49 | +Можливість створення лоту | |
50 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
51 | + ... tender_owner | |
52 | + ... ${USERS.users['${tender_owner}'].broker} | |
53 | + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | |
48 | 54 | ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data} |
49 | 55 | ${lot}= test lot data |
50 | 56 | ${lotcreate}= Викликати для учасника ${tender_owner} Створити лот ${tender_data} ${lot} |
... | ... | @@ -54,12 +60,18 @@ ${complaint_id} 1 |
54 | 60 | log ${lotcreate} |
55 | 61 | |
56 | 62 | Можливість видалення лоту |
63 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
64 | + ... tender_owner | |
65 | + ... ${USERS.users['${tender_owner}'].broker} | |
57 | 66 | ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data} |
58 | 67 | ${lot}= Get Variable Value ${USERS.users['${tender_owner}'].lotresponses['resp0']} |
59 | 68 | ${lotdelete}= Викликати для учасника ${tender_owner} Видалити лот ${tender_data} ${lot} |
60 | 69 | Log ${lotdelete} |
61 | 70 | |
62 | -Повторне створення лоту | |
71 | +Можливість повторого створення лоту | |
72 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
73 | + ... tender_owner | |
74 | + ... ${USERS.users['${tender_owner}'].broker} | |
63 | 75 | ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data} |
64 | 76 | ${lot}= test lot data |
65 | 77 | ${lotcreate}= Викликати для учасника ${tender_owner} Створити лот ${tender_data} ${lot} |
... | ... | @@ -69,6 +81,9 @@ ${complaint_id} 1 |
69 | 81 | log ${lotcreate} |
70 | 82 | |
71 | 83 | Можливість змінити цінову пропозицію у новому лоті до 8000 |
84 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
85 | + ... tender_owner | |
86 | + ... ${USERS.users['${tender_owner}'].broker} | |
72 | 87 | ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data} |
73 | 88 | Set To Dictionary ${USERS.users['${tender_owner}'].lotresponses['resp'].data.value} amount 8000 |
74 | 89 | ${fixlotto8000resp}= Викликати для учасника ${tender_owner} Змінити лот ${tender_data} ${USERS.users['${tender_owner}'].lotresponses['resp']} |
... | ... | @@ -76,6 +91,9 @@ ${complaint_id} 1 |
76 | 91 | log ${fixlotto8000resp} |
77 | 92 | |
78 | 93 | Можливість змінити цінову пропозицію у новому лоті до 100 |
94 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
95 | + ... tender_owner | |
96 | + ... ${USERS.users['${tender_owner}'].broker} | |
79 | 97 | ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data} |
80 | 98 | Set To Dictionary ${USERS.users['${tender_owner}'].lotresponses['resp'].data.value} amount 8000 |
81 | 99 | ${fixlotto100resp}= Викликати для учасника ${tender_owner} Змінити лот ${tender_data} ${USERS.users['${tender_owner}'].lotresponses['resp']} |
... | ... | @@ -88,9 +106,14 @@ ${complaint_id} 1 |
88 | 106 | |
89 | 107 | Можливість додати позицію закупівлі в тендер |
90 | 108 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
109 | + ... tender_owner | |
110 | + ... ${USERS.users['${tender_owner}'].broker} | |
91 | 111 | Викликати для учасника ${tender_owner} Додати предмети закупівлі ${TENDER['TENDER_UAID']} 1 |
92 | 112 | |
93 | -Добавити предмет закупівлі до лоту | |
113 | +Можливість добавити предмет закупівлі до лоту | |
114 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
115 | + ... tender_owner | |
116 | + ... ${USERS.users['${tender_owner}'].broker} | |
94 | 117 | ${items}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data.data['items']} |
95 | 118 | Log ${items} |
96 | 119 | ${lot_id}= Get Variable Value ${USERS.users['${tender_owner}'].lotresponses['resp'].data.id} |
... | ... | @@ -99,11 +122,19 @@ ${complaint_id} 1 |
99 | 122 | Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} items ${items} |
100 | 123 | |
101 | 124 | Неможливість видалення лоту з прив’язаними предметами закупівлі |
125 | + [Documentation] | |
126 | + ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed" | |
127 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
128 | + ... tender_owner | |
129 | + ... ${USERS.users['${tender_owner}'].broker} | |
102 | 130 | ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data} |
103 | 131 | ${lot}= Get Variable Value ${USERS.users['${tender_owner}'].lotresponses['resp']} |
104 | 132 | Викликати для учасника ${tender_owner} Видалити лот shouldfail ${tender_data} ${lot} |
105 | 133 | |
106 | 134 | Можливість видалити позиції закупівлі тендера |
135 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
136 | + ... tender_owner | |
137 | + ... ${USERS.users['${tender_owner}'].broker} | |
107 | 138 | ${items}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data.data['items']} |
108 | 139 | Log ${items} |
109 | 140 | ${resp}= Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} items ${items[:-1]} |
... | ... | @@ -111,6 +142,8 @@ ${complaint_id} 1 |
111 | 142 | |
112 | 143 | Можливість додати тендерну документацію лоту |
113 | 144 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість завантажити документ |
145 | + ... tender_owner | |
146 | + ... ${USERS.users['${tender_owner}'].broker} | |
114 | 147 | [Documentation] Закупівельник ${USERS.users['${tender_owner}'].broker} завантажує документацію до оголошеної закупівлі |
115 | 148 | ${filepath}= create_fake_doc |
116 | 149 | ${lot_id}= Get Variable Value ${USERS.users['${tender_owner}'].lotresponses['resp'].data.id} |
... | ... | @@ -125,19 +158,28 @@ ${complaint_id} 1 |
125 | 158 | ####### |
126 | 159 | #Запитання до лоту |
127 | 160 | |
128 | -Задати питання | |
161 | +Можливість задати питання | |
129 | 162 | [Tags] ${USERS.users['${provider}'].broker}: Можливість задати запитання |
130 | - ${question}= Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${QUESTIONS[${question_id}]} | |
131 | - log ${question} | |
163 | + ... provider | |
164 | + ... ${USERS.users['${provider}'].broker} | |
165 | + [Setup] Дочекатись синхронізації з майданчиком ${provider} | |
166 | + ${question}= Підготовка даних для запитання | |
167 | + ${question_resp}= Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${question} | |
132 | 168 | ${now}= Get Current TZdate |
133 | - Set To Dictionary ${QUESTIONS[${question_id}].data} date ${now} | |
134 | - | |
135 | -Відповісти на запитання | |
169 | + ${question.data.date}= Set variable ${now} | |
170 | + ${question_data}= Create Dictionary question=${question} question_resp=${question_resp} | |
171 | + Set To Dictionary ${USERS.users['${provider}']} question_data ${question_data} | |
172 | +Можливість відповісти на запитання | |
136 | 173 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відповісти на запитання |
137 | - Викликати для учасника ${tender_owner} Відповісти на питання ${TENDER['TENDER_UAID']} 0 ${ANSWERS[0]} | |
174 | + ... tender_owner | |
175 | + ... ${USERS.users['${tender_owner}'].broker} | |
176 | + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | |
177 | + ${answer}= Підготовка даних для відповіді на запитання | |
178 | + ${answer_resp}= Викликати для учасника ${tender_owner} Відповісти на питання ${TENDER['TENDER_UAID']} ${USERS.users['${provider}']['question_data']['question_resp']} ${answer} | |
138 | 179 | ${now}= Get Current TZdate |
139 | - Set To Dictionary ${ANSWERS[${question_id}-1].data} date ${now} | |
140 | - | |
180 | + ${answer.data.date}= Set variable ${now} | |
181 | + ${answer_data}= Create Dictionary answer=${answer} answer_resp=${answer_resp} | |
182 | + Set To Dictionary ${USERS.users['${provider}']} answer_data ${answer_data} | |
141 | 183 | |
142 | 184 | ###### |
143 | 185 | #Cкарга на лот |
... | ... | @@ -198,119 +240,157 @@ ${complaint_id} 1 |
198 | 240 | |
199 | 241 | Відображення початку періоду прийому пропозицій оголошеного тендера |
200 | 242 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера |
201 | - ... viewer | |
243 | + ... viewer provider provider1 | |
202 | 244 | ... ${USERS.users['${viewer}'].broker} |
245 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
203 | 246 | ... minimal |
204 | - ${usernames}= Create List ${viewer} ${provider} ${provider1} | |
205 | - :FOR ${username} IN @{usernames} | |
247 | + :FOR ${username} IN ${viewer} ${provider} ${provider1} | |
248 | + \ Дочекатись синхронізації з майданчиком ${username} | |
206 | 249 | \ Звірити дату тендера ${username} ${USERS.users['${tender_owner}'].initial_data} tenderPeriod.startDate |
207 | 250 | |
208 | 251 | Відображення закінчення періоду прийому пропозицій оголошеного тендера |
209 | 252 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера |
210 | - ... viewer | |
253 | + ... viewer provider provider1 | |
211 | 254 | ... ${USERS.users['${viewer}'].broker} |
255 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
212 | 256 | ... minimal |
213 | - ${usernames}= Create List ${viewer} ${provider} ${provider1} | |
214 | - :FOR ${username} IN @{usernames} | |
257 | + :FOR ${username} IN ${viewer} ${provider} ${provider1} | |
258 | + \ Дочекатись синхронізації з майданчиком ${username} | |
215 | 259 | \ Звірити дату тендера ${username} ${USERS.users['${tender_owner}'].initial_data} tenderPeriod.endDate |
216 | 260 | |
217 | 261 | Неможливість подати цінову пропозицію до початку періоду подачі пропозицій |
262 | + [Documentation] | |
263 | + ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed" | |
218 | 264 | [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію |
265 | + ... prvider | |
266 | + ... ${USERS.users['${provider}'].broker} | |
267 | + [Setup] Дочекатись синхронізації з майданчиком ${provider} | |
219 | 268 | ${bid}= test lots bid data |
220 | 269 | Log ${bid} |
221 | 270 | ${bidresponses}= Create Dictionary |
222 | - ${bid_before_bidperiod_resp}= Викликати для учасника ${provider} Подати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${bid} | |
223 | - Set To Dictionary ${bidresponses} bid_before_bidperiod_resp ${bid_before_bidperiod_resp} | |
271 | + Set To Dictionary ${bidresponses} bid ${bid} | |
224 | 272 | Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} |
273 | + ${bid_before_bidperiod_resp}= Викликати для учасника ${provider} Подати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${bid} | |
274 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} bid_before_bidperiod_resp ${bid_before_bidperiod_resp} | |
225 | 275 | log ${USERS.users['${provider}']} |
226 | 276 | |
227 | 277 | Неможливість подати цінову пропозицію без прив’язки до лоту |
278 | + [Documentation] | |
279 | + ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed" | |
228 | 280 | [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію |
281 | + ... prvider | |
282 | + ... ${USERS.users['${provider}'].broker} | |
283 | + [Setup] Дочекатись синхронізації з майданчиком ${provider} | |
229 | 284 | Дочекатись дати початку прийому пропозицій ${provider} |
230 | 285 | ${bid}= test bid data |
231 | 286 | Log ${bid} |
232 | 287 | ${bidresponses}= Create Dictionary |
233 | - ${no_lot_bid_resp}= Викликати для учасника ${provider} Подати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${bid} | |
234 | - Set To Dictionary ${bidresponses} no_lot_bid_resp ${no_lot_bid_resp} | |
288 | + Set To Dictionary ${bidresponses} bid ${bid} | |
235 | 289 | Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} |
290 | + ${no_lot_bid_resp}= Викликати для учасника ${provider} Подати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${bid} | |
291 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} no_lot_bid_resp ${no_lot_bid_resp} | |
236 | 292 | log ${USERS.users['${provider}']} |
237 | 293 | |
238 | -Подати цінову пропозицію першим учасником | |
294 | +Можливість подати цінову пропозицію першим учасником | |
239 | 295 | [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію |
296 | + ... prvider | |
297 | + ... ${USERS.users['${provider}'].broker} | |
240 | 298 | ${bid}= test lots bid data |
241 | 299 | Log ${bid} |
242 | - ${biddingresponse0}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
243 | - Set Global Variable ${biddingresponse0} | |
244 | - log ${biddingresponse0} | |
300 | + ${bidresponses}= Create Dictionary | |
301 | + Set To Dictionary ${bidresponses} bid ${bid} | |
302 | + Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} | |
303 | + ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
304 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} resp ${resp} | |
305 | + log ${USERS.users['${provider}']} | |
245 | 306 | |
246 | 307 | Можливість скасувати цінову пропозицію |
247 | 308 | [Tags] ${USERS.users['${provider}'].broker}: Можливість скасувати цінову пропозицію |
248 | - ${biddingresponse_0}= Викликати для учасника ${provider} Скасувати цінову пропозицію ${TENDER['TENDER_UAID']} ${biddingresponse0} | |
309 | + ... prvider | |
310 | + ... ${USERS.users['${provider}'].broker} | |
311 | + ${canceledbidresp}= Викликати для учасника ${provider} Скасувати цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].bidresponses['resp']} | |
312 | + Log ${canceledbidresp} | |
249 | 313 | |
250 | -Подати повторно цінову пропозицію першим учасником | |
314 | +Можливість подати повторно цінову пропозицію першим учасником | |
251 | 315 | [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію |
316 | + ... prvider | |
317 | + ... ${USERS.users['${provider}'].broker} | |
252 | 318 | Дочекатись дати початку прийому пропозицій ${provider} |
253 | 319 | ${bid}= test lots bid data |
254 | 320 | Log ${bid} |
321 | + ${bidresponses}= Create Dictionary | |
322 | + Set To Dictionary ${bidresponses} bid ${bid} | |
323 | + Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} | |
255 | 324 | ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} |
256 | 325 | Set To Dictionary ${USERS.users['${provider}'].bidresponses} resp ${resp} |
257 | - log ${resp} | |
258 | 326 | log ${USERS.users['${provider}'].bidresponses} |
259 | 327 | |
260 | 328 | Можливість змінити повторну цінову пропозицію до 2000 |
261 | 329 | [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію |
262 | - Set To Dictionary ${USERS.users['${provider}'].bidresponses['resp'].data.lotValues[0].value} amount 2000 | |
263 | - Log ${USERS.users['${provider}'].bidresponses['resp'].data.lotValues[0].value} | |
264 | - ${fixbidto50000resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].bidresponses['resp']} | |
265 | - Set To Dictionary ${USERS.users['${provider}'].bidresponses} fixbidto50000resp ${fixbidto50000resp} | |
266 | - log ${fixbidto50000resp} | |
330 | + ... prvider | |
331 | + ... ${USERS.users['${provider}'].broker} | |
332 | + ${fixbidto2000resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} lotValues.0.value.amount 2000 | |
333 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} fixbidto2000resp ${fixbidto2000resp} | |
334 | + log ${fixbidto2000resp} | |
267 | 335 | |
268 | -Можливість змінити повторну цінову пропозицію до 100 | |
336 | +Можливість змінити повторну цінову пропозицію до 10 | |
269 | 337 | [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію |
270 | - Set To Dictionary ${USERS.users['${provider}'].bidresponses['resp'].data.lotValues[0].value} amount 100 | |
271 | - Log ${USERS.users['${provider}'].bidresponses['fixbidto50000resp'].data.lotValues[0].value} | |
272 | - ${fixbidto10resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].bidresponses['resp']} | |
338 | + ... prvider | |
339 | + ... ${USERS.users['${provider}'].broker} | |
340 | + ${fixbidto10resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} lotValues.0.value.amount 10 | |
273 | 341 | Set To Dictionary ${USERS.users['${provider}'].bidresponses} fixbidto10resp ${fixbidto10resp} |
274 | 342 | log ${fixbidto10resp} |
275 | 343 | |
276 | -Подати цінову пропозицію другим учасником | |
344 | +Можливість подати цінову пропозицію другим учасником | |
277 | 345 | [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію |
346 | + ... prvider1 | |
347 | + ... ${USERS.users['${provider1}'].broker} | |
348 | + [Setup] Дочекатись синхронізації з майданчиком ${provider1} | |
278 | 349 | Дочекатись дати початку прийому пропозицій ${provider1} |
279 | 350 | ${bid}= test lots bid data |
280 | 351 | Log ${bid} |
281 | 352 | ${bidresponses}= Create Dictionary |
282 | - ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
283 | - Set To Dictionary ${bidresponses} resp ${resp} | |
353 | + Set To Dictionary ${bidresponses} bid ${bid} | |
284 | 354 | Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} |
355 | + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
356 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp ${resp} | |
285 | 357 | log ${resp} |
286 | 358 | log ${USERS.users['${provider1}'].bidresponses} |
287 | 359 | |
288 | 360 | Неможливість побачити цінові пропозиції учасників під час прийому пропозицій |
289 | 361 | [Tags] ${USERS.users['${viewer}'].broker}: Можливість подати цінову пропозицію |
362 | + ... viewer | |
363 | + ... ${USERS.users['${viewer}'].broker} | |
364 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
290 | 365 | ${bids}= Викликати для учасника ${viewer} Отримати інформацію із тендера bids |
291 | 366 | Should Be Equal ${bids} ${None} |
292 | 367 | |
293 | -Неможливість змінити цінову пропозицію до 50000 після закінчення прийому пропозицій | |
294 | - [Tags] ${USERS.users['${provider1}'].broker}: Неможливість змінити цінову пропозицію до 50000 після закінчення прийому пропозицій | |
368 | +Неможливість змінити цінову пропозицію до 2000 після закінчення прийому пропозицій | |
369 | + [Documentation] | |
370 | + ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed" | |
371 | + [Tags] ${USERS.users['${provider1}'].broker}: Неможливість змінити цінову пропозицію до 2000 після закінчення прийому пропозицій | |
372 | + ... provider1 | |
373 | + ... ${USERS.users['${provider1}'].broker} | |
374 | + [Setup] Дочекатись синхронізації з майданчиком ${provider1} | |
295 | 375 | Дочекатись дати закінчення прийому пропозицій ${provider1} |
296 | - Set To Dictionary ${USERS.users['${provider1}'].bidresponses['resp'].data.lotValues[0].value} amount 50000 | |
297 | - Log ${USERS.users['${provider1}'].bidresponses['resp'].data.lotValues[0].value} | |
298 | - ${failfixbidto50000resp}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${USERS.users['${provider1}'].bidresponses['resp']} | |
299 | - Set To Dictionary ${USERS.users['${provider1}'].bidresponses} failfixbidto50000resp ${failfixbidto50000resp} | |
300 | - log ${failfixbidto50000resp} | |
376 | + ${failfixbidto2000resp}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} lotValues.0.value.amount 2000 | |
377 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} failfixbidto2000resp ${failfixbidto2000resp} | |
378 | + log ${failfixbidto2000resp} | |
301 | 379 | |
302 | 380 | Неможливість змінити цінову пропозицію до 1 після закінчення прийому пропозицій |
381 | + [Documentation] | |
382 | + ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed" | |
303 | 383 | [Tags] ${USERS.users['${provider1}'].broker}: Неможливість змінити цінову пропозицію до 1 після закінчення прийому пропозицій |
304 | - Set To Dictionary ${USERS.users['${provider1}'].bidresponses['resp'].data.lotValues[0].value} amount 1 | |
305 | - Log ${USERS.users['${provider1}'].bidresponses['resp'].data.lotValues[0].value} | |
306 | - ${failfixbidto1resp}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${USERS.users['${provider1}'].bidresponses['resp']} | |
384 | + ... provider1 | |
385 | + ... ${USERS.users['${provider1}'].broker} | |
386 | + ${failfixbidto1resp}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} lotValues.0.value.amount 1 | |
307 | 387 | Set To Dictionary ${USERS.users['${provider1}'].bidresponses} failfixbidto1resp ${failfixbidto1resp} |
308 | 388 | log ${failfixbidto1resp} |
309 | 389 | |
310 | 390 | Неможливість скасувати цінову пропозицію |
391 | + [Documentation] | |
392 | + ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed" | |
311 | 393 | [Tags] ${USERS.users['${provider1}'].broker}: Можливість скасувати цінову пропозицію |
394 | + ... provider1 | |
395 | + ... ${USERS.users['${provider1}'].broker} | |
312 | 396 | ${biddingresponse}= Викликати для учасника ${provider1} Скасувати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${USERS.users['${provider1}'].bidresponses['resp']} |
313 | - | |
314 | -Отримання тендера після закінчення прийому пропозицій | |
315 | - Дочекатись синхронізації з майданчиком ${viewer} | |
316 | - Викликати для учасника ${viewer} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | ... | ... |
op_robot_tests/tests_files/openEU.robot
0 → 100644
1 | +*** Settings *** | |
2 | +Resource keywords.robot | |
3 | +Resource resource.robot | |
4 | +Suite Setup Test Suite Setup | |
5 | +Suite Teardown Test Suite Teardown | |
6 | + | |
7 | +*** Variables *** | |
8 | +${mode} openeu | |
9 | + | |
10 | +${role} viewer | |
11 | +${broker} Quinta | |
12 | + | |
13 | + | |
14 | +*** Test Cases *** | |
15 | +Можливість оголосити понадпороговий однопредметний тендер | |
16 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
17 | + ... tender_owner | |
18 | + ... ${USERS.users['${tender_owner}'].broker} | |
19 | + ... minimal | |
20 | + [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера) | |
21 | + ${tender_data}= Підготовка даних для створення тендера | |
22 | + ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data} | |
23 | + ${LAST_MODIFICATION_DATE}= Get Current TZdate | |
24 | + Set To Dictionary ${USERS.users['${tender_owner}']} initial_data ${tender_data} | |
25 | + Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID} | |
26 | + Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE} | |
27 | + Log ${TENDER} | |
28 | + | |
29 | +Пошук позапорогового однопредметного тендера по ідентифікатору | |
30 | + [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору | |
31 | + ... viewer tender_owner provider provider1 | |
32 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} | |
33 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
34 | + ... minimal | |
35 | + ${usernames}= Create List ${viewer} ${tender_owner} ${provider} ${provider1} | |
36 | + :FOR ${username} IN @{usernames} | |
37 | + \ Дочекатись синхронізації з майданчиком ${username} | |
38 | + \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | |
39 | + | |
40 | +Відображення типу закупівлі оголошеного тендер | |
41 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
42 | + ... viewer | |
43 | + ... ${USERS.users['${viewer}'].broker} | |
44 | + Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} procurementMethodType | |
45 | + | |
46 | +Відображення початку періоду прийому пропозицій оголошеного тендера | |
47 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
48 | + ... viewer | |
49 | + ... ${USERS.users['${viewer}'].broker} | |
50 | + ... minimal | |
51 | + ${usernames}= Create List ${viewer} ${provider} ${provider1} | |
52 | + :FOR ${username} IN @{usernames} | |
53 | + \ Звірити дату тендера ${username} ${USERS.users['${tender_owner}'].initial_data} tenderPeriod.startDate | |
54 | + | |
55 | +Відображення закінчення періоду прийому пропозицій оголошеного тендера | |
56 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
57 | + ... viewer | |
58 | + ... ${USERS.users['${viewer}'].broker} | |
59 | + ... minimal | |
60 | + ${usernames}= Create List ${viewer} ${provider} ${provider1} | |
61 | + :FOR ${username} IN @{usernames} | |
62 | + \ Звірити дату тендера ${username} ${USERS.users['${tender_owner}'].initial_data} tenderPeriod.endDate | |
63 | + | |
64 | +Відображення закінчення періоду подання скарг на оголошений тендер | |
65 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
66 | + ... viewer | |
67 | + ... ${USERS.users['${viewer}'].broker} | |
68 | + ... minimal | |
69 | + ${usernames}= Create List ${viewer} ${provider} ${provider1} | |
70 | + :FOR ${username} IN @{usernames} | |
71 | + \ Викликати для учасника ${username} Отримати інформацію із тендера complaintPeriod.endDate | |
72 | + | |
73 | +Можливість подати вимогу на умови більше ніж за 10 днів до завершення періоду подання пропозицій | |
74 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати вимогу на умови | |
75 | + ... provider | |
76 | + ... ${USERS.users['${provider}'].broker} | |
77 | + [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі | |
78 | + ${claim}= Підготовка даних для подання скарги | |
79 | + Set To Dictionary ${claim.data} status claim | |
80 | + Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${claim} | |
81 | + ${complaints}= Create Dictionary | |
82 | + Set To Dictionary ${complaints} claim0 ${claim} | |
83 | + Set To Dictionary ${USERS.users['${provider}']} complaints ${complaints} | |
84 | + | |
85 | +Можливість скасувати вимогу на умови | |
86 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість скасувати скаргу на умови | |
87 | + ... provider | |
88 | + ... ${USERS.users['${provider}'].broker} | |
89 | + ${claim}= Get From Dictionary ${USERS.users['${provider}'].complaints} claim0 | |
90 | + Set To Dictionary ${claim.data} status cancelled | |
91 | + Set To Dictionary ${claim.data} cancellationReason test_draft_cancellation | |
92 | + Викликати для учасника ${provider} Обробити скаргу ${TENDER['TENDER_UAID']} 0 ${claim} | |
93 | + | |
94 | + | |
95 | +Подати цінову пропозицію першим учасником після оголошення тендеру | |
96 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію | |
97 | + ... provider | |
98 | + ... ${USERS.users['${provider}'].broker} | |
99 | + ${bid}= test bid data | |
100 | + Log ${bid} | |
101 | + ${bidresponses}= Create Dictionary | |
102 | + Set To Dictionary ${bidresponses} bid ${bid} | |
103 | + Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} | |
104 | + ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
105 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} resp ${resp} | |
106 | + log ${resp} | |
107 | + | |
108 | +Можливість завантажити публічний документ до пропозиції першим учасником | |
109 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість прийняти пропозицію переможця | |
110 | + ... provider | |
111 | + ... ${USERS.users['${provider}'].broker} | |
112 | + log ${USERS.users['${provider}'].broker} | |
113 | + ${filepath}= create_fake_doc | |
114 | + ${bid_doc_upload}= Викликати для учасника ${provider} Завантажити документ в ставку ${filepath} ${TENDER['TENDER_UAID']} | |
115 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} bid_doc_upload ${bid_doc_upload} | |
116 | + | |
117 | +Можливість змінити документацію цінової пропозиції з публічної на приватну | |
118 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість прийняти пропозицію переможця | |
119 | + ... provider | |
120 | + ... ${USERS.users['${provider}'].broker} | |
121 | + log ${USERS.users['${provider}'].broker} | |
122 | + ${privat_doc}= create_data_dict data.confidentialityRationale "Only our company sells badgers with pink hair." | |
123 | + Set To Dictionary ${privat_doc.data} confidentiality buyerOnly | |
124 | + ${bidid}= Get Variable Value ${USERS.users['${provider}'].bidresponses['resp'].data.id} | |
125 | + ${docid}= Get Variable Value ${USERS.users['${provider}'].bidresponses['bid_doc_upload']['upload_response'].data.id} | |
126 | + ${bid_doc_modified}= Викликати для учасника ${provider} Змінити документацію в ставці ${privat_doc} ${bidid} ${docid} | |
127 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} bid_doc_modified ${bid_doc_modified} | |
128 | + | |
129 | +Можливість завантажити фінансовий документ до пропозиції першим учасником | |
130 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість прийняти пропозицію переможця | |
131 | + ... provider | |
132 | + ... ${USERS.users['${provider}'].broker} | |
133 | + log ${USERS.users['${provider}'].broker} | |
134 | + ${filepath}= create_fake_doc | |
135 | + ${doc_type}= Set variable financial_documents | |
136 | + ${bid_doc_upload}= Викликати для учасника ${provider} Завантажити документ в ставку ${filepath} ${TENDER['TENDER_UAID']} ${doc_type} | |
137 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} bid_doc_upload ${bid_doc_upload} | |
138 | + | |
139 | +Можливість завантажити кваліфікаційний документ до пропозиції першим учасником | |
140 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість прийняти пропозицію переможця | |
141 | + ... provider | |
142 | + ... ${USERS.users['${provider}'].broker} | |
143 | + log ${USERS.users['${provider}'].broker} | |
144 | + ${filepath}= create_fake_doc | |
145 | + ${doc_type}= Set variable eligibility_documents | |
146 | + ${bid_doc_upload}= Викликати для учасника ${provider} Завантажити документ в ставку ${filepath} ${TENDER['TENDER_UAID']} ${doc_type} | |
147 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} bid_doc_upload ${bid_doc_upload} | |
148 | + | |
149 | +Можливість завантажити документ для критеріїв прийнятності до пропозиції першим учасником | |
150 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість прийняти пропозицію переможця | |
151 | + ... provider | |
152 | + ... ${USERS.users['${provider}'].broker} | |
153 | + log ${USERS.users['${provider}'].broker} | |
154 | + ${filepath}= create_fake_doc | |
155 | + ${doc_type}= Set variable qualification_documents | |
156 | + ${bid_doc_upload}= Викликати для учасника ${provider} Завантажити документ в ставку ${filepath} ${TENDER['TENDER_UAID']} ${doc_type} | |
157 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} bid_doc_upload ${bid_doc_upload} | |
158 | + | |
159 | +Подати цінову пропозицію другим учасником | |
160 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію | |
161 | + ... provider1 | |
162 | + ... ${USERS.users['${provider1}'].broker} | |
163 | + ${bid}= test bid data | |
164 | + Log ${bid} | |
165 | + ${bidresponses}= Create Dictionary | |
166 | + Set To Dictionary ${bidresponses} bid ${bid} | |
167 | + Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} | |
168 | + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
169 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp ${resp} | |
170 | + log ${resp} | |
171 | + | |
172 | +Можливість редагувати однопредметний тендер більше ніж за 7 днів до завершення періоду подання пропозицій | |
173 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
174 | + ... tender_owner | |
175 | + ... ${USERS.users['${tender_owner}'].broker} | |
176 | + Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} description description | |
177 | + | |
178 | +Перевірити на зміну статус пропозицій після редагування інформації про закупівлю | |
179 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | |
180 | + ... provider provider1 | |
181 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
182 | + ${usernames}= Create List ${provider} ${provider1} | |
183 | + :FOR ${username} IN @{usernames} | |
184 | + \ Дочекатись синхронізації з майданчиком ${username} | |
185 | + \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | |
186 | + \ ${bid}= Викликати для учасника ${username} Отримати пропозицію ${TENDER['TENDER_UAID']} | |
187 | + \ Should Be Equal ${bid.data.status} invalid | |
188 | + \ Log ${bid} | |
189 | + | |
190 | + | |
191 | +Оновити статус цінової пропозиції першого учасника | |
192 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | |
193 | + ... provider | |
194 | + ... ${USERS.users['${provider}'].broker} | |
195 | + ${activestatusresp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} status pending | |
196 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} activestatusresp ${activestatusresp} | |
197 | + log ${activestatusresp} | |
198 | + | |
199 | +Cкасувати цінову пропозицію другого учасника | |
200 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість скасувати цінову пропозицію | |
201 | + ... provider1 | |
202 | + ... ${USERS.users['${provider1}'].broker} | |
203 | + ${bid}= Get Variable Value ${USERS.users['${provider1}'].bidresponses['resp']} | |
204 | + ${bidresponses}= Викликати для учасника ${provider1} Скасувати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
205 | + | |
206 | +Повторно подати цінову пропозицію другим учасником після першої зміни | |
207 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію | |
208 | + ... provider1 | |
209 | + ... ${USERS.users['${provider1}'].broker} | |
210 | + ${bid}= test bid data | |
211 | + Log ${bid} | |
212 | + ${bidresponses}= Create Dictionary | |
213 | + Set To Dictionary ${bidresponses} bid ${bid} | |
214 | + Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} | |
215 | + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
216 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp ${resp} | |
217 | + log ${resp} | |
218 | + | |
219 | +Неможливість редагувати однопредметний тендер менше ніж за 7 днів до завершення періоду подання пропозицій | |
220 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
221 | + ... tender_owner | |
222 | + ... ${USERS.users['${tender_owner}'].broker} | |
223 | + ${no_edit_time}= add_minutes_to_date ${USERS.users['${tender_owner}'].tender_data.data.tenderPeriod.endDate} -6 | |
224 | + Дочекатись дати ${no_edit_time} | |
225 | + Викликати для учасника ${tender_owner} Внести зміни в тендер shouldfail ${TENDER['TENDER_UAID']} description description | |
226 | + | |
227 | +Неможливість подати вимогу на умови менше ніж за 10 днів до завершення періоду подання пропозицій | |
228 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати вимогу на умови | |
229 | + ... provider | |
230 | + ... ${USERS.users['${provider}'].broker} | |
231 | + [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі | |
232 | + ${claim}= Підготовка даних для подання скарги | |
233 | + Set To Dictionary ${claim.data} status claim | |
234 | + Викликати для учасника ${provider} Подати скаргу shouldfail ${TENDER['TENDER_UAID']} ${claim} | |
235 | + | |
236 | + | |
237 | +Продовжити період редагування подання пропозиції на 7 днів | |
238 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
239 | + ... tender_owner | |
240 | + ... ${USERS.users['${tender_owner}'].broker} | |
241 | + ${endDate}= add_minutes_to_date ${USERS.users['${tender_owner}'].tender_data.data.tenderPeriod.endDate} 7 | |
242 | + Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} tenderPeriod.endDate ${endDate} | |
243 | + | |
244 | + | |
245 | +Можливість подати скаргу на умови більше ніж за 4 дні до завершення періоду подання пропозицій | |
246 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати скаргу на умови | |
247 | + ... provider | |
248 | + ... ${USERS.users['${provider}'].broker} | |
249 | + [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі | |
250 | + Дочекатись синхронізації з майданчиком ${provider} | |
251 | + ${complaint}= Підготовка даних для подання скарги | |
252 | + Set To Dictionary ${complaint.data} status pending | |
253 | + Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${complaint} | |
254 | + Set To Dictionary ${USERS.users['${provider}'].complaints} complaint ${complaint} | |
255 | + | |
256 | + | |
257 | +Можливість скасувати скаргу на умови | |
258 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість скасувати скаргу на умови | |
259 | + ... provider | |
260 | + ... ${USERS.users['${provider}'].broker} | |
261 | + ${complaint}= Get From Dictionary ${USERS.users['${provider}'].complaints} complaint | |
262 | + Set To Dictionary ${complaint.data} status cancelled | |
263 | + Set To Dictionary ${complaint.data} cancellationReason test_draft_cancellation | |
264 | + Викликати для учасника ${provider} Обробити скаргу ${TENDER['TENDER_UAID']} 1 ${complaint} | |
265 | + | |
266 | + | |
267 | + | |
268 | +Можливість редагувати однопредметний тендер після продовження періоду подання пропозицій | |
269 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
270 | + ... tender_owner | |
271 | + ... ${USERS.users['${tender_owner}'].broker} | |
272 | + Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} description description | |
273 | + | |
274 | + | |
275 | +Перевірити на зміну статус пропозицій після редагування інформації про закупівлю після другої зміни | |
276 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | |
277 | + ... provider provider1 | |
278 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
279 | + ${usernames}= Create List ${provider} ${provider1} | |
280 | + :FOR ${username} IN @{usernames} | |
281 | + \ Дочекатись синхронізації з майданчиком ${username} | |
282 | + \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | |
283 | + \ ${bid}= Викликати для учасника ${username} Отримати пропозицію ${TENDER['TENDER_UAID']} | |
284 | + \ Should Be Equal ${bid.data.status} invalid | |
285 | + \ Log ${bid} | |
286 | + | |
287 | + | |
288 | +Можливість оновити статус цінової пропозиції першого учасника після другої зміни | |
289 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | |
290 | + ... provider | |
291 | + ... ${USERS.users['${provider}'].broker} | |
292 | + ${activestatusresp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} status pending | |
293 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} activestatusresp ${activestatusresp} | |
294 | + log ${activestatusresp} | |
295 | + | |
296 | + | |
297 | +Повторно подати цінову пропозицію другим учасником після другої зміни | |
298 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію | |
299 | + ... provider1 | |
300 | + ... ${USERS.users['${provider1}'].broker} | |
301 | + ${bid}= test bid data | |
302 | + Log ${bid} | |
303 | + ${bidresponses}= Create Dictionary | |
304 | + Set To Dictionary ${bidresponses} bid ${bid} | |
305 | + Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} | |
306 | + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
307 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp ${resp} | |
308 | + log ${resp} | |
309 | + | |
310 | + | |
311 | +Неможливість подати скаргу на умови менше ніж за 4 дні до завершення періоду подання пропозицій | |
312 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати скаргу на умови | |
313 | + ... provider | |
314 | + ... ${USERS.users['${provider}'].broker} | |
315 | + [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі | |
316 | + Дочекатись дати закінчення періоду подання скарг ${provider} | |
317 | + Дочекатись синхронізації з майданчиком ${provider} | |
318 | + ${complaint}= Підготовка даних для подання скарги | |
319 | + Set To Dictionary ${complaint.data} status pending | |
320 | + Викликати для учасника ${provider} Подати скаргу shouldfail ${TENDER['TENDER_UAID']} ${complaint} | |
321 | + | |
322 | +#### | |
323 | +# Qualification | |
324 | +Відображення статусу першої пропозиції кваліфікації | |
325 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Відображення основних даних оголошеного тендера | |
326 | + ... tender_owner | |
327 | + ... ${USERS.users['${tender_owner}'].broker} | |
328 | + Дочекатись дати закінчення прийому пропозицій ${tender_owner} | |
329 | + Дочекатись синхронізації з майданчиком ${tender_owner} | |
330 | + Звірити поле тендера із значенням ${tender_owner} pending qualifications[0].status | |
331 | + | |
332 | +Відображення статусу другої пропозиції кваліфікації | |
333 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Відображення основних даних оголошеного тендера | |
334 | + ... tender_owner | |
335 | + ... ${USERS.users['${tender_owner}'].broker} | |
336 | + Дочекатись дати закінчення прийому пропозицій ${tender_owner} | |
337 | + Дочекатись синхронізації з майданчиком ${tender_owner} | |
338 | + Звірити поле тендера із значенням ${tender_owner} pending qualifications[1].status | |
339 | + | |
340 | +Можливість завантажити документ у кваліфікацію пропозиції першого учасника | |
341 | + [Tags] ${USERS.users['${tender_owner}'].broker}: | |
342 | + ... tender_owner | |
343 | + ... ${USERS.users['${tender_owner}'].broker} | |
344 | + log ${USERS.users['${tender_owner}'].broker} | |
345 | + ${filepath}= create_fake_doc | |
346 | + Викликати для учасника ${tender_owner} Завантажити документ у кваліфікацію ${filepath} ${TENDER['TENDER_UAID']} 0 | |
347 | + | |
348 | +Можливість підтвердити першу пропозицію кваліфікації | |
349 | + [Tags] ${USERS.users['${tender_owner}'].broker}: | |
350 | + ... tender_owner | |
351 | + ... ${USERS.users['${tender_owner}'].broker} | |
352 | + Викликати для учасника ${tender_owner} Підтвердити кваліфікацію ${TENDER['TENDER_UAID']} 0 | |
353 | + | |
354 | +Можливість завантажити документ у кваліфікацію пропозиції другого учасника | |
355 | + [Tags] ${USERS.users['${tender_owner}'].broker}: | |
356 | + ... tender_owner | |
357 | + ... ${USERS.users['${tender_owner}'].broker} | |
358 | + log ${USERS.users['${tender_owner}'].broker} | |
359 | + ${filepath}= create_fake_doc | |
360 | + Викликати для учасника ${tender_owner} Завантажити документ у кваліфікацію ${filepath} ${TENDER['TENDER_UAID']} 1 | |
361 | + | |
362 | +Можливість відхилити другу пропозицію кваліфікації | |
363 | + [Tags] ${USERS.users['${tender_owner}'].broker}: | |
364 | + ... tender_owner | |
365 | + ... ${USERS.users['${tender_owner}'].broker} | |
366 | + Викликати для учасника ${tender_owner} Відхилити кваліфікацію ${TENDER['TENDER_UAID']} 1 | |
367 | + | |
368 | +Можливість скасувати рішення кваліфікації для другої пропопозиції | |
369 | + [Tags] ${USERS.users['${tender_owner}'].broker}: | |
370 | + ... tender_owner | |
371 | + ... ${USERS.users['${tender_owner}'].broker} | |
372 | + Викликати для учасника ${tender_owner} Скасувати кваліфікацію ${TENDER['TENDER_UAID']} 1 | |
373 | + | |
374 | +Можливість підтвердити другу пропозицію кваліфікації | |
375 | + [Tags] ${USERS.users['${tender_owner}'].broker}: | |
376 | + ... tender_owner | |
377 | + ... ${USERS.users['${tender_owner}'].broker} | |
378 | + Викликати для учасника ${tender_owner} Підтвердити кваліфікацію ${TENDER['TENDER_UAID']} 2 | |
\ No newline at end of file | ... | ... |
op_robot_tests/tests_files/openUA.robot
0 → 100644
1 | +*** Settings *** | |
2 | +Resource keywords.robot | |
3 | +Resource resource.robot | |
4 | +Suite Setup Test Suite Setup | |
5 | +Suite Teardown Test Suite Teardown | |
6 | + | |
7 | +*** Variables *** | |
8 | +${mode} openua | |
9 | + | |
10 | +${role} viewer | |
11 | +${broker} Quinta | |
12 | + | |
13 | + | |
14 | +*** Test Cases *** | |
15 | +Можливість оголосити понадпороговий однопредметний тендер | |
16 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
17 | + ... tender_owner | |
18 | + ... ${USERS.users['${tender_owner}'].broker} | |
19 | + ... minimal | |
20 | + [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера) | |
21 | + ${tender_data}= Підготовка даних для створення тендера | |
22 | + ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data} | |
23 | + ${LAST_MODIFICATION_DATE}= Get Current TZdate | |
24 | + Set To Dictionary ${USERS.users['${tender_owner}']} initial_data ${tender_data} | |
25 | + Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID} | |
26 | + Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE} | |
27 | + Log ${TENDER} | |
28 | + | |
29 | +Пошук позапорогового однопредметного тендера по ідентифікатору | |
30 | + [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору | |
31 | + ... viewer tender_owner provider provider1 | |
32 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} | |
33 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
34 | + ... minimal | |
35 | + ${usernames}= Create List ${viewer} ${tender_owner} ${provider} ${provider1} | |
36 | + :FOR ${username} IN @{usernames} | |
37 | + \ Дочекатись синхронізації з майданчиком ${username} | |
38 | + \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | |
39 | + | |
40 | +Відображення типу закупівлі оголошеного тендер | |
41 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
42 | + ... viewer | |
43 | + ... ${USERS.users['${viewer}'].broker} | |
44 | + Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} procurementMethodType | |
45 | + | |
46 | +Відображення початку періоду прийому пропозицій оголошеного тендера | |
47 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
48 | + ... viewer | |
49 | + ... ${USERS.users['${viewer}'].broker} | |
50 | + ... minimal | |
51 | + ${usernames}= Create List ${viewer} ${provider} ${provider1} | |
52 | + :FOR ${username} IN @{usernames} | |
53 | + \ Звірити дату тендера ${username} ${USERS.users['${tender_owner}'].initial_data} tenderPeriod.startDate | |
54 | + | |
55 | +Відображення закінчення періоду прийому пропозицій оголошеного тендера | |
56 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
57 | + ... viewer | |
58 | + ... ${USERS.users['${viewer}'].broker} | |
59 | + ... minimal | |
60 | + ${usernames}= Create List ${viewer} ${provider} ${provider1} | |
61 | + :FOR ${username} IN @{usernames} | |
62 | + \ Звірити дату тендера ${username} ${USERS.users['${tender_owner}'].initial_data} tenderPeriod.endDate | |
63 | + | |
64 | +Можливість подати вимогу на умови більше ніж за 10 днів до завершення періоду подання пропозицій | |
65 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати вимогу на умови | |
66 | + ... provider | |
67 | + ... ${USERS.users['${provider}'].broker} | |
68 | + [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі | |
69 | + ${claim}= Підготовка даних для подання скарги | |
70 | + Set To Dictionary ${claim.data} status claim | |
71 | + Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${claim} | |
72 | + ${complaints}= Create Dictionary | |
73 | + Set To Dictionary ${complaints} claim0 ${claim} | |
74 | + Set To Dictionary ${USERS.users['${provider}']} complaints ${complaints} | |
75 | + | |
76 | +Можливість скасувати вимогу на умови | |
77 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість скасувати скаргу на умови | |
78 | + ... provider | |
79 | + ... ${USERS.users['${provider}'].broker} | |
80 | + ${claim}= Get From Dictionary ${USERS.users['${provider}'].complaints} claim0 | |
81 | + Set To Dictionary ${claim.data} status cancelled | |
82 | + Set To Dictionary ${claim.data} cancellationReason test_draft_cancellation | |
83 | + Викликати для учасника ${provider} Обробити скаргу ${TENDER['TENDER_UAID']} 0 ${claim} | |
84 | + | |
85 | + | |
86 | +Подати цінову пропозицію першим учасником після оголошення тендеру | |
87 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію | |
88 | + ... provider | |
89 | + ... ${USERS.users['${provider}'].broker} | |
90 | + ${bid}= test bid data | |
91 | + Log ${bid} | |
92 | + ${bidresponses}= Create Dictionary | |
93 | + Set To Dictionary ${bidresponses} bid ${bid} | |
94 | + Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} | |
95 | + ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
96 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} resp ${resp} | |
97 | + log ${resp} | |
98 | + | |
99 | +Подати цінову пропозицію другим учасником | |
100 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію | |
101 | + ... provider1 | |
102 | + ... ${USERS.users['${provider1}'].broker} | |
103 | + ${bid}= test bid data | |
104 | + Log ${bid} | |
105 | + ${bidresponses}= Create Dictionary | |
106 | + Set To Dictionary ${bidresponses} bid ${bid} | |
107 | + Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} | |
108 | + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
109 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp ${resp} | |
110 | + log ${resp} | |
111 | + | |
112 | +Можливість редагувати однопредметний тендер більше ніж за 7 днів до завершення періоду подання пропозицій | |
113 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
114 | + ... tender_owner | |
115 | + ... ${USERS.users['${tender_owner}'].broker} | |
116 | + Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} description description | |
117 | + | |
118 | +Перевірити на зміну статус пропозицій після редагування інформації про закупівлю | |
119 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | |
120 | + ... provider provider1 | |
121 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
122 | + ${usernames}= Create List ${provider} ${provider1} | |
123 | + :FOR ${username} IN @{usernames} | |
124 | + \ Дочекатись синхронізації з майданчиком ${username} | |
125 | + \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | |
126 | + \ ${bid}= Викликати для учасника ${username} Отримати пропозицію ${TENDER['TENDER_UAID']} | |
127 | + \ Should Be Equal ${bid.data.status} invalid | |
128 | + \ Log ${bid} | |
129 | + | |
130 | + | |
131 | +Оновити статус цінової пропозиції першого учасника | |
132 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | |
133 | + ... provider | |
134 | + ... ${USERS.users['${provider}'].broker} | |
135 | + ${activestatusresp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} status active | |
136 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} activestatusresp ${activestatusresp} | |
137 | + log ${activestatusresp} | |
138 | + | |
139 | +Cкасувати цінову пропозицію другого учасника | |
140 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість скасувати цінову пропозицію | |
141 | + ... provider1 | |
142 | + ... ${USERS.users['${provider1}'].broker} | |
143 | + ${bid}= Get Variable Value ${USERS.users['${provider1}'].bidresponses['resp']} | |
144 | + ${bidresponses}= Викликати для учасника ${provider1} Скасувати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
145 | + | |
146 | +Повторно подати цінову пропозицію другим учасником після першої зміни | |
147 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію | |
148 | + ... provider1 | |
149 | + ... ${USERS.users['${provider1}'].broker} | |
150 | + ${bid}= test bid data | |
151 | + Log ${bid} | |
152 | + ${bidresponses}= Create Dictionary | |
153 | + Set To Dictionary ${bidresponses} bid ${bid} | |
154 | + Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} | |
155 | + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
156 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp ${resp} | |
157 | + log ${resp} | |
158 | + | |
159 | +Неможливість редагувати однопредметний тендер менше ніж за 7 днів до завершення періоду подання пропозицій | |
160 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
161 | + ... tender_owner | |
162 | + ... ${USERS.users['${tender_owner}'].broker} | |
163 | + ${no_edit_time}= add_minutes_to_date ${USERS.users['${tender_owner}'].tender_data.data.tenderPeriod.endDate} -6 | |
164 | + Дочекатись дати ${no_edit_time} | |
165 | + Викликати для учасника ${tender_owner} Внести зміни в тендер shouldfail ${TENDER['TENDER_UAID']} description description | |
166 | + | |
167 | +Неможливість подати вимогу на умови менше ніж за 10 днів до завершення періоду подання пропозицій | |
168 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати вимогу на умови | |
169 | + ... provider | |
170 | + ... ${USERS.users['${provider}'].broker} | |
171 | + [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі | |
172 | + ${claim}= Підготовка даних для подання скарги | |
173 | + Set To Dictionary ${claim.data} status claim | |
174 | + Викликати для учасника ${provider} Подати скаргу shouldfail ${TENDER['TENDER_UAID']} ${claim} | |
175 | + | |
176 | + | |
177 | +Продовжити період редагування подання пропозиції на 7 днів | |
178 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
179 | + ... tender_owner | |
180 | + ... ${USERS.users['${tender_owner}'].broker} | |
181 | + ${endDate}= add_minutes_to_date ${USERS.users['${tender_owner}'].tender_data.data.tenderPeriod.endDate} 7 | |
182 | + Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} tenderPeriod.endDate ${endDate} | |
183 | + | |
184 | + | |
185 | +Можливість подати скаргу на умови більше ніж за 4 дні до завершення періоду подання пропозицій | |
186 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати скаргу на умови | |
187 | + ... provider | |
188 | + ... ${USERS.users['${provider}'].broker} | |
189 | + [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі | |
190 | + Дочекатись синхронізації з майданчиком ${provider} | |
191 | + ${complaint}= Підготовка даних для подання скарги | |
192 | + Set To Dictionary ${complaint.data} status pending | |
193 | + Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${complaint} | |
194 | + Set To Dictionary ${USERS.users['${provider}'].complaints} complaint ${complaint} | |
195 | + | |
196 | + | |
197 | +Можливість скасувати скаргу на умови | |
198 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість скасувати скаргу на умови | |
199 | + ... provider | |
200 | + ... ${USERS.users['${provider}'].broker} | |
201 | + ${complaint}= Get From Dictionary ${USERS.users['${provider}'].complaints} complaint | |
202 | + Set To Dictionary ${complaint.data} status cancelled | |
203 | + Set To Dictionary ${complaint.data} cancellationReason test_draft_cancellation | |
204 | + Викликати для учасника ${provider} Обробити скаргу ${TENDER['TENDER_UAID']} 1 ${complaint} | |
205 | + | |
206 | + | |
207 | + | |
208 | +Можливість редагувати однопредметний тендер після продовження періоду подання пропозицій | |
209 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
210 | + ... tender_owner | |
211 | + ... ${USERS.users['${tender_owner}'].broker} | |
212 | + Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} description description | |
213 | + | |
214 | + | |
215 | +Перевірити на зміну статус пропозицій після редагування інформації про закупівлю після другої зміни | |
216 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | |
217 | + ... provider provider1 | |
218 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
219 | + ${usernames}= Create List ${provider} ${provider1} | |
220 | + :FOR ${username} IN @{usernames} | |
221 | + \ Дочекатись синхронізації з майданчиком ${username} | |
222 | + \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | |
223 | + \ ${bid}= Викликати для учасника ${username} Отримати пропозицію ${TENDER['TENDER_UAID']} | |
224 | + \ Should Be Equal ${bid.data.status} invalid | |
225 | + \ Log ${bid} | |
226 | + | |
227 | + | |
228 | +Можливість оновити статус цінової пропозиції першого учасника після другої зміни | |
229 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | |
230 | + ... provider | |
231 | + ... ${USERS.users['${provider}'].broker} | |
232 | + ${activestatusresp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} status active | |
233 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} activestatusresp ${activestatusresp} | |
234 | + log ${activestatusresp} | |
235 | + | |
236 | + | |
237 | +Повторно подати цінову пропозицію другим учасником після другої зміни | |
238 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію | |
239 | + ... provider1 | |
240 | + ... ${USERS.users['${provider1}'].broker} | |
241 | + ${bid}= test bid data | |
242 | + Log ${bid} | |
243 | + ${bidresponses}= Create Dictionary | |
244 | + Set To Dictionary ${bidresponses} bid ${bid} | |
245 | + Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} | |
246 | + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
247 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp ${resp} | |
248 | + log ${resp} | |
249 | + | |
250 | + | |
251 | +Неможливість подати скаргу на умови менше ніж за 4 дні до завершення періоду подання пропозицій | |
252 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати скаргу на умови | |
253 | + ... provider | |
254 | + ... ${USERS.users['${provider}'].broker} | |
255 | + [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі | |
256 | + Log ${USERS.users['${provider}'].tender_data.data.complaintPeriod.endDate} | |
257 | + Дочекатись Дати ${USERS.users['${provider}'].tender_data.data.complaintPeriod.endDate} | |
258 | + Дочекатись синхронізації з майданчиком ${provider} | |
259 | + ${complaint}= Підготовка даних для подання скарги | |
260 | + Set To Dictionary ${complaint.data} status pending | |
261 | + Викликати для учасника ${provider} Подати скаргу shouldfail ${TENDER['TENDER_UAID']} ${complaint} | ... | ... |
1 | 1 | # -*- coding: utf-8 - |
2 | 2 | from datetime import timedelta |
3 | 3 | from dateutil.parser import parse |
4 | -from dpath.util import set as xpathset | |
4 | +from dpath.util import new as xpathnew | |
5 | 5 | from iso8601 import parse_date |
6 | 6 | from json import load |
7 | 7 | from jsonpath_rw import parse as parse_path |
... | ... | @@ -16,6 +16,7 @@ from robot.output.loggerhelper import Message |
16 | 16 | from .initial_data import ( |
17 | 17 | auction_bid, |
18 | 18 | create_fake_doc, |
19 | + create_fake_sentence, | |
19 | 20 | test_additional_items_data, |
20 | 21 | test_award_data, |
21 | 22 | test_bid_data, |
... | ... | @@ -24,12 +25,12 @@ from .initial_data import ( |
24 | 25 | test_cancel_tender_data, |
25 | 26 | test_change_cancellation_document_field_data, |
26 | 27 | test_claim_answer_data, |
27 | - test_claim_data, | |
28 | - test_confirm_data, | |
29 | 28 | test_claim_answer_satisfying_data, |
29 | + test_claim_data, | |
30 | 30 | test_complaint_answer_data, |
31 | 31 | test_complaint_data, |
32 | 32 | test_complaint_reply_data, |
33 | + test_confirm_data, | |
33 | 34 | test_escalate_claim_data, |
34 | 35 | test_invalid_features_data, |
35 | 36 | test_item_data, |
... | ... | @@ -46,17 +47,24 @@ from .initial_data import ( |
46 | 47 | test_tender_data, |
47 | 48 | test_tender_data_limited, |
48 | 49 | test_tender_data_multiple_items, |
49 | - test_tender_data_multiple_lots | |
50 | + test_tender_data_multiple_lots, | |
51 | + test_tender_data_openeu, | |
52 | + test_tender_data_openua | |
50 | 53 | ) |
51 | 54 | from .local_time import get_now, TZ |
52 | 55 | import os |
53 | 56 | from barbecue import chef |
57 | +import re | |
54 | 58 | |
55 | 59 | |
56 | 60 | def get_current_tzdate(): |
57 | 61 | return get_now().strftime('%Y-%m-%d %H:%M:%S.%f') |
58 | 62 | |
59 | 63 | |
64 | +def add_minutes_to_date(date, minutes): | |
65 | + return (parse_date(date) + timedelta(minutes=int(minutes))).isoformat() | |
66 | + | |
67 | + | |
60 | 68 | def get_file_contents(path): |
61 | 69 | with open(path, 'r') as f: |
62 | 70 | return unicode(f.read()) or u'' |
... | ... | @@ -71,7 +79,7 @@ def change_state(arguments): |
71 | 79 | return "pass" |
72 | 80 | |
73 | 81 | |
74 | -def compare_date(date1, date2): | |
82 | +def compare_date(date1, date2, accuracy): | |
75 | 83 | date1 = parse(date1) |
76 | 84 | date2 = parse(date2) |
77 | 85 | if date1.tzinfo is None: |
... | ... | @@ -80,7 +88,7 @@ def compare_date(date1, date2): |
80 | 88 | date2 = TZ.localize(date2) |
81 | 89 | |
82 | 90 | delta = (date1 - date2).total_seconds() |
83 | - if abs(delta) > 60: | |
91 | + if abs(delta) > accuracy: | |
84 | 92 | return False |
85 | 93 | return True |
86 | 94 | |
... | ... | @@ -119,7 +127,7 @@ def log_object_data(data, file_name=None, format="yaml"): |
119 | 127 | |
120 | 128 | def load_initial_data_from(file_name): |
121 | 129 | if not os.path.exists(file_name): |
122 | - file_name = os.path.join(os.path.dirname(__file__), 'data/{}'.format(file_name)) | |
130 | + file_name = os.path.join(os.path.dirname(__file__), 'data', file_name) | |
123 | 131 | with open(file_name) as file_obj: |
124 | 132 | if file_name.endswith(".json"): |
125 | 133 | return Munch.fromDict(load(file_obj)) |
... | ... | @@ -127,14 +135,36 @@ def load_initial_data_from(file_name): |
127 | 135 | return fromYAML(file_obj) |
128 | 136 | |
129 | 137 | |
130 | -def prepare_test_tender_data(period_intervals, mode): | |
138 | +def prepare_test_tender_data(procedure_intervals, mode): | |
139 | + # Get actual intervals by mode name | |
140 | + if mode in procedure_intervals: | |
141 | + intervals = procedure_intervals[mode] | |
142 | + else: | |
143 | + intervals = procedure_intervals['default'] | |
144 | + LOGGER.log_message(Message(intervals)) | |
145 | + | |
146 | + # Set acceleration value for certain modes | |
147 | + if mode in ['openua', 'openeu']: | |
148 | + assert isinstance(intervals['accelerator'], int), \ | |
149 | + "Accelerator should be an 'int', " \ | |
150 | + "not '{}'".format(type(intervals['accelerator']).__name__) | |
151 | + assert intervals['accelerator'] >= 0, \ | |
152 | + "Accelerator should not be less than 0" | |
153 | + else: | |
154 | + assert 'accelerator' not in intervals.keys(), \ | |
155 | + "Accelerator is not available for mode '{0}'".format(mode) | |
156 | + | |
131 | 157 | if mode == 'single': |
132 | - return munchify({'data': test_tender_data(period_intervals)}) | |
158 | + return munchify({'data': test_tender_data(intervals)}) | |
133 | 159 | elif mode == 'multi': |
134 | - return munchify({'data': test_tender_data_multiple_items(period_intervals)}) | |
160 | + return munchify({'data': test_tender_data_multiple_items(intervals)}) | |
135 | 161 | elif mode == 'limited': |
136 | - return munchify({'data': test_tender_data_limited(period_intervals)}) | |
137 | - raise ValueError('Invalid mode for test_tender_data') | |
162 | + return munchify({'data': test_tender_data_limited(intervals)}) | |
163 | + elif mode == 'openua': | |
164 | + return munchify({'data': test_tender_data_openua(intervals)}) | |
165 | + elif mode == 'openeu': | |
166 | + return munchify({'data': test_tender_data_openeu(intervals)}) | |
167 | + raise ValueError("Invalid mode for prepare_test_tender_data") | |
138 | 168 | |
139 | 169 | |
140 | 170 | def run_keyword_and_ignore_keyword_definitions(name, *args): |
... | ... | @@ -175,7 +205,7 @@ def set_access_key(tender, access_token): |
175 | 205 | |
176 | 206 | |
177 | 207 | def set_to_object(obj, attribute, value): |
178 | - xpathset(obj, attribute.replace('.', '/'), value) | |
208 | + xpathnew(obj, attribute, value, separator='.') | |
179 | 209 | return obj |
180 | 210 | |
181 | 211 | |
... | ... | @@ -206,6 +236,74 @@ def merge_dicts(left, right): |
206 | 236 | new.update(right) |
207 | 237 | return new |
208 | 238 | |
239 | + | |
240 | +def create_data_dict(path_to_value=None, value=None): | |
241 | + data_dict = munchify({'data': {}}) | |
242 | + if isinstance(path_to_value, basestring) and value: | |
243 | + list_items = re.search('\d+', path_to_value) | |
244 | + if list_items: | |
245 | + list_items = list_items.group(0) | |
246 | + path_to_value = path_to_value.split('[' + list_items + ']') | |
247 | + path_to_value.insert(1, '.' + list_items) | |
248 | + set_to_object(data_dict, path_to_value[0], []) | |
249 | + set_to_object(data_dict, ''.join(path_to_value[:2]), {}) | |
250 | + set_to_object(data_dict, ''.join(path_to_value), value) | |
251 | + else: | |
252 | + data_dict = set_to_object(data_dict, path_to_value, value) | |
253 | + return data_dict | |
254 | + | |
255 | + | |
256 | +def cancel_tender(cancellation_reason): | |
257 | + return { | |
258 | + 'data': { | |
259 | + 'reason': cancellation_reason | |
260 | + } | |
261 | + } | |
262 | + | |
263 | + | |
264 | +def confirm_supplier(supplier_id): | |
265 | + return { | |
266 | + "data": { | |
267 | + "status": "active", | |
268 | + "id": supplier_id | |
269 | + } | |
270 | + } | |
271 | + | |
272 | + | |
273 | +def change_cancellation_document_field(key, value): | |
274 | + data = { | |
275 | + "data": { | |
276 | + key: value | |
277 | + } | |
278 | + } | |
279 | + return data | |
280 | + | |
281 | + | |
282 | +def confirm_cancellation(cancellation_id): | |
283 | + data = { | |
284 | + "data": { | |
285 | + "status": "active", | |
286 | + "id": cancellation_id | |
287 | + } | |
288 | + } | |
289 | + return data | |
290 | + | |
291 | + | |
292 | +def confirm_contract(contract_id): | |
293 | + data = { | |
294 | + "data": { | |
295 | + "id": contract_id, | |
296 | + "status": "active" | |
297 | + } | |
298 | + } | |
299 | + return data | |
300 | + | |
301 | + | |
302 | +def additional_items_data(tender_id, access_token): | |
303 | + data = {"access": {"token": access_token}, "data": {"id": tender_id, "items": [{"unit": {"code": "MON", "name": "month"}, "quantity": 9}]}} | |
304 | + return data | |
305 | + | |
306 | + | |
209 | 307 | def munch_dict(arg=None, data=False): |
210 | 308 | if arg is None: |
211 | 309 | arg = {} | ... | ... |
... | ... | @@ -6,8 +6,8 @@ Library Selenium2Library |
6 | 6 | Library DebugLibrary |
7 | 7 | Resource keywords.robot |
8 | 8 | Resource resource.robot |
9 | -Suite Setup TestSuiteSetup | |
10 | -Suite Teardown Close all browsers | |
9 | +Suite Setup Test Suite Setup | |
10 | +Suite Teardown Test Suite Teardown | |
11 | 11 | |
12 | 12 | *** Variables *** |
13 | 13 | ${mode} single |
... | ... | @@ -24,7 +24,7 @@ ${question_id} 0 |
24 | 24 | ... ${USERS.users['${tender_owner}'].broker} |
25 | 25 | ... minimal |
26 | 26 | [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера), |
27 | - ${tender_data}= Підготовка початкових даних | |
27 | + ${tender_data}= Підготовка даних для створення тендера | |
28 | 28 | ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data} |
29 | 29 | ${LAST_MODIFICATION_DATE}= Get Current TZdate |
30 | 30 | Set To Dictionary ${USERS.users['${tender_owner}']} initial_data ${tender_data} |
... | ... | @@ -33,9 +33,10 @@ ${question_id} 0 |
33 | 33 | Log ${TENDER} |
34 | 34 | |
35 | 35 | Можливість додати тендерну документацію |
36 | - [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість завантажити документ | |
37 | - ... tender_owner | |
38 | - ... ${USERS.users['${tender_owner}'].broker} | |
36 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість завантажити документ | |
37 | + ... tender_owner | |
38 | + ... ${USERS.users['${tender_owner}'].broker} | |
39 | + ... critical level 2 | |
39 | 40 | [Documentation] Закупівельник ${USERS.users['${tender_owner}'].broker} завантажує документацію до оголошеної закупівлі |
40 | 41 | ${filepath}= create_fake_doc |
41 | 42 | ${doc_upload_reply}= Викликати для учасника ${tender_owner} Завантажити документ ${filepath} ${TENDER['TENDER_UAID']} |
... | ... | @@ -46,12 +47,12 @@ ${question_id} 0 |
46 | 47 | |
47 | 48 | Можливість знайти однопредметний тендер по ідентифікатору |
48 | 49 | [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору |
49 | - ... viewer | |
50 | - ... ${USERS.users['${viewer}'].broker} | |
50 | + ... viewer tender_owner provider provider1 | |
51 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} | |
52 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
51 | 53 | ... minimal |
52 | - Дочекатись синхронізації з майданчиком ${viewer} | |
53 | - ${usernames}= Create List ${viewer} ${tender_owner} ${provider} ${provider1} | |
54 | - :FOR ${username} IN @{usernames} | |
54 | + :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} | |
55 | + \ Дочекатись синхронізації з майданчиком ${username} | |
55 | 56 | \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} |
56 | 57 | |
57 | 58 | ###### |
... | ... | @@ -61,35 +62,39 @@ ${question_id} 0 |
61 | 62 | |
62 | 63 | Відображення заголовку оголошеного тендера |
63 | 64 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера |
64 | - ... viewer | |
65 | - ... ${USERS.users['${viewer}'].broker} | |
65 | + ... viewer provider provider1 | |
66 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
66 | 67 | ... minimal |
67 | - ${usernames}= Create List ${viewer} ${provider} | |
68 | - :FOR ${username} IN @{usernames} | |
68 | + :FOR ${username} IN ${viewer} ${provider} ${provider1} | |
69 | + \ Дочекатись синхронізації з майданчиком ${username} | |
69 | 70 | \ Звірити поле тендера ${username} ${USERS.users['${tender_owner}'].initial_data} title |
70 | 71 | |
71 | 72 | Відображення опису оголошеного тендера |
72 | 73 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера |
73 | 74 | ... viewer |
74 | 75 | ... ${USERS.users['${viewer}'].broker} |
76 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
75 | 77 | Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} description |
76 | 78 | |
77 | 79 | Відображення бюджету оголошеного тендера |
78 | 80 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера |
79 | 81 | ... viewer |
80 | 82 | ... ${USERS.users['${viewer}'].broker} |
83 | + ... critical level 2 | |
81 | 84 | Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} value.amount |
82 | 85 | |
83 | 86 | Відображення tenderID оголошеного тендера |
84 | 87 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера |
85 | 88 | ... viewer |
86 | 89 | ... ${USERS.users['${viewer}'].broker} |
90 | + ... critical level 2 | |
87 | 91 | Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']} tenderID |
88 | 92 | |
89 | 93 | Відображення procuringEntity.name оголошеного тендера |
90 | 94 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера |
91 | 95 | ... viewer |
92 | 96 | ... ${USERS.users['${viewer}'].broker} |
97 | + ... critical level 2 | |
93 | 98 | Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} procuringEntity.name |
94 | 99 | |
95 | 100 | Відображення початку періоду уточнення оголошеного тендера |
... | ... | @@ -107,20 +112,20 @@ ${question_id} 0 |
107 | 112 | |
108 | 113 | Відображення початку періоду прийому пропозицій оголошеного тендера |
109 | 114 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера |
110 | - ... viewer | |
111 | - ... ${USERS.users['${viewer}'].broker} | |
115 | + ... viewer provider provider1 | |
116 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
112 | 117 | ... minimal |
113 | - ${usernames}= Create List ${viewer} ${provider} ${provider1} | |
114 | - :FOR ${username} IN @{usernames} | |
118 | + :FOR ${username} IN ${viewer} ${provider} ${provider1} | |
119 | + \ Дочекатись синхронізації з майданчиком ${username} | |
115 | 120 | \ Звірити дату тендера ${username} ${USERS.users['${tender_owner}'].initial_data} tenderPeriod.startDate |
116 | 121 | |
117 | 122 | Відображення закінчення періоду прийому пропозицій оголошеного тендера |
118 | 123 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера |
119 | - ... viewer | |
120 | - ... ${USERS.users['${viewer}'].broker} | |
124 | + ... viewer provider provider1 | |
125 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
121 | 126 | ... minimal |
122 | - ${usernames}= Create List ${viewer} ${provider} ${provider1} | |
123 | - :FOR ${username} IN @{usernames} | |
127 | + :FOR ${username} IN ${viewer} ${provider} ${provider1} | |
128 | + \ Дочекатись синхронізації з майданчиком ${username} | |
124 | 129 | \ Звірити дату тендера ${username} ${USERS.users['${tender_owner}'].initial_data} tenderPeriod.endDate |
125 | 130 | |
126 | 131 | Відображення мінімального кроку оголошеного тендера |
... | ... | @@ -133,6 +138,8 @@ ${question_id} 0 |
133 | 138 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
134 | 139 | ... tender_owner |
135 | 140 | ... ${USERS.users['${tender_owner}'].broker} |
141 | + ... critical level 2 | |
142 | + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | |
136 | 143 | Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} description description |
137 | 144 | |
138 | 145 | ####### |
... | ... | @@ -143,12 +150,15 @@ ${question_id} 0 |
143 | 150 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів однопредметного тендера |
144 | 151 | ... viewer |
145 | 152 | ... ${USERS.users['${viewer}'].broker} |
153 | + ... critical level 2 | |
154 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
146 | 155 | Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].description |
147 | 156 | |
148 | 157 | Відображення дати доставки позицій закупівлі однопредметного тендера |
149 | 158 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів однопредметного тендера |
150 | 159 | ... viewer |
151 | 160 | ... ${USERS.users['${viewer}'].broker} |
161 | + ... critical level 3 | |
152 | 162 | Звірити дату тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].deliveryDate.endDate |
153 | 163 | |
154 | 164 | Відображення координат широти доставки позицій закупівлі однопредметного тендера |
... | ... | @@ -167,6 +177,7 @@ ${question_id} 0 |
167 | 177 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів однопредметного тендера |
168 | 178 | ... viewer |
169 | 179 | ... ${USERS.users['${viewer}'].broker} |
180 | + ... critical level 3 | |
170 | 181 | Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].deliveryAddress.countryName |
171 | 182 | |
172 | 183 | Відображення пошт. коду доставки позицій закупівлі однопредметного тендера |
... | ... | @@ -179,6 +190,7 @@ ${question_id} 0 |
179 | 190 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів однопредметного тендера |
180 | 191 | ... viewer |
181 | 192 | ... ${USERS.users['${viewer}'].broker} |
193 | + ... critical level 3 | |
182 | 194 | Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].deliveryAddress.region |
183 | 195 | |
184 | 196 | Відображення locality адреси доставки позицій закупівлі однопредметного тендера |
... | ... | @@ -203,12 +215,14 @@ ${question_id} 0 |
203 | 215 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів однопредметного тендера |
204 | 216 | ... viewer |
205 | 217 | ... ${USERS.users['${viewer}'].broker} |
218 | + ... critical level 3 | |
206 | 219 | Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].classification.id |
207 | 220 | |
208 | 221 | Відображення опису класифікації позицій закупівлі однопредметного тендера |
209 | 222 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів однопредметного тендера |
210 | 223 | ... viewer |
211 | 224 | ... ${USERS.users['${viewer}'].broker} |
225 | + ... critical level 3 | |
212 | 226 | Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].classification.description |
213 | 227 | |
214 | 228 | Відображення схеми додаткової класифікації позицій закупівлі однопредметного тендера |
... | ... | @@ -221,18 +235,21 @@ ${question_id} 0 |
221 | 235 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів однопредметного тендера |
222 | 236 | ... viewer |
223 | 237 | ... ${USERS.users['${viewer}'].broker} |
238 | + ... critical level 3 | |
224 | 239 | Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].additionalClassifications[0].id |
225 | 240 | |
226 | 241 | Відображення опису додаткової класифікації позицій закупівлі однопредметного тендера |
227 | 242 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів однопредметного тендера |
228 | 243 | ... viewer |
229 | 244 | ... ${USERS.users['${viewer}'].broker} |
245 | + ... critical level 3 | |
230 | 246 | Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].additionalClassifications[0].description |
231 | 247 | |
232 | 248 | Відображення назви одиниці позицій закупівлі однопредметного тендера |
233 | 249 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів однопредметного тендера |
234 | 250 | ... viewer |
235 | 251 | ... ${USERS.users['${viewer}'].broker} |
252 | + ... critical level 3 | |
236 | 253 | Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].unit.name |
237 | 254 | |
238 | 255 | Відображення коду одиниці позицій закупівлі однопредметного тендера |
... | ... | @@ -245,6 +262,7 @@ ${question_id} 0 |
245 | 262 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів однопредметного тендера |
246 | 263 | ... viewer |
247 | 264 | ... ${USERS.users['${viewer}'].broker} |
265 | + ... critical level 3 | |
248 | 266 | Звірити поле тендера ${viewer} ${USERS.users['${tender_owner}'].initial_data} items[0].quantity |
249 | 267 | |
250 | 268 | ####### |
... | ... | @@ -254,38 +272,51 @@ ${question_id} 0 |
254 | 272 | [Tags] ${USERS.users['${provider}'].broker}: Можливість задати запитання |
255 | 273 | ... provider |
256 | 274 | ... ${USERS.users['${provider}'].broker} |
257 | - Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${QUESTIONS[${question_id}]} | |
275 | + ... critical level 2 | |
276 | + [Setup] Дочекатись синхронізації з майданчиком ${provider} | |
277 | + ${question}= Підготовка даних для запитання | |
278 | + ${question_resp}= Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${question} | |
258 | 279 | ${now}= Get Current TZdate |
259 | - Set To Dictionary ${QUESTIONS[${question_id}].data} date ${now} | |
280 | + ${question.data.date}= Set variable ${now} | |
281 | + ${question_data}= Create Dictionary question=${question} question_resp=${question_resp} | |
282 | + ${question_data}= munch_dict arg=${question_data} | |
283 | + Set To Dictionary ${USERS.users['${provider}']} question_data=${question_data} | |
260 | 284 | |
261 | 285 | Відображення заголовку анонімного питання без відповіді |
262 | 286 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення анонімного питання без відповідей |
263 | 287 | ... viewer |
264 | 288 | ... ${USERS.users['${viewer}'].broker} |
265 | - Дочекатись синхронізації з майданчиком ${viewer} | |
289 | + ... critical level 2 | |
290 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
266 | 291 | Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} |
267 | - Звірити поле тендера із значенням ${viewer} ${QUESTIONS[${question_id}].data.title} questions[${question_id}].title | |
292 | + Звірити поле тендера із значенням ${viewer} ${USERS.users['${provider}'].question_data.question.data.title} questions[${question_id}].title | |
268 | 293 | |
269 | 294 | Відображення опису анонімного питання без відповіді |
270 | 295 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення анонімного питання без відповідей |
271 | 296 | ... viewer |
272 | 297 | ... ${USERS.users['${viewer}'].broker} |
273 | - Звірити поле тендера із значенням ${viewer} ${QUESTIONS[${question_id}].data.description} questions[${question_id}].description | |
298 | + ... critical level 2 | |
299 | + Звірити поле тендера із значенням ${viewer} ${USERS.users['${provider}'].question_data.question.data.description} questions[${question_id}].description | |
274 | 300 | |
275 | 301 | Відображення дати анонімного питання без відповіді |
276 | 302 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення анонімного питання без відповідей |
277 | 303 | ... viewer |
278 | 304 | ... ${USERS.users['${viewer}'].broker} |
279 | - Звірити дату тендера із значенням ${viewer} ${QUESTIONS[${question_id}].data.date} questions[${question_id}].date | |
305 | + Звірити дату тендера із значенням ${viewer} ${USERS.users['${provider}'].question_data.question.data.date} questions[${question_id}].date | |
280 | 306 | |
281 | 307 | Неможливість подати цінову пропозицію до початку періоду подачі пропозицій першим учасником |
282 | 308 | [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію |
283 | 309 | ... provider |
284 | 310 | ... ${USERS.users['${provider}'].broker} |
311 | + [Setup] Дочекатись синхронізації з майданчиком ${provider} | |
285 | 312 | ${bid}= test bid data |
286 | 313 | Log ${bid} |
314 | + ${bidresponses}= Create Dictionary | |
315 | + Set To Dictionary ${bidresponses} bid ${bid} | |
316 | + Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} | |
287 | 317 | ${bid_before_bidperiod_resp}= Викликати для учасника ${provider} Подати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${bid} |
288 | - Log ${bid_before_bidperiod_resp} | |
318 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} bid_before_bidperiod_resp ${bid_before_bidperiod_resp} | |
319 | + log ${USERS.users['${provider}']} | |
289 | 320 | |
290 | 321 | ####### |
291 | 322 | #Відображення відповіді на запитання |
... | ... | @@ -294,34 +325,45 @@ ${question_id} 0 |
294 | 325 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відповісти на запитання |
295 | 326 | ... tender_owner |
296 | 327 | ... ${USERS.users['${tender_owner}'].broker} |
297 | - Викликати для учасника ${tender_owner} Відповісти на питання ${TENDER['TENDER_UAID']} 0 ${ANSWERS[0]} | |
328 | + ... critical level 2 | |
329 | + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | |
330 | + ${answer}= Підготовка даних для відповіді на запитання | |
331 | + ${answer_resp}= Викликати для учасника ${tender_owner} Відповісти на питання ${TENDER['TENDER_UAID']} ${USERS.users['${provider}']['question_data']['question_resp']} ${answer} | |
298 | 332 | ${now}= Get Current TZdate |
299 | - Set To Dictionary ${ANSWERS[${question_id}].data} date ${now} | |
333 | + ${answer.data.date}= Set variable ${now} | |
334 | + ${answer_data}= Create Dictionary answer=${answer} answer_resp=${answer_resp} | |
335 | + Set To Dictionary ${USERS.users['${provider}']} answer_data ${answer_data} | |
300 | 336 | |
301 | 337 | Відображення відповіді на запитання |
302 | 338 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення відповіді на запитання |
303 | 339 | ... viewer |
304 | 340 | ... ${USERS.users['${viewer}'].broker} |
305 | - Дочекатись синхронізації з майданчиком ${viewer} | |
341 | + ... critical level 2 | |
342 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
306 | 343 | Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} |
307 | - Звірити поле тендера із значенням ${viewer} ${ANSWERS[${question_id}].data.answer} questions[${question_id}].answer | |
344 | + Звірити поле тендера із значенням ${viewer} ${USERS.users['${provider}']['answer_data']['answer'].data.answer} questions[${question_id}].answer | |
308 | 345 | |
309 | 346 | Можливість подати цінову пропозицію першим учасником |
310 | 347 | [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію |
311 | 348 | ... provider |
312 | 349 | ... ${USERS.users['${provider}'].broker} |
350 | + [Setup] Дочекатись синхронізації з майданчиком ${provider} | |
313 | 351 | Дочекатись дати початку прийому пропозицій ${provider} |
314 | 352 | ${bid}= test bid data |
315 | 353 | Log ${bid} |
316 | - ${biddingresponse0}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
317 | - Set Global Variable ${biddingresponse0} | |
318 | - log ${biddingresponse0} | |
354 | + ${bidresponses}= Create Dictionary | |
355 | + Set To Dictionary ${bidresponses} bid ${bid} | |
356 | + Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} | |
357 | + ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
358 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} resp ${resp} | |
359 | + log ${USERS.users['${provider}'].bidresponses} | |
319 | 360 | |
320 | 361 | Можливість скасувати цінову пропозицію |
321 | 362 | [Tags] ${USERS.users['${provider}'].broker}: Можливість скасувати цінову пропозицію |
322 | - ... provider | |
323 | - ... ${USERS.users['${provider}'].broker} | |
324 | - ${biddingresponse_0}= Викликати для учасника ${provider} Скасувати цінову пропозицію ${TENDER['TENDER_UAID']} ${biddingresponse0} | |
363 | + ... provider | |
364 | + ... ${USERS.users['${provider}'].broker} | |
365 | + ${canceledbidresp}= Викликати для учасника ${provider} Скасувати цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].bidresponses['resp']} | |
366 | + Log ${canceledbidresp} | |
325 | 367 | |
326 | 368 | Можливість подати повторно цінову пропозицію першим учасником |
327 | 369 | [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію |
... | ... | @@ -332,18 +374,17 @@ ${question_id} 0 |
332 | 374 | ${bid}= test bid data |
333 | 375 | Log ${bid} |
334 | 376 | ${bidresponses}= Create Dictionary |
335 | - ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
336 | - Set To Dictionary ${bidresponses} resp ${resp} | |
377 | + Set To Dictionary ${bidresponses} bid ${bid} | |
337 | 378 | Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} |
379 | + ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
380 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} resp ${resp} | |
338 | 381 | log ${USERS.users['${provider}'].bidresponses} |
339 | 382 | |
340 | 383 | Можливість змінити повторну цінову пропозицію до 50000 |
341 | 384 | [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію |
342 | 385 | ... provider |
343 | 386 | ... ${USERS.users['${provider}'].broker} |
344 | - Set To Dictionary ${USERS.users['${provider}'].bidresponses['resp'].data.value} amount 50000 | |
345 | - Log ${USERS.users['${provider}'].bidresponses['resp'].data.value} | |
346 | - ${fixbidto50000resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].bidresponses['resp']} | |
387 | + ${fixbidto50000resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} value.amount 50000 | |
347 | 388 | Set To Dictionary ${USERS.users['${provider}'].bidresponses} fixbidto50000resp ${fixbidto50000resp} |
348 | 389 | log ${fixbidto50000resp} |
349 | 390 | |
... | ... | @@ -351,9 +392,7 @@ ${question_id} 0 |
351 | 392 | [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію |
352 | 393 | ... provider |
353 | 394 | ... ${USERS.users['${provider}'].broker} |
354 | - Set To Dictionary ${USERS.users['${provider}'].bidresponses['resp'].data.value} amount 10 | |
355 | - Log ${USERS.users['${provider}'].bidresponses['fixbidto50000resp'].data.value} | |
356 | - ${fixbidto10resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].bidresponses['resp']} | |
395 | + ${fixbidto10resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} value.amount 10 | |
357 | 396 | Set To Dictionary ${USERS.users['${provider}'].bidresponses} fixbidto10resp ${fixbidto10resp} |
358 | 397 | log ${fixbidto10resp} |
359 | 398 | |
... | ... | @@ -361,6 +400,7 @@ ${question_id} 0 |
361 | 400 | [Tags] ${USERS.users['${provider}'].broker}: Можливість прийняти пропозицію переможця |
362 | 401 | ... provider |
363 | 402 | ... ${USERS.users['${provider}'].broker} |
403 | + ... critical level 2 | |
364 | 404 | log ${USERS.users['${provider}'].broker} |
365 | 405 | ${filepath}= create_fake_doc |
366 | 406 | ${bid_doc_upload}= Викликати для учасника ${provider} Завантажити документ в ставку ${filepath} ${TENDER['TENDER_UAID']} |
... | ... | @@ -379,24 +419,27 @@ ${question_id} 0 |
379 | 419 | |
380 | 420 | Неможливість задати запитання після закінчення періоду уточнень |
381 | 421 | [Documentation] |
382 | - ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed" | |
422 | + ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed" | |
383 | 423 | [Tags] ${USERS.users['${provider}'].broker}: Можливість задати запитання |
384 | 424 | ... provider |
385 | 425 | ... ${USERS.users['${provider}'].broker} |
386 | - ${resp}= Викликати для учасника ${provider} Задати питання shouldfail ${TENDER['TENDER_UAID']} ${QUESTIONS[${question_id}]} | |
426 | + ${question}= Підготовка даних для запитання | |
427 | + Викликати для учасника ${provider} Задати питання shouldfail ${TENDER['TENDER_UAID']} ${question} | |
387 | 428 | |
388 | 429 | Можливість подати цінову пропозицію другим учасником |
389 | 430 | [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію |
390 | 431 | ... provider1 |
391 | 432 | ... ${USERS.users['${provider1}'].broker} |
392 | 433 | ... minimal |
434 | + [Setup] Дочекатись синхронізації з майданчиком ${provider1} | |
393 | 435 | Дочекатись дати початку прийому пропозицій ${provider1} |
394 | 436 | ${bid}= test bid data |
395 | 437 | Log ${bid} |
396 | 438 | ${bidresponses}= Create Dictionary |
397 | - ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
398 | - Set To Dictionary ${bidresponses} resp ${resp} | |
439 | + Set To Dictionary ${bidresponses} bid ${bid} | |
399 | 440 | Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} |
441 | + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
442 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp ${resp} | |
400 | 443 | log ${resp} |
401 | 444 | log ${USERS.users['${provider1}'].bidresponses} |
402 | 445 | |
... | ... | @@ -404,14 +447,16 @@ ${question_id} 0 |
404 | 447 | [Tags] ${USERS.users['${viewer}'].broker}: Можливість подати цінову пропозицію |
405 | 448 | ... viewer |
406 | 449 | ... ${USERS.users['${viewer}'].broker} |
450 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
407 | 451 | ${bids}= Викликати для учасника ${viewer} Отримати інформацію із тендера bids |
408 | - ${bool}= Convert To Boolean ${bids} | |
409 | - Should Be Equal ${bool} ${False} | |
452 | + Should Not Be True ${bids} | |
410 | 453 | |
411 | 454 | Можливість завантажити документ другим учасником |
412 | 455 | [Tags] ${USERS.users['${provider1}'].broker}: Можливість прийняти пропозицію переможця |
413 | 456 | ... provider1 |
414 | 457 | ... ${USERS.users['${provider1}'].broker} |
458 | + ... critical level 2 | |
459 | + [Setup] Дочекатись синхронізації з майданчиком ${provider1} | |
415 | 460 | log ${USERS.users['${provider1}'].broker} |
416 | 461 | ${filepath}= create_fake_doc |
417 | 462 | ${bid_doc_upload}= Викликати для учасника ${provider1} Завантажити документ в ставку ${filepath} ${TENDER['TENDER_UAID']} |
... | ... | @@ -422,9 +467,7 @@ ${question_id} 0 |
422 | 467 | ... provider1 |
423 | 468 | ... ${USERS.users['${provider1}'].broker} |
424 | 469 | Дочекатись дати закінчення прийому пропозицій ${provider1} |
425 | - Set To Dictionary ${USERS.users['${provider1}'].bidresponses['resp'].data.value} amount 50000 | |
426 | - Log ${USERS.users['${provider1}'].bidresponses['resp'].data.value} | |
427 | - ${failfixbidto50000resp}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${USERS.users['${provider1}'].bidresponses['resp']} | |
470 | + ${failfixbidto50000resp}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} value.amount 50000 | |
428 | 471 | Set To Dictionary ${USERS.users['${provider1}'].bidresponses} failfixbidto50000resp ${failfixbidto50000resp} |
429 | 472 | log ${failfixbidto50000resp} |
430 | 473 | |
... | ... | @@ -432,9 +475,7 @@ ${question_id} 0 |
432 | 475 | [Tags] ${USERS.users['${provider1}'].broker}: Неможливість змінити цінову пропозицію до 1 після закінчення прийому пропозицій |
433 | 476 | ... provider1 |
434 | 477 | ... ${USERS.users['${provider1}'].broker} |
435 | - Set To Dictionary ${USERS.users['${provider1}'].bidresponses['resp'].data.value} amount 1 | |
436 | - Log ${USERS.users['${provider1}'].bidresponses['resp'].data.value} | |
437 | - ${failfixbidto1resp}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${USERS.users['${provider1}'].bidresponses['resp']} | |
478 | + ${failfixbidto1resp}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} value.amount 1 | |
438 | 479 | Set To Dictionary ${USERS.users['${provider1}'].bidresponses} failfixbidto1resp ${failfixbidto1resp} |
439 | 480 | log ${failfixbidto1resp} |
440 | 481 | |
... | ... | @@ -463,28 +504,30 @@ ${question_id} 0 |
463 | 504 | Set To Dictionary ${USERS.users['${provider}'].bidresponses} bid_doc_modified_failed ${bid_doc_modified_failed} |
464 | 505 | |
465 | 506 | Можливість вичитати посилання на аукціон для глядача |
466 | - [Tags] ${USERS.users['${viewer}'].broker}: Можливість подати цінову пропозицію | |
467 | - ... viewer | |
468 | - ... ${USERS.users['${viewer}'].broker} | |
469 | - ... minimal | |
507 | + [Tags] ${USERS.users['${viewer}'].broker}: Можливість подати цінову пропозицію | |
508 | + ... viewer | |
509 | + ... ${USERS.users['${viewer}'].broker} | |
510 | + ... minimal | |
511 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
470 | 512 | Дочекатись дати закінчення прийому пропозицій ${viewer} |
471 | - Дочекатись синхронізації з майданчиком ${viewer} | |
472 | 513 | Sleep 120 |
473 | 514 | ${url}= Викликати для учасника ${viewer} Отримати посилання на аукціон для глядача ${TENDER['TENDER_UAID']} |
474 | 515 | Log URL аукціону для глядача: ${url} |
475 | 516 | |
476 | 517 | Можливість вичитати посилання на участь в аукціоні для першого учасника |
477 | - [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію | |
478 | - ... provider | |
479 | - ... ${USERS.users['${provider}'].broker} | |
480 | - ... minimal | |
518 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію | |
519 | + ... provider | |
520 | + ... ${USERS.users['${provider}'].broker} | |
521 | + ... minimal | |
522 | + [Setup] Дочекатись синхронізації з майданчиком ${provider} | |
481 | 523 | ${url}= Викликати для учасника ${provider} Отримати посилання на аукціон для учасника ${TENDER['TENDER_UAID']} |
482 | 524 | Log URL аукціону для першого учасника: ${url} |
483 | 525 | |
484 | 526 | Можливість вичитати посилання на участь в аукціоні для другого учасника |
485 | - [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію | |
486 | - ... provider1 | |
487 | - ... ${USERS.users['${provider1}'].broker} | |
488 | - ... minimal | |
527 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію | |
528 | + ... provider1 | |
529 | + ... ${USERS.users['${provider1}'].broker} | |
530 | + ... minimal | |
531 | + [Setup] Дочекатись синхронізації з майданчиком ${provider1} | |
489 | 532 | ${url}= Викликати для учасника ${provider1} Отримати посилання на аукціон для учасника ${TENDER['TENDER_UAID']} |
490 | 533 | Log URL аукціону для другого учасника: ${url} | ... | ... |
... | ... | @@ -6,8 +6,8 @@ Library Selenium2Library |
6 | 6 | Library DebugLibrary |
7 | 7 | Resource keywords.robot |
8 | 8 | Resource resource.robot |
9 | -Suite Setup TestSuiteSetup | |
10 | -Suite Teardown Close all browsers | |
9 | +Suite Setup Test Suite Setup | |
10 | +Suite Teardown Test Suite Teardown | |
11 | 11 | |
12 | 12 | *** Variables *** |
13 | 13 | ${mode} single |
... | ... | @@ -20,7 +20,7 @@ ${broker} Quinta |
20 | 20 | ... tender_owner |
21 | 21 | ... ${USERS.users['${tender_owner}'].broker} |
22 | 22 | ... from-0.12 |
23 | - ${tender_data}= Підготовка початкових даних | |
23 | + ${tender_data}= Підготовка даних для створення тендера | |
24 | 24 | ${TENDER_UAID}= Викликати для учасника ${tender_owner} |
25 | 25 | ... Створити тендер |
26 | 26 | ... ${tender_data} |
... | ... | @@ -58,7 +58,7 @@ ${broker} Quinta |
58 | 58 | ... ${USERS.users['${provider}'].broker} |
59 | 59 | ... from-0.12 |
60 | 60 | [Setup] Дочекатись синхронізації з майданчиком ${provider} |
61 | - ${claim}= test_claim_data | |
61 | + ${claim}= Підготовка даних для подання вимоги | |
62 | 62 | ${claim_resp}= Викликати для учасника ${provider} |
63 | 63 | ... Створити вимогу |
64 | 64 | ... ${TENDER['TENDER_UAID']} |
... | ... | @@ -358,7 +358,7 @@ ${broker} Quinta |
358 | 358 | ... provider |
359 | 359 | ... ${USERS.users['${provider}'].broker} |
360 | 360 | ... from-0.12 |
361 | - ${claim}= test_claim_data | |
361 | + ${claim}= Підготовка даних для подання вимоги | |
362 | 362 | ${claim_resp}= Викликати для учасника ${provider} |
363 | 363 | ... Створити вимогу |
364 | 364 | ... ${TENDER['TENDER_UAID']} |
... | ... | @@ -436,7 +436,7 @@ ${broker} Quinta |
436 | 436 | ... provider |
437 | 437 | ... ${USERS.users['${provider}'].broker} |
438 | 438 | ... from-0.12 |
439 | - ${claim}= test_claim_data | |
439 | + ${claim}= Підготовка даних для подання вимоги | |
440 | 440 | ${claim_resp}= Викликати для учасника ${provider} |
441 | 441 | ... Створити вимогу |
442 | 442 | ... ${TENDER['TENDER_UAID']} |
... | ... | @@ -503,7 +503,7 @@ ${broker} Quinta |
503 | 503 | ... provider |
504 | 504 | ... ${USERS.users['${provider}'].broker} |
505 | 505 | ... from-0.12 |
506 | - ${claim}= test_claim_data | |
506 | + ${claim}= Підготовка даних для подання вимоги | |
507 | 507 | ${claim_resp}= Викликати для учасника ${provider} |
508 | 508 | ... Створити вимогу |
509 | 509 | ... ${TENDER['TENDER_UAID']} |
... | ... | @@ -580,7 +580,7 @@ ${broker} Quinta |
580 | 580 | ... provider |
581 | 581 | ... ${USERS.users['${provider}'].broker} |
582 | 582 | ... from-0.12 |
583 | - ${claim}= test_claim_data | |
583 | + ${claim}= Підготовка даних для подання вимоги | |
584 | 584 | ${claim_resp}= Викликати для учасника ${provider} |
585 | 585 | ... Створити вимогу |
586 | 586 | ... ${TENDER['TENDER_UAID']} | ... | ... |
Please
register
or
login
to post a comment