Commit d78942d6f246092bd3a5c70bdb333280c4546af1

Authored by SavchukRoman
2 parents 05313d24 454bac38

Merge branch 'master', remote-tracking branch 'w-be/master'

1 -*** Setting ***  
2 -Library op_robot_tests.tests_files.service_keywords  
3 -Library String  
4 -LIbrary Collections  
5 -LIbrary Selenium2Library  
6 -Library DebugLibrary  
7 -Resource keywords.robot  
8 -Resource resource.robot  
9 -Suite Setup TestCaseSetup  
10 -Suite Teardown Close all browsers  
11 -  
12 -*** Variables ***  
13 -${tender_dump_id} 0  
14 -${tender_owner} Tender_Owner  
15 -${provider} Tender_User  
16 -${viewer} Tender_Viewer  
17 -  
18 -${LOAD_USERS} ["${tender_owner}", "${provider}"]  
19 -  
20 -${item_id} 0  
21 -${question_id} 0  
22 -  
23 -  
24 -*** Test Cases ***  
25 -Можливість оголосити однопердметний тендер  
26 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Пошук тендера по ідентифікатору  
27 - ${TENDER_ID}= Викликати для учасника ${tender_owner} Створити тендер ${INITIAL_TENDER_DATA}  
28 - Set Global Variable ${TENDER_ID}  
29 - ${LAST_MODIFICATION_DATE}= Get Current Date  
30 - ${TENDER_DATA}= Get Variable Value ${INITIAL_TENDER_DATA}  
31 - Set Global Variable ${TENDER_DATA}  
32 - Set Global Variable ${LAST_MODIFICATION_DATE}  
33 -  
34 -Пошук однопредметного тендера по ідентифікатору  
35 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Пошук тендера по ідентифікатору  
36 - Дочекатись синхронізації з майданчиком ${provider}  
37 - Викликати для учасника ${provider} Пошук тендера по ідентифікатору ${TENDER_ID} ${TENDER_ID}  
38 -  
39 -Відображення заголовоку оголошеного тендера  
40 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис основних даних оголошеного тендера  
41 - Звірити поле тендера ${provider} title  
42 -  
43 -Відображення опису оголошеного тендера  
44 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис основних даних оголошеного тендера  
45 - Звірити поле тендера ${provider} description  
46 -  
47 -Відображення бюджету оголошеного тендера  
48 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис основних даних оголошеного тендера  
49 - Звірити поле тендера ${provider} value.amount  
50 -  
51 -Відображення procuringEntity.name оголошеного тендера  
52 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис основних даних оголошеного тендера  
53 - Звірити поле тендера ${provider} procuringEntity.name  
54 -  
55 -#Відображення початоку періоду уточнення оголошеного тендера  
56 -# [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис основних даних оголошеного тендера  
57 -# Звірити поле тендера ${provider} enquiryPeriod.startDate  
58 -  
59 -Відображення закінчення періоду уточнення оголошеного тендера  
60 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис основних даних оголошеного тендера  
61 - Звірити дату ${provider} enquiryPeriod.endDate  
62 -  
63 -Відображення початоку періоду прийому пропозицій оголошеного тендера  
64 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис основних даних оголошеного тендера  
65 - Звірити дату ${provider} tenderPeriod.startDate  
66 -  
67 -Відображення закінчення періоду прийому пропозицій оголошеного тендера  
68 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис основних даних оголошеного тендера  
69 - Звірити дату ${provider} tenderPeriod.endDate  
70 -  
71 -Відображення мінімального кроку оголошеного тендера  
72 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис основних даних оголошеного тендера  
73 - Звірити поле тендера ${provider} minimalStep.amount  
74 -  
75 -Відображення опису позицій закупівлі однопредметного тендера  
76 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
77 - Звірити поле тендера ${provider} items[${item_id}].description  
78 -  
79 -Відображення дати доставки позицій закупівлі однопредметного тендера  
80 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
81 - Звірити дату ${provider} items[${item_id}].deliveryDate.endDate  
82 -  
83 -Відображення координат широти доставки позицій закупівлі однопредметного тендера  
84 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
85 - Звірити поле тендера ${provider} items[${item_id}].deliveryLocation.latitude  
86 -  
87 -Відображення координат довготи доставки позицій закупівлі однопредметного тендера  
88 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
89 - Звірити поле тендера ${provider} items[${item_id}].deliveryLocation.longitude  
90 -  
91 -Відображення назви нас. пункту доставки позицій закупівлі однопредметного тендера  
92 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
93 - Звірити поле тендера ${provider} items[${item_id}].deliveryAddress.countryName  
94 -  
95 -Відображення пошт коду доставки позицій закупівлі однопредметного тендера  
96 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
97 - Звірити поле тендера ${provider} items[${item_id}].deliveryAddress.postalCode  
98 -  
99 -Відображення регіону доставки позицій закупівлі однопредметного тендера  
100 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
101 - Звірити поле тендера ${provider} items[${item_id}].deliveryAddress.region  
102 -  
103 -Відображення locality адреси доставки позицій закупівлі однопредметного тендера  
104 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
105 - Звірити поле тендера ${provider} items[${item_id}].deliveryAddress.locality  
106 -  
107 -Відображення вулиці доставки позицій закупівлі однопредметного тендера  
108 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
109 - Звірити поле тендера ${provider} items[${item_id}].deliveryAddress.streetAddress  
110 -  
111 -Відображення схеми класифікації позицій закупівлі однопредметного тендера  
112 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
113 - Звірити поле тендера ${provider} items[${item_id}].classification.scheme  
114 -  
115 -Відображення ідентифйікатора класифікації позицій закупівлі однопредметного тендера  
116 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
117 - Звірити поле тендера ${provider} items[${item_id}].classification.id  
118 -  
119 -Відображення опису класифікації позицій закупівлі однопредметного тендера  
120 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
121 - Звірити поле тендера ${provider} items[${item_id}].classification.description  
122 -  
123 -Відображення схеми додаткової класифікації позицій закупівлі однопредметного тендера  
124 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
125 - Звірити поле тендера ${provider} items[${item_id}].additionalClassifications.scheme  
126 -  
127 -Відображення ідентифікатора додаткової класифікації позицій закупівлі однопредметного тендера  
128 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
129 - Звірити поле тендера ${provider} items[${item_id}].additionalClassifications.id  
130 -  
131 -Відображення опису додаткової класифікації позицій закупівлі однопредметного тендера  
132 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
133 - Звірити поле тендера ${provider} items[${item_id}].additionalClassifications.description  
134 -  
135 -Відображення назви одиниці позицій закупівлі однопредметного тендера  
136 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
137 - Звірити поле тендера ${provider} items[${item_id}].unit.name  
138 -  
139 -Відображення коду одиниці позицій закупівлі однопредметного тендера  
140 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
141 - Звірити поле тендера ${provider} items[${item_id}].unit.code  
142 -  
143 -Відображення кількості позицій закупівлі однопредметного тендера  
144 - [Tags] Owner_Tests ${USERS.users['${tender_owner}'].broker}: Запис полів пердметів однопредметного тендера  
145 - Звірити поле тендера ${provider} items[${item_id}].quantity  
146 -  
147 -  
@@ -5,57 +5,219 @@ Library DateTime @@ -5,57 +5,219 @@ Library DateTime
5 5
6 *** Variables *** 6 *** Variables ***
7 ${locator.tenderId} jquery=h3 7 ${locator.tenderId} jquery=h3
8 -${locator.title} jquery=tender-subject-info>div.row:contains("Назва закупівлі:")>:eq(1)>  
9 -${locator.description} jquery=tender-subject-info>div.row:contains("Детальний опис закупівлі:")>:eq(1)>  
10 -${locator.minimalStep.amount} jquery=tender-subject-info>div.row:contains("Мінімальний крок аукціону, грн.:")>:eq(1)>  
11 -${locator.procuringEntity.name} jquery=customer-info>div.row:contains("Найменування:")>:eq(1)>  
12 -${locator.value.amount} jquery=tender-subject-info>div.row:contains("Повний доступний бюджет закупівлі, грн.:")>:eq(1)>  
13 -${locator.tenderPeriod.startDate} jquery=tender-procedure-info>div.row:contains("Початок прийому пропозицій:")>:eq(1)>  
14 -${locator.tenderPeriod.endDate} jquery=tender-procedure-info>div.row:contains("Завершення прийому пропозицій:")>:eq(1)>  
15 -${locator.enquiryPeriod.startDate} jquery=tender-procedure-info>div.row:contains("Початок періоду уточнень:")>:eq(1)>  
16 -${locator.enquiryPeriod.endDate} jquery=tender-procedure-info>div.row:contains("Завершення періоду уточнень:")>:eq(1)> 8 +##Використовую такий шлях у кожного буде мінятись /yboi/. Міняйте на сві шлях до файлу
  9 +${file_add} /home/yboi/openprocurement.robottests.buildout/Document.docx
  10 +${locator.title} xpath=(//div[@class = 'col-sm-8']/p[@class='ng-binding'])[6]
  11 +${locator.description} xpath=(//div[@class = 'col-sm-8']/p[@class='ng-binding'])[7]
  12 +${locator.minimalStep.amount} xpath=(//div[@class = 'col-sm-8']/p[@class='ng-binding'])[9]
  13 +${locator.value.amount} xpath=(//div[@class = 'col-sm-8']/p[@class='ng-binding'])[8]
17 14
18 *** Keywords *** 15 *** Keywords ***
19 -Підготувати дані для задання питання  
20 - ${QUESTIONS}= prepare_test_question_data  
21 - [return] ${QUESTIONS}  
22 -  
23 Підготувати клієнт для користувача 16 Підготувати клієнт для користувача
24 [Arguments] @{ARGUMENTS} 17 [Arguments] @{ARGUMENTS}
25 [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо 18 [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо
26 ... ${ARGUMENTS[0]} == username 19 ... ${ARGUMENTS[0]} == username
27 - Open Browser ${USERS.users['${ARGUMENTS[0]}'].homepage} alias=${ARGUMENTS[0]} 20 + Open Browser ${USERS.users['${ARGUMENTS[0]}'].homepage} ${USERS.users['${username}'].browser} alias=${ARGUMENTS[0]}
28 Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size} 21 Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size}
  22 + Set Window Position @{USERS.users['${ARGUMENTS[0]}'].position}
  23 + Run Keyword If '${username}' != 'E-tender_Viewer' Login
29 24
30 Login 25 Login
31 Wait Until Page Contains Element id=inputUsername 100 26 Wait Until Page Contains Element id=inputUsername 100
32 Input text id=inputUsername ${USERS.users['${username}'].login} 27 Input text id=inputUsername ${USERS.users['${username}'].login}
33 - Input text id=inputPassword ${USERS.users['${username}'].password} 28 + Wait Until Page Contains Element id=inputPassword 100
  29 + Input text id=inputPassword ${USERS.users['${username}'].password}
34 Click Button id=btn_submit 30 Click Button id=btn_submit
35 31
  32 +Створити тендер
  33 + [Arguments] @{ARGUMENTS}
  34 + [Documentation]
  35 + ... ${ARGUMENTS[0]} == username
  36 + ... ${ARGUMENTS[1]} == initial_tender_data
  37 + ${prepared_tender_data}= Add_data_for_GUI_FrontEnds ${ARGUMENTS[1]}
  38 + ${items}= Get From Dictionary ${prepared_tender_data.data} items
  39 + ${title}= Get From Dictionary ${prepared_tender_data.data} title
  40 + ${description}= Get From Dictionary ${prepared_tender_data.data} description
  41 + ${budget}= Get From Dictionary ${prepared_tender_data.data.value} amount
  42 + ${step_rate}= Get From Dictionary ${prepared_tender_data.data.minimalStep} amount
  43 + ${items_description}= Get From Dictionary ${prepared_tender_data.data} description
  44 + ${quantity}= Get From Dictionary ${items[0]} quantity
  45 + ${cpv}= Get From Dictionary ${items[0].classification} id
  46 + ${unit}= Get From Dictionary ${items[0].unit} name
  47 + ${start_date}= Get From Dictionary ${prepared_tender_data.data.tenderPeriod} startDate
  48 + ${start_date}= convert_date_to_etender_format ${start_date}
  49 + ${start_time}= Get From Dictionary ${prepared_tender_data.data.tenderPeriod} startDate
  50 + ${start_time}= convert_time_to_etender_format ${start_time}
  51 + ${end_date}= Get From Dictionary ${prepared_tender_data.data.tenderPeriod} endDate
  52 + ${end_date}= convert_date_to_etender_format ${end_date}
  53 + ${end_time}= Get From Dictionary ${prepared_tender_data.data.tenderPeriod} endDate
  54 + ${end_time}= convert_time_to_etender_format ${end_time}
  55 + ${enquiry_end_date}= Get From Dictionary ${prepared_tender_data.data.enquiryPeriod} endDate
  56 + ${enquiry_end_date}= convert_date_to_etender_format ${enquiry_end_date}
  57 + ${enquiry_end_time}= Get From Dictionary ${prepared_tender_data.data.enquiryPeriod} endDate
  58 + ${enquiry_end_time}= convert_time_to_etender_format ${enquiry_end_time}
  59 + Selenium2Library.Switch Browser ${ARGUMENTS[0]}
  60 + Wait Until Page Contains Мої закупівлі 100
  61 + Sleep 1
  62 + Click Element xpath=//a[contains(@class, 'ng-binding')][./text()='Мої закупівлі']
  63 + Wait Until Page Contains Element xpath=//a[contains(@class, 'btn btn-info')]
  64 + Sleep 1
  65 + Click Element xpath=//a[contains(@class, 'btn btn-info')]
  66 + Wait Until Page Contains Element id=title
  67 + Input text id=title ${title}
  68 + Input text id=description ${description}
  69 + Input text id=value ${budget}
  70 + Click Element xpath=//div[contains(@class, 'form-group col-sm-6')]//input[@type='checkbox']
  71 + Input text id=minimalStep ${step_rate}
  72 + Input text id=itemsDescription ${items_description}
  73 + Input text id=itemsQuantity ${quantity}
  74 + Wait Until Page Contains Element xpath=//select[@name="itemsUnit"]/option[@value='kilogram']
  75 + Click Element xpath=//select[@name="itemsUnit"]/option[@value='kilogram']
  76 + Input text xpath=//div[contains(@class, 'form-group col-sm-8')]//input[@name='enqPEndDate'] ${enquiry_end_date}
  77 + Input text xpath=//div[contains(@class, 'form-group col-sm-8')]//div[contains(@class, 'col-sm-2')]//input[@ng-model='data.enquiryPeriod.endDate'] ${enquiry_end_time}
  78 + Input text xpath=//div[contains(@class, 'form-group col-sm-8')]//input[@name='startDate'] ${start_date}
  79 + Input text xpath=//div[contains(@class, 'form-group col-sm-8')]//div[contains(@class, 'col-sm-2')]//input[@ng-model='data.tenderPeriod.startDate'] ${start_time}
  80 + Input text xpath=//div[contains(@class, 'form-group col-sm-8')]//input[@name='endDate'] ${end_date}
  81 + Input text xpath=//div[contains(@class, 'form-group col-sm-8')]//div[contains(@class, 'col-sm-2')]//input[@ng-model='data.tenderPeriod.endDate'] ${end_time}
  82 + Sleep 2
  83 + Click Element xpath=//div[contains(@class, 'col-sm-2')]//input[@data-target='#classification']
  84 + Sleep 1
  85 + Input text xpath=//div[contains(@class, 'modal-content')]//input[@ng-model='searchstring'] ${cpv}
  86 + Sleep 2
  87 + Wait Until Page Contains ${cpv}
  88 + Click Element xpath=//td[contains(., '${cpv}')]
  89 + Sleep 1
  90 + Click Element xpath=//div[contains(@class, 'modal-content')]//button[@ng-click='choose()']
  91 + Sleep 1
  92 + Додати предмет ${items[0]} 0
  93 + Run Keyword if '${mode}' == 'multi' Додати багато предметів items
  94 + Sleep 1
  95 + Wait Until Page Contains Element xpath=//div[contains(@class, 'form-actions')]//button[@type='submit']
  96 + Click Element xpath=//div[contains(@class, 'form-actions')]//button[@type='submit']
  97 + Sleep 1
  98 + Wait Until Page Contains [ТЕСТУВАННЯ] 100
  99 + Sleep 20
  100 + Click Element xpath=//*[text()='${title}']
  101 + Sleep 5
  102 + ${tender_UAid}= Get Text xpath=//div[contains(@class, "panel-heading")]
  103 + ${tender_UAid}= Get Substring ${tender_UAid} 10
  104 + ${Ids}= Convert To String ${tender_UAid}
  105 + Run keyword if '${mode}' == 'multi' Set Multi Ids ${ARGUMENTS[0]} ${tender_UAid}
  106 + [return] ${Ids}
  107 +
  108 +Set Multi Ids
  109 + [Arguments] @{ARGUMENTS}
  110 + [Documentation]
  111 + ... ${ARGUMENTS[0]} == ${tender_UAid}
  112 + ${current_location}= Get Location
  113 + ${id}= Get Substring ${current_location} 10
  114 + ${Ids}= Create List ${tender_UAid} ${id}
  115 +
  116 +Oтримати internal id по UAid
  117 + [Arguments] @{ARGUMENTS}
  118 + [Documentation]
  119 + ... ${ARGUMENTS[0]} == username
  120 + ... ${ARGUMENTS[1]} == ${tender_UAid}
  121 + etender.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  122 + ${current_location}= Get Location
  123 + ${tender_id}= Fetch From Right ${current_location} /
  124 + [return] ${tender_id}
  125 +
  126 +Додати предмет
  127 + [Arguments] @{ARGUMENTS}
  128 + [Documentation]
  129 + ... ${ARGUMENTS[0]} == items
  130 + ... ${ARGUMENTS[1]} == ${INDEX}
  131 + ${dkpp_desc}= Get From Dictionary ${ARGUMENTS[0].additionalClassifications[0]} description
  132 + ${dkpp_id}= Get From Dictionary ${ARGUMENTS[0].additionalClassifications[0]} id
  133 + Sleep 2
  134 + Click Element xpath=(//div[contains(@class, 'col-sm-2')]//input[@data-target='#addClassification'])[${ARGUMENTS[1]}+1]
  135 + Wait Until Element Is Visible xpath=//div[contains(@id,'addClassification')]
  136 + Sleep 2
  137 + Input text xpath=//div[contains(@class, 'modal fade ng-scope in')]//input[@ng-model='searchstring'] ${dkpp_desc}
  138 + Wait Until Page Contains ${dkpp_id}
  139 + Sleep 1
  140 + Click Element xpath=//td[contains(., '${dkpp_id}')]
  141 + Click Element xpath=//div[contains(@class, 'modal fade ng-scope in')]//button[@ng-click='choose()']
  142 + Sleep 2
  143 +
  144 +Додати багато предметів
  145 + [Arguments] @{ARGUMENTS}
  146 + [Documentation]
  147 + ... ${ARGUMENTS[0]} == items
  148 + ${Items_length}= Get Length ${items}
  149 + : FOR ${INDEX} IN RANGE 1 ${Items_length}
  150 + \ Click Element xpath=.//*[@id='myform']/tender-form/div/button
  151 + \ Додати предмет ${items[${INDEX}]} ${INDEX}
  152 +
36 Пошук тендера по ідентифікатору 153 Пошук тендера по ідентифікатору
37 [Arguments] @{ARGUMENTS} 154 [Arguments] @{ARGUMENTS}
38 [Documentation] 155 [Documentation]
39 ... ${ARGUMENTS[0]} == username 156 ... ${ARGUMENTS[0]} == username
40 - ... ${ARGUMENTS[1]} == tenderId  
41 - ... ${ARGUMENTS[2]} == id 157 + ... ${ARGUMENTS[1]} == ${TENDER_UAID}
42 Switch browser ${ARGUMENTS[0]} 158 Switch browser ${ARGUMENTS[0]}
43 - ${current_location}= Get Location  
44 - Run keyword if '${BROKERS['${USERS.users['${username}'].broker}'].url}/#/tenderDetailes/${ARGUMENTS[2]}'=='${current_location}' Reload Page  
45 Go to ${BROKERS['${USERS.users['${username}'].broker}'].url} 159 Go to ${BROKERS['${USERS.users['${username}'].broker}'].url}
46 - Wait Until Page Contains E-TENDER - центр електронної торгівлі 10 160 + Wait Until Page Contains Список закупівель 10
47 sleep 1 161 sleep 1
48 Input Text jquery=input[ng-change='search()'] ${ARGUMENTS[1]} 162 Input Text jquery=input[ng-change='search()'] ${ARGUMENTS[1]}
49 Click Link jquery=a[ng-click='search()'] 163 Click Link jquery=a[ng-click='search()']
50 sleep 2 164 sleep 2
51 -# ${last_note_id}= Add pointy note jquery=a[href^="#/tenderDetailes"] Found tender with tenderID "${ARGUMENTS[1]}" width=200 position=bottom  
52 -# sleep 1  
53 -# Remove element ${last_note_id}  
54 Click Link jquery=a[href^="#/tenderDetailes"] 165 Click Link jquery=a[href^="#/tenderDetailes"]
55 Wait Until Page Contains ${ARGUMENTS[1]} 10 166 Wait Until Page Contains ${ARGUMENTS[1]} 10
56 sleep 1 167 sleep 1
57 Capture Page Screenshot 168 Capture Page Screenshot
58 169
  170 +Подати цінову пропозицію
  171 + [Arguments] @{ARGUMENTS}
  172 + [Documentation]
  173 + ... ${ARGUMENTS[0]} == username
  174 + ... ${ARGUMENTS[1]} == ${TENDER_UAID}
  175 + ... ${ARGUMENTS[2]} == test_bid_data
  176 +
  177 + ${bid}= Get From Dictionary ${ARGUMENTS[2].data.value} amount
  178 + etender.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  179 + Wait Until Page Contains Інформація про процедуру закупівлі 100
  180 + Wait Until Page Contains Element id=amount 10
  181 + Input text id=amount ${bid}
  182 + Click Element xpath=//button[contains(@class, 'btn btn-success')][./text()='Реєстрація пропозиції']
  183 +
  184 +Задати питання
  185 + [Arguments] @{ARGUMENTS}
  186 + [Documentation]
  187 + ... ${ARGUMENTS[0]} = username
  188 + ... ${ARGUMENTS[1]} = ${TENDER_UAID}
  189 + ... ${ARGUMENTS[2]} = question_data
  190 +
  191 + ${title}= Get From Dictionary ${ARGUMENTS[2].data} title
  192 + ${description}= Get From Dictionary ${ARGUMENTS[2].data} description
  193 +
  194 + Selenium2Library.Switch Browser ${ARGUMENTS[0]}
  195 + etender.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  196 +
  197 + Wait Until Page Contains Element jquery=a[href^="#/addQuestion/"] 100
  198 + Click Element jquery=a[href^="#/addQuestion/"]
  199 + Wait Until Page Contains Element id=title
  200 + Input text id=title ${title}
  201 + Input text id=description ${description}
  202 + Click Element xpath=//div[contains(@class, 'form-actions')]//button[@type='submit']
  203 +
  204 +Відповісти на питання
  205 + [Arguments] @{ARGUMENTS}
  206 + [Documentation]
  207 + ... ${ARGUMENTS[0]} = username
  208 + ... ${ARGUMENTS[1]} = ${TENDER_UAID}
  209 + ... ${ARGUMENTS[2]} = 0
  210 + ... ${ARGUMENTS[3]} = answer_data
  211 +
  212 + ${answer}= Get From Dictionary ${ARGUMENTS[3].data} answer
  213 +
  214 + Selenium2Library.Switch Browser ${ARGUMENTS[0]}
  215 + etender.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  216 +
  217 + Click Element xpath=//div[div/pre[1]]/div[1]
  218 + Input text xpath=//div[textarea]/textarea ${answer}
  219 + Click Element xpath=//div[textarea]/span/button[1]
  220 +
59 обновити сторінку з тендером 221 обновити сторінку з тендером
60 [Arguments] @{ARGUMENTS} 222 [Arguments] @{ARGUMENTS}
61 [Documentation] 223 [Documentation]
@@ -68,6 +230,61 @@ Login @@ -68,6 +230,61 @@ Login
68 Wait Until Page Contains ${ARGUMENTS[1]} 10 230 Wait Until Page Contains ${ARGUMENTS[1]} 10
69 sleep 1 231 sleep 1
70 232
  233 +Внести зміни в тендер
  234 + [Arguments] @{ARGUMENTS}
  235 + [Documentation]
  236 + ... ${ARGUMENTS[0]} = username
  237 + ... ${ARGUMENTS[1]} = ${TENDER_UAID}
  238 + ${ADDITIONAL_DATA}= prepare_test_tender_data ${BROKERS['${USERS.users['${tender_owner}'].broker}'].period_interval} single
  239 + ${tender_data}= Add_data_for_GUI_FrontEnds ${ADDITIONAL_DATA}
  240 + ${items}= Get From Dictionary ${tender_data.data} items
  241 + ${description}= Get From Dictionary ${tender_data.data} description
  242 + Selenium2Library.Switch Browser ${ARGUMENTS[0]}
  243 + etender.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  244 + Wait Until Page Contains Element xpath=//a[@class='btn btn-primary ng-scope'] 10
  245 + Click Element xpath=//a[@class='btn btn-primary ng-scope']
  246 + Sleep 2
  247 + Input text id=description ${description}
  248 + Click Element xpath=//button[@class='btn btn-info ng-isolate-scope']
  249 + Capture Page Screenshot
  250 +
  251 +додати предмети закупівлі
  252 + [Arguments] @{ARGUMENTS}
  253 + [Documentation]
  254 + ... ${ARGUMENTS[0]} = username
  255 + ... ${ARGUMENTS[1]} = ${TENDER_UAID}
  256 + ... ${ARGUMENTS[2]} = 3
  257 + ${ADDITIONAL_DATA}= prepare_test_tender_data ${BROKERS['${USERS.users['${tender_owner}'].broker}'].period_interval} multi
  258 + ${tender_data}= Add_data_for_GUI_FrontEnds ${ADDITIONAL_DATA}
  259 + ${items}= Get From Dictionary ${tender_data.data} items
  260 + Selenium2Library.Switch Browser ${ARGUMENTS[0]}
  261 + Run keyword if '${TEST NAME}' == 'Можливість додати позицію закупівлі в тендер' додати позицію
  262 + Run keyword if '${TEST NAME}' != 'Можливість додати позицію закупівлі в тендер' видалити позиції
  263 +
  264 +додати позицію
  265 + etender.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  266 + Sleep 2
  267 + Click Element xpath=//a[@class='btn btn-primary ng-scope']
  268 + Sleep 2
  269 + : FOR ${INDEX} IN RANGE 1 ${ARGUMENTS[2]} +1
  270 + \ Click Element xpath=.//*[@id='myform']/tender-form/div/button
  271 + \ Додати предмет ${items[${INDEX}]} ${INDEX}
  272 + Sleep 2
  273 + Click Element xpath=//div[@class='form-actions']/button[./text()='Зберегти зміни']
  274 + Wait Until Page Contains [ТЕСТУВАННЯ] 100
  275 +
  276 +видалити позиції
  277 + etender.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  278 + Click Element xpath=//a[@class='btn btn-primary ng-scope']
  279 + Sleep 2
  280 + : FOR ${INDEX} IN RANGE 1 ${ARGUMENTS[2]} +1
  281 + \ Click Element xpath=(//button[@class='btn btn-danger ng-scope'])[last()]
  282 + \ Sleep 1
  283 + Sleep 2
  284 + Wait Until Page Contains Element xpath=//div[@class='form-actions']/button[./text()='Зберегти зміни'] 10
  285 + Click Element xpath=//div[@class='form-actions']/button[./text()='Зберегти зміни']
  286 + Wait Until Page Contains [ТЕСТУВАННЯ] 100
  287 +
71 отримати інформацію із тендера 288 отримати інформацію із тендера
72 [Arguments] @{ARGUMENTS} 289 [Arguments] @{ARGUMENTS}
73 [Documentation] 290 [Documentation]
@@ -75,15 +292,9 @@ Login @@ -75,15 +292,9 @@ Login
75 ... ${ARGUMENTS[1]} == fieldname 292 ... ${ARGUMENTS[1]} == fieldname
76 Switch browser ${ARGUMENTS[0]} 293 Switch browser ${ARGUMENTS[0]}
77 ${return_value}= run keyword отримати інформацію про ${ARGUMENTS[1]} 294 ${return_value}= run keyword отримати інформацію про ${ARGUMENTS[1]}
  295 + Log ${return_value}
78 [return] ${return_value} 296 [return] ${return_value}
79 297
80 -Відмітити на сторінці поле з тендера  
81 - [Arguments] ${fieldname} ${locator}  
82 - ${last_note_id}= Add pointy note ${locator} Found ${fieldname} width=200 position=bottom  
83 - Align elements horizontally ${locator} ${last_note_id}  
84 - sleep 1  
85 - Remove element ${last_note_id}  
86 -  
87 Отримати тест із поля і показати на сторінці 298 Отримати тест із поля і показати на сторінці
88 [Arguments] ${fieldname} 299 [Arguments] ${fieldname}
89 sleep 3 300 sleep 3
@@ -91,16 +302,12 @@ Login @@ -91,16 +302,12 @@ Login
91 ${return_value}= Get Text ${locator.${fieldname}} 302 ${return_value}= Get Text ${locator.${fieldname}}
92 [return] ${return_value} 303 [return] ${return_value}
93 304
94 -отримати інформацію про tenderId  
95 - ${return_value}= Отримати тест із поля і показати на сторінці tenderId  
96 - [return] ${return_value.split(' ')[1]}  
97 -  
98 отримати інформацію про title 305 отримати інформацію про title
99 ${return_value}= Отримати тест із поля і показати на сторінці title 306 ${return_value}= Отримати тест із поля і показати на сторінці title
100 [return] ${return_value} 307 [return] ${return_value}
101 308
102 отримати інформацію про description 309 отримати інформацію про description
103 - ${return_value}= Отримати тест із поля і показати на сторінці description 310 + ${return_value}= Отримати тест із поля і показати на сторінці description
104 [return] ${return_value} 311 [return] ${return_value}
105 312
106 отримати інформацію про minimalStep.amount 313 отримати інформацію про minimalStep.amount
@@ -108,17 +315,28 @@ Login @@ -108,17 +315,28 @@ Login
108 ${return_value}= Convert To Number ${return_value.split(' ')[0]} 315 ${return_value}= Convert To Number ${return_value.split(' ')[0]}
109 [return] ${return_value} 316 [return] ${return_value}
110 317
111 -отримати інформацію про procuringEntity.name  
112 - ${return_value}= Отримати тест із поля і показати на сторінці procuringEntity.name  
113 - [return] ${return_value}  
114 -  
115 -  
116 отримати інформацію про value.amount 318 отримати інформацію про value.amount
117 - ${return_value}= Отримати тест із поля і показати на сторінці value.amount 319 + ${return_value}= Отримати тест із поля і показати на сторінці value.amount
118 ${return_value}= Evaluate "".join("${return_value}".split(' ')[:-3]) 320 ${return_value}= Evaluate "".join("${return_value}".split(' ')[:-3])
119 ${return_value}= Convert To Number ${return_value} 321 ${return_value}= Convert To Number ${return_value}
120 [return] ${return_value} 322 [return] ${return_value}
121 323
  324 +Відмітити на сторінці поле з тендера
  325 + [Arguments] ${fieldname} ${locator}
  326 + ${last_note_id}= Add pointy note ${locator} Found ${fieldname} width=200 position=bottom
  327 + Align elements horizontally ${locator} ${last_note_id}
  328 + sleep 1
  329 + Remove element ${last_note_id}
  330 +
  331 +отримати інформацію про tenderId
  332 + ${return_value}= отримати тест із поля і показати на сторінці tenderId
  333 + ${return_value}= Get Substring ${return_value} 10
  334 + [return] ${return_value}
  335 +
  336 +отримати інформацію про procuringEntity.name
  337 + ${return_value}= Отримати тест із поля і показати на сторінці procuringEntity.name
  338 + [return] ${return_value}
  339 +
122 отримати інформацію про tenderPeriod.startDate 340 отримати інформацію про tenderPeriod.startDate
123 ${return_value}= Отримати тест із поля і показати на сторінці tenderPeriod.startDate 341 ${return_value}= Отримати тест із поля і показати на сторінці tenderPeriod.startDate
124 [return] ${return_value} 342 [return] ${return_value}
@@ -135,7 +353,6 @@ Login @@ -135,7 +353,6 @@ Login
135 ${return_value}= Отримати тест із поля і показати на сторінці enquiryPeriod.endDate 353 ${return_value}= Отримати тест із поля і показати на сторінці enquiryPeriod.endDate
136 [return] ${return_value} 354 [return] ${return_value}
137 355
138 -  
139 отримати інформацію про items[${item_id}].description 356 отримати інформацію про items[${item_id}].description
140 відмітити на сторінці поле з тендера items[${item_id}].description jquery=tender-subject-info.ng-isolate-scope>div.row:contains("Детальний опис предмету закупівлі:")>:eq(1)> 357 відмітити на сторінці поле з тендера items[${item_id}].description jquery=tender-subject-info.ng-isolate-scope>div.row:contains("Детальний опис предмету закупівлі:")>:eq(1)>
141 ${return_value}= Get Text jquery=tender-subject-info.ng-isolate-scope>div.row:contains("Детальний опис предмету закупівлі:")>:eq(1)> 358 ${return_value}= Get Text jquery=tender-subject-info.ng-isolate-scope>div.row:contains("Детальний опис предмету закупівлі:")>:eq(1)>
@@ -190,25 +407,3 @@ Login @@ -190,25 +407,3 @@ Login
190 відмітити на сторінці поле з тендера question answer jquery=tender-questions>div:eq(1)>div:last> 407 відмітити на сторінці поле з тендера question answer jquery=tender-questions>div:eq(1)>div:last>
191 ${return_value}= Get Text jquery=tender-questions>div:eq(1)>div:last> 408 ${return_value}= Get Text jquery=tender-questions>div:eq(1)>div:last>
192 [return] ${return_value} 409 [return] ${return_value}
193 -  
194 -Задати питання  
195 - [Arguments] @{QUESTIONS}  
196 - [Documentation]  
197 - ... ${QUESTIONS[0]} == question_data  
198 - Login  
199 - ${title}= Get From Dictionary ${QUESTIONS[0].data} title  
200 - ${description}= Get From Dictionary ${QUESTIONS[0].data} description  
201 - Wait Until Page Contains Element jquery=a[href="#/"]  
202 - Click Element jquery=a[href="#/"]  
203 - Wait Until Page Contains Element jquery=input[ng-change='search()']  
204 - Input Text jquery=input[ng-change='search()'] UA-2015-06-30-000012 #Так як немає попередніх тестів, використовую хард-код  
205 - Wait Until Page Contains Element jquery=a[ng-click="search()"]  
206 - Click Element jquery=a[ng-click="search()"]  
207 - Wait Until Page Contains [ТЕСТУВАННЯ] 100  
208 - Click Element xpath=//table[contains(@class, 'table table-hover table-striped table-bordered ng-scope ng-table')]//tr[1]//a  
209 - Wait Until Page Contains Element jquery=a[href^="#/addQuestion/"]  
210 - Click Link jquery=a[href^="#/addQuestion/"]  
211 - Wait Until Page Contains Element id=title  
212 - Input text id=title ${title}  
213 - Input text id=description ${description}  
214 - Click Element xpath=//div[contains(@class, 'form-actions')]//button[@type='submit']  
@@ -3,47 +3,372 @@ Library Selenium2Screenshots @@ -3,47 +3,372 @@ Library Selenium2Screenshots
3 Library String 3 Library String
4 Library DateTime 4 Library DateTime
5 5
6 -*** Variables ***  
7 -${locator.tenderId} jquery=h3  
8 -${locator.title} jquery=tender-subject-info>div.row:contains("Назва закупівлі:")>:eq(1)>  
9 -${locator.description} jquery=tender-subject-info>div.row:contains("Детальний опис закупівлі:")>:eq(1)>  
10 -${locator.minimalStep.amount} jquery=tender-subject-info>div.row:contains("Мінімальний крок аукціону, грн.:")>:eq(1)>  
11 -${locator.procuringEntity.name} jquery=customer-info>div.row:contains("Найменування:")>:eq(1)>  
12 -${locator.value.amount} jquery=tender-subject-info>div.row:contains("Повний доступний бюджет закупівлі, грн.:")>:eq(1)>  
13 -${locator.tenderPeriod.startDate} jquery=tender-procedure-info>div.row:contains("Початок прийому пропозицій:")>:eq(1)>  
14 -${locator.tenderPeriod.endDate} jquery=tender-procedure-info>div.row:contains("Завершення прийому пропозицій:")>:eq(1)>  
15 -${locator.enquiryPeriod.startDate} jquery=tender-procedure-info>div.row:contains("Початок періоду уточнень:")>:eq(1)>  
16 -${locator.enquiryPeriod.endDate} jquery=tender-procedure-info>div.row:contains("Завершення періоду уточнень:")>:eq(1)>  
17 6
  7 +*** Variables ***
  8 +${file_path} local_path_to_file("TestDocument.docx")
  9 +${locator.tenderId} xpath=//td[./text()='TenderID']/following-sibling::td[1]
  10 +${locator.title} xpath=//td[./text()='Загальна назва закупівлі']/following-sibling::td[1]
  11 +${locator.description} xpath=//td[./text()='Предмет закупівлі']/following-sibling::td[1]
  12 +${locator.value.amount} xpath=//td[./text()='Максимальний бюджет']/following-sibling::td[1]
  13 +${locator.minimalStep.amount} xpath=//td[./text()='Крок зменшення ціни']/following-sibling::td[1]
  14 +${locator.enquiryPeriod.endDate} xpath=//td[./text()='Завершення періоду обговорення']/following-sibling::td[1]
  15 +${locator.tenderPeriod.endDate} xpath=//td[./text()='Завершення періоду прийому пропозицій']/following-sibling::td[1]
  16 +${locator.items[0].deliveryAddress.countryName} xpath=//td[@class='nameField'][./text()='Адреса поставки']/following-sibling::td[1]
  17 +${locator.items[0].deliveryDate} xpath=//td[./text()='Кінцева дата поставки']/following-sibling::td[1]
  18 +${locator.items[0].classification.scheme} xpath=//td[@class = 'nameField'][./text()='Клас CPV']
  19 +${locator.items[0].additionalClassifications[0].scheme} xpath=//td[@class = 'nameField'][./text()='Клас ДКПП']
18 20
19 *** Keywords *** 21 *** Keywords ***
20 Підготувати клієнт для користувача 22 Підготувати клієнт для користувача
21 - [Arguments] ${username}  
22 - [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо  
23 - Open Browser ${BROKERS['${USERS.users['${username}'].broker}'].url} ${USERS.users['${username}'].browser} alias=${username}  
24 - Set Window Position @{USERS.users['${username}'].position}  
25 - Set Window Size @{USERS.users['${username}'].size}  
26 - Log Variables 23 + [Arguments] @{ARGUMENTS}
  24 + [Documentation] Відкрити брaузер, створити обєкт api wrapper, тощо
  25 + ... ${ARGUMENTS[0]} == username
  26 + Open Browser ${BROKERS['${USERS.users['${ARGUMENTS[0]}'].broker}'].url} ${USERS.users['${ARGUMENTS[0]}'].browser} alias=${ARGUMENTS[0]}
  27 + Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size}
  28 + Set Window Position @{USERS.users['${ARGUMENTS[0]}'].position}
  29 + Run Keyword And Ignore Error Pre Login ${ARGUMENTS[0]}
  30 + Wait Until Page Contains Element jquery=a[href="/cabinet"]
  31 + Click Element jquery=a[href="/cabinet"]
  32 + Run Keyword If '${username}' != 'Netcast_Viewer' Login
  33 +
  34 +Login
  35 + [Arguments] @{ARGUMENTS}
  36 + Wait Until Page Contains Element name=email 10
  37 + Input text name=email mail
  38 + Sleep 1
  39 + Input text name=email ${USERS.users['${username}'].login}
  40 + Sleep 2
  41 + Input text name=psw ${USERS.users['${username}'].password}
  42 + Wait Until Page Contains Element xpath=//button[contains(@class, 'btn')][./text()='Вхід в кабінет'] 20
  43 + Click Element xpath=//button[contains(@class, 'btn')][./text()='Вхід в кабінет']
  44 +
  45 +Pre Login
  46 + [Arguments] @{ARGUMENTS}
  47 + [Documentation]
  48 + ... ${ARGUMENTS[0]} == username
  49 + Wait Until Page Contains Element name=siteLogin 10
  50 + Input text name=siteLogin ${BROKERS['${USERS.users['${username}'].broker}'].login}
  51 + Input text name=sitePass ${BROKERS['${USERS.users['${username}'].broker}'].password}
  52 + Click Button xpath=.//*[@id='table1']/tbody/tr/td/form/p[3]/input
  53 +
  54 +Створити тендер
  55 + [Arguments] @{ARGUMENTS}
  56 + [Documentation]
  57 + ... ${ARGUMENTS[0]} == username
  58 + ... ${ARGUMENTS[1]} == tender_data
  59 + #{tender_data}= Add_time_for_GUI_FrontEnds ${ARGUMENTS[1]}
  60 + ${items}= Get From Dictionary ${ARGUMENTS[1].data} items
  61 + ${title}= Get From Dictionary ${ARGUMENTS[1].data} title
  62 + ${description}= Get From Dictionary ${ARGUMENTS[1].data} description
  63 + ${budget}= Get From Dictionary ${ARGUMENTS[1].data.value} amount
  64 + ${step_rate}= Get From Dictionary ${ARGUMENTS[1].data.minimalStep} amount
  65 + ${items_description}= Get From Dictionary ${ARGUMENTS[1].data} description
  66 + ${quantity}= Get From Dictionary ${items[0]} quantity
  67 + ${countryName}= Get From Dictionary ${ARGUMENTS[1].data.procuringEntity.address} countryName
  68 + ${delivery_end_date}= Get From Dictionary ${items[0].deliveryDate} endDate
  69 + ${delivery_end_date}= convert_date_to_slash_format ${delivery_end_date}
  70 + ${cpv}= Convert To String Картонки
  71 + ${cpv_id}= Get From Dictionary ${items[0].classification} id
  72 + ${cpv_id1}= Replace String ${cpv_id} - _
  73 + ${dkpp_desc}= Get From Dictionary ${items[0].additionalClassifications[0]} description
  74 + ${dkpp_id}= Get From Dictionary ${items[0].additionalClassifications[0]} id
  75 + ${dkpp_id1}= Replace String ${dkpp_id} - _
  76 + ${enquiry_end_date}= Get From Dictionary ${ARGUMENTS[1].data.enquiryPeriod} endDate
  77 + ${enquiry_end_date}= convert_date_to_slash_format ${enquiry_end_date}
  78 + ${end_date}= Get From Dictionary ${ARGUMENTS[1].data.tenderPeriod} endDate
  79 + ${end_date}= convert_date_to_slash_format ${end_date}
  80 +
  81 + Selenium2Library.Switch Browser ${ARGUMENTS[0]}
  82 + Wait Until Page Contains Element jquery=a[href="/tenders/new"] 100
  83 + Click Element jquery=a[href="/tenders/new"]
  84 + Wait Until Page Contains Element name=tender_title 100
  85 + Input text name=tender_title ${title}
  86 + Input text name=tender_description ${description}
  87 + Input text name=tender_value_amount ${budget}
  88 + Input text name=tender_minimalStep_amount ${step_rate}
  89 + Input text name=items[0][item_description] ${items_description}
  90 + Input text name=items[0][item_quantity] ${quantity}
  91 + Input text name=items[0][item_deliveryAddress_countryName] ${countryName}
  92 + Input text name=items[0][item_deliveryDate_endDate] ${delivery_end_date}
  93 + Click Element xpath=//a[contains(@data-class, 'cpv')][./text()='Визначити за довідником']
  94 + Select Frame xpath=//iframe[contains(@src,'/js/classifications/cpv/uk.htm?relation=true')]
  95 + Input text id=search ${cpv}
  96 + Wait Until Page Contains ${cpv_id}
  97 + Click Element xpath=//a[contains(@id,'${cpv_id1}')]
  98 + Click Element xpath=.//*[@id='select']
  99 + Unselect Frame
  100 + Click Element xpath=//a[contains(@data-class, 'dkpp')][./text()='Визначити за довідником']
  101 + Select Frame xpath=//iframe[contains(@src,'/js/classifications/dkpp/uk.htm?relation=true')]
  102 + Input text id=search ${dkpp_desc}
  103 + Wait Until Page Contains ${dkpp_id}
  104 + Click Element xpath=//a[contains(@id,'${dkpp_id1}')]
  105 + Click Element xpath=.//*[@id='select']
  106 + Unselect Frame
  107 + Input text name=tender_enquiryPeriod_endDate ${enquiry_end_date}
  108 + Input text name=tender_tenderPeriod_endDate ${end_date}
  109 + Run Keyword if '${mode}' == 'multi' Додати предмет items
  110 + Wait Until Page Contains Element name=do 100
  111 + Click Element name=do
  112 + Wait Until Page Contains Element xpath=//a[contains(@class, 'button pubBtn')] 100
  113 + Click Element xpath=//a[contains(@class, 'button pubBtn')]
  114 + Wait Until Page Contains Тендер опубліковано 100
  115 + ${tender_UAid}= Get Text xpath=//*/section[6]/table/tbody/tr[2]/td[2]
  116 + ${Ids}= Convert To String ${tender_UAid}
  117 + Run keyword if '${mode}' == 'multi' Set Multi Ids ${tender_UAid}
  118 + [return] ${Ids}
  119 +
  120 +Set Multi Ids
  121 + [Arguments] @{ARGUMENTS}
  122 + [Documentation]
  123 + ... ${ARGUMENTS[1]} == ${tender_UAid}
  124 + ${id}= Get Text xpath=//*/section[6]/table/tbody/tr[1]/td[2]
  125 + ${Ids}= Create List ${tender_UAid} ${id}
  126 +
  127 +Додати предмет
  128 + [Arguments] @{ARGUMENTS}
  129 + [Documentation]
  130 + ... ${ARGUMENTS[0]} == items
  131 + ${dkpp_desc1}= Get From Dictionary ${items[1].additionalClassifications[0]} description
  132 + ${dkpp_id11}= Get From Dictionary ${items[1].additionalClassifications[0]} id
  133 + ${dkpp_1id}= Replace String ${dkpp_id11} - _
  134 + ${dkpp_desc2}= Get From Dictionary ${items[2].additionalClassifications[0]} description
  135 + ${dkpp_id2}= Get From Dictionary ${items[2].additionalClassifications[0]} id
  136 + ${dkpp_id2_1}= Replace String ${dkpp_id2} - _
  137 + ${dkpp_desc3}= Get From Dictionary ${items[3].additionalClassifications[0]} description
  138 + ${dkpp_id3}= Get From Dictionary ${items[3].additionalClassifications[0]} id
  139 + ${dkpp_id3_1}= Replace String ${dkpp_id3} - _
  140 +
  141 + Wait Until Page Contains Element xpath=//a[contains(@class, 'addMultiItem')][./text()='Додати предмет закупівлі']
  142 + Click Element xpath=//a[contains(@class, 'addMultiItem')][./text()='Додати предмет закупівлі']
  143 + Wait Until Page Contains Element name=items[1][item_description] 100
  144 + Input text name=items[1][item_description] ${description}
  145 + Input text name=items[1][item_quantity] ${quantity}
  146 + Click Element xpath=(//a[contains(@data-class, 'cpv')][./text()='Визначити за довідником'])[2]
  147 + Select Frame xpath=//iframe[contains(@src,'/js/classifications/cpv/uk.htm?relation=true')]
  148 + Input text id=search ${cpv}
  149 + Wait Until Page Contains ${cpv_id}
  150 + Click Element xpath=//a[contains(@id,'${cpv_id1}')]
  151 + Click Element xpath=.//*[@id='select']
  152 + Unselect Frame
  153 + Click Element xpath=(//a[contains(@data-class, 'dkpp')][./text()='Визначити за довідником'])[2]
  154 + Select Frame xpath=//iframe[contains(@src,'/js/classifications/dkpp/uk.htm?relation=true')]
  155 + Input text id=search ${dkpp_desc1}
  156 + Wait Until Page Contains ${dkpp_id11}
  157 + Click Element xpath=//a[contains(@id,'${dkpp_1id}')]
  158 + Click Element xpath=.//*[@id='select']
  159 + Unselect Frame
  160 + Click Element xpath=//a[contains(@class, 'addMultiItem')][./text()='Додати предмет закупівлі']
  161 + Wait Until Page Contains Element name=items[2][item_description] 100
  162 + Input text name=items[2][item_description] ${description}
  163 + Input text name=items[2][item_quantity] ${quantity}
  164 + Click Element xpath=(//a[contains(@data-class, 'cpv')][./text()='Визначити за довідником'])[3]
  165 + Select Frame xpath=//iframe[contains(@src,'/js/classifications/cpv/uk.htm?relation=true')]
  166 + Input text id=search ${cpv}
  167 + Wait Until Page Contains ${cpv_id}
  168 + Click Element xpath=//a[contains(@id,'${cpv_id1}')]
  169 + Click Element xpath=.//*[@id='select']
  170 + Unselect Frame
  171 + Click Element xpath=(//a[contains(@data-class, 'dkpp')][./text()='Визначити за довідником'])[3]
  172 + Select Frame xpath=//iframe[contains(@src,'/js/classifications/dkpp/uk.htm?relation=true')]
  173 + Input text id=search ${dkpp_desc2}
  174 + Wait Until Page Contains ${dkpp_id2}
  175 + Click Element xpath=//a[contains(@id,'${dkpp_id2_1}')]
  176 + Click Element xpath=.//*[@id='select']
  177 + Unselect Frame
  178 + Click Element xpath=//a[contains(@class, 'addMultiItem')][./text()='Додати предмет закупівлі']
  179 + Wait Until Page Contains Element name=items[3][item_description] 100
  180 + Input text name=items[3][item_description] ${description}
  181 + Input text name=items[3][item_quantity] ${quantity}
  182 + Click Element xpath=(//a[contains(@data-class, 'cpv')][./text()='Визначити за довідником'])[4]
  183 + Select Frame xpath=//iframe[contains(@src,'/js/classifications/cpv/uk.htm?relation=true')]
  184 + Input text id=search ${cpv}
  185 + Wait Until Page Contains ${cpv_id}
  186 + Click Element xpath=//a[contains(@id,'${cpv_id1}')]
  187 + Click Element xpath=.//*[@id='select']
  188 + Unselect Frame
  189 + Click Element xpath=(//a[contains(@data-class, 'dkpp')][./text()='Визначити за довідником'])[4]
  190 + Select Frame xpath=//iframe[contains(@src,'/js/classifications/dkpp/uk.htm?relation=true')]
  191 + Input text id=search ${dkpp_desc3}
  192 + Wait Until Page Contains ${dkpp_id3}
  193 + Click Element xpath=//a[contains(@id,'${dkpp_id3_1}')]
  194 + Click Element xpath=.//*[@id='select']
  195 + Unselect Frame
  196 + Input text name=tender_enquiryPeriod_endDate ${enquiry_end_date}
  197 + Input text name=tender_tenderPeriod_endDate ${end_date}
27 198
28 Пошук тендера по ідентифікатору 199 Пошук тендера по ідентифікатору
29 [Arguments] @{ARGUMENTS} 200 [Arguments] @{ARGUMENTS}
30 [Documentation] 201 [Documentation]
31 ... ${ARGUMENTS[0]} == username 202 ... ${ARGUMENTS[0]} == username
32 ... ${ARGUMENTS[1]} == tenderId 203 ... ${ARGUMENTS[1]} == tenderId
33 - ... ${ARGUMENTS[2]} == id  
34 Switch browser ${ARGUMENTS[0]} 204 Switch browser ${ARGUMENTS[0]}
35 - ${current_location}= Get Location  
36 - Run keyword if '${BROKERS['${USERS.users['${username}'].broker}'].url}/#/tenderDetailes/${ARGUMENTS[2]}'=='${current_location}' Reload Page  
37 Go to ${BROKERS['${USERS.users['${username}'].broker}'].url} 205 Go to ${BROKERS['${USERS.users['${username}'].broker}'].url}
38 - Wait Until Page Contains E-TENDER - центр електронної торгівлі 10 206 + Wait Until Page Contains Держзакупівлі.онлайн 10
  207 + Click Element xpath=//a[text()='Закупівлі']
39 sleep 1 208 sleep 1
40 - Input Text jquery=input[ng-change='search()'] ${ARGUMENTS[1]}  
41 - Click Link jquery=a[ng-click='search()']  
42 - sleep 2  
43 - ${last_note_id}= Add pointy note jquery=a[href^="#/tenderDetailes"] Found tender with tenderID "${ARGUMENTS[1]}" width=200 position=bottom 209 + Click Element xpath=//select[@name='filter[object]']/option[@value='tenderID']
  210 + Input text xpath=//input[@name='filter[search]'] ${ARGUMENTS[1]}
  211 + Click Element xpath=//button[@class='btn'][./text()='Пошук']
  212 + Wait Until Page Contains ${ARGUMENTS[1]} 10
  213 + Capture Page Screenshot
44 sleep 1 214 sleep 1
45 - Remove element ${last_note_id}  
46 - Click Link jquery=a[href^="#/tenderDetailes"]  
47 - Wait Until Page Contains ${ARGUMENTS[1]} 10 215 + Click Element xpath=//a[@class='reverse tenderLink']
  216 +
  217 +Задати питання
  218 + [Arguments] @{ARGUMENTS}
  219 + [Documentation]
  220 + ... ${ARGUMENTS[0]} == username
  221 + ... ${ARGUMENTS[1]} == tenderUaId
  222 + ... ${ARGUMENTS[2]} == questionId
  223 + ${title}= Get From Dictionary ${ARGUMENTS[2].data} title
  224 + ${description}= Get From Dictionary ${ARGUMENTS[2].data} description
  225 +
  226 +
  227 + Selenium2Library.Switch Browser ${ARGUMENTS[0]}
  228 + netcast.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  229 +
  230 + Wait Until Page Contains Element xpath=//a[@class='reverse openCPart'][span[text()='Обговорення']] 20
  231 + Click Element xpath=//a[@class='reverse openCPart'][span[text()='Обговорення']]
  232 + Wait Until Page Contains Element name=title 20
  233 + Input text name=title ${title}
  234 + Input text xpath=//textarea[@name='description'] ${description}
  235 + Click Element xpath=//div[contains(@class, 'buttons')]//button[@type='submit']
  236 + Wait Until Page Contains ${title} 30
  237 + Capture Page Screenshot
  238 +
  239 +Відповісти на питання
  240 + [Arguments] @{ARGUMENTS}
  241 + [Documentation]
  242 + ... ${ARGUMENTS[0]} = username
  243 + ... ${ARGUMENTS[1]} = tenderUaId
  244 + ... ${ARGUMENTS[2]} = 0
  245 + ... ${ARGUMENTS[3]} = answer_data
  246 +
  247 + ${answer}= Get From Dictionary ${ARGUMENTS[3].data} answer
  248 + Selenium2Library.Switch Browser ${ARGUMENTS[0]}
  249 + netcast.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  250 +
  251 + Wait Until Page Contains Element xpath=//a[@class='reverse openCPart'][span[text()='Обговорення']] 20
  252 + Click Element xpath=//a[@class='reverse openCPart'][span[text()='Обговорення']]
  253 + Wait Until Page Contains Element xpath=//textarea[@name='answer'] 20
  254 + Input text xpath=//textarea[@name='answer'] ${answer}
  255 + Click Element xpath=//div[1]/div[3]/form/div/table/tbody/tr/td[2]/button
  256 + Wait Until Page Contains ${answer} 30
  257 + Capture Page Screenshot
  258 +
  259 +Подати скаргу
  260 + [Arguments] @{ARGUMENTS}
  261 + [Documentation]
  262 + ... ${ARGUMENTS[0]} = username
  263 + ... ${ARGUMENTS[1]} = tenderUaId
  264 + ... ${ARGUMENTS[2]} = complaintsId
  265 + ${complaint}= Get From Dictionary ${ARGUMENTS[2].data} title
  266 + ${description}= Get From Dictionary ${ARGUMENTS[2].data} description
  267 +
  268 + Selenium2Library.Switch Browser ${ARGUMENTS[0]}
  269 + netcast.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  270 + sleep 1
  271 + Click Element xpath=//a[@class='reverse openCPart'][span[text()='Скарги']]
  272 + Wait Until Page Contains Element name=title 20
  273 + Input text name=title ${complaint}
  274 + Input text xpath=//textarea[@name='description'] ${description}
  275 + Click Element xpath=//div[contains(@class, 'buttons')]//button[@type='submit']
  276 + Wait Until Page Contains ${complaint} 30
  277 + Capture Page Screenshot
  278 +
  279 +Порівняти скаргу
  280 + [Arguments] @{ARGUMENTS}
  281 + [Documentation]
  282 + ... ${ARGUMENTS[0]} = username
  283 + ... ${ARGUMENTS[1]} = tenderUaId
  284 + ... ${ARGUMENTS[2]} = complaintsData
  285 + ${complaint}= Get From Dictionary ${ARGUMENTS[2].data} title
  286 + ${description}= Get From Dictionary ${ARGUMENTS[2].data} description
  287 +
  288 + Selenium2Library.Switch Browser ${ARGUMENTS[0]}
  289 + netcast.Пошук тендера по ідентифікатору ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  290 + sleep 1
  291 + Click Element xpath=//a[@class='reverse openCPart'][span[text()='Скарги']]
  292 + Wait Until Page Contains ${complaint} 30
  293 + Capture Page Screenshot
  294 +
  295 +
  296 +
  297 +Внести зміни в тендер
  298 + # Тест написано для уже існуючого тендеру, що знаходиться у чернетках користувача
  299 + [Arguments] @{ARGUMENTS}
  300 + [Documentation]
  301 + ... ${ARGUMENTS[0]} = username
  302 + ... ${ARGUMENTS[1]} = description
  303 +
  304 + Selenium2Library.Switch Browser ${ARGUMENTS[0]}
  305 + Click Element xpath=//a[@class='reverse'][./text()='Мої закупівлі']
  306 + Wait Until Page Contains Element xpath=//a[@class='reverse'][./text()='Чернетки'] 30
  307 + Click Element xpath=//a[@class='reverse'][./text()='Чернетки']
  308 + Wait Until Page Contains Element xpath=//a[@class='reverse tenderLink'] 30
  309 + Click Element xpath=//a[@class='reverse tenderLink']
  310 + sleep 1
  311 + Click Element xpath=//a[@class='button save'][./text()='Редагувати']
  312 + sleep 1
  313 + Input text name=tender_title ${ARGUMENTS[1]}
48 sleep 1 314 sleep 1
49 - Capture Page Screenshot  
  315 + Click Element xpath=//button[@class='saveDraft']
  316 + Wait Until Page Contains ${ARGUMENTS[1]} 30
  317 + Capture Page Screenshot
  318 +
  319 +отримати інформацію із тендера
  320 + [Arguments] @{ARGUMENTS}
  321 + [Documentation]
  322 + ... ${ARGUMENTS[0]} == username
  323 + ... ${ARGUMENTS[1]} == fieldname
  324 + Switch browser ${ARGUMENTS[0]}
  325 + ${return_value}= run keyword отримати інформацію про ${ARGUMENTS[1]}
  326 + [return] ${return_value}
  327 +
  328 +отримати тест із поля і показати на сторінці
  329 + [Arguments] ${fieldname}
  330 + sleep 5
  331 + ${return_value}= Get Text ${locator.${fieldname}}
  332 + [return] ${return_value}
  333 +
  334 +отримати інформацію про title
  335 + ${title}= отримати тест із поля і показати на сторінці title
  336 + [return] ${title}
  337 +
  338 +отримати інформацію про description
  339 + ${description}= отримати тест із поля і показати на сторінці description
  340 + [return] ${description}
  341 +
  342 +отримати інформацію про tenderId
  343 + ${tenderId}= отримати тест із поля і показати на сторінці tenderId
  344 + [return] ${tenderId}
  345 +
  346 +отримати інформацію про value.amount
  347 + ${valueAmount}= отримати тест із поля і показати на сторінці value.amount
  348 + ${valueAmount}= Convert To Number ${valueAmount.split(' ')[0]}
  349 + [return] ${valueAmount}
  350 +
  351 +отримати інформацію про minimalStep.amount
  352 + ${minimalStepAmount}= отримати тест із поля і показати на сторінці minimalStep.amount
  353 + ${minimalStepAmount}= Convert To Number ${minimalStepAmount.split(' ')[0]}
  354 + [return] ${minimalStepAmount}
  355 +
  356 +отримати інформацію про enquiryPeriod.endDate
  357 + ${enquiryPeriodEndDate}= отримати тест із поля і показати на сторінці enquiryPeriod.endDate
  358 + [return] ${enquiryPeriodEndDate}
  359 +
  360 +отримати інформацію про tenderPeriod.endDate
  361 + ${tenderPeriodEndDate}= отримати тест із поля і показати на сторінці tenderPeriod.endDate
  362 + [return] ${tenderPeriodEndDate}
  363 +
  364 +отримати інформацію про items[0].deliveryAddress.countryName
  365 + ${countryName}= отримати тест із поля і показати на сторінці items[0].deliveryAddress.countryName
  366 + [return] ${countryName}
  367 +
  368 +отримати інформацію про items[0].classification.scheme
  369 + ${classificationScheme}= отримати тест із поля і показати на сторінці items[0].classification.scheme
  370 + [return] ${classificationScheme.split(' ')[1]}
  371 +
  372 +отримати інформацію про items[0].additionalClassifications[0].scheme
  373 + ${additionalClassificationsScheme}= отримати тест із поля і показати на сторінці items[0].additionalClassifications[0].scheme
  374 + [return] ${additionalClassificationsScheme.split(' ')[1]}
  1 +*** Setting ***
  2 +Library Selenium2Screenshots
  3 +Library String
  4 +Library DateTime
  5 +
  6 +*** Variables ***
  7 +${locator.tenderId} jquery=h3
  8 +
  9 +*** Keywords ***
  10 +Підготувати дані для оголошення тендера
  11 + ${INITIAL_TENDER_DATA}= prepare_test_tender_data
  12 + [return] ${INITIAL_TENDER_DATA}
  13 +
  14 +Підготувати клієнт для користувача
  15 + [Arguments] @{ARGUMENTS}
  16 + [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо
  17 + ... ${ARGUMENTS[0]} == username
  18 + Open Browser ${BROKERS['${USERS.users['${username}'].broker}'].url} ${USERS.users['${username}'].browser} alias=${ARGUMENTS[0]}
  19 + Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size}
  20 + Set Window Position @{USERS.users['${ARGUMENTS[0]}'].position}
  21 +
  22 +# sleep 10
  23 + Run Keyword If '${username}' != 'Newtend_Viewer' Login
  24 +
  25 +Login
  26 + Wait Until Page Contains Element id=indexpage_login 20
  27 + Click Element id=indexpage_login
  28 + Wait Until Page Contains Element id=password 20
  29 + Input text id=login-email ${USERS.users['${username}'].login}
  30 + Input text id=password ${USERS.users['${username}'].password}
  31 + Click Element id=submit-login-button
  32 + Wait Until Page Contains Element xpath =//a[@class="close-modal-dialog"] 20
  33 + Go to ${USERS.users['${ARGUMENTS[0]}'].homepage}
  34 +# Wait Until Page Contains Element xpath=//div[@class="introjs-overlay"] 20
  35 +
  36 +Створити тендер
  37 + [Arguments] @{ARGUMENTS}
  38 + [Documentation]
  39 + ... ${ARGUMENTS[0]} == username
  40 + ... ${ARGUMENTS[1]} == initial_tender_data
  41 +## Inicialisation
  42 + ${prepared_tender_data}= Add_data_for_GUI_FrontEnds ${ARGUMENTS[1]}
  43 + ${items}= Get From Dictionary ${prepared_tender_data.data} items
  44 + ${title}= Get From Dictionary ${prepared_tender_data.data} title
  45 + ${description}= Get From Dictionary ${prepared_tender_data.data} description
  46 + ${budget}= Get From Dictionary ${prepared_tender_data.data.value} amount
  47 + ${step_rate}= Get From Dictionary ${prepared_tender_data.data.minimalStep} amount
  48 + ${start_date}= Get From Dictionary ${prepared_tender_data.data.tenderPeriod} startDate
  49 + ${end_date}= Get From Dictionary ${prepared_tender_data.data.tenderPeriod} endDate
  50 + ${enquiry_start_date}= Get From Dictionary ${prepared_tender_data.data.enquiryPeriod} startDate
  51 + ${enquiry_end_date}= Get From Dictionary ${prepared_tender_data.data.enquiryPeriod} endDate
  52 +
  53 + Selenium2Library.Switch Browser ${ARGUMENTS[0]}
  54 + Go To ${USERS.users['${username}'].homepage}
  55 + Wait Until Page Contains Element xpath=//a[@href="#/create-tender"] 100
  56 + Click Link xpath=//a[@href="#/create-tender"]
  57 + Wait Until Page Contains Новый тендер 100
  58 +# Input fields tender
  59 + Input text name=tenderName ${title}
  60 + Input text name=tenderDescription ${description}
  61 + Input text id=budget ${budget}
  62 + Click Element id=with-nds
  63 + Input text id=step ${step_rate}
  64 +# Add Item(s)
  65 + Додати придмет ${items[0]} 0
  66 + Run Keyword If '${mode}' == 'multi' Додати багато придметів items
  67 +# Set tender datatimes
  68 + Set datetime start-date-registration ${start_date}
  69 + Set datetime end-date-registration ${end_date}
  70 + Set datetime end-date-qualification ${enquiry_end_date}
  71 + Set datetime start-date-qualification ${enquiry_start_date}
  72 +# Save
  73 + Click Element xpath=//button[@class="btn btn-lg btn-default cancel pull-right ng-binding"]
  74 + Wait Until Page Contains Element xpath=//div[@ng-click="goHome()"] 30
  75 + Click Element xpath=//div[@ng-click="goHome()"]
  76 +# Get Ids
  77 + Wait Until Page Contains Element xpath=//div[@class="title"] 30
  78 + ${tender_UAid}= Get Text xpath=//div[@class="title"]
  79 + ${Ids}= Convert To String ${tender_UAid}
  80 + Run keyword if '${mode}' == 'multi' Set Multi Ids ${tender_UAid}
  81 + [return] ${Ids}
  82 +
  83 +Set Multi Ids
  84 + [Arguments] @{ARGUMENTS}
  85 + [Documentation]
  86 + ... ${ARGUMENTS[0]} == ${tender_UAid}
  87 + ${current_location}= Get Location
  88 + ${id}= Get Substring ${current_location} -41 -9
  89 + ${Ids}= Create List ${tender_UAid} ${id}
  90 +
  91 +Set datetime
  92 + [Arguments] @{ARGUMENTS}
  93 + [Documentation]
  94 + ... ${ARGUMENTS[0]} == control_id
  95 + ... ${ARGUMENTS[1]} == date
  96 +#Pick Date
  97 + Click Element xpath=//input[@id="${ARGUMENTS[0]}"]/../span[@class="calendar-btn"]
  98 + Wait Until Page Contains Element xpath=//td[@class="text-center ng-scope"] 30
  99 + ${datapicker_id}= Get Element Attribute xpath=//input[@id="${ARGUMENTS[0]}"]/..//td[@class="text-center ng-scope"]@id
  100 + ${datapicker_id}= Get Substring ${datapicker_id} 0 -1
  101 + ${date_index}= newtend_date_picker_index ${ARGUMENTS[1]}
  102 + ${datapicker_id}= Convert To String ${datapicker_id}${date_index}
  103 + Click Element xpath=//input[@id="${ARGUMENTS[0]}"]/..//td[@id="${datapicker_id}"]/button
  104 +#Set time
  105 + ${hous}= Get Substring ${ARGUMENTS[1]} 11 13
  106 + ${minutes}= Get Substring ${ARGUMENTS[1]} 14 16
  107 + Input text xpath=//input[@id="${ARGUMENTS[0]}"]/../..//input[@ng-model="hours"] ${hous}
  108 + Input text xpath=//input[@id="${ARGUMENTS[0]}"]/../..//input[@ng-model="minutes"] ${minutes}
  109 +
  110 +Додати придмет
  111 + [Arguments] @{ARGUMENTS}
  112 + [Documentation]
  113 + ... ${ARGUMENTS[0]} == items_n
  114 + ... ${ARGUMENTS[1]} == index
  115 +## Get values for item
  116 + ${items_description}= Get From Dictionary ${ARGUMENTS[0]} description
  117 + ${quantity}= Get From Dictionary ${ARGUMENTS[0]} quantity
  118 + ${cpv}= Convert To String Картонки
  119 + ${dkpp_desc}= Get From Dictionary ${ARGUMENTS[0].additionalClassifications[0]} description
  120 + ${dkpp_id}= Get From Dictionary ${ARGUMENTS[0].additionalClassifications[0]} id
  121 + ${unit}= Get From Dictionary ${ARGUMENTS[0].unit} name
  122 + ${deliverydate_end_date}= Get From Dictionary ${ARGUMENTS[0].deliveryDate} endDate
  123 + ${countryName}= Get From Dictionary ${ARGUMENTS[0].deliveryAddress} countryName
  124 + ${ZIP}= Get From Dictionary ${ARGUMENTS[0].deliveryAddress} postalCode
  125 + ${region}= Get From Dictionary ${ARGUMENTS[0].deliveryAddress} region
  126 + ${locality}= Get From Dictionary ${ARGUMENTS[0].deliveryAddress} locality
  127 + ${streetAddress}= Get From Dictionary ${ARGUMENTS[0].deliveryAddress} streetAddress
  128 +# Add item
  129 + Input text id=itemDescription${ARGUMENTS[1]} ${items_description}
  130 + Input text id=quantity${ARGUMENTS[1]} ${quantity}
  131 + Click Element xpath=//a[contains(text(), "единицы измерения")]
  132 + Click Element xpath=//a[contains(text(), "единицы измерения")]/..//a[contains(text(), '${unit}')]
  133 +# Set CPV
  134 + Click Element id=classifier1${ARGUMENTS[1]}
  135 + Wait Until Page Contains Element xpath=//input[@class="ng-pristine ng-untouched ng-valid"] 100
  136 + Input text xpath=//input[@class="ng-pristine ng-untouched ng-valid"] ${cpv}
  137 + Wait Until Page Contains Element xpath=//span[contains(text(),'${cpv}')] 20
  138 + Click Element xpath=//input[@class="ng-pristine ng-untouched ng-valid"]
  139 + Click Element xpath=//button[@class="btn btn-default btn-lg pull-right choose ng-binding"]
  140 +# Set ДКПП
  141 + Click Element id=classifier2${ARGUMENTS[1]}
  142 + Wait Until Page Contains Element xpath=//input[@class="ng-pristine ng-untouched ng-valid"] 100
  143 + Input text xpath=//input[@class="ng-pristine ng-untouched ng-valid"] ${dkpp_desc}
  144 + Wait Until Page Contains Element xpath=//span[contains(text(),'${dkpp_id}')] 100
  145 + Click Element xpath=//span[contains(text(),'${dkpp_id}')]/../..//input[@class="ng-pristine ng-untouched ng-valid"]
  146 + Click Element xpath=//button[@class="btn btn-default btn-lg pull-right choose ng-binding"]
  147 +# Set Delivery Address
  148 + Click Element id=deliveryAddress${ARGUMENTS[1]}
  149 + Wait Until Page Contains Element xpath=//input[1][@class="form-control ng-pristine ng-untouched ng-valid"] 100
  150 + Input text xpath=//input[1][@class="form-control ng-pristine ng-untouched ng-valid"] ${countryName}
  151 + Input text xpath=//input[1][@class="form-control ng-pristine ng-untouched ng-valid"] ${ZIP}
  152 + Input text xpath=//input[1][@class="form-control ng-pristine ng-untouched ng-valid"] ${region}
  153 + Input text xpath=//input[1][@class="form-control ng-pristine ng-untouched ng-valid"] ${locality}
  154 + Input text xpath=//input[1][@class="form-control ng-pristine ng-untouched ng-valid"] ${streetAddress}
  155 + Click Element xpath=//button[@class="btn btn-lg single-btn ng-binding"]
  156 +# Set Item Datetime
  157 + Set datetime end-date-delivery${ARGUMENTS[1]} ${deliverydate_end_date}
  158 +
  159 +Додати багато придметів
  160 + [Arguments] @{ARGUMENTS}
  161 + [Documentation]
  162 + ... ${ARGUMENTS[0]} == items
  163 + ${Items_length}= Get Length ${items}
  164 + : FOR ${INDEX} IN RANGE 1 ${Items_length}
  165 + \ Click Element xpath=//a[@class="icon-black plus-black remove-field ng-scope"]
  166 + \ Додати придмет ${items[${INDEX}]} ${INDEX}
  167 +
  168 +Пошук тендера по ідентифікатору
  169 + [Arguments] @{ARGUMENTS}
  170 + [Documentation]
  171 + ... ${ARGUMENTS[0]} == username
  172 + ... ${ARGUMENTS[1]} == ${TENDER_UAID}
  173 + Switch browser ${ARGUMENTS[0]}
  174 + Go to ${USERS.users['${ARGUMENTS[0]}'].homepage}
  175 + Wait Until Page Contains Element xpath=//div[@class="search-field"]/input 20
  176 +# ${ARGUMENTS[1]}= Convert To String UA-2015-06-08-000023
  177 + Input text xpath=//div[@class="search-field"]/input ${ARGUMENTS[1]}
  178 + : FOR ${INDEX} IN RANGE 1 30
  179 + \ Log To Console . no_newline=true
  180 +# \ sleep 1
  181 + \ ${count}= Get Matching Xpath Count xpath=//a[@class="row tender-info ng-scope"]
  182 + \ Exit For Loop If '${count}' == '1'
  183 + Click Element xpath=//a[@class="row tender-info ng-scope"]
  184 + Wait Until Page Contains Element xpath=//a[@class="ng-binding ng-scope"] 30
  185 + ${fould_title}= Get Text xpath=//a[@class="ng-binding ng-scope"]
  186 + Should Be Equal ${fould_title} ${ARGUMENTS[1]}
@@ -7,28 +7,46 @@ ${item_id} 0 @@ -7,28 +7,46 @@ ${item_id} 0
7 ${question_id} 0 7 ${question_id} 0
8 8
9 *** Keywords *** 9 *** Keywords ***
  10 +отримати internal id по UAid
  11 + [Arguments] @{ARGUMENTS}
  12 + [Documentation]
  13 + ... ${ARGUMENTS[0]} == username
  14 + ... ${ARGUMENTS[1]} == tenderid
  15 + log many @{ARGUMENTS}
  16 + ${tenders}= get_internal_id ${USERS.users['${ARGUMENTS[0]}'].client.get_tenders} ${USERS.users['${ARGUMENTS[0]}'].creation_date}
  17 + :FOR ${tender} IN @{tenders}
  18 + \ log ${tender}
  19 + \ ${internal_id}= Run Keyword And Return If '${tender.tenderID}' == '${ARGUMENTS[1]}' Get Variable Value ${tender.id}
  20 + \ Exit For Loop If '${tender.tenderID}' == '${ARGUMENTS[1]}'
  21 + log ${internal_id}
  22 + log ${tenders}
  23 + [return] ${internal_id}
  24 +
  25 +
10 Підготувати клієнт для користувача 26 Підготувати клієнт для користувача
11 [Arguments] @{ARGUMENTS} 27 [Arguments] @{ARGUMENTS}
12 [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо 28 [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо
13 - ${api_wrapper}= prepare_api_wrapper ${USERS.users['${ARGUMENTS[0]}'].api_key} ${API_HOST_URL} ${api_version} 29 + ${api_wrapper}= prepare_api_wrapper ${USERS.users['${ARGUMENTS[0]}'].api_key} ${API_HOST_URL} ${api_version}
  30 + ${creation_date} = get_date
  31 + Set To Dictionary ${USERS.users['${ARGUMENTS[0]}']} creation_date ${creation_date}
14 Set To Dictionary ${USERS.users['${ARGUMENTS[0]}']} client ${api_wrapper} 32 Set To Dictionary ${USERS.users['${ARGUMENTS[0]}']} client ${api_wrapper}
15 Log Variables 33 Log Variables
16 -  
17 -Підготувати дані для оголошення тендера 34 +
  35 +Підготувати дані для оголошення тендера
18 ${INITIAL_TENDER_DATA}= prepare_test_tender_data 36 ${INITIAL_TENDER_DATA}= prepare_test_tender_data
19 [return] ${INITIAL_TENDER_DATA} 37 [return] ${INITIAL_TENDER_DATA}
20 - 38 +
21 Створити тендер 39 Створити тендер
22 [Arguments] @{ARGUMENTS} 40 [Arguments] @{ARGUMENTS}
23 ${TENDER_DATA}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} create_tender ${ARGUMENTS[1]} 41 ${TENDER_DATA}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} create_tender ${ARGUMENTS[1]}
24 Log object data ${TENDER_DATA} cteated_tender 42 Log object data ${TENDER_DATA} cteated_tender
25 ${access_token}= Get Variable Value ${TENDER_DATA.access.token} 43 ${access_token}= Get Variable Value ${TENDER_DATA.access.token}
26 - Set Global Variable ${access_token}  
27 Set To Dictionary ${USERS.users['${ARGUMENTS[0]}']} access_token ${access_token} 44 Set To Dictionary ${USERS.users['${ARGUMENTS[0]}']} access_token ${access_token}
28 - Log access_token: ${access_token}  
29 - Log tender_id: ${TENDER_DATA.data.id}  
30 - Set Global Variable ${TENDER_DATA}  
31 - [return] ${TENDER_DATA.data.tenderID} ${TENDER_DATA.data.id} 45 + Set To Dictionary ${USERS.users['${ARGUMENTS[0]}']} TENDER_DATA ${TENDER_DATA}
  46 + Log ${access_token}
  47 + Log ${TENDER_DATA.data.id}
  48 + Log ${USERS.users['${ARGUMENTS[0]}'].TENDER_DATA}
  49 + [return] ${TENDER_DATA.data.tenderID}
32 50
33 Створити багатопредметний тендер 51 Створити багатопредметний тендер
34 [Arguments] @{ARGUMENTS} 52 [Arguments] @{ARGUMENTS}
@@ -43,27 +61,24 @@ ${question_id} 0 @@ -43,27 +61,24 @@ ${question_id} 0
43 Log tender_id: ${TENDER_DATA.data.id} 61 Log tender_id: ${TENDER_DATA.data.id}
44 Set Global Variable ${TENDER_DATA} 62 Set Global Variable ${TENDER_DATA}
45 [return] ${TENDER_DATA} 63 [return] ${TENDER_DATA}
46 - 64 +
47 Пошук тендера по ідентифікатору 65 Пошук тендера по ідентифікатору
48 [Arguments] @{ARGUMENTS} 66 [Arguments] @{ARGUMENTS}
49 [Documentation] 67 [Documentation]
50 ... ${ARGUMENTS[0]} == username 68 ... ${ARGUMENTS[0]} == username
51 ... ${ARGUMENTS[1]} == tenderId 69 ... ${ARGUMENTS[1]} == tenderId
52 - ... ${ARGUMENTS[2]} == id  
53 - ${tender_data}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${ARGUMENTS[2]} 70 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  71 + ${tender_data}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${internalid}
54 Set To Dictionary ${USERS.users['${ARGUMENTS[0]}']} tender_data ${tender_data} 72 Set To Dictionary ${USERS.users['${ARGUMENTS[0]}']} tender_data ${tender_data}
55 [return] ${tender_data} 73 [return] ${tender_data}
56 74
57 -  
58 Обновити сторінку з тендером 75 Обновити сторінку з тендером
59 [Arguments] @{ARGUMENTS} 76 [Arguments] @{ARGUMENTS}
60 [Documentation] 77 [Documentation]
61 ... ${ARGUMENTS[0]} == username 78 ... ${ARGUMENTS[0]} == username
62 ... ${ARGUMENTS[1]} == tenderId 79 ... ${ARGUMENTS[1]} == tenderId
63 - ... ${ARGUMENTS[2]} == id  
64 openprocurement_client.Пошук тендера по ідентифікатору @{ARGUMENTS} 80 openprocurement_client.Пошук тендера по ідентифікатору @{ARGUMENTS}
65 81
66 -  
67 отримати інформацію із тендера 82 отримати інформацію із тендера
68 [Arguments] @{ARGUMENTS} 83 [Arguments] @{ARGUMENTS}
69 [Documentation] 84 [Documentation]
@@ -74,7 +89,6 @@ ${question_id} 0 @@ -74,7 +89,6 @@ ${question_id} 0
74 log ${field_value} 89 log ${field_value}
75 [return] ${field_value} 90 [return] ${field_value}
76 91
77 -  
78 Внести зміни в тендер 92 Внести зміни в тендер
79 [Arguments] @{ARGUMENTS} 93 [Arguments] @{ARGUMENTS}
80 [Documentation] 94 [Documentation]
@@ -82,11 +96,11 @@ ${question_id} 0 @@ -82,11 +96,11 @@ ${question_id} 0
82 ... ${ARGUMENTS[1]} == id 96 ... ${ARGUMENTS[1]} == id
83 ... ${ARGUMENTS[2]} == fieldname 97 ... ${ARGUMENTS[2]} == fieldname
84 ... ${ARGUMENTS[3]} == fieldvalue 98 ... ${ARGUMENTS[3]} == fieldvalue
85 - отримати тендер ${ARGUMENTS[0]} ${ARGUMENTS[1]} 99 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  100 + отримати тендер ${ARGUMENTS[0]} ${internalid}
86 Set_To_Object ${TENDER_DATA.data} ${ARGUMENTS[2]} ${ARGUMENTS[3]} 101 Set_To_Object ${TENDER_DATA.data} ${ARGUMENTS[2]} ${ARGUMENTS[3]}
87 ${TENDER_DATA}= set_access_key ${TENDER_DATA} ${USERS.users['${ARGUMENTS[0]}'].access_token} 102 ${TENDER_DATA}= set_access_key ${TENDER_DATA} ${USERS.users['${ARGUMENTS[0]}'].access_token}
88 ${TENDER_DATA}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_tender ${TENDER_DATA} 103 ${TENDER_DATA}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_tender ${TENDER_DATA}
89 -  
90 Set Global Variable ${TENDER_DATA} 104 Set Global Variable ${TENDER_DATA}
91 105
92 отримати тендер 106 отримати тендер
@@ -105,7 +119,8 @@ ${question_id} 0 @@ -105,7 +119,8 @@ ${question_id} 0
105 ... ${ARGUMENTS[0]} == username 119 ... ${ARGUMENTS[0]} == username
106 ... ${ARGUMENTS[1]} == id 120 ... ${ARGUMENTS[1]} == id
107 ... ${ARGUMENTS[2]} == number 121 ... ${ARGUMENTS[2]} == number
108 - отримати тендер ${ARGUMENTS[0]} ${ARGUMENTS[1]} 122 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  123 + отримати тендер ${ARGUMENTS[0]} ${internalid}
109 ${items}= get from object ${TENDER_DATA.data} items 124 ${items}= get from object ${TENDER_DATA.data} items
110 log ${items} 125 log ${items}
111 :FOR ${INDEX} IN RANGE ${ARGUMENTS[2]} 126 :FOR ${INDEX} IN RANGE ${ARGUMENTS[2]}
@@ -121,7 +136,8 @@ ${question_id} 0 @@ -121,7 +136,8 @@ ${question_id} 0
121 ... ${ARGUMENTS[0]} == username 136 ... ${ARGUMENTS[0]} == username
122 ... ${ARGUMENTS[1]} == id 137 ... ${ARGUMENTS[1]} == id
123 ... ${ARGUMENTS[2]} == number 138 ... ${ARGUMENTS[2]} == number
124 - отримати тендер ${ARGUMENTS[0]} ${ARGUMENTS[1]} 139 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  140 + отримати тендер ${ARGUMENTS[0]} ${internalid}
125 ${items}= get from object ${TENDER_DATA.data} items 141 ${items}= get from object ${TENDER_DATA.data} items
126 ${item}= get variable value ${items[1]} 142 ${item}= get variable value ${items[1]}
127 log ${items} 143 log ${items}
@@ -131,20 +147,21 @@ ${question_id} 0 @@ -131,20 +147,21 @@ ${question_id} 0
131 Set_To_Object ${TENDER_DATA.data} items ${items} 147 Set_To_Object ${TENDER_DATA.data} items ${items}
132 ${TENDER_DATA}= set_access_key ${TENDER_DATA} ${USERS.users['${ARGUMENTS[0]}'].access_token} 148 ${TENDER_DATA}= set_access_key ${TENDER_DATA} ${USERS.users['${ARGUMENTS[0]}'].access_token}
133 ${TENDER_DATA}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_tender ${TENDER_DATA} 149 ${TENDER_DATA}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_tender ${TENDER_DATA}
134 - 150 +
135 151
136 Задати питання 152 Задати питання
137 [Documentation] 153 [Documentation]
138 ... ${ARGUMENTS[0]} == username 154 ... ${ARGUMENTS[0]} == username
139 ... ${ARGUMENTS[1]} == tender_uid 155 ... ${ARGUMENTS[1]} == tender_uid
140 - ... ${ARGUMENTS[2]} == bid 156 + ... ${ARGUMENTS[2]} == question
141 [Arguments] @{ARGUMENTS} 157 [Arguments] @{ARGUMENTS}
142 log many @{ARGUMENTS} 158 log many @{ARGUMENTS}
143 - ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${ARGUMENTS[1]} 159 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  160 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${internalid}
144 log ${USERS.users['${ARGUMENTS[0]}']} 161 log ${USERS.users['${ARGUMENTS[0]}']}
145 ${biddingresponce}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} create_question ${tender} ${ARGUMENTS[2]} 162 ${biddingresponce}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} create_question ${tender} ${ARGUMENTS[2]}
146 [return] ${biddingresponce} 163 [return] ${biddingresponce}
147 - 164 +
148 Відповісти на питання 165 Відповісти на питання
149 [Documentation] 166 [Documentation]
150 ... ${ARGUMENTS[0]} == username 167 ... ${ARGUMENTS[0]} == username
@@ -153,7 +170,8 @@ ${question_id} 0 @@ -153,7 +170,8 @@ ${question_id} 0
153 ... ${ARGUMENTS[3]} == answer_data 170 ... ${ARGUMENTS[3]} == answer_data
154 [Arguments] @{ARGUMENTS} 171 [Arguments] @{ARGUMENTS}
155 log many @{ARGUMENTS} 172 log many @{ARGUMENTS}
156 - ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${ARGUMENTS[1]} 173 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  174 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${internalid}
157 log many ${USERS.users['${ARGUMENTS[0]}']} 175 log many ${USERS.users['${ARGUMENTS[0]}']}
158 ${tender}= set_access_key ${tender} ${USERS.users['${ARGUMENTS[0]}'].access_token} 176 ${tender}= set_access_key ${tender} ${USERS.users['${ARGUMENTS[0]}'].access_token}
159 ${ARGUMENTS[3].data.id}= Set Variable ${tender.data.questions[${ARGUMENTS[2]}].id} 177 ${ARGUMENTS[3].data.id}= Set Variable ${tender.data.questions[${ARGUMENTS[2]}].id}
@@ -168,27 +186,28 @@ ${question_id} 0 @@ -168,27 +186,28 @@ ${question_id} 0
168 ... ${ARGUMENTS[2]} == complaint 186 ... ${ARGUMENTS[2]} == complaint
169 [Arguments] @{ARGUMENTS} 187 [Arguments] @{ARGUMENTS}
170 log many @{ARGUMENTS} 188 log many @{ARGUMENTS}
171 - ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${ARGUMENTS[1]} 189 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  190 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${internalid}
172 ${complaint}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} _create_tender_resource_item ${tender} ${ARGUMENTS[2]} complaints 191 ${complaint}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} _create_tender_resource_item ${tender} ${ARGUMENTS[2]} complaints
173 Log object data ${complaint} complaint 192 Log object data ${complaint} complaint
174 -  
175 -порівняти скаргу 193 +
  194 +порівняти скаргу
176 [Documentation] 195 [Documentation]
177 ... ${ARGUMENTS[0]} == username 196 ... ${ARGUMENTS[0]} == username
178 ... ${ARGUMENTS[1]} == tender_uid 197 ... ${ARGUMENTS[1]} == tender_uid
179 ... ${ARGUMENTS[2]} == complaint 198 ... ${ARGUMENTS[2]} == complaint
180 [Arguments] @{ARGUMENTS} 199 [Arguments] @{ARGUMENTS}
181 - ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${ARGUMENTS[1]}  
182 - ${complaint}= Get Variable Value ${tender.data.complaints[0]} 200 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  201 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${internalid}
  202 + ${complaint}= Get Variable Value ${tender.data.complaints[0]}
183 log ${complaint} 203 log ${complaint}
184 log ${ARGUMENTS[2]} 204 log ${ARGUMENTS[2]}
185 - #TODO: COMPARE 205 + #TODO: COMPARE
186 #Dictionary Should Contain Sub Dictionary ${complaint} ${ARGUMENTS[2].data} 206 #Dictionary Should Contain Sub Dictionary ${complaint} ${ARGUMENTS[2].data}
187 #:FOR ${element} IN ${ARGUMENTS[2].data} 207 #:FOR ${element} IN ${ARGUMENTS[2].data}
188 #\ log ${element} 208 #\ log ${element}
189 #\ Dictionary Should Contain Value ${complaint} ${element} 209 #\ Dictionary Should Contain Value ${complaint} ${element}
190 -  
191 - 210 +
192 Обробити скаргу 211 Обробити скаргу
193 [Documentation] 212 [Documentation]
194 ... ${ARGUMENTS[0]} == username 213 ... ${ARGUMENTS[0]} == username
@@ -197,14 +216,13 @@ ${question_id} 0 @@ -197,14 +216,13 @@ ${question_id} 0
197 ... ${ARGUMENTS[3]} == answer_data 216 ... ${ARGUMENTS[3]} == answer_data
198 [Arguments] @{ARGUMENTS} 217 [Arguments] @{ARGUMENTS}
199 log many @{ARGUMENTS} 218 log many @{ARGUMENTS}
200 - ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${ARGUMENTS[1]} 219 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  220 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${internalid}
201 ${tender}= set_access_key ${tender} ${USERS.users['${ARGUMENTS[0]}'].access_token} 221 ${tender}= set_access_key ${tender} ${USERS.users['${ARGUMENTS[0]}'].access_token}
202 ${ARGUMENTS[3].data.id}= Set Variable ${tender.data.complaints[${ARGUMENTS[2]}].id} 222 ${ARGUMENTS[3].data.id}= Set Variable ${tender.data.complaints[${ARGUMENTS[2]}].id}
203 ${complaint_with_answer}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} _patch_tender_resource_item ${tender} ${ARGUMENTS[3]} complaints 223 ${complaint_with_answer}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} _patch_tender_resource_item ${tender} ${ARGUMENTS[3]} complaints
204 log many ${USERS.users['${ARGUMENTS[0]}'].client} ${tender} ${ARGUMENTS[3]} 224 log many ${USERS.users['${ARGUMENTS[0]}'].client} ${tender} ${ARGUMENTS[3]}
205 Log object data ${complaint_with_answer} complaint_with_answer 225 Log object data ${complaint_with_answer} complaint_with_answer
206 -  
207 -  
208 226
209 Подати цінову пропозицію 227 Подати цінову пропозицію
210 [Documentation] 228 [Documentation]
@@ -213,18 +231,20 @@ ${question_id} 0 @@ -213,18 +231,20 @@ ${question_id} 0
213 ... ${ARGUMENTS[2]} == bid 231 ... ${ARGUMENTS[2]} == bid
214 [Arguments] @{ARGUMENTS} 232 [Arguments] @{ARGUMENTS}
215 log many @{ARGUMENTS} 233 log many @{ARGUMENTS}
216 - ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${ARGUMENTS[1]}  
217 - log ${tender} 234 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  235 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${internalid}
  236 + log ${tender}отримати
218 ${biddingresponce}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} create_bid ${tender} ${ARGUMENTS[2]} 237 ${biddingresponce}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} create_bid ${tender} ${ARGUMENTS[2]}
219 [return] ${biddingresponce} 238 [return] ${biddingresponce}
220 - 239 +
221 Змінити цінову пропозицію 240 Змінити цінову пропозицію
222 [Documentation] 241 [Documentation]
223 ... ${ARGUMENTS[0]} == username 242 ... ${ARGUMENTS[0]} == username
224 ... ${ARGUMENTS[1]} == tender_uid 243 ... ${ARGUMENTS[1]} == tender_uid
225 ... ${ARGUMENTS[2]} == bid 244 ... ${ARGUMENTS[2]} == bid
226 [Arguments] @{ARGUMENTS} 245 [Arguments] @{ARGUMENTS}
227 - ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${ARGUMENTS[1]} 246 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  247 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${internalid}
228 ${changed_bid}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_bid ${tender} ${ARGUMENTS[2]} 248 ${changed_bid}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_bid ${tender} ${ARGUMENTS[2]}
229 Log ${changed_bid} 249 Log ${changed_bid}
230 [return] ${changed_bid} 250 [return] ${changed_bid}
@@ -235,71 +255,110 @@ ${question_id} 0 @@ -235,71 +255,110 @@ ${question_id} 0
235 ... ${ARGUMENTS[1]} == tender_uid 255 ... ${ARGUMENTS[1]} == tender_uid
236 ... ${ARGUMENTS[2]} == bid 256 ... ${ARGUMENTS[2]} == bid
237 [Arguments] @{ARGUMENTS} 257 [Arguments] @{ARGUMENTS}
238 - ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${ARGUMENTS[1]} 258 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  259 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${internalid}
239 log ${tender} 260 log ${tender}
240 - log ${ARGUMENTS[2]} 261 + log ${ARGUMENTS[2]}отримати
241 ${changed_bid}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} delete_bid ${tender} ${ARGUMENTS[2]} 262 ${changed_bid}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} delete_bid ${tender} ${ARGUMENTS[2]}
242 Log ${changed_bid} 263 Log ${changed_bid}
243 [return] ${changed_bid} 264 [return] ${changed_bid}
244 - 265 +
245 Прийняти цінову пропозицію 266 Прийняти цінову пропозицію
246 [Documentation] 267 [Documentation]
247 ... ${ARGUMENTS[0]} == username 268 ... ${ARGUMENTS[0]} == username
248 ... ${ARGUMENTS[1]} == tender_uid 269 ... ${ARGUMENTS[1]} == tender_uid
249 ... ${ARGUMENTS[2]} == award 270 ... ${ARGUMENTS[2]} == award
250 [Arguments] @{ARGUMENTS} 271 [Arguments] @{ARGUMENTS}
251 - ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${ARGUMENTS[1]} 272 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  273 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${internalid}
252 ${tender}= set_access_key ${tender} ${USERS.users['${ARGUMENTS[0]}'].access_token} 274 ${tender}= set_access_key ${tender} ${USERS.users['${ARGUMENTS[0]}'].access_token}
253 ${award_activeted_response}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_award ${tender} ${ARGUMENTS[2]} 275 ${award_activeted_response}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_award ${tender} ${ARGUMENTS[2]}
254 Log ${award_activeted_response} 276 Log ${award_activeted_response}
255 [return] ${award_activeted_response} 277 [return] ${award_activeted_response}
256 278
257 -  
258 Завантажити документ в ставку 279 Завантажити документ в ставку
259 [Documentation] 280 [Documentation]
260 ... ${ARGUMENTS[0]} == username 281 ... ${ARGUMENTS[0]} == username
261 - ... ${ARGUMENTS[1]} == token  
262 - ... ${ARGUMENTS[2]} == bid_id 282 + ... ${ARGUMENTS[1]} == path
  283 + ... ${ARGUMENTS[2]} == tenderid
263 [Arguments] @{ARGUMENTS} 284 [Arguments] @{ARGUMENTS}
264 log ${ARGUMENTS[0]} 285 log ${ARGUMENTS[0]}
265 log ${ARGUMENTS[1]} 286 log ${ARGUMENTS[1]}
266 - ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${TENDER_DATA.data.id}  
267 - ${tender}= set_access_key ${tender} ${ARGUMENTS[1]}  
268 - ${filename}= Set Variable file.txt  
269 - Set_To_Object ${TENDER_DATA.data} documents.title ${filename}  
270 - ${reply}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} upload_bid_document ${filename} ${tender} ${ARGUMENTS[2]}  
271 - Log object data ${reply} reply  
272 - [return] ${reply}  
273 - 287 + log ${ARGUMENTS[2]}
  288 + ${bid_id}= Get Variable Value ${USERS.users['${ARGUMENTS[0]}'].bidresponces['resp'].data.id}
  289 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[2]}
  290 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${internalid}
  291 + ${tender}= set_access_key ${tender} ${USERS.users['${ARGUMENTS[0]}'].bidresponces['resp'].access.token}
  292 + ${responce}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} upload_bid_document ${ARGUMENTS[1]} ${tender} ${bid_id}
  293 + ${uploaded_file} = Create Dictionary filepath ${ARGUMENTS[1]} upload_responce ${responce}
  294 + log ${responce}
  295 + Log object data ${uploaded_file}
  296 + [return] ${uploaded_file}
  297 +
274 Змінити документ в ставці 298 Змінити документ в ставці
275 [Documentation] 299 [Documentation]
276 ... ${ARGUMENTS[0]} == username 300 ... ${ARGUMENTS[0]} == username
277 - ... ${ARGUMENTS[1]} == token  
278 - ... ${ARGUMENTS[2]} == bid_id  
279 - ... ${ARGUMENTS[3]} == file_id 301 + ... ${ARGUMENTS[1]} == path
  302 + ... ${ARGUMENTS[2]} == bidid
  303 + ... ${ARGUMENTS[3]} == docid
280 [Arguments] @{ARGUMENTS} 304 [Arguments] @{ARGUMENTS}
281 log ${ARGUMENTS[0]} 305 log ${ARGUMENTS[0]}
282 log ${ARGUMENTS[1]} 306 log ${ARGUMENTS[1]}
283 log ${ARGUMENTS[2]} 307 log ${ARGUMENTS[2]}
284 - log ${ARGUMENTS[3]}  
285 - ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${TENDER_DATA.data.id}  
286 - ${tender}= set_access_key ${tender} ${ARGUMENTS[1]}  
287 - ${filename}= Set Variable newfile.txt  
288 - Set_To_Object ${TENDER_DATA.data} documents.title ${filename}  
289 - ${reply}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} update_bid_document ${filename} ${tender} ${ARGUMENTS[2]} ${ARGUMENTS[3]}  
290 - Log object data ${reply} reply 308 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${TENDER['TENDER_UAID']}
  309 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${internalid}
  310 + ${tender}= set_access_key ${tender} ${USERS.users['${ARGUMENTS[0]}'].bidresponces['resp'].access.token}
  311 + ${responce}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} update_bid_document ${ARGUMENTS[1]} ${tender} ${ARGUMENTS[2]} ${ARGUMENTS[3]}
  312 + ${uploaded_file} = Create Dictionary filepath ${ARGUMENTS[1]} upload_responce ${responce}
  313 + log ${responce}
  314 + Log object data ${uploaded_file}
  315 + [return] ${uploaded_file}
  316 +
  317 +
  318 +
291 319
292 Завантажити документ 320 Завантажити документ
293 [Documentation] 321 [Documentation]
294 ... ${ARGUMENTS[0]} == username 322 ... ${ARGUMENTS[0]} == username
295 - ... ${ARGUMENTS[1]} == token 323 + ... ${ARGUMENTS[1]} == filepath
  324 + ... ${ARGUMENTS[2]} == tenderUAID
296 [Arguments] @{ARGUMENTS} 325 [Arguments] @{ARGUMENTS}
297 log ${ARGUMENTS[0]} 326 log ${ARGUMENTS[0]}
298 log ${ARGUMENTS[1]} 327 log ${ARGUMENTS[1]}
299 - ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${TENDER_DATA.data.id}  
300 - ${tender}= set_access_key ${tender} ${ARGUMENTS[1]}  
301 - ${filename}= Set Variable file.txt  
302 - Set_To_Object ${TENDER_DATA.data} documents.title ${filename}  
303 - ${reply}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} upload_tender_document ${filename} ${tender} 328 + log ${ARGUMENTS[2]}
  329 + ${tenderID}= openprocurement_client.отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[2]}
  330 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${tenderID}
  331 + ${tender}= set_access_key ${tender} ${USERS.users['${ARGUMENTS[0]}'].access_token}
  332 + ${reply}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} upload_document ${tender} ${ARGUMENTS[1]}
304 Log object data ${reply} reply 333 Log object data ${reply} reply
305 -  
  334 + [return] ${reply}
  335 +
  336 +Отримати пропозиції
  337 + [Documentation]
  338 + ... ${ARGUMENTS[0]} == username
  339 + ... ${ARGUMENTS[1]} == tender_uid
  340 + ... ${ARGUMENTS[2]} == bid_id
  341 + ... ${ARGUMENTS[3]} == token
  342 + [Arguments] @{ARGUMENTS}
  343 + ${internalid}= отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  344 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${internalid}
  345 + ${bids}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_bid ${tender} ${ARGUMENTS[2]} ${ARGUMENTS[3]}
  346 + Log ${bids}
  347 + [return] ${bids}
  348 +
  349 +отримати документ
  350 + [Documentation]
  351 + ... ${ARGUMENTS[0]} == username
  352 + ... ${ARGUMENTS[1]} == tenderUaID
  353 + ... ${ARGUMENTS[2]} == url
  354 + [Arguments] @{ARGUMENTS}
  355 + log ${ARGUMENTS[0]}
  356 + log ${ARGUMENTS[1]}
  357 + log ${ARGUMENTS[2]}
  358 + ${tenderID}= openprocurement_client.отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  359 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${tenderID}
  360 + ${token}= Get Variable Value ${USERS.users['${ARGUMENTS[0]}'].bidresponces['resp'].access.token}
  361 + ${contents} ${filename}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_file ${tender} ${ARGUMENTS[2]} ${ARGUMENTS[3]}
  362 + log ${contents}
  363 + log ${filename}
  364 + [return] ${contents} ${filename}
1 from openprocurement_client.client import Client 1 from openprocurement_client.client import Client
  2 +import sys
2 3
3 -  
4 -def prepare_api_wrapper(key='', host_url="https://api-sandbox.openprocurement.org", api_version='0.7' ): 4 +def prepare_api_wrapper(key='', host_url="https://api-sandbox.openprocurement.org", api_version='0.8' ):
5 return Client(key, host_url, api_version ) 5 return Client(key, host_url, api_version )
  6 +
  7 +def get_internal_id(get_tenders_function, date):
  8 + result = get_tenders_function({"offset": date, "opt_fields": 'tenderID', })
  9 + #import pdb; pdb.Pdb(stdout=sys.__stdout__).set_trace()
  10 + return result
@@ -3,14 +3,154 @@ Library Selenium2Screenshots @@ -3,14 +3,154 @@ Library Selenium2Screenshots
3 Library String 3 Library String
4 Library DateTime 4 Library DateTime
5 5
  6 +*** Variables ***
  7 +${mail} test@mail.com
  8 +${telephone} +380976535447
  9 +
  10 +
6 *** Keywords *** 11 *** Keywords ***
7 Підготувати клієнт для користувача 12 Підготувати клієнт для користувача
8 - [Arguments] ${username} 13 + [Arguments] @{ARGUMENTS}
9 [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо 14 [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо
10 - Open Browser ${BROKERS['${USERS.users['${username}'].broker}'].url} ${USERS.users['${username}'].browser} alias=${username}  
11 - Set Window Position @{USERS.users['${username}'].position}  
12 - Set Window Size @{USERS.users['${username}'].size}  
13 - Log Variables 15 + ... ${ARGUMENTS[0]} == username
  16 + Open Browser ${USERS.users['${ARGUMENTS[0]}'].homepage} ${USERS.users['${username}'].browser} alias=${ARGUMENTS[0]}
  17 + Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size}
  18 + Set Window Position @{USERS.users['${ARGUMENTS[0]}'].position}
  19 +
  20 +# login
  21 + Run Keyword And Ignore Error Wait Until Page Contains Element id=mForm:j_idt54 10
  22 + Click Element id=mForm:j_idt54
  23 + Run Keyword And Ignore Error Wait Until Page Contains Element id=mForm:email 10
  24 + Input text id=mForm:email ${USERS.users['${username}'].login}
  25 + Sleep 2
  26 + Input text id=mForm:pwd ${USERS.users['${username}'].password}
  27 + Click Button id=mForm:login
  28 +
  29 +Створити тендер
  30 + [Arguments] @{ARGUMENTS}
  31 + [Documentation]
  32 + ... ${ARGUMENTS[0]} == username
  33 + ... ${ARGUMENTS[1]} == tender_data
  34 + ${file_path}= local_path_to_file TestDocument.docx
  35 + ${prepared_tender_data}= Add_data_for_GUI_FrontEnds ${ARGUMENTS[1]}
  36 + ${items}= Get From Dictionary ${prepared_tender_data.data} items
  37 + ${title}= Get From Dictionary ${prepared_tender_data.data} title
  38 + ${description}= Get From Dictionary ${prepared_tender_data.data} description
  39 + ${budget}= Get From Dictionary ${prepared_tender_data.data.value} amount
  40 + ${step_rate}= Get From Dictionary ${prepared_tender_data.data.minimalStep} amount
  41 + ${countryName}= Get From Dictionary ${prepared_tender_data.data.procuringEntity.address} countryName
  42 + ${delivery_end_date}= Get From Dictionary ${items[0].deliveryDate} endDate
  43 + ${delivery_end_date}= convert_date_to_prom_format ${delivery_end_date}
  44 + ${cpv}= Convert To String "Картонки"
  45 + ${cpv_id}= Get From Dictionary ${items[0].classification} id
  46 + ${cpv_id_1}= Get Substring ${cpv_id} 0 3
  47 + ${dkpp_desc}= Get From Dictionary ${items[0].additionalClassifications[0]} description
  48 + ${dkpp_id}= Get From Dictionary ${items[0].additionalClassifications[0]} id
  49 + ${code}= Get From Dictionary ${items[0].unit} code
  50 + ${quantity}= Get From Dictionary ${items[0]} quantity
  51 + ${name}= Get From Dictionary ${prepared_tender_data.data.procuringEntity.contactPoint} name
  52 +
  53 + Selenium2Library.Switch Browser ${ARGUMENTS[0]}
  54 + Wait Until Page Contains Element xpath=//*[contains(@class, 'ui-button-text ui-c')][./text()='Нова закупівля'] 10
  55 + Click Element xpath=//*[contains(@class, 'ui-button-text ui-c')][./text()='Нова закупівля']
  56 + Wait Until Page Contains Element id=mForm:data:name
  57 + Input text id=mForm:data:name ${title}
  58 + Input text id=mForm:data:desc ${description}
  59 + Input text id=mForm:data:budget ${budget}
  60 + Input text id=mForm:data:step ${step_rate}
  61 + Click Element xpath=//*[@id='mForm:data:vat']/tbody/tr/td[1]//span
  62 + Input text id=mForm:data:dEPr_input ${delivery_end_date}
  63 + Click Element id=mForm:data:cKind_label
  64 + Click Element xpath=//div[@id='mForm:data:cKind_panel']//li[3]
  65 + Input text id=mForm:data:cCpvGr_input ${cpv_id_1}
  66 + Wait Until Page Contains Element xpath=.//*[@id='mForm:data:cCpvGr_panel']/table/tbody/tr/td[2]/span 10
  67 + Click Element xpath=.//*[@id='mForm:data:cCpvGr_panel']/table/tbody/tr/td[2]/span
  68 + Input text id=mForm:data:subject0 ${dkpp_desc}
  69 + Input text id=mForm:data:cCpv0_input ${cpv_id}
  70 + Wait Until Page Contains Element xpath=//div[@id='mForm:data:cCpv0_panel']//td[1]/span 10
  71 + Click Element xpath=//div[@id='mForm:data:cCpv0_panel']//td[1]/span
  72 + Input text id=mForm:data:unit0_input ${code}
  73 + Wait Until Page Contains Element xpath=//div[@id='mForm:data:unit0_panel']//tr/td[1] 10
  74 + Click Element xpath=//div[@id='mForm:data:unit0_panel']//tr/td[1]
  75 + Input text id=mForm:data:amount0 ${quantity}
  76 + Input text id=mForm:data:cDkpp0_input ${dkpp_id}
  77 + Wait Until Page Contains Element xpath=//div[@id='mForm:data:cDkpp0_panel']//tr[1]/td[2]/span 10
  78 + Click Element xpath=//div[@id='mForm:data:cDkpp0_panel']//tr[1]/td[2]/span
  79 + Input text id=mForm:data:rName ${name}
  80 + Input text id=mForm:data:rPhone ${telephone}
  81 + Input text id=mForm:data:rMail ${mail}
  82 + Choose File id=mForm:data:docFile_input ${file_path}
  83 + Sleep 2
  84 + Run Keyword if '${mode}' == 'multi' Додати предмет items
  85 + Click Element id=mForm:bSave
  86 + # More smart wait for id is needed there.
  87 + Sleep 25
  88 + ${tender_UAid}= Get Text id=mForm:nBid
  89 + ${tender_UAid}= Get Substring ${tender_UAid} 19
  90 + ${Ids} Convert To String ${tender_UAid}
  91 + Run keyword if '${mode}' == 'multi' Set Multi Ids ${tender_UAid}
  92 + [return] ${Ids}
  93 +
  94 +Set Multi Ids
  95 + [Arguments] @{ARGUMENTS}
  96 + [Documentation]
  97 + ... ${ARGUMENTS[0]} == ${tender_UAid}
  98 + ${id}= Get Text id=mForm:nBid
  99 + ${Ids} Create List ${tender_UAid} ${id}
  100 +
  101 +Додати предмет
  102 + [Arguments] @{ARGUMENTS}
  103 + [Documentation]
  104 + ... ${ARGUMENTS[0]} == items
  105 + ${dkpp_desc1}= Get From Dictionary ${items[1].additionalClassifications[0]} description
  106 + ${dkpp_id11}= Get From Dictionary ${items[1].additionalClassifications[0]} id
  107 + ${dkpp_desc2}= Get From Dictionary ${items[2].additionalClassifications[0]} description
  108 + ${dkpp_id2}= Get From Dictionary ${items[2].additionalClassifications[0]} id
  109 + ${dkpp_desc3}= Get From Dictionary ${items[3].additionalClassifications[0]} description
  110 + ${dkpp_id3}= Get From Dictionary ${items[3].additionalClassifications[0]} id
  111 +
  112 + Wait Until Page Contains Element xpath=//button[@class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"] 10
  113 + Wait Until Page Contains Element xpath=//button[contains(@class, 'ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only')] 10
  114 + Wait Until Page Contains Element xpath=//button[@id="mForm:data:j_idt911"]|//button[@id="mForm:data:j_idt726"] 10
  115 + Click Element xpath=//button[@id="mForm:data:j_idt911"]|//button[@id="mForm:data:j_idt726"]
  116 + Wait Until Page Contains Element id=mForm:data:subject1 10
  117 + Input text id=mForm:data:subject1 ${dkpp_desc1}
  118 + Input text id=mForm:data:cCpv1_input ${cpv_id}
  119 + Wait Until Page Contains Element xpath=//div[@id='mForm:data:cCpv1_panel']/table/tbody/tr/td[1]/span 10
  120 + Click Element xpath=//div[@id='mForm:data:cCpv1_panel']/table/tbody/tr/td[1]/span
  121 + Input text id=mForm:data:unit1_input ${code}
  122 + Wait Until Page Contains Element xpath=//div[@id='mForm:data:unit1_panel']/table/tbody/tr/td[1] 10
  123 + Click Element xpath=//div[@id='mForm:data:unit1_panel']/table/tbody/tr/td[1]
  124 + Input text id=mForm:data:amount1 ${quantity}
  125 + Input text id=mForm:data:cDkpp1_input ${dkpp_id11}
  126 + Wait Until Page Contains Element xpath=//div[@id='mForm:data:cDkpp1_panel']/table/tbody/tr/td[1]/span 10
  127 + Click Element xpath=//div[@id='mForm:data:cDkpp1_panel']/table/tbody/tr/td[1]/span
  128 + Click Element xpath=//button[@id="mForm:data:j_idt911"]|//button[@id="mForm:data:j_idt726"]
  129 + Wait Until Page Contains Element id=mForm:data:subject2 10
  130 + Input text id=mForm:data:subject2 ${dkpp_desc2}
  131 + Input text id=mForm:data:cCpv2_input ${cpv_id}
  132 + Wait Until Page Contains Element xpath=//div[@id='mForm:data:cCpv2_panel']/table/tbody/tr/td[1]/span 10
  133 + Click Element xpath=//div[@id='mForm:data:cCpv2_panel']/table/tbody/tr/td[1]/span
  134 + Input text id=mForm:data:unit2_input ${code}
  135 + Wait Until Page Contains Element xpath=//div[@id='mForm:data:unit2_panel']/table/tbody/tr/td[1] 10
  136 + Click Element xpath=//div[@id='mForm:data:unit2_panel']/table/tbody/tr/td[1]
  137 + Input text id=mForm:data:amount2 ${quantity}
  138 + Input text id=mForm:data:cDkpp2_input ${dkpp_id2}
  139 + Wait Until Page Contains Element xpath=//div[@id='mForm:data:cDkpp2_panel']/table/tbody/tr/td[1]/span 10
  140 + Click Element xpath=//div[@id='mForm:data:cDkpp2_panel']/table/tbody/tr/td[1]/span
  141 + Click Element xpath=//button[@id="mForm:data:j_idt911"]|//button[@id="mForm:data:j_idt726"]
  142 + Wait Until Page Contains Element id=mForm:data:subject3 10
  143 + Input text id=mForm:data:subject3 ${dkpp_desc3}
  144 + Input text id=mForm:data:cCpv3_input ${cpv_id}
  145 + Wait Until Page Contains Element xpath=//div[@id='mForm:data:cCpv3_panel']/table/tbody/tr/td[1]/span 10
  146 + Click Element xpath=//div[@id='mForm:data:cCpv3_panel']/table/tbody/tr/td[1]/span
  147 + Input text id=mForm:data:unit3_input ${code}
  148 + Wait Until Page Contains Element xpath=//div[@id='mForm:data:unit3_panel']/table/tbody/tr/td[1] 10
  149 + Click Element xpath=//div[@id='mForm:data:unit3_panel']/table/tbody/tr/td[1]
  150 + Input text id=mForm:data:amount3 ${quantity}
  151 + Input text id=mForm:data:cDkpp3_input ${dkpp_id3}
  152 + Wait Until Page Contains Element xpath=//div[@id='mForm:data:cDkpp3_panel']/table/tbody/tr/td[1]/span 10
  153 + Click Element xpath=//div[@id='mForm:data:cDkpp3_panel']/table/tbody/tr/td[1]/span
14 154
15 Пошук тендера по ідентифікатору 155 Пошук тендера по ідентифікатору
16 [Arguments] @{ARGUMENTS} 156 [Arguments] @{ARGUMENTS}
@@ -24,5 +24,20 @@ Publicbid: @@ -24,5 +24,20 @@ Publicbid:
24 period_interval: 2 24 period_interval: 2
25 Netcast: 25 Netcast:
26 keywords_file: netcast 26 keywords_file: netcast
27 - url: http://dz2.byustudio.in.ua 27 + url: "http://dz2.byustudio.in.ua"
  28 + login: admin
  29 + password: uStudio
28 timout_on_wait: 15 30 timout_on_wait: 15
  31 + period_interval: 2
  32 +Netcast:
  33 + keywords_file: netcast
  34 + url: "http://dz2.byustudio.in.ua"
  35 + login: admin
  36 + password: uStudio
  37 + timout_on_wait: 15
  38 + period_interval: 2
  39 +Newtend:
  40 + keywords_file: newtend
  41 + url: http://openprocurement:test@dev23.newtend.com
  42 + timout_on_wait: 15
  43 + period_interval: 2
@@ -2,57 +2,130 @@ users: @@ -2,57 +2,130 @@ users:
2 Tender_Owner: 2 Tender_Owner:
3 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3 3 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3
4 broker: Quinta 4 broker: Quinta
5 - Prom_Owner:  
6 - broker: Prom  
7 - username: Promtest 5 + Tender_Viewer:
  6 + broker: Quinta
  7 + api_key: ""
  8 + Tender_User:
  9 + api_key: e9c3ccb8e8124f26941d5f9639a4ebc3
  10 + broker: Quinta
  11 + Tender_User1:
  12 + api_key: e9c3ccb8e8124f26941d5f9639a4ebc3
  13 + broker: Quinta
  14 + E-tender_Owner:
  15 + broker: E-tender
  16 + username: E-tendertest
  17 + homepage: "http://uat.e-tender.biz/#/profile"
  18 + login: Misha2
  19 + password: Password1
8 browser: chrome 20 browser: chrome
9 position: [0, 0] 21 position: [0, 0]
  22 + size: [800, 800]
  23 + E-tender_Provider1:
  24 + broker: E-tender
  25 + username: E-tendertest
  26 + homepage: "http://uat.e-tender.biz/#/profile"
  27 + login: st_org
  28 + password: 12345678
  29 + browser: chrome
  30 + position: [700, 0]
  31 + size: [700, 800]
  32 + E-tender_Provider2:
  33 + broker: E-tender
  34 + username: E-tendertest
  35 + homepage: "http://uat.e-tender.biz/#/profile"
  36 + login: provider2
  37 + password: Qa123456
  38 + browser: chrome
  39 + position: [700, 0]
10 size: [640, 450] 40 size: [640, 450]
11 E-tender_Viewer: 41 E-tender_Viewer:
12 broker: E-tender 42 broker: E-tender
13 username: E-tendertest 43 username: E-tendertest
  44 + homepage: "http://uat.e-tender.biz/#/profile"
14 browser: chrome 45 browser: chrome
15 position: [0, 0] 46 position: [0, 0]
16 size: [640, 450] 47 size: [640, 450]
17 - Prom_Viewer: 48 + Netcast_Owner:
  49 + broker: Netcast
  50 + username: Netcasttest
  51 + homepage: "http://dz2.byustudio.in.ua"
  52 + login: ovramet.s@gmail.com
  53 + password: Password1
  54 + browser: chrome
  55 + position: [0, 0]
  56 + size: [700, 800]
  57 + Netcast_Provider1:
  58 + broker: Netcast
  59 + username: Netcasttest
  60 + homepage: "http://dz2.byustudio.in.ua"
  61 + login: halyna.khimka@gmail.com
  62 + password: JHO5VUp5n
  63 + browser: chrome
  64 + position: [0, 0]
  65 + size: [600, 800]
  66 + Netcast_Viewer:
  67 + broker: Netcast
  68 + username: Netcasttest
  69 + homepage: "http://dz2.byustudio.in.ua"
  70 + browser: chrome
  71 + #browser: chrome
  72 + position: [0, 0]
  73 + size: [600, 800]
  74 + Newtend_Owner:
  75 + broker: Newtend
  76 + username: Newtendtest
  77 + homepage: "http://dev23.newtend.com/openprocurement/#/home/page/1"
  78 + login: openprocurement@mailinator.com
  79 + password: 123123
  80 + browser: chrome
  81 + position: [0, 0]
  82 + size: [1000, 1100]
  83 + Newtend_Provider1:
  84 + broker: Newtend
  85 + username: Newtendtest
  86 + homepage: "http://dev23.newtend.com/openprocurement/tenders"
  87 + login: openprocboss@mailinator.com
  88 + password: 123123
  89 + browser: chrome
  90 + position: [700, 0]
  91 + size: [800, 700]
  92 + Newtend_Viewer:
  93 + broker: Newtend
  94 + username: Newtendtest
  95 + homepage: "http://dev23.newtend.com/openprocurement/tenders"
  96 + browser: chrome
  97 + position: [0, 0]
  98 + size: [640, 450]
  99 + Prom_Owner:
18 broker: Prom 100 broker: Prom
19 username: Promtest 101 username: Promtest
20 browser: chrome 102 browser: chrome
21 - position: [640, 0] 103 + position: [0, 0]
22 size: [640, 450] 104 size: [640, 450]
23 - SmartTender_Viewer:  
24 - broker: SmartTender  
25 - username: SmartTendertest 105 + Prom_Viewer:
  106 + broker: Prom
  107 + username: Promtest
26 browser: chrome 108 browser: chrome
27 - position: [0, 450] 109 + position: [640, 0]
28 size: [640, 450] 110 size: [640, 450]
  111 + Publicbid_Owner:
  112 + broker: Publicbid
  113 + username: Publicbid
  114 + homepage: "https://public-bid.com.ua/test/"
  115 + login: yaroslav1boyko@gmail.com
  116 + password: Password1
  117 + browser: chrome
  118 + position: [0, 0]
  119 + size: [740, 550]
29 Publicbid_Viewer: 120 Publicbid_Viewer:
30 broker: Publicbid 121 broker: Publicbid
31 username: Publicbid 122 username: Publicbid
32 browser: chrome 123 browser: chrome
33 position: [0, 450] 124 position: [0, 450]
34 - size: [640, 450]  
35 - Netcast_Viewer:  
36 - broker: Netcast  
37 - username: TetcastTest 125 + size: [640, 450]
  126 + SmartTender_Viewer:
  127 + broker: SmartTender
  128 + username: SmartTendertest
38 browser: chrome 129 browser: chrome
39 position: [0, 450] 130 position: [0, 450]
40 - size: [640, 450]  
41 - Tender_Viewer:  
42 - broker: Quinta  
43 - api_key: ""  
44 - Tender_User:  
45 - api_key: e9c3ccb8e8124f26941d5f9639a4ebc3  
46 - broker: Quinta  
47 - Tender_User1:  
48 - api_key: e9c3ccb8e8124f26941d5f9639a4ebc3  
49 - broker: Quinta  
50 - E-tender_Provider1:  
51 - broker: E-tender  
52 - username: E-tendertest  
53 - homepage: "http://uat.e-tender.biz/#/profile"  
54 - login: st_org  
55 - password: 12345678  
56 - browser: firefox  
57 - position: [0, 0]  
58 - size: [640, 450]  
  131 + size: [640, 450]
  1 +from iso8601 import parse_date
  2 +from robot.output import LOGGER
  3 +from robot.output.loggerhelper import Message
  4 +from robot.libraries.BuiltIn import BuiltIn
  5 +from robot.errors import HandlerExecutionFailed
  6 +from datetime import datetime, timedelta, date
  7 +from dateutil.parser import parse
  8 +from dateutil.tz import tzlocal
  9 +from pytz import timezone
  10 +from jsonpath_rw import parse as parse_path
  11 +import time
  12 +from op_robot_tests.tests_files.initial_data import (
  13 + test_tender_data
  14 +)
  15 +
  16 +TIMEZONE = timezone('Europe/Kiev')
  17 +
  18 +def convert_date_to_etender_format(isodate):
  19 + iso_dt=parse_date(isodate)
  20 + date_string = iso_dt.strftime("%d-%m-%Y")
  21 + return date_string
  22 +
  23 +def convert_time_to_etender_format(isodate):
  24 + iso_dt=parse_date(isodate)
  25 + time_string = iso_dt.strftime("%H:%M")
  26 + return time_string
@@ -6,6 +6,14 @@ from faker import Factory @@ -6,6 +6,14 @@ from faker import Factory
6 fake = Factory.create('uk_UA') 6 fake = Factory.create('uk_UA')
7 fake_ru = Factory.create('ru') 7 fake_ru = Factory.create('ru')
8 fake_en = Factory.create() 8 fake_en = Factory.create()
  9 +from tempfile import NamedTemporaryFile
  10 +
  11 +def create_fake_doc():
  12 + content = fake.text()
  13 + tf = NamedTemporaryFile(delete=False)
  14 + tf.write(content)
  15 + tf.close()
  16 + return tf.name
9 17
10 def test_tender_data(period_interval=2): 18 def test_tender_data(period_interval=2):
11 now = datetime.now() 19 now = datetime.now()
@@ -133,7 +141,7 @@ def prom_test_tender_data(): @@ -133,7 +141,7 @@ def prom_test_tender_data():
133 { 141 {
134 "description": fake.catch_phrase(), 142 "description": fake.catch_phrase(),
135 "deliveryDate": { 143 "deliveryDate": {
136 - "startDate": (now + timedelta(days=4)).isoformat(), 144 + "startDate": (now + timedelta(days=4)).isoformat(),
137 "endDate": (now + timedelta(days=5)).isoformat() 145 "endDate": (now + timedelta(days=5)).isoformat()
138 }, 146 },
139 "deliveryLocation": { 147 "deliveryLocation": {
@@ -150,7 +158,7 @@ def prom_test_tender_data(): @@ -150,7 +158,7 @@ def prom_test_tender_data():
150 "classification": { 158 "classification": {
151 "scheme": u"CPV", 159 "scheme": u"CPV",
152 "id": u"44617100-9", 160 "id": u"44617100-9",
153 - "description": u"Cartons" 161 + "description": u"Cartons",
154 }, 162 },
155 "additionalClassifications": [ 163 "additionalClassifications": [
156 { 164 {
@@ -205,15 +213,15 @@ def test_tender_data_multiple_lots(period_interval=2): @@ -205,15 +213,15 @@ def test_tender_data_multiple_lots(period_interval=2):
205 "name": fake.name(), 213 "name": fake.name(),
206 "telephone": fake.phone_number() 214 "telephone": fake.phone_number()
207 } 215 }
208 - },  
209 - "value": {  
210 - "amount": 50000.99, 216 + },
  217 + "value": {
  218 + "amount": 50000,
211 "currency": u"UAH" 219 "currency": u"UAH"
212 }, 220 },
213 "minimalStep": { 221 "minimalStep": {
214 - "amount": 100.1,  
215 - "currency": u"UAH"  
216 - }, 222 + "amount": 100,
  223 + "currency": u"UAH"
  224 + },
217 "items": [ 225 "items": [
218 { 226 {
219 "description": fake.catch_phrase(), 227 "description": fake.catch_phrase(),
@@ -229,7 +237,7 @@ def test_tender_data_multiple_lots(period_interval=2): @@ -229,7 +237,7 @@ def test_tender_data_multiple_lots(period_interval=2):
229 "postalCode": "01008", 237 "postalCode": "01008",
230 "region": u"м. Київ", 238 "region": u"м. Київ",
231 "locality": u"м. Київ", 239 "locality": u"м. Київ",
232 - "streetAddress": "ул. Грушевского, 12/2" 240 + "streetAddress": u"ул. Грушевского, 12/2"
233 }, 241 },
234 "classification": { 242 "classification": {
235 "scheme": u"CPV", 243 "scheme": u"CPV",
@@ -297,7 +305,7 @@ def test_tender_data_multiple_lots(period_interval=2): @@ -297,7 +305,7 @@ def test_tender_data_multiple_lots(period_interval=2):
297 "postalCode": fake.postalcode(), 305 "postalCode": fake.postalcode(),
298 "region": u"м. Луганськ", 306 "region": u"м. Луганськ",
299 "locality": u"м. Луганськ", 307 "locality": u"м. Луганськ",
300 - "streetAddress": "Вул. Оборонна 28" 308 + "streetAddress": u"Вул. Оборонна 28"
301 }, 309 },
302 "classification": { 310 "classification": {
303 "scheme": u"CPV", 311 "scheme": u"CPV",
@@ -460,7 +468,7 @@ def test_bid_data(): @@ -460,7 +468,7 @@ def test_bid_data():
460 } 468 }
461 } 469 }
462 }) 470 })
463 - 471 +
464 def auction_bid(): 472 def auction_bid():
465 return munchify({ 473 return munchify({
466 "data": {"value": { 474 "data": {"value": {
@@ -18,7 +18,6 @@ TestSuiteSetup @@ -18,7 +18,6 @@ TestSuiteSetup
18 18
19 Завантажуємо дані про корисувачів і площадки 19 Завантажуємо дані про корисувачів і площадки
20 [Arguments] ${active_users} 20 [Arguments] ${active_users}
21 - # Init Brokers  
22 log ${active_users} 21 log ${active_users}
23 22
24 ${file_path}= Get Variable Value ${BROKERS_FILE} brokers.yaml 23 ${file_path}= Get Variable Value ${BROKERS_FILE} brokers.yaml
@@ -27,15 +26,14 @@ TestSuiteSetup @@ -27,15 +26,14 @@ TestSuiteSetup
27 Set Global Variable ${BROKERS} 26 Set Global Variable ${BROKERS}
28 ${brokers_list}= Get Dictionary Items ${BROKERS} 27 ${brokers_list}= Get Dictionary Items ${BROKERS}
29 log ${brokers_list} 28 log ${brokers_list}
30 - # Init Users  
31 ${file_path}= Get Variable Value ${USERS_FILE} users.yaml 29 ${file_path}= Get Variable Value ${USERS_FILE} users.yaml
32 ${USERS}= load_initial_data_from ${file_path} 30 ${USERS}= load_initial_data_from ${file_path}
33 Set Global Variable ${USERS} 31 Set Global Variable ${USERS}
34 ${users_list}= Get Dictionary Items ${USERS.users} 32 ${users_list}= Get Dictionary Items ${USERS.users}
35 :FOR ${username} ${user_data} IN @{users_list} 33 :FOR ${username} ${user_data} IN @{users_list}
36 - \ log ${active_users} 34 + \ log ${active_users}
37 \ log ${username} 35 \ log ${username}
38 - \ ${status}= Run Keyword And Return Status List Should Contain Value ${active_users} ${username} 36 + \ ${status}= Run Keyword And Return Status List Should Contain Value ${active_users} ${username}
39 \ Run Keyword If '${status}' == 'True' Завантажуємо бібліотеку з реалізацією ${BROKERS['${USERS.users['${username}'].broker}'].keywords_file} площадки 37 \ Run Keyword If '${status}' == 'True' Завантажуємо бібліотеку з реалізацією ${BROKERS['${USERS.users['${username}'].broker}'].keywords_file} площадки
40 \ Run Keyword If '${status}' == 'True' Викликати для учасника ${username} Підготувати клієнт для користувача 38 \ Run Keyword If '${status}' == 'True' Викликати для учасника ${username} Підготувати клієнт для користувача
41 39
@@ -58,6 +56,9 @@ TestSuiteSetup @@ -58,6 +56,9 @@ TestSuiteSetup
58 Set Global Variable ${REPLIES} 56 Set Global Variable ${REPLIES}
59 ${INITIAL_TENDER_DATA}= prepare_test_tender_data ${BROKERS['${USERS.users['${tender_owner}'].broker}'].period_interval} ${mode} 57 ${INITIAL_TENDER_DATA}= prepare_test_tender_data ${BROKERS['${USERS.users['${tender_owner}'].broker}'].period_interval} ${mode}
60 Set Global Variable ${INITIAL_TENDER_DATA} 58 Set Global Variable ${INITIAL_TENDER_DATA}
  59 + ${TENDER}= Create Dictionary
  60 + Set Global Variable ${TENDER}
  61 + Log ${TENDER}
61 Log ${INITIAL_TENDER_DATA} 62 Log ${INITIAL_TENDER_DATA}
62 63
63 Завантажуємо бібліотеку з реалізацією ${keywords_file} площадки 64 Завантажуємо бібліотеку з реалізацією ${keywords_file} площадки
@@ -73,46 +74,43 @@ TestSuiteSetup @@ -73,46 +74,43 @@ TestSuiteSetup
73 ... ${ARGUMENTS[2]} == id 74 ... ${ARGUMENTS[2]} == id
74 75
75 ${now}= Get Current Date 76 ${now}= Get Current Date
76 - ${delta}= Subtract Date From Date ${now} ${LAST_MODIFICATION_DATE} 77 + ${delta}= Subtract Date From Date ${now} ${TENDER['LAST_MODIFICATION_DATE']}
77 ${wait_timout}= Subtract Time From Time ${BROKERS['${USERS.users['${username}'].broker}'].timout_on_wait} ${delta} 78 ${wait_timout}= Subtract Time From Time ${BROKERS['${USERS.users['${username}'].broker}'].timout_on_wait} ${delta}
78 Run Keyword If ${wait_timout}>0 Sleep ${wait_timout} 79 Run Keyword If ${wait_timout}>0 Sleep ${wait_timout}
79 80
80 -#отримати останні зміни в тендері  
81 -# ${TENDER_DATA}= Викликати для учасника ${tender_owner} Пошук тендера по ідентифікатору ${TENDER_DATA.data.tenderID} ${TENDER_DATA.data.id}  
82 -# Set To Dictionary ${TENDER_DATA} access_token ${access_token}  
83 -# Set Global Variable ${TENDER_DATA}  
84 -# ${now}= Get Current Date  
85 -# Log object data ${TENDER_DATA} tender_${tender_dump_id}  
86 -# ${tender_dump_id}= Evaluate ${tender_dump_id}+1  
87 -# Set Global Variable ${tender_dump_id}  
88 -  
89 Звірити поле тендера 81 Звірити поле тендера
90 [Arguments] ${username} ${field} 82 [Arguments] ${username} ${field}
91 ${field_value}= Get_From_Object ${INITIAL_TENDER_DATA.data} ${field} 83 ${field_value}= Get_From_Object ${INITIAL_TENDER_DATA.data} ${field}
92 Звірити поле ${username} ${field} ${field_value} 84 Звірити поле ${username} ${field} ${field_value}
93 85
94 -Звірити поле  
95 - [Arguments] ${username} ${field} ${subject} 86 +Звірити поле
  87 + [Arguments] ${username} ${field} ${subject}
96 ${field_response}= Викликати для учасника ${username} отримати інформацію із тендера ${field} 88 ${field_response}= Викликати для учасника ${username} отримати інформацію із тендера ${field}
  89 + Should Not Be Equal ${field_response} ${None}
97 Should Be Equal ${subject} ${field_response} Майданчик ${USERS.users['${username}'].broker} 90 Should Be Equal ${subject} ${field_response} Майданчик ${USERS.users['${username}'].broker}
98 91
99 Звірити поле створеного тендера 92 Звірити поле створеного тендера
100 [Arguments] ${initial} ${tender_data} ${field} 93 [Arguments] ${initial} ${tender_data} ${field}
101 ${field_value}= Get_From_Object ${initial} ${field} 94 ${field_value}= Get_From_Object ${initial} ${field}
102 ${field_response}= Get_From_Object ${tender_data} ${field} 95 ${field_response}= Get_From_Object ${tender_data} ${field}
  96 + Should Not Be Equal ${field_response} ${None}
  97 + Should Not Be Equal ${field_value} ${None}
103 Should Be Equal ${field_value} ${field_response} 98 Should Be Equal ${field_value} ${field_response}
104 99
105 Звірити дату тендера 100 Звірити дату тендера
106 [Arguments] ${username} ${field} 101 [Arguments] ${username} ${field}
107 ${isodate}= Get_From_Object ${INITIAL_TENDER_DATA.data} ${field} 102 ${isodate}= Get_From_Object ${INITIAL_TENDER_DATA.data} ${field}
  103 + Should Not Be Equal ${isodate} ${None}
108 Звірити дату ${username} ${field} ${isodate} 104 Звірити дату ${username} ${field} ${isodate}
109 105
110 Звірити дату 106 Звірити дату
111 - [Arguments] ${username} ${field} ${subject} 107 + [Arguments] ${username} ${field} ${subject}
112 ${field_date}= Викликати для учасника ${username} отримати інформацію із тендера ${field} 108 ${field_date}= Викликати для учасника ${username} отримати інформацію із тендера ${field}
113 ${returned}= compare_date ${subject} ${field_date} 109 ${returned}= compare_date ${subject} ${field_date}
114 - Should Be True '${returned}' == 'True'  
115 - 110 + Should Not Be Equal ${field_date} ${None}
  111 + Should Not Be Equal ${returned} ${None}
  112 + Should Be True '${returned}' == 'True'
  113 +
116 Звірити поля предметів закупівлі багатопредметного тендера 114 Звірити поля предметів закупівлі багатопредметного тендера
117 [Arguments] ${username} ${field} 115 [Arguments] ${username} ${field}
118 Дочекатись синхронізації з майданчиком ${username} 116 Дочекатись синхронізації з майданчиком ${username}
@@ -122,10 +120,18 @@ TestSuiteSetup @@ -122,10 +120,18 @@ TestSuiteSetup
122 \ Log ${index} 120 \ Log ${index}
123 \ Звірити поле тендера ${viewer} items[${index}].${field} 121 \ Звірити поле тендера ${viewer} items[${index}].${field}
124 122
125 - 123 +Звірити дату предметів закупівлі багатопредметного тендера
  124 + [Arguments] ${username} ${field}
  125 + Дочекатись синхронізації з майданчиком ${username}
  126 + @{items}= Get_From_Object ${INITIAL_TENDER_DATA.data} items
  127 + ${len_of_items}= Get Length ${items}
  128 + :FOR ${index} IN RANGE ${len_of_items}
  129 + \ Log ${index}
  130 + \ Звірити дату тендера ${viewer} items[${index}].${field}
  131 +
126 Викликати для учасника 132 Викликати для учасника
127 [Documentation] 133 [Documentation]
128 - ... cause sometimes keyword SHOULD fail to pass the testcase, this keyword takes "shouldfail" argument as first one in @{arguments} and switches the behaviour of keyword and "shouldfail" 134 + ... cause sometimes keyword SHOULD fail to pass the testcase, this keyword takes "shouldfail" argument as first one in @{arguments} and switches the behaviour of keyword and "shouldfail"
129 [Arguments] ${username} ${command} @{arguments} 135 [Arguments] ${username} ${command} @{arguments}
130 log ${username} 136 log ${username}
131 log ${command} 137 log ${command}
@@ -153,7 +159,7 @@ switchsate @@ -153,7 +159,7 @@ switchsate
153 ${status} ${value}= run_keyword_and_ignore_keyword_definations ${BROKERS['${USERS.users['${username}'].broker}'].keywords_file}.${command} ${username} @{arguments} 159 ${status} ${value}= run_keyword_and_ignore_keyword_definations ${BROKERS['${USERS.users['${username}'].broker}'].keywords_file}.${command} ${username} @{arguments}
154 Run keyword if '${status}' == 'PASS' Log Учасник ${username} зміг виконати "${command}" WARN 160 Run keyword if '${status}' == 'PASS' Log Учасник ${username} зміг виконати "${command}" WARN
155 [return] ${value} 161 [return] ${value}
156 - 162 +
157 Дочекатись дати 163 Дочекатись дати
158 [Arguments] ${date} 164 [Arguments] ${date}
159 ${wait_timout}= wait_to_date ${date} 165 ${wait_timout}= wait_to_date ${date}
@@ -161,12 +167,12 @@ switchsate @@ -161,12 +167,12 @@ switchsate
161 167
162 Дочекатись дати початоку прийому пропозицій 168 Дочекатись дати початоку прийому пропозицій
163 Дочекатись дати ${TENDER_DATA.data.tenderPeriod.startDate} 169 Дочекатись дати ${TENDER_DATA.data.tenderPeriod.startDate}
164 - 170 +
165 Дочекатись дати закінчення прийому пропозицій 171 Дочекатись дати закінчення прийому пропозицій
166 Дочекатись дати ${TENDER_DATA.data.tenderPeriod.endDate} 172 Дочекатись дати ${TENDER_DATA.data.tenderPeriod.endDate}
167 - 173 +
168 Дочекатись дати початоку аукціону 174 Дочекатись дати початоку аукціону
169 Дочекатись дати ${TENDER_DATA.data.auctionPeriod.startDate} 175 Дочекатись дати ${TENDER_DATA.data.auctionPeriod.startDate}
170 176
171 Дочекатись дати закінчення аукціону 177 Дочекатись дати закінчення аукціону
172 - Дочекатись дати ${TENDER_DATA.data.auctionPeriod.endDate}  
  178 + Дочекатись дати ${TENDER_DATA.data.auctionPeriod.endDate}
@@ -25,9 +25,9 @@ ${LOAD_USERS} ["${tender_owner}", "${provider}", "${viewer}"] @@ -25,9 +25,9 @@ ${LOAD_USERS} ["${tender_owner}", "${provider}", "${viewer}"]
25 25
26 Можливість оголосити багатопредметний тендер 26 Можливість оголосити багатопредметний тендер
27 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер 27 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер
28 - ${ids}= Викликати для учасника ${tender_owner} Створити тендер ${INITIAL_TENDER_DATA}  
29 - ${TENDER_ID}= Get From List ${ids} 0  
30 - ${INTERNAL_TENDER_ID}= Get From List ${ids} 1 28 + ${ids}= Викликати для учасника ${tender_owner} Створити тендер ${INITIAL_TENDER_DATA}
  29 + ${TENDER_ID}= Get From List ${ids} 0
  30 + ${INTERNAL_TENDER_ID}= Get From List ${ids} 1
31 Set Global Variable ${INTERNAL_TENDER_ID} 31 Set Global Variable ${INTERNAL_TENDER_ID}
32 Set Global Variable ${TENDER_ID} 32 Set Global Variable ${TENDER_ID}
33 ${LAST_MODIFICATION_DATE}= Get Current Date 33 ${LAST_MODIFICATION_DATE}= Get Current Date
@@ -36,24 +36,24 @@ ${LOAD_USERS} ["${tender_owner}", "${provider}", "${viewer}"] @@ -36,24 +36,24 @@ ${LOAD_USERS} ["${tender_owner}", "${provider}", "${viewer}"]
36 Отримати багатопредметний тендер по ідентифікатору 36 Отримати багатопредметний тендер по ідентифікатору
37 [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору 37 [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору
38 Дочекатись синхронізації з майданчиком ${viewer} 38 Дочекатись синхронізації з майданчиком ${viewer}
39 - Викликати для учасника ${viewer} Пошук тендера по ідентифікатору ${TENDER_ID} ${INTERNAL_TENDER_ID}  
40 - 39 + Викликати для учасника ${viewer} Пошук тендера по ідентифікатору ${TENDER_ID} ${INTERNAL_TENDER_ID}
  40 +
41 Відображення опису позицій закупівлі багатопредметного тендера 41 Відображення опису позицій закупівлі багатопредметного тендера
42 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 42 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
43 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} description 43 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} description
44 - 44 +
45 Відображення дати доставки позицій закупівлі багатопредметного тендера 45 Відображення дати доставки позицій закупівлі багатопредметного тендера
46 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 46 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
47 - Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryDate.endDate 47 + Звірити дату предметів закупівлі багатопредметного тендера ${viewer} deliveryDate.endDate
48 48
49 Відображення координат широти доставки позицій закупівлі багатопредметного тендера 49 Відображення координат широти доставки позицій закупівлі багатопредметного тендера
50 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 50 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
51 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryLocation.latitude 51 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryLocation.latitude
52 - 52 +
53 Відображення координат довготи доставки позицій закупівлі багатопредметного тендера 53 Відображення координат довготи доставки позицій закупівлі багатопредметного тендера
54 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 54 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
55 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryLocation.longitude 55 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryLocation.longitude
56 - 56 +
57 Відображення назви нас. пункту доставки позицій закупівлі багатопредметного тендера 57 Відображення назви нас. пункту доставки позицій закупівлі багатопредметного тендера
58 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 58 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
59 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.countryName 59 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.countryName
@@ -61,53 +61,53 @@ ${LOAD_USERS} ["${tender_owner}", "${provider}", "${viewer}"] @@ -61,53 +61,53 @@ ${LOAD_USERS} ["${tender_owner}", "${provider}", "${viewer}"]
61 Відображення пошт коду доставки позицій закупівлі багатопредметного тендера 61 Відображення пошт коду доставки позицій закупівлі багатопредметного тендера
62 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 62 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
63 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.postalCode 63 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.postalCode
64 - 64 +
65 Відображення регіону доставки позицій закупівлі багатопредметного тендера 65 Відображення регіону доставки позицій закупівлі багатопредметного тендера
66 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 66 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
67 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.region 67 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.region
68 - 68 +
69 Відображення locality адреси доставки позицій закупівлі багатопредметного тендера 69 Відображення locality адреси доставки позицій закупівлі багатопредметного тендера
70 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 70 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
71 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.locality 71 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.locality
72 - 72 +
73 Відображення вулиці доставки позицій закупівлі багатопредметного тендера 73 Відображення вулиці доставки позицій закупівлі багатопредметного тендера
74 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 74 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
75 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.streetAddress 75 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} deliveryAddress.streetAddress
76 - 76 +
77 Відображення схеми класифікації позицій закупівлі багатопредметного тендера 77 Відображення схеми класифікації позицій закупівлі багатопредметного тендера
78 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 78 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
79 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} classification.scheme 79 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} classification.scheme
80 - 80 +
81 Відображення ідентифйікатора класифікації позицій закупівлі багатопредметного тендера 81 Відображення ідентифйікатора класифікації позицій закупівлі багатопредметного тендера
82 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 82 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
83 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} classification.id 83 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} classification.id
84 - 84 +
85 Відображення опису класифікації позицій закупівлі багатопредметного тендера 85 Відображення опису класифікації позицій закупівлі багатопредметного тендера
86 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 86 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
87 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} classification.description 87 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} classification.description
88 - 88 +
89 Відображення схеми додаткової класифікації позицій закупівлі багатопредметного тендера 89 Відображення схеми додаткової класифікації позицій закупівлі багатопредметного тендера
90 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 90 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
91 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} additionalClassifications.scheme 91 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} additionalClassifications.scheme
92 - 92 +
93 Відображення ідентифікатора додаткової класифікації позицій закупівлі багатопредметного тендера 93 Відображення ідентифікатора додаткової класифікації позицій закупівлі багатопредметного тендера
94 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 94 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
95 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} additionalClassifications.id 95 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} additionalClassifications.id
96 - 96 +
97 Відображення опису додаткової класифікації позицій закупівлі багатопредметного тендера 97 Відображення опису додаткової класифікації позицій закупівлі багатопредметного тендера
98 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 98 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
99 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} additionalClassifications.description 99 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} additionalClassifications.description
100 - 100 +
101 Відображення назви одиниці позицій закупівлі багатопредметного тендера 101 Відображення назви одиниці позицій закупівлі багатопредметного тендера
102 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 102 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
103 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} unit.name 103 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} unit.name
104 - 104 +
105 Відображення коду одиниці позицій закупівлі багатопредметного тендера 105 Відображення коду одиниці позицій закупівлі багатопредметного тендера
106 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 106 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
107 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} unit.code 107 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} unit.code
108 - 108 +
109 Відображення кількості позицій закупівлі багатопредметного тендера 109 Відображення кількості позицій закупівлі багатопредметного тендера
110 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера 110 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів багатопредметного тендера
111 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} quantity 111 Звірити поля предметів закупівлі багатопредметного тендера ${viewer} quantity
112 -  
113 - 112 +
  113 +
  1 +#!/usr/bin/env python
1 # -*- coding: utf-8 - 2 # -*- coding: utf-8 -
2 import os 3 import os
3 from munch import munchify, Munch, fromYAML 4 from munch import munchify, Munch, fromYAML
@@ -17,11 +18,14 @@ import time @@ -17,11 +18,14 @@ import time
17 from .initial_data import ( 18 from .initial_data import (
18 test_tender_data, test_question_data, test_question_answer_data, 19 test_tender_data, test_question_data, test_question_answer_data,
19 test_bid_data, test_award_data, test_complaint_data, test_complaint_reply_data, test_tender_data_multiple_lots, 20 test_bid_data, test_award_data, test_complaint_data, test_complaint_reply_data, test_tender_data_multiple_lots,
20 - auction_bid, prom_test_tender_data 21 + auction_bid, prom_test_tender_data, create_fake_doc
21 ) 22 )
  23 +import calendar
22 24
23 TIMEZONE = timezone('Europe/Kiev') 25 TIMEZONE = timezone('Europe/Kiev')
24 26
  27 +def get_date():
  28 + return datetime.now().isoformat()
25 29
26 def change_state(arguments): 30 def change_state(arguments):
27 try: 31 try:
@@ -34,9 +38,6 @@ def change_state(arguments): @@ -34,9 +38,6 @@ def change_state(arguments):
34 def prepare_prom_test_tender_data(): 38 def prepare_prom_test_tender_data():
35 return munchify({'data': prom_test_tender_data()}) 39 return munchify({'data': prom_test_tender_data()})
36 40
37 -def prepare_test_question_data():  
38 - return munchify({'data': test_question_data()})  
39 -  
40 def compare_date(data1, data2): 41 def compare_date(data1, data2):
41 data1=parse(data1) 42 data1=parse(data1)
42 data2=parse(data2) 43 data2=parse(data2)
@@ -44,7 +45,6 @@ def compare_date(data1, data2): @@ -44,7 +45,6 @@ def compare_date(data1, data2):
44 data1 = TIMEZONE.localize(data1) 45 data1 = TIMEZONE.localize(data1)
45 if data2.tzinfo is None: 46 if data2.tzinfo is None:
46 data2 = TIMEZONE.localize(data2) 47 data2 = TIMEZONE.localize(data2)
47 -  
48 delta = (data1-data2).total_seconds() 48 delta = (data1-data2).total_seconds()
49 if abs(delta) > 60: 49 if abs(delta) > 60:
50 return False 50 return False
@@ -78,7 +78,6 @@ def load_initial_data_from(file_name): @@ -78,7 +78,6 @@ def load_initial_data_from(file_name):
78 elif file_name.endswith(".yaml"): 78 elif file_name.endswith(".yaml"):
79 return fromYAML(file_obj) 79 return fromYAML(file_obj)
80 80
81 -  
82 def prepare_test_tender_data(period_interval=2, mode='single'): 81 def prepare_test_tender_data(period_interval=2, mode='single'):
83 if mode == 'single': 82 if mode == 'single':
84 return munchify({'data': test_tender_data(period_interval=period_interval)}) 83 return munchify({'data': test_tender_data(period_interval=period_interval)})
@@ -86,21 +85,16 @@ def prepare_test_tender_data(period_interval=2, mode='single'): @@ -86,21 +85,16 @@ def prepare_test_tender_data(period_interval=2, mode='single'):
86 return munchify({'data': test_tender_data_multiple_lots(period_interval=period_interval)}) 85 return munchify({'data': test_tender_data_multiple_lots(period_interval=period_interval)})
87 raise ValueError('A very specific bad thing happened') 86 raise ValueError('A very specific bad thing happened')
88 87
89 -  
90 def run_keyword_and_ignore_keyword_definations(name, *args): 88 def run_keyword_and_ignore_keyword_definations(name, *args):
91 """Runs the given keyword with given arguments and returns the status as a Boolean value. 89 """Runs the given keyword with given arguments and returns the status as a Boolean value.
92 -  
93 This keyword returns `True` if the keyword that is executed succeeds and 90 This keyword returns `True` if the keyword that is executed succeeds and
94 `False` if it fails. This is useful, for example, in combination with 91 `False` if it fails. This is useful, for example, in combination with
95 `Run Keyword If`. If you are interested in the error message or return 92 `Run Keyword If`. If you are interested in the error message or return
96 value, use `Run Keyword And Ignore Error` instead. 93 value, use `Run Keyword And Ignore Error` instead.
97 -  
98 The keyword name and arguments work as in `Run Keyword`. 94 The keyword name and arguments work as in `Run Keyword`.
99 -  
100 Example: 95 Example:
101 | ${passed} = | `Run Keyword And Return Status` | Keyword | args | 96 | ${passed} = | `Run Keyword And Return Status` | Keyword | args |
102 | `Run Keyword If` | ${passed} | Another keyword | 97 | `Run Keyword If` | ${passed} | Another keyword |
103 -  
104 New in Robot Framework 2.7.6. 98 New in Robot Framework 2.7.6.
105 """ 99 """
106 try: 100 try:
@@ -110,7 +104,6 @@ def run_keyword_and_ignore_keyword_definations(name, *args): @@ -110,7 +104,6 @@ def run_keyword_and_ignore_keyword_definations(name, *args):
110 return "FAIL", "" 104 return "FAIL", ""
111 return status, _ 105 return status, _
112 106
113 -  
114 def set_tender_periods(tender): 107 def set_tender_periods(tender):
115 now = datetime.now() 108 now = datetime.now()
116 tender.data.enquiryPeriod.endDate = (now + timedelta(minutes=2)).isoformat() 109 tender.data.enquiryPeriod.endDate = (now + timedelta(minutes=2)).isoformat()
@@ -118,17 +111,14 @@ def set_tender_periods(tender): @@ -118,17 +111,14 @@ def set_tender_periods(tender):
118 tender.data.tenderPeriod.endDate = (now + timedelta(minutes=4)).isoformat() 111 tender.data.tenderPeriod.endDate = (now + timedelta(minutes=4)).isoformat()
119 return tender 112 return tender
120 113
121 -  
122 def set_access_key(tender, access_token): 114 def set_access_key(tender, access_token):
123 tender.access = munchify({"token": access_token}) 115 tender.access = munchify({"token": access_token})
124 return tender 116 return tender
125 117
126 -  
127 def set_to_object(obj, attribute, value): 118 def set_to_object(obj, attribute, value):
128 xpathset(obj, attribute.replace('.', '/'), value) 119 xpathset(obj, attribute.replace('.', '/'), value)
129 return obj 120 return obj
130 121
131 -  
132 def get_from_object(obj, attribute): 122 def get_from_object(obj, attribute):
133 """Gets data from a dictionary using a dotted accessor-string""" 123 """Gets data from a dictionary using a dotted accessor-string"""
134 jsonpath_expr = parse_path(attribute) 124 jsonpath_expr = parse_path(attribute)
@@ -137,7 +127,6 @@ def get_from_object(obj, attribute): @@ -137,7 +127,6 @@ def get_from_object(obj, attribute):
137 return return_list[0] 127 return return_list[0]
138 return None 128 return None
139 129
140 -  
141 def wait_to_date(date_stamp): 130 def wait_to_date(date_stamp):
142 date = parse(date_stamp) 131 date = parse(date_stamp)
143 LOGGER.log_message(Message("date: {}".format(date.isoformat()), "INFO")) 132 LOGGER.log_message(Message("date: {}".format(date.isoformat()), "INFO"))
@@ -147,4 +136,44 @@ def wait_to_date(date_stamp): @@ -147,4 +136,44 @@ def wait_to_date(date_stamp):
147 wait_seconds += 2 136 wait_seconds += 2
148 if wait_seconds < 0: 137 if wait_seconds < 0:
149 return 0 138 return 0
150 - return wait_seconds  
  139 + return wait_seconds
  140 +
  141 +def convert_date_to_slash_format(isodate):
  142 + iso_dt=parse_date(isodate)
  143 + date_string = iso_dt.strftime("%d/%m/%Y")
  144 + return date_string
  145 +
  146 +def convert_date_to_etender_format(isodate):
  147 + iso_dt=parse_date(isodate)
  148 + date_string = iso_dt.strftime("%d-%m-%Y")
  149 + return date_string
  150 +
  151 +def convert_time_to_etender_format(isodate):
  152 + iso_dt=parse_date(isodate)
  153 + time_string = iso_dt.strftime("%H:%M")
  154 + return time_string
  155 +
  156 +def newtend_date_picker_index(isodate):
  157 + now = datetime.today()
  158 + date_str = '01' + str(now.month) + str(now.year)
  159 + first_day_of_month = datetime.strptime(date_str, "%d%m%Y")
  160 + mod = first_day_of_month.isoweekday() - 2
  161 + iso_dt=parse_date(isodate)
  162 + last_day_of_month = calendar.monthrange(now.year, now.month)[1]
  163 + #LOGGER.log_message(Message("last_day_of_month: {}".format(last_day_of_month), "INFO"))
  164 + if now.day>iso_dt.day:
  165 + mod = calendar.monthrange(now.year, now.month)[1] + mod
  166 + return mod + iso_dt.day
  167 +
  168 +def Add_data_for_GUI_FrontEnds(INITIAL_TENDER_DATA):
  169 + now = datetime.now()
  170 + INITIAL_TENDER_DATA.data.enquiryPeriod['startDate'] = (now + timedelta(minutes=2)).isoformat()
  171 + INITIAL_TENDER_DATA.data.enquiryPeriod['endDate'] = (now + timedelta(minutes=3)).isoformat()
  172 + INITIAL_TENDER_DATA.data.tenderPeriod['startDate'] = (now + timedelta(minutes=4)).isoformat()
  173 + INITIAL_TENDER_DATA.data.tenderPeriod['endDate'] = (now + timedelta(minutes=5)).isoformat()
  174 + return INITIAL_TENDER_DATA
  175 +
  176 +def local_path_to_file(file_name):
  177 + path = os.getcwd()
  178 + path = path.split("brokers", 1)[0] + "/src/op_robot_tests/op_robot_tests/tests_files/documents/" + file_name
  179 + return path
@@ -24,42 +24,49 @@ ${item_id} 0 @@ -24,42 +24,49 @@ ${item_id} 0
24 ${question_id} 0 24 ${question_id} 0
25 25
26 *** Test Cases *** 26 *** Test Cases ***
27 -Можливість оголосити однопердметний тендер 27 +Можливість оголосити однопредметний тендер
28 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер 28 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер
29 - ${ids}= Викликати для учасника ${tender_owner} Створити тендер ${INITIAL_TENDER_DATA}  
30 - ${TENDER_ID}= Get From List ${ids} 0  
31 - ${INTERNAL_TENDER_ID}= Get From List ${ids} 1  
32 - Set Global Variable ${INTERNAL_TENDER_ID}  
33 - Set Global Variable ${TENDER_ID} 29 + [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера),
  30 + ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${INITIAL_TENDER_DATA}
34 ${LAST_MODIFICATION_DATE}= Get Current Date 31 ${LAST_MODIFICATION_DATE}= Get Current Date
35 - Set Global Variable ${LAST_MODIFICATION_DATE} 32 + Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID}
  33 + Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE}
  34 + log ${TENDER}
36 35
37 Можливасть додати тендерну документацію 36 Можливасть додати тендерну документацію
38 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість завантажити документ 37 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість завантажити документ
39 - Викликати для учасника ${tender_owner} Завантажити документ ${INTERNAL_TENDER_ID} 38 + [Documentation] Закупівельник ${USERS.users['${tender_owner}'].broker} завантажує документацію до оголошеної закупівлі
  39 + ${filepath}= create_fake_doc
  40 + ${doc_upload_reply}= Викликати для учасника ${tender_owner} Завантажити документ ${filepath} ${TENDER['TENDER_UAID']}
  41 + ${file_upload_process_data} = Create Dictionary filepath=${filepath} doc_upload_reply=${doc_upload_reply}
  42 + log ${file_upload_process_data}
  43 + Set To Dictionary ${USERS.users['${tender_owner}']} file_upload_process_data ${file_upload_process_data}
  44 + Log ${USERS.users['${tender_owner}']}
  45 +
40 46
41 Можливість подати скаргу на умови 47 Можливість подати скаргу на умови
42 [Tags] ${USERS.users['${provider}'].broker}: Можливість подати скаргу на умови 48 [Tags] ${USERS.users['${provider}'].broker}: Можливість подати скаргу на умови
43 - Викликати для учасника ${provider} Подати скаргу ${INTERNAL_TENDER_ID} ${COMPLAINTS[0]} 49 + [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі
  50 + Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[0]}
44 ${LAST_MODIFICATION_DATE}= Get Current Date 51 ${LAST_MODIFICATION_DATE}= Get Current Date
45 - Set Global Variable ${LAST_MODIFICATION_DATE} 52 + Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE}
46 53
47 Можливість побачити скаргу користувачем 54 Можливість побачити скаргу користувачем
48 [Tags] ${USERS.users['${provider}'].broker}: Відображення основних даних оголошеного тендера 55 [Tags] ${USERS.users['${provider}'].broker}: Відображення основних даних оголошеного тендера
49 - Викликати для учасника ${provider} порівняти скаргу ${INTERNAL_TENDER_ID} ${COMPLAINTS[0]} 56 + Викликати для учасника ${provider} порівняти скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[0]}
50 57
51 можливість побачити скаргу анонімом 58 можливість побачити скаргу анонімом
52 [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера 59 [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
53 - Викликати для учасника ${viewer} порівняти скаргу ${INTERNAL_TENDER_ID} ${COMPLAINTS[0]} 60 + Викликати для учасника ${viewer} порівняти скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[0]}
54 61
55 Пошук однопредметного тендера по ідентифікатору 62 Пошук однопредметного тендера по ідентифікатору
56 [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору 63 [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору
57 Дочекатись синхронізації з майданчиком ${viewer} 64 Дочекатись синхронізації з майданчиком ${viewer}
58 - Викликати для учасника ${viewer} Пошук тендера по ідентифікатору ${TENDER_ID} ${INTERNAL_TENDER_ID}  
59 - 65 + Викликати для учасника ${viewer} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']}
  66 +
60 ###### 67 ######
61 #Відображення основних даних оголошеного тендера: 68 #Відображення основних даних оголошеного тендера:
62 -#заголовок, опис, бюджет, тендерна документація, 69 +#заголовок, опис, бюджет, тендерна документація,
63 #procuringEntity, періоди уточнень/прийому-пропозицій, мінімального кроку 70 #procuringEntity, періоди уточнень/прийому-пропозицій, мінімального кроку
64 71
65 Відображення заголовоку оголошеного тендера 72 Відображення заголовоку оголошеного тендера
@@ -77,7 +84,7 @@ ${question_id} 0 @@ -77,7 +84,7 @@ ${question_id} 0
77 Відображення tenderID оголошеного тендера 84 Відображення tenderID оголошеного тендера
78 [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера 85 [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
79 ${field_response}= Викликати для учасника ${viewer} отримати інформацію із тендера tenderID 86 ${field_response}= Викликати для учасника ${viewer} отримати інформацію із тендера tenderID
80 - Should Be Equal ${TENDER_ID} ${field_response} Майданчик ${USERS.users['${viewer}'].broker} 87 + Should Be Equal ${TENDER['TENDER_UAID']} ${field_response} Майданчик ${USERS.users['${viewer}'].broker}
81 88
82 Відображення procuringEntity.name оголошеного тендера 89 Відображення procuringEntity.name оголошеного тендера
83 [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера 90 [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
@@ -103,26 +110,18 @@ ${question_id} 0 @@ -103,26 +110,18 @@ ${question_id} 0
103 [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера 110 [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
104 Звірити поле тендера ${viewer} minimalStep.amount 111 Звірити поле тендера ${viewer} minimalStep.amount
105 112
106 -Відображення тендерної документації оголошеного тендера  
107 - [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера  
108 - Звірити поле тендера ${viewer} documents.title  
109 - #documents.format  
110 - #documents.url  
111 - #documents.datePublished  
112 - #documents.dateModified  
113 - #documents.id  
114 -  
115 Можливість редагувати однопредметний тендер 113 Можливість редагувати однопредметний тендер
116 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер 114 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер
117 - Викликати для учасника ${tender_owner} Внести зміни в тендер ${INTERNAL_TENDER_ID} description description 115 + Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} description description
  116 +
  117 +Можливість додати позицію закупівлі в тендер
  118 + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер
  119 + Викликати для учасника ${tender_owner} додати предмети закупівлі ${TENDER['TENDER_UAID']} 3
  120 +
  121 +Можливість видалити позиції закупівлі тендера
  122 + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер
  123 + Викликати для учасника ${tender_owner} додати предмети закупівлі ${TENDER['TENDER_UAID']} 2
118 124
119 -#Можливість додати позицію закупівлі в тендер  
120 -# [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер  
121 -# Викликати для учасника ${tender_owner} додати предмети закупівлі ${INTERNAL_TENDER_ID} 3  
122 -#  
123 -#Можливість видалити позиції закупівлі тендера  
124 -# [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер  
125 -# Викликати для учасника ${tender_owner} додати предмети закупівлі ${INTERNAL_TENDER_ID} 2  
126 125
127 ####### 126 #######
128 #Відображення однопредметного тендера 127 #Відображення однопредметного тендера
@@ -178,15 +177,15 @@ ${question_id} 0 @@ -178,15 +177,15 @@ ${question_id} 0
178 177
179 Відображення схеми додаткової класифікації позицій закупівлі однопредметного тендера 178 Відображення схеми додаткової класифікації позицій закупівлі однопредметного тендера
180 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів однопредметного тендера 179 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів однопредметного тендера
181 - Звірити поле тендера ${viewer} items[${item_id}].additionalClassifications.scheme 180 + Звірити поле тендера ${viewer} items[${item_id}].additionalClassifications[0].scheme
182 181
183 Відображення ідентифікатора додаткової класифікації позицій закупівлі однопредметного тендера 182 Відображення ідентифікатора додаткової класифікації позицій закупівлі однопредметного тендера
184 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів однопредметного тендера 183 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів однопредметного тендера
185 - Звірити поле тендера ${viewer} items[${item_id}].additionalClassifications.id 184 + Звірити поле тендера ${viewer} items[${item_id}].additionalClassifications[0].id
186 185
187 Відображення опису додаткової класифікації позицій закупівлі однопредметного тендера 186 Відображення опису додаткової класифікації позицій закупівлі однопредметного тендера
188 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів однопредметного тендера 187 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів однопредметного тендера
189 - Звірити поле тендера ${viewer} items[${item_id}].additionalClassifications.description 188 + Звірити поле тендера ${viewer} items[${item_id}].additionalClassifications[0].description
190 189
191 Відображення назви одиниці позицій закупівлі однопредметного тендера 190 Відображення назви одиниці позицій закупівлі однопредметного тендера
192 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів однопредметного тендера 191 [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів пердметів однопредметного тендера
@@ -205,14 +204,14 @@ ${question_id} 0 @@ -205,14 +204,14 @@ ${question_id} 0
205 204
206 Задати питання 205 Задати питання
207 [Tags] ${USERS.users['${provider}'].broker}: Можливість задати запитання 206 [Tags] ${USERS.users['${provider}'].broker}: Можливість задати запитання
208 - Викликати для учасника ${provider} Задати питання ${INTERNAL_TENDER_ID} ${QUESTIONS[${question_id}]} 207 + Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${QUESTIONS[${question_id}]}
209 ${now}= Get Current Date 208 ${now}= Get Current Date
210 Set To Dictionary ${QUESTIONS[${question_id}].data} date ${now} 209 Set To Dictionary ${QUESTIONS[${question_id}].data} date ${now}
211 210
212 Відображення заголовоку анонімного питання без відповіді 211 Відображення заголовоку анонімного питання без відповіді
213 [Tags] ${USERS.users['${viewer}'].broker}: Відображення анонімного питання без відповідей 212 [Tags] ${USERS.users['${viewer}'].broker}: Відображення анонімного питання без відповідей
214 Дочекатись синхронізації з майданчиком ${viewer} 213 Дочекатись синхронізації з майданчиком ${viewer}
215 - Викликати для учасника ${viewer} обновити сторінку з тендером ${TENDER_ID} ${INTERNAL_TENDER_ID} 214 + Викликати для учасника ${viewer} обновити сторінку з тендером ${TENDER['TENDER_UAID']}
216 Звірити поле ${viewer} questions[${question_id}].title ${QUESTIONS[${question_id}].data.title} 215 Звірити поле ${viewer} questions[${question_id}].title ${QUESTIONS[${question_id}].data.title}
217 216
218 Відображення опис анонімного питання без відповіді 217 Відображення опис анонімного питання без відповіді
@@ -221,184 +220,185 @@ ${question_id} 0 @@ -221,184 +220,185 @@ ${question_id} 0
221 220
222 Відображення дати анонімного питання без відповіді 221 Відображення дати анонімного питання без відповіді
223 [Tags] ${USERS.users['${viewer}'].broker}: Відображення анонімного питання без відповідей 222 [Tags] ${USERS.users['${viewer}'].broker}: Відображення анонімного питання без відповідей
224 - Звірити дату ${viewer} questions[${question_id}].date ${QUESTIONS[${question_id}].data.date} 223 + Звірити дату ${viewer} questions[${question_id}].date ${QUESTIONS[${question_id}].data.date}
225 224
226 Неможливість подати цінову пропозицію до початку періоду подачі пропозицій bidder1 225 Неможливість подати цінову пропозицію до початку періоду подачі пропозицій bidder1
227 [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію 226 [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію
228 ${bid}= test bid data 227 ${bid}= test bid data
229 Log ${bid} 228 Log ${bid}
230 - ${biddingresponce1}= Викликати для учасника ${provider} Подати цінову пропозицію shouldfail ${INTERNAL_TENDER_ID} ${bid} 229 + ${bidresponces}= Create Dictionary
  230 + ${bid_before_biddperiod_resp}= Викликати для учасника ${provider} Подати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${bid}
  231 + Set To Dictionary ${bidresponces} bid_before_biddperiod_resp ${bid_before_biddperiod_resp}
  232 + Set To Dictionary ${USERS.users['${provider}']} bidresponces ${bidresponces}
  233 + log ${USERS.users['${provider}']}
231 234
232 ####### 235 #######
233 #Відображення відповіді на запитання 236 #Відображення відповіді на запитання
234 # 237 #
235 Відповісти на запитання 238 Відповісти на запитання
236 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відповісти на запитання 239 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відповісти на запитання
237 - Викликати для учасника ${tender_owner} Відповісти на питання ${INTERNAL_TENDER_ID} 0 ${ANSWERS[0]} 240 + Викликати для учасника ${tender_owner} Відповісти на питання ${TENDER['TENDER_UAID']} 0 ${ANSWERS[0]}
238 ${now}= Get Current Date 241 ${now}= Get Current Date
239 Set To Dictionary ${ANSWERS[${question_id}].data} date ${now} 242 Set To Dictionary ${ANSWERS[${question_id}].data} date ${now}
240 243
241 Відображення відповіді на запитання 244 Відображення відповіді на запитання
242 [Tags] ${USERS.users['${viewer}'].broker}: Відображення відповіді на запитання 245 [Tags] ${USERS.users['${viewer}'].broker}: Відображення відповіді на запитання
243 Дочекатись синхронізації з майданчиком ${viewer} 246 Дочекатись синхронізації з майданчиком ${viewer}
244 - Викликати для учасника ${viewer} обновити сторінку з тендером ${TENDER_ID} ${INTERNAL_TENDER_ID} 247 + Викликати для учасника ${viewer} обновити сторінку з тендером ${TENDER['TENDER_UAID']}
245 Звірити поле ${viewer} questions[${question_id}].answer ${ANSWERS[${question_id}].data.answer} 248 Звірити поле ${viewer} questions[${question_id}].answer ${ANSWERS[${question_id}].data.answer}
246 249
247 Можливість побачити скаргу користувачем під час періоду уточнень 250 Можливість побачити скаргу користувачем під час періоду уточнень
248 [Tags] ${USERS.users['${provider}'].broker}: Відображення основних даних оголошеного тендера 251 [Tags] ${USERS.users['${provider}'].broker}: Відображення основних даних оголошеного тендера
249 - Викликати для учасника ${provider} порівняти скаргу ${INTERNAL_TENDER_ID} ${COMPLAINTS[0]} 252 + Викликати для учасника ${provider} порівняти скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[0]}
250 253
251 можливість побачити скаргу анонімом під час періоду уточнень 254 можливість побачити скаргу анонімом під час періоду уточнень
252 [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера 255 [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
253 - Викликати для учасника ${viewer} порівняти скаргу ${INTERNAL_TENDER_ID} ${COMPLAINTS[0]} 256 + Викликати для учасника ${viewer} порівняти скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[0]}
254 257
255 -Подати цінову пропозицію bidder1 258 +Подати цінову пропозицію bidder
256 [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію 259 [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію
257 Дочекатись дати початоку прийому пропозицій 260 Дочекатись дати початоку прийому пропозицій
258 ${bid}= test bid data 261 ${bid}= test bid data
259 Log ${bid} 262 Log ${bid}
260 - ${biddingresponce1}= Викликати для учасника ${provider} Подати цінову пропозицію ${INTERNAL_TENDER_ID} ${bid}  
261 - Set Global Variable ${biddingresponce1}  
262 - log ${biddingresponce1} 263 + ${biddingresponce0}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid}
  264 + Set Global Variable ${biddingresponce0}
  265 + log ${biddingresponce0}
263 266
264 -Можливість змінити цінову пропозицію до 50000 267 +Можливість скасувати цінову пропозицію
  268 + [Tags] ${USERS.users['${provider}'].broker}: Можливість скасувати цінову пропозицію
  269 + ${biddingresponce_0}= Викликати для учасника ${provider} скасувати цінову пропозицію ${TENDER['TENDER_UAID']} ${biddingresponce0}
  270 +
  271 +Подати повторно цінову пропозицію першим учасником
  272 + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію
  273 + Дочекатись дати початоку прийому пропозицій
  274 + ${bid}= test bid data
  275 + Log ${bid}
  276 + ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid}
  277 + Set To Dictionary ${USERS.users['${provider}'].bidresponces} resp ${resp}
  278 + log ${resp}
  279 + log ${USERS.users['${provider}'].bidresponces}
  280 +
  281 +Можливість змінити повторну цінову пропозицію до 50000
265 [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію 282 [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію
266 - Set To Dictionary ${biddingresponce1.data.value} amount 50000  
267 - Log ${biddingresponce1.data.value}  
268 - ${biddingresponce2}= Викликати для учасника ${provider} Змінити цінову пропозицію ${INTERNAL_TENDER_ID} ${biddingresponce1}  
269 - Set Global Variable ${biddingresponce2}  
270 - log ${biddingresponce2} 283 + Set To Dictionary ${USERS.users['${provider}'].bidresponces['resp'].data.value} amount 50000
  284 + Log ${USERS.users['${provider}'].bidresponces['resp'].data.value}
  285 + ${fixbidto50000resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].bidresponces['resp']}
  286 + Set To Dictionary ${USERS.users['${provider}'].bidresponces} fixbidto50000resp ${fixbidto50000resp}
  287 + log ${fixbidto50000resp}
271 288
272 -Можливість змінити цінову пропозицію до 1 289 +Можливість змінити повторну цінову пропозицію до 10
273 [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію 290 [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію
274 - Set To Dictionary ${biddingresponce1.data.value} amount 1  
275 - Log ${biddingresponce1.data.value}  
276 - ${biddingresponce3}= Викликати для учасника ${provider} Змінити цінову пропозицію ${INTERNAL_TENDER_ID} ${biddingresponce1}  
277 - Set Global Variable ${biddingresponce3}  
278 - log ${biddingresponce3} 291 + Set To Dictionary ${USERS.users['${provider}'].bidresponces['resp'].data.value} amount 10
  292 + Log ${USERS.users['${provider}'].bidresponces['fixbidto50000resp'].data.value}
  293 + ${fixbidto10resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].bidresponces['resp']}
  294 + Set To Dictionary ${USERS.users['${provider}'].bidresponces} fixbidto10resp ${fixbidto10resp}
  295 + log ${fixbidto10resp}
279 296
280 -Завантажити документ першим учасником 297 +Завантажити документ першим учасником в повторну пропозицію
281 [Tags] ${USERS.users['${provider}'].broker}: Можливість прийняти пропозицію переможця 298 [Tags] ${USERS.users['${provider}'].broker}: Можливість прийняти пропозицію переможця
282 log ${USERS.users['${provider}'].broker} 299 log ${USERS.users['${provider}'].broker}
283 - log ${biddingresponce1}  
284 - ${bid_id}= get variable value ${biddingresponce1.data.id}  
285 - ${token1}= Get Variable Value ${biddingresponce1.access.token}  
286 - log ${token1}  
287 - ${upload_doc_responce}= Викликати для учасника ${provider} Завантажити документ в ставку ${token1} ${bid_id}  
288 - Set Global Variable ${upload_doc_responce}  
289 - 300 + ${filepath}= create_fake_doc
  301 + ${bid_doc_upload}= Викликати для учасника ${provider} Завантажити документ в ставку ${filepath} ${TENDER['TENDER_UAID']}
  302 + Set To Dictionary ${USERS.users['${provider}'].bidresponces} bid_doc_upload ${bid_doc_upload}
  303 +
  304 +порівняти документ
  305 + [Tags] ${USERS.users['${provider}'].broker}: вичитати документ
  306 + ${url}= Get Variable Value ${USERS.users['${provider}'].bidresponces['bid_doc_upload']['upload_responce'].data.url}
  307 + ${doc} ${flnnm}= Викликати для учасника ${provider} отримати документ ${TENDER['TENDER_UAID']} ${url}
  308 +
  309 + FIXME: finish the keyword
  310 +
  311 + Should Be Equal ${flcntnt} ${doc}
  312 + Should Be Equal ${flpth} ${flnnm}
  313 +
290 Можливість змінити документацію цінової пропозиції 314 Можливість змінити документацію цінової пропозиції
291 [Tags] ${USERS.users['${provider}'].broker}: Можливість прийняти пропозицію переможця 315 [Tags] ${USERS.users['${provider}'].broker}: Можливість прийняти пропозицію переможця
292 log ${USERS.users['${provider}'].broker} 316 log ${USERS.users['${provider}'].broker}
293 - log ${biddingresponce1}  
294 - ${bid_id}= get variable value ${biddingresponce1.data.id}  
295 - ${token1}= Get Variable Value ${biddingresponce1.access.token}  
296 - ${upload_doc_responce_id}= get variable value ${upload_doc_responce.data.id}  
297 - log ${token1}  
298 - Викликати для учасника ${provider} Змінити документ в ставці ${token1} ${bid_id} ${upload_doc_responce_id}  
299 -  
300 -Можливість скасувати цінову пропозицію  
301 - [Tags] ${USERS.users['${provider}'].broker}: Можливість скасувати цінову пропозицію  
302 - ${biddingresponce4}= Викликати для учасника ${provider} скасувати цінову пропозицію ${INTERNAL_TENDER_ID} ${biddingresponce1}  
303 - Set Global Variable ${biddingresponce4}  
304 - log ${biddingresponce4} 317 + ${filepath}= create_fake_doc
  318 + ${bidid}= Get Variable Value ${USERS.users['${provider}'].bidresponces['resp'].data.id}
  319 + ${docid}= Get Variable Value ${USERS.users['${provider}'].bidresponces['bid_doc_upload']['upload_responce'].data.id}
  320 + ${bid_doc_modified}= Викликати для учасника ${provider} Змінити документ в ставці ${filepath} ${bidid} ${docid}
  321 + Set To Dictionary ${USERS.users['${provider}'].bidresponces} bid_doc_modified ${bid_doc_modified}
305 322
306 Неможливість задати запитання після закінчення періоду уточнень 323 Неможливість задати запитання після закінчення періоду уточнень
307 [Documentation] 324 [Documentation]
308 ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed" 325 ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed"
309 [Tags] ${USERS.users['${provider}'].broker}: Можливість задати запитання 326 [Tags] ${USERS.users['${provider}'].broker}: Можливість задати запитання
310 - ${resp}= Викликати для учасника ${provider} Задати питання shouldfail ${INTERNAL_TENDER_ID} ${questions[${question_id}]} 327 + ${resp}= Викликати для учасника ${provider} Задати питання shouldfail ${TENDER['TENDER_UAID']} ${questions[${question_id}]}
311 328
312 -Подати цінову пропозицію bidder2 329 +Подати цінову пропозицію другим учасником
313 [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію 330 [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію
314 Дочекатись дати початоку прийому пропозицій 331 Дочекатись дати початоку прийому пропозицій
315 ${bid}= test bid data 332 ${bid}= test bid data
316 Log ${bid} 333 Log ${bid}
317 - ${biddingresponce5}= Викликати для учасника ${provider1} Подати цінову пропозицію ${INTERNAL_TENDER_ID} ${bid}  
318 - Set Global Variable ${biddingresponce5}  
319 - log ${biddingresponce5} 334 + ${bidresponces}= Create Dictionary
  335 + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid}
  336 + Set To Dictionary ${bidresponces} resp ${resp}
  337 + Set To Dictionary ${USERS.users['${provider1}']} bidresponces ${bidresponces}
  338 + log ${resp}
  339 + log ${USERS.users['${provider1}'].bidresponces}
320 340
321 Неможливість побачити цінові пропозиції учасників під час прийому пропозицій 341 Неможливість побачити цінові пропозиції учасників під час прийому пропозицій
322 [Tags] ${USERS.users['${viewer}'].broker}: Можливість подати цінову пропозицію 342 [Tags] ${USERS.users['${viewer}'].broker}: Можливість подати цінову пропозицію
323 - ${field_date}= Викликати для учасника ${viewer} отримати інформацію із тендера B 343 +
  344 + FIXME: finish the keyword
  345 +
  346 + ${field_date}= Викликати для учасника ${viewer} отримати інформацію із тендера
324 347
325 Завантажити документ другим учасником 348 Завантажити документ другим учасником
326 - [Tags] ${USERS.users['${provider}'].broker}: Можливість прийняти пропозицію переможця 349 + [Tags] ${USERS.users['${provider1}'].broker}: Можливість прийняти пропозицію переможця
327 log ${USERS.users['${provider1}'].broker} 350 log ${USERS.users['${provider1}'].broker}
328 - ${bid_id2}= get variable value ${biddingresponce5.data.id}  
329 - ${token2}= Get Variable Value ${biddingresponce5.access.token}  
330 - log ${token2}  
331 - Викликати для учасника ${provider1} Завантажити документ в ставку ${token2} ${bid_id2} 351 + ${filepath}= create_fake_doc
  352 + ${bid_doc_upload}= Викликати для учасника ${provider1} Завантажити документ в ставку ${filepath} ${TENDER['TENDER_UAID']}
  353 + Set To Dictionary ${USERS.users['${provider1}'].bidresponces} bid_doc_upload ${bid_doc_upload}
332 354
333 Можливість побачити скаргу користувачем під час подачі пропозицій 355 Можливість побачити скаргу користувачем під час подачі пропозицій
334 [Tags] ${USERS.users['${provider}'].broker}: Відображення основних даних оголошеного тендера 356 [Tags] ${USERS.users['${provider}'].broker}: Відображення основних даних оголошеного тендера
335 - Викликати для учасника ${provider} порівняти скаргу ${INTERNAL_TENDER_ID} ${COMPLAINTS[0]} 357 + Викликати для учасника ${provider} порівняти скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[0]}
336 358
337 можливість побачити скаргу анонімом під час подачі пропозицій 359 можливість побачити скаргу анонімом під час подачі пропозицій
338 [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера 360 [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
339 - Викликати для учасника ${viewer} порівняти скаргу ${INTERNAL_TENDER_ID} ${COMPLAINTS[0]}  
340 - 361 + Викликати для учасника ${viewer} порівняти скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[0]}
341 362
342 Неможливість змінити цінову пропозицію до 50000 після закінчення прийому пропозицій 363 Неможливість змінити цінову пропозицію до 50000 після закінчення прийому пропозицій
343 [Tags] ${USERS.users['${provider1}'].broker}: Неможливість змінити цінову пропозицію до 50000 після закінчення прийому пропозицій 364 [Tags] ${USERS.users['${provider1}'].broker}: Неможливість змінити цінову пропозицію до 50000 після закінчення прийому пропозицій
344 Дочекатись дати закінчення прийому пропозицій 365 Дочекатись дати закінчення прийому пропозицій
345 - Set To Dictionary ${biddingresponce1.data.value} amount 50000  
346 - Log ${biddingresponce5.data.value}  
347 - ${biddingresponce6}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${INTERNAL_TENDER_ID} ${biddingresponce5}  
348 - Set Global Variable ${biddingresponce6}  
349 - log ${biddingresponce6}  
350 - 366 + Set To Dictionary ${USERS.users['${provider1}'].bidresponces['resp'].data.value} amount 50000
  367 + Log ${USERS.users['${provider1}'].bidresponces['resp'].data.value}
  368 + ${failfixbidto50000resp}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${USERS.users['${provider1}'].bidresponces['resp']}
  369 + Set To Dictionary ${USERS.users['${provider1}'].bidresponces} failfixbidto50000resp ${failfixbidto50000resp}
  370 + log ${failfixbidto50000resp}
  371 +
351 Неможливість змінити цінову пропозицію до 1 після закінчення прийому пропозицій 372 Неможливість змінити цінову пропозицію до 1 після закінчення прийому пропозицій
352 [Tags] ${USERS.users['${provider1}'].broker}: Неможливість змінити цінову пропозицію до 1 після закінчення прийому пропозицій 373 [Tags] ${USERS.users['${provider1}'].broker}: Неможливість змінити цінову пропозицію до 1 після закінчення прийому пропозицій
353 - Set To Dictionary ${biddingresponce5.data.value} amount 1  
354 - Log ${biddingresponce1.data.value}  
355 - ${biddingresponce7}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${INTERNAL_TENDER_ID} ${biddingresponce5}  
356 - Set Global Variable ${biddingresponce7}  
357 - log ${biddingresponce3} 374 + Set To Dictionary ${USERS.users['${provider1}'].bidresponces['resp'].data.value} amount 1
  375 + Log ${USERS.users['${provider1}'].bidresponces['resp'].data.value}
  376 + ${failfixbidto1resp}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${USERS.users['${provider1}'].bidresponces['resp']}
  377 + Set To Dictionary ${USERS.users['${provider1}'].bidresponces} failfixbidto1resp ${failfixbidto1resp}
  378 + log ${failfixbidto1resp}
358 379
359 Неможливість скасувати цінову пропозицію 380 Неможливість скасувати цінову пропозицію
360 - [Tags] ${USERS.users['${provider}'].broker}: Можливість скасувати цінову пропозицію  
361 - ${biddingresponce8}= Викликати для учасника ${provider} скасувати цінову пропозицію shouldfail ${INTERNAL_TENDER_ID} ${biddingresponce5}  
362 - Set Global Variable ${biddingresponce4}  
363 - log ${biddingresponce8} 381 + [Tags] ${USERS.users['${provider1}'].broker}: Можливість скасувати цінову пропозицію
  382 + ${biddingresponce}= Викликати для учасника ${provider1} скасувати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${USERS.users['${provider1}'].bidresponces['resp']}
364 383
365 Неможливість завантажити документ другим учасником після закінчення прийому пропозицій 384 Неможливість завантажити документ другим учасником після закінчення прийому пропозицій
366 - [Tags] ${USERS.users['${provider}'].broker}: Неможливість документ першим учасником після закінчення прийому пропозицій  
367 - log ${USERS.users['${provider1}'].broker}  
368 - log ${biddingresponce5}  
369 - ${bid_id}= get variable value ${biddingresponce5.data.id}  
370 - ${token1}= Get Variable Value ${biddingresponce5.access.token}  
371 - log ${token1}  
372 - ${upload_doc_responce2}= Викликати для учасника ${provider1} Завантажити документ в ставку shouldfail ${token1} ${bid_id}  
373 - log ${upload_doc_responce_id2}  
374 - Set Global Variable ${upload_doc_responce2}  
375 -  
376 -Неможливість змінити документацію цінової пропозиції після закінчення прийому пропозицій  
377 - [Tags] ${USERS.users['${provider}'].broker}: Неможливість змінити документацію цінової пропозиції після закінчення прийому пропозицій  
378 - log ${USERS.users['${provider}'].broker}  
379 - log ${biddingresponce5}  
380 - ${bid_id}= get variable value ${biddingresponce5.data.id}  
381 - ${token1}= Get Variable Value ${biddingresponce5.access.token}  
382 - ${upload_doc_responce_id2}= get variable value ${upload_doc_responce2.data.id}  
383 - log ${upload_doc_responce_id2}  
384 - log ${token1}  
385 - Викликати для учасника ${provider1} Змінити документ в ставці shouldfail ${token1} ${bid_id} ${upload_doc_responce_id2}  
386 -  
387 -  
388 -Неможливість змінити існуючу документацію цінової пропозиції після закінчення прийому пропозицій  
389 - [Tags] ${USERS.users['${provider}'].broker}: Можливість прийняти пропозицію переможця  
390 - log ${USERS.users['${provider}'].broker}  
391 - log ${biddingresponce1}  
392 - ${bid_id}= get variable value ${biddingresponce1.data.id}  
393 - ${token1}= Get Variable Value ${biddingresponce1.access.token}  
394 - ${upload_doc_responce_id}= get variable value ${upload_doc_responce.data.id}  
395 - log ${token1}  
396 - Викликати для учасника ${provider} Змінити документ в ставці ${token1} ${bid_id} ${upload_doc_responce_id}  
397 -  
398 -  
399 -Неможливість скасувати цінову пропозицію після закінчення прийому пропозицій  
400 - [Tags] ${USERS.users['${provider}'].broker}: Неможливість скасувати цінову пропозицію після закінчення прийому пропозицій  
401 - ${biddingresponce8}= Викликати для учасника ${provider1} скасувати цінову пропозицію shouldfail ${INTERNAL_TENDER_ID} ${biddingresponce5}  
402 - Set Global Variable ${biddingresponce8}  
403 - log ${biddingresponce8} 385 + [Tags] ${USERS.users['${provider1}'].broker}: Неможливість документ першим учасником після закінчення прийому пропозицій
  386 + ${filepath}= create_fake_doc
  387 + ${bid_doc_upload_fail}= Викликати для учасника ${provider1} Завантажити документ в ставку shouldfail ${filepath} ${TENDER['TENDER_UAID']}
  388 + Set To Dictionary ${USERS.users['${provider1}'].bidresponces} bid_doc_upload_fail ${bid_doc_upload_fail}
404 389
  390 +Неможливість змінити існуючу документацію цінової пропозиції після закінчення прийому пропозицій
  391 + [Tags] ${USERS.users['${provider1}'].broker}:
  392 + ${filepath}= create_fake_doc
  393 + ${bidid}= Get Variable Value ${USERS.users['${provider1}'].bidresponces['resp'].data.id}
  394 + ${docid}= Get Variable Value ${USERS.users['${provider1}'].bidresponces['bid_doc_upload']['upload_responce'].data.id}
  395 + ${bid_doc_modified_failed}= Викликати для учасника ${provider1} Змінити документ в ставці shouldfail ${filepath} ${bidid} ${docid}
  396 + Set To Dictionary ${USERS.users['${provider}'].bidresponces} bid_doc_modified_failed ${bid_doc_modified_failed}
  397 +
  398 +Вичитати цінову пропозицію
  399 + #sleep 120
  400 + [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію
  401 + ${bidid}= Get Variable Value ${USERS.users['${provider1}'].bidresponces['resp'].data.id}
  402 + ${token}= Get Variable Value ${USERS.users['${provider1}'].bidresponces['resp'].access.token}
  403 + ${bids}= Викликати для учасника ${provider1} Отримати пропозиції ${TENDER['TENDER_UAID']} ${bidid} ${token}
  404 + log ${bids}
@@ -11,9 +11,7 @@ Suite Teardown Close all browsers @@ -11,9 +11,7 @@ Suite Teardown Close all browsers
11 11
12 *** Variables *** 12 *** Variables ***
13 ${tender_dump_id} 0 13 ${tender_dump_id} 0
14 -${item_id} 0  
15 -${question_id} 0  
16 - 14 +${mode} single
17 15
18 ${tender_owner} Tender_Owner 16 ${tender_owner} Tender_Owner
19 ${provider} Tender_User 17 ${provider} Tender_User
@@ -21,16 +19,9 @@ ${provider1} Tender_User1 @@ -21,16 +19,9 @@ ${provider1} Tender_User1
21 ${viewer} Tender_Viewer 19 ${viewer} Tender_Viewer
22 20
23 ${LOAD_USERS} ["${tender_owner}", "${provider}", "${provider1}", "${viewer}"] 21 ${LOAD_USERS} ["${tender_owner}", "${provider}", "${provider1}", "${viewer}"]
24 -#Avalable roles and users  
25 22
26 -#roles: Owner, User, Viewer  
27 -  
28 -#palyers:  
29 - #E-tender  
30 - #Prom  
31 - #SmartTender  
32 - #Publicbid  
33 - #Netcast 23 +${item_id} 0
  24 +${question_id} 0
34 25
35 *** Test Cases *** 26 *** Test Cases ***
36 Можливість оголосити однопердметний тендер 27 Можливість оголосити однопердметний тендер
Please register or login to post a comment