Commit a03052e5cb6fb30b3f773798683709c7c267efc8

Authored by mykhaly
2 parents 65c8b819 d00ff526

Resolve conflict from merge

... ... @@ -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
1   -from datetime import datetime, timedelta
2   -
3   -
4   -def subtract_from_time(date_time, subtr_min, subtr_sec):
5   - sub = datetime.strptime(date_time, "%d.%m.%Y %H:%M")
6   - sub = (sub - timedelta(minutes=int(subtr_min),
7   - seconds=int(subtr_sec))).isoformat()
8   - return sub
... ... @@ -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']}
... ...
  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
... ...
  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