Showing
22 changed files
with
692 additions
and
687 deletions
... | ... | @@ -60,7 +60,7 @@ robot_tests.broker.publicportal = git ${remotes:gh}openprocurement/robot_tests.b |
60 | 60 | robot_tests.broker.smarttender = git ${remotes:gh}openprocurement/robot_tests.broker.smarttender.git |
61 | 61 | robot_tests.broker.uatenders = git ${remotes:gh}openprocurement/robot_tests.broker.uatenders.git |
62 | 62 | robot_tests.broker.ubiz = git ${remotes:gh}openprocurement/robot_tests.broker.ubiz.git |
63 | -robot_tests.broker.zakpro = git ${remotes:gh}openprocurement/robot_tests.broker.zakpro.git | |
63 | +robot_tests.broker.zakpro = git ${remotes:gh}openprocurement/robot_tests.broker.zakpro.git | |
64 | 64 | robot_tests.broker.proztorg = git ${remotes:gh}openprocurement/robot_tests.broker.proztorg.git |
65 | 65 | |
66 | 66 | [versions] | ... | ... |
... | ... | @@ -4,9 +4,9 @@ Resource resource.robot |
4 | 4 | Suite Setup Test Suite Setup |
5 | 5 | Suite Teardown Test Suite Teardown |
6 | 6 | |
7 | + | |
7 | 8 | *** Variables *** |
8 | -${role} viewer | |
9 | -${broker} Quinta | |
9 | +@{used_roles} viewer | |
10 | 10 | |
11 | 11 | |
12 | 12 | *** Test Cases *** |
... | ... | @@ -16,7 +16,6 @@ ${broker} Quinta |
16 | 16 | Завантажити дані про тендер |
17 | 17 | Викликати для учасника ${viewer} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} |
18 | 18 | |
19 | - | |
20 | 19 | ############################################################################################## |
21 | 20 | # AUCTION |
22 | 21 | ############################################################################################## |
... | ... | @@ -29,21 +28,25 @@ ${broker} Quinta |
29 | 28 | Отримати дані із тендера ${viewer} auctionPeriod.startDate |
30 | 29 | |
31 | 30 | |
32 | -Очікування початку аукціону | |
33 | - [Tags] ${USERS.users['${viewer}'].broker}: Очікування аукціону | |
31 | +Можливість дочекатися початку аукціону | |
32 | + [Tags] ${USERS.users['${viewer}'].broker}: Можливість дочекатися початку аукціону | |
34 | 33 | ... viewer |
35 | 34 | ... ${USERS.users['${viewer}'].broker} |
36 | 35 | Дочекатись дати початку аукціону ${viewer} |
37 | 36 | |
38 | -Очікування завершення аукціону | |
39 | - [Tags] ${USERS.users['${viewer}'].broker}: Очікування аукціону | |
37 | + | |
38 | +Можливість дочекатися завершення аукціону | |
39 | + [Tags] ${USERS.users['${viewer}'].broker}: Можливість дочекатися завершення аукціону | |
40 | 40 | ... viewer |
41 | 41 | ... ${USERS.users['${viewer}'].broker} |
42 | 42 | [Teardown] Оновити LAST_MODIFICATION_DATE |
43 | - ${auctionEnd}= add_minutes_to_date ${USERS.users['${viewer}'].tender_data.data.auctionPeriod.startDate} 25 | |
44 | - Дочекатись дати ${auctionEnd} # auction time for two bids plus 4 minutes for reliability | |
43 | + Відкрити сторінку аукціону для глядача | |
44 | + Wait Until Keyword Succeeds 61 times 30 s Page should contain Аукціон завершився | |
45 | + Wait Until Keyword Succeeds 5 times 30 s Page should not contain очікуємо розкриття учасників | |
46 | + Close browser | |
47 | + | |
45 | 48 | |
46 | -Відображення дати закінчення аукціону | |
49 | +Відображення дати завершення аукціону | |
47 | 50 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера |
48 | 51 | ... viewer |
49 | 52 | ... ${USERS.users['${viewer}'].broker} | ... | ... |
... | ... | @@ -107,29 +107,18 @@ Library openprocurement_client_helper.py |
107 | 107 | [Return] ${tender} |
108 | 108 | |
109 | 109 | |
110 | -Відняти предмети закупівлі | |
111 | - [Arguments] ${username} ${tender_uaid} ${number} | |
112 | - ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | |
113 | - @{items}= Get From Object ${tender.data} items | |
114 | - Log Many @{items} | |
115 | - :FOR ${INDEX} IN RANGE ${number} | |
116 | - \ Remove From List ${items} 0 | |
117 | - Log Many @{items} | |
118 | - Set_To_Object ${tender.data} items ${items} | |
110 | +Додати предмет закупівлі | |
111 | + [Arguments] ${username} ${tender_uaid} ${item} | |
112 | + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | |
113 | + Append To List ${tender.data['items']} ${item} | |
119 | 114 | Call Method ${USERS.users['${username}'].client} patch_tender ${tender} |
120 | 115 | |
121 | 116 | |
122 | -Додати предмети закупівлі | |
123 | - [Arguments] ${username} ${tender_uaid} ${number} | |
117 | +Видалити предмет закупівлі | |
118 | + [Arguments] ${username} ${tender_uaid} ${item_id} | |
124 | 119 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
125 | - @{items}= Get From Object ${tender.data} items | |
126 | - Log Many @{items} | |
127 | - :FOR ${INDEX} IN RANGE ${number} | |
128 | - \ ${item}= test_item_data | |
129 | - \ Append To List ${items} ${item} | |
130 | - Log Many @{items} | |
131 | - Set_To_Object ${tender.data} items ${items} | |
132 | - ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} | |
120 | + ${item_index}= get_object_index_by_id ${tender.data['items']} ${item_id} | |
121 | + Remove From List ${tender.data['items']} ${item_index} | |
133 | 122 | Call Method ${USERS.users['${username}'].client} patch_tender ${tender} |
134 | 123 | |
135 | 124 | |
... | ... | @@ -154,8 +143,8 @@ Library openprocurement_client_helper.py |
154 | 143 | Подати цінову пропозицію |
155 | 144 | [Arguments] ${username} ${tender_uaid} ${bid} |
156 | 145 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
157 | - ${lots}= Get Variable Value ${tender.data.lots} | |
158 | - ${bid}= Run Keyword If ${lots} test_lots_bid_data | |
146 | + ${lots}= Run Keyword If "${mode}" == "single" Get Variable Value ${tender.data.lots} | |
147 | + ${bid}= Run Keyword If ${lots} test_bid_data multiLot | |
159 | 148 | ... ELSE Set Variable ${bid} |
160 | 149 | Run Keyword If ${lots} |
161 | 150 | ... Run Keywords |
... | ... | @@ -171,7 +160,7 @@ Library openprocurement_client_helper.py |
171 | 160 | Змінити цінову пропозицію |
172 | 161 | [Arguments] ${username} ${tender_uaid} ${fieldname} ${fieldvalue} |
173 | 162 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
174 | - ${lots}= Get Variable Value ${tender.data.lots} | |
163 | + ${lots}= Run Keyword If "${mode}" == "single" Get Variable Value ${tender.data.lots} | |
175 | 164 | ${fieldname}= Run Keyword If ${lots} Set Variable lotValues.0.${fieldname} |
176 | 165 | ... ELSE Set Variable ${fieldname} |
177 | 166 | ${bid}= openprocurement_client.Отримати пропозицію ${username} ${tender_uaid} |
... | ... | @@ -249,7 +238,7 @@ Library openprocurement_client_helper.py |
249 | 238 | Отримати посилання на аукціон для глядача |
250 | 239 | [Arguments] ${username} ${tender_uaid} |
251 | 240 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
252 | - ${lots}= Get Variable Value ${tender.data.lots} | |
241 | + ${lots}= Run Keyword If "${mode}" == "single" Get Variable Value ${tender.data.lots} | |
253 | 242 | ${auctionUrl}= Run Keyword If ${lots} Set Variable ${tender.data.lots[0].auctionUrl} |
254 | 243 | ... ELSE Set Variable ${tender.data.auctionUrl} |
255 | 244 | [return] ${auctionUrl} |
... | ... | @@ -258,7 +247,7 @@ Library openprocurement_client_helper.py |
258 | 247 | Отримати посилання на аукціон для учасника |
259 | 248 | [Arguments] ${username} ${tender_uaid} |
260 | 249 | ${bid}= openprocurement_client.Отримати пропозицію ${username} ${tender_uaid} |
261 | - ${lots}= Get Variable Value ${bid.data.lotValues} | |
250 | + ${lots}= Run Keyword If "${mode}" == "single" Get Variable Value ${bid.data.lotValues} | |
262 | 251 | ${participationUrl}= Run Keyword If ${lots} Set Variable ${bid.data.lotValues[0].participationUrl} |
263 | 252 | ... ELSE Set Variable ${bid.data.participationUrl} |
264 | 253 | [return] ${participationUrl} |
... | ... | @@ -286,50 +275,77 @@ Library openprocurement_client_helper.py |
286 | 275 | ############################################################################## |
287 | 276 | |
288 | 277 | Створити лот |
289 | - [Arguments] ${username} ${tender} ${lot} | |
290 | - Log ${username} | |
291 | - Log ${tender} | |
292 | - Log ${lot} | |
293 | - ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} | |
294 | - ${tender_lot}= Call Method ${USERS.users['${username}'].client} create_lot ${tender} ${lot} | |
295 | - Log ${tender_lot} | |
296 | - [return] ${tender_lot} | |
297 | - #TODO: | |
298 | - #[Arguments] ${username} ${tender_uaid} ${lot} | |
299 | - #${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | |
278 | + [Arguments] ${username} ${tender_uaid} ${lot} | |
279 | + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | |
280 | + ${reply}= Call Method ${USERS.users['${username}'].client} create_lot ${tender} ${lot} | |
281 | + [return] ${reply} | |
282 | + | |
283 | + | |
284 | +Отримати інформацію із лоту | |
285 | + [Arguments] ${username} ${lot_id} ${field_name} | |
286 | + ${field_name}= Отримати шлях до поля об’єкта ${username} ${field_name} ${lot_id} | |
287 | + Run Keyword And Return openprocurement_client.Отримати інформацію із тендера ${username} ${field_name} | |
300 | 288 | |
301 | 289 | |
302 | 290 | Змінити лот |
303 | - [Arguments] ${username} ${tender} ${lot} | |
304 | - ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} | |
305 | - ${tender_lot}= Call Method ${USERS.users['${username}'].client} patch_lot ${tender} ${lot} | |
306 | - Log ${tender_lot} | |
307 | - [return] ${tender_lot} | |
308 | - #TODO: | |
309 | - #[Arguments] ${username} ${tender_uaid} ${lot} | |
310 | - #${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | |
291 | + [Arguments] ${username} ${tender_uaid} ${lot_id} ${fieldname} ${fieldvalue} | |
292 | + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | |
293 | + ${lot_index}= get_object_index_by_id ${tender.data.lots} ${lot_id} | |
294 | + ${lot}= Create Dictionary data=${tender.data.lots[${lot_index}]} | |
295 | + Set_To_Object ${lot.data} ${fieldname} ${fieldvalue} | |
296 | + ${reply}= Call Method ${USERS.users['${username}'].client} patch_lot ${tender} ${lot} | |
297 | + [return] ${reply} | |
298 | + | |
299 | + | |
300 | +Додати предмет закупівлі в лот | |
301 | + [Arguments] ${username} ${tender_uaid} ${lot_id} ${item} | |
302 | + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | |
303 | + ${lot_index}= get_object_index_by_id ${tender.data.lots} ${lot_id} | |
304 | + ${lot_id}= Get Variable Value ${tender.data.lots[${lot_index}].id} | |
305 | + Set_To_Object ${item} relatedLot ${lot_id} | |
306 | + Append To List ${tender.data['items']} ${item} | |
307 | + Call Method ${USERS.users['${username}'].client} patch_tender ${tender} | |
308 | + | |
309 | + | |
310 | +Задати питання до лоту | |
311 | + [Arguments] ${username} ${tender_uaid} ${lot_id} ${question} | |
312 | + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | |
313 | + ${lot_index}= get_object_index_by_id ${tender.data.lots} ${lot_id} | |
314 | + ${lot_id}= Get Variable Value ${tender.data.lots[${lot_index}].id} | |
315 | + ${question}= test_lot_question_data ${question} ${lot_id} | |
316 | + ${biddingresponse}= Call Method ${USERS.users['${username}'].client} create_question ${tender} ${question} | |
317 | + [return] ${biddingresponse} | |
311 | 318 | |
312 | 319 | |
313 | 320 | Завантажити документ в лот |
314 | 321 | [Arguments] ${username} ${filepath} ${tender_uaid} ${lot_id} |
315 | 322 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
316 | - ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} | |
323 | + ${lot_index}= get_object_index_by_id ${tender.data.lots} ${lot_id} | |
324 | + ${lot_id}= Get Variable Value ${tender.data.lots[${lot_index}].id} | |
317 | 325 | ${doc}= openprocurement_client.Завантажити документ ${username} ${filepath} ${tender_uaid} |
318 | 326 | ${lot_doc}= test_lot_document_data ${doc} ${lot_id} |
319 | 327 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_document ${tender} ${lot_doc} |
320 | - Log object data ${reply} reply | |
321 | 328 | [return] ${reply} |
322 | 329 | |
323 | 330 | |
324 | 331 | Видалити лот |
325 | - [Arguments] ${username} ${tender} ${lot} | |
326 | - ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} | |
327 | - ${tender_lot}= Call Method ${USERS.users['${username}'].client} delete_lot ${tender} ${lot} | |
328 | - Log ${tender_lot} | |
329 | - [return] ${tender_lot} | |
330 | - #TODO: | |
331 | - #[Arguments] ${username} ${tender_uaid} ${lot} | |
332 | - #${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | |
332 | + [Arguments] ${username} ${tender_uaid} ${lot_id} | |
333 | + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | |
334 | + ${lot_index}= get_object_index_by_id ${tender.data.lots} ${lot_id} | |
335 | + ${lot}= Create Dictionary data=${tender.data.lots[${lot_index}]} | |
336 | + ${reply}= Call Method ${USERS.users['${username}'].client} delete_lot ${tender} ${lot} | |
337 | + [return] ${reply} | |
338 | + | |
339 | + | |
340 | +Подати цінову пропозицію на лоти | |
341 | + [Arguments] ${username} ${tender_uaid} ${bid} ${lots_ids} | |
342 | + ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | |
343 | + : FOR ${index} ${lot_id} IN ENUMERATE @{lots_ids} | |
344 | + \ ${lot_index}= get_object_index_by_id ${tender.data.lots} ${lot_id} | |
345 | + \ ${lot_id}= Get Variable Value ${tender.data.lots[${lot_index}].id} | |
346 | + \ Set To Dictionary ${bid.data.lotValues[${index}]} relatedLot=${lot_id} | |
347 | + ${reply}= openprocurement_client.Подати цінову пропозицію ${username} ${tender_uaid} ${bid} | |
348 | + [return] ${reply} | |
333 | 349 | |
334 | 350 | ############################################################################## |
335 | 351 | # Claims |
... | ... | @@ -426,7 +442,7 @@ Library openprocurement_client_helper.py |
426 | 442 | Підтвердити постачальника |
427 | 443 | [Documentation] |
428 | 444 | ... [Arguments] Username, tender uaid and number of the award to confirm |
429 | - ... Find tender using uaid, get data from confirm_supplier and call patch_award | |
445 | + ... Find tender using uaid, create dict with confirmation data and call patch_award | |
430 | 446 | ... [Return] Nothing |
431 | 447 | [Arguments] ${username} ${tender_uaid} ${award_num} |
432 | 448 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
... | ... | @@ -467,20 +483,6 @@ Library openprocurement_client_helper.py |
467 | 483 | # Limited procurement |
468 | 484 | ############################################################################## |
469 | 485 | |
470 | -Модифікувати закупівлю | |
471 | - [Documentation] | |
472 | - ... [Arguments] Username and tender uaid | |
473 | - ... Find tender using uaid, get data from test_additional_items_data and call patch_tender | |
474 | - ... [Return] Nothing | |
475 | - [Arguments] ${username} ${tender_uaid} | |
476 | - ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | |
477 | - ${data}= test_additional_items_data ${tender['data']['id']} ${tender['access']['token']} | |
478 | - Log ${data} | |
479 | - Set To Dictionary ${USERS.users['${tender_owner}']} additional_items=${data['data']['items']} | |
480 | - ${reply}= Call Method ${USERS.users['${username}'].client} patch_tender ${data} | |
481 | - Log ${reply} | |
482 | - | |
483 | - | |
484 | 486 | Додати і підтвердити постачальника |
485 | 487 | [Documentation] |
486 | 488 | ... [Arguments] Username, tender uaid and supplier data | ... | ... |
... | ... | @@ -42,7 +42,7 @@ Default: |
42 | 42 | Quinta: |
43 | 43 | intervals: |
44 | 44 | default: |
45 | - enquiry: [0, 2] | |
45 | + enquiry: [0, 3] | |
46 | 46 | tender: [0, 5] |
47 | 47 | openua: |
48 | 48 | tender: [1, 15] |
... | ... | @@ -70,7 +70,10 @@ DZO: |
70 | 70 | intervals: |
71 | 71 | default: |
72 | 72 | enquiry: [0, 20] |
73 | - tender: [0, 15] | |
73 | + tender: [0, 20] | |
74 | + openua: | |
75 | + accelerator: 720 | |
76 | + tender: [0, 30] | |
74 | 77 | keywords_file: dzo |
75 | 78 | roles: |
76 | 79 | tender_owner: DZO_Owner |
... | ... | @@ -84,11 +87,12 @@ Newtend: |
84 | 87 | provider: Newtend_Provider1 |
85 | 88 | tender_owner: Newtend_Owner |
86 | 89 | viewer: Newtend_Viewer |
90 | + timeout_on_wait: 60 | |
87 | 91 | PrivatMarket: |
88 | 92 | intervals: |
89 | 93 | default: |
90 | - enquiry: [0, 2] | |
91 | - tender: [0, 5] | |
94 | + enquiry: [0, 15] | |
95 | + tender: [0, 15] | |
92 | 96 | keywords_file: privatmarket |
93 | 97 | roles: |
94 | 98 | provider: PrivatMarket_Provider |
... | ... | @@ -109,13 +113,14 @@ Prom: |
109 | 113 | Publicbid: |
110 | 114 | intervals: |
111 | 115 | default: |
112 | - enquiry: [21, 15] | |
113 | - tender: [1, 15] | |
116 | + enquiry: [1, 10] | |
117 | + tender: [1, 12] | |
114 | 118 | keywords_file: publicbid |
115 | 119 | roles: |
116 | 120 | provider: Publicbid_Provider1 |
117 | 121 | tender_owner: Publicbid_Owner |
118 | 122 | viewer: Publicbid_Viewer |
123 | + timeout_on_wait: 120 | |
119 | 124 | PublicPortal: |
120 | 125 | keywords_file: publicportal |
121 | 126 | roles: | ... | ... |
... | ... | @@ -11,6 +11,9 @@ users: |
11 | 11 | Tender_Viewer: |
12 | 12 | api_key: "" |
13 | 13 | broker: Quinta |
14 | + browser: firefox | |
15 | + position: [0, 0] | |
16 | + size: [1366, 800] | |
14 | 17 | E-tender_Owner: |
15 | 18 | broker: E-tender |
16 | 19 | homepage: "http://bid.uat.e-tender.biz/#/" |
... | ... | @@ -89,7 +92,7 @@ users: |
89 | 92 | size: [800, 700] |
90 | 93 | Newtend_Viewer: |
91 | 94 | broker: Newtend |
92 | - homepage: "http://openprocurement:test@dev23.newtend.com/opc/tenders" | |
95 | + homepage: "http://dev23.newtend.com/opc" | |
93 | 96 | browser: chrome |
94 | 97 | position: [800, 400] |
95 | 98 | size: [800, 700] | ... | ... |
... | ... | @@ -14,7 +14,7 @@ def create_fake_sentence(): |
14 | 14 | return fake.sentence(nb_words=10, variable_nb_words=True) |
15 | 15 | |
16 | 16 | |
17 | -def description_with_id(prefix, sentence): | |
17 | +def field_with_id(prefix, sentence): | |
18 | 18 | return "{}-{}: {}".format(prefix, fake.uuid4()[:8], sentence) |
19 | 19 | |
20 | 20 | |
... | ... | @@ -57,7 +57,8 @@ def test_tender_data(intervals, periods=("enquiry", "tender")): |
57 | 57 | "contactPoint": { |
58 | 58 | "name": fake.name(), |
59 | 59 | "telephone": fake.phone_number() |
60 | - } | |
60 | + }, | |
61 | + "kind": "other" | |
61 | 62 | }, |
62 | 63 | "value": { |
63 | 64 | "amount": 50000.99, |
... | ... | @@ -103,7 +104,7 @@ def test_tender_data_limited(intervals, procurement_method_type): |
103 | 104 | "id": "55523100-3", |
104 | 105 | "scheme": "CPV" |
105 | 106 | }, |
106 | - "description": description_with_id('i', fake.sentence(nb_words=10, variable_nb_words=True)), | |
107 | + "description": field_with_id('i', fake.sentence(nb_words=10, variable_nb_words=True)), | |
107 | 108 | "id": "2dc54675d6364e2baffbc0f8e74432ac", |
108 | 109 | "deliveryDate": { |
109 | 110 | "endDate": (now + timedelta(days=5)).isoformat() |
... | ... | @@ -123,7 +124,7 @@ def test_tender_data_limited(intervals, procurement_method_type): |
123 | 124 | } |
124 | 125 | } |
125 | 126 | ], |
126 | - "owner": "test.quintagroup.com", | |
127 | + "mode": "test", | |
127 | 128 | "procurementMethod": "limited", |
128 | 129 | "procurementMethodType": procurement_method_type, |
129 | 130 | "procuringEntity": |
... | ... | @@ -148,7 +149,8 @@ def test_tender_data_limited(intervals, procurement_method_type): |
148 | 149 | "legalName": u"Заклад \"Загальноосвітня школа І-ІІІ ступенів № 10 Вінницької міської ради\"", |
149 | 150 | "scheme": u"UA-EDR" |
150 | 151 | }, |
151 | - "name": u"ЗОСШ #10 м.Вінниці" | |
152 | + "name": u"ЗОСШ #10 м.Вінниці", | |
153 | + "kind": "general" | |
152 | 154 | }, |
153 | 155 | "value": { |
154 | 156 | "amount": 500000, |
... | ... | @@ -194,31 +196,25 @@ def test_tender_data_multiple_items(intervals): |
194 | 196 | return t_data |
195 | 197 | |
196 | 198 | |
197 | -def test_tender_data_multiple_lots(t_data): | |
199 | +def test_tender_data_multiple_lots(intervals): | |
200 | + tender = test_tender_data(intervals) | |
198 | 201 | first_lot_id = "3c8f387879de4c38957402dbdb8b31af" |
199 | - second_lot_id = "bcac8d2ceb5f4227b841a2211f5cb646" | |
200 | - | |
201 | - for item in t_data['data']['items'][:-1]: | |
202 | - item['relatedLot'] = first_lot_id | |
203 | - t_data['data']['items'][-1]['relatedLot'] = second_lot_id | |
204 | - t_data['data']['lots'] = [] | |
205 | - for _ in range(2): | |
206 | - new_lot = test_lot_data() | |
207 | - t_data['data']['lots'].append(new_lot) | |
208 | - t_data['data']['lots'][0]['id'] = first_lot_id | |
209 | - t_data['data']['lots'][1]['id'] = second_lot_id | |
210 | - return t_data | |
202 | + tender['items'][0]['relatedLot'] = first_lot_id | |
203 | + tender['lots'] = [test_lot_data()] | |
204 | + tender['lots'][0]['id'] = first_lot_id | |
205 | + return tender | |
211 | 206 | |
212 | 207 | |
213 | -def test_meat_tender_data(tender): | |
208 | +def test_tender_data_meat(intervals): | |
209 | + tender = munchify(test_tender_data(intervals)) | |
214 | 210 | item_id = "edd0032574bf4402877ad5f362df225a" |
215 | - tender.data['items'][0].id = item_id | |
216 | - tender.data.features = [ | |
211 | + tender['items'][0].id = item_id | |
212 | + tender.features = [ | |
217 | 213 | { |
218 | 214 | "code": "ee3e24bc17234a41bd3e3a04cc28e9c6", |
219 | 215 | "featureOf": "tenderer", |
220 | - "title": "Термін оплати", | |
221 | - "description": description_with_id('f', "Умови відстрочки платежу після поставки товару"), | |
216 | + "title": field_with_id('f', "Термін оплати"), | |
217 | + "description": "Умови відстрочки платежу після поставки товару", | |
222 | 218 | "enum": [ |
223 | 219 | { |
224 | 220 | "value": 0.15, |
... | ... | @@ -242,8 +238,8 @@ def test_meat_tender_data(tender): |
242 | 238 | "code": "48cfd91612c04125ab406374d7cc8d93", |
243 | 239 | "featureOf": "item", |
244 | 240 | "relatedItem": item_id, |
245 | - "title": "Сорт", | |
246 | - "description": description_with_id('f', "Сорт продукції"), | |
241 | + "title": field_with_id('f', "Сорт"), | |
242 | + "description": "Сорт продукції", | |
247 | 243 | "enum": [ |
248 | 244 | { |
249 | 245 | "value": 0.05, |
... | ... | @@ -263,7 +259,7 @@ def test_meat_tender_data(tender): |
263 | 259 | return tender |
264 | 260 | |
265 | 261 | |
266 | -def test_question_data(lot=False): | |
262 | +def test_question_data(): | |
267 | 263 | data = munchify({ |
268 | 264 | "data": { |
269 | 265 | "author": { |
... | ... | @@ -287,12 +283,10 @@ def test_question_data(lot=False): |
287 | 283 | }, |
288 | 284 | "name": fake.company() |
289 | 285 | }, |
290 | - "description": description_with_id('q', fake.sentence(nb_words=10, variable_nb_words=True)), | |
291 | - "title": fake.sentence(nb_words=6, variable_nb_words=True) | |
286 | + "description": fake.sentence(nb_words=10, variable_nb_words=True), | |
287 | + "title": field_with_id('q', fake.sentence(nb_words=6, variable_nb_words=True)) | |
292 | 288 | } |
293 | 289 | }) |
294 | - if lot: | |
295 | - data = test_lot_question_data(data) | |
296 | 290 | return data |
297 | 291 | |
298 | 292 | |
... | ... | @@ -427,24 +421,6 @@ def test_submit_claim_data(claim_id): |
427 | 421 | }) |
428 | 422 | |
429 | 423 | |
430 | -def test_additional_items_data(tender_id, access_token): | |
431 | - return munchify({ | |
432 | - "access": { | |
433 | - "token": access_token | |
434 | - }, | |
435 | - "data": { | |
436 | - "id": tender_id, | |
437 | - "items": [{ | |
438 | - "unit": { | |
439 | - "code": "MON", | |
440 | - "name": "month" | |
441 | - }, | |
442 | - "quantity": 9 | |
443 | - }] | |
444 | - } | |
445 | - }) | |
446 | - | |
447 | - | |
448 | 424 | def test_complaint_reply_data(): |
449 | 425 | return munchify({ |
450 | 426 | "data": { |
... | ... | @@ -453,7 +429,7 @@ def test_complaint_reply_data(): |
453 | 429 | }) |
454 | 430 | |
455 | 431 | |
456 | -def test_bid_data(above_threshold=False): | |
432 | +def test_bid_data(mode): | |
457 | 433 | bid = munchify({ |
458 | 434 | "data": { |
459 | 435 | "tenderers": [ |
... | ... | @@ -477,23 +453,25 @@ def test_bid_data(above_threshold=False): |
477 | 453 | }, |
478 | 454 | "name": fake.company() |
479 | 455 | } |
480 | - ], | |
481 | - "value": { | |
482 | - "currency": "UAH", | |
483 | - "amount": 500, | |
484 | - "valueAddedTaxIncluded": True | |
485 | - } | |
456 | + ] | |
486 | 457 | } |
487 | 458 | }) |
488 | - if above_threshold: | |
459 | + if 'open' in mode: | |
489 | 460 | bid.data['selfEligible'] = True |
490 | 461 | bid.data['selfQualified'] = True |
462 | + if mode == 'multiLot': | |
463 | + bid.data.lotValues = list() | |
464 | + for _ in range(2): | |
465 | + bid.data.lotValues.append(test_bid_value()) | |
466 | + else: | |
467 | + bid.data.update(test_bid_value()) | |
468 | + if mode == 'meat': | |
469 | + bid.update(test_bid_params()) | |
491 | 470 | return bid |
492 | 471 | |
493 | 472 | |
494 | -def test_bid_data_meat_tender(): | |
495 | - bid = test_bid_data() | |
496 | - bid.data.update({ | |
473 | +def test_bid_params(): | |
474 | + return munchify({ | |
497 | 475 | "parameters": [ |
498 | 476 | { |
499 | 477 | "code": "ee3e24bc17234a41bd3e3a04cc28e9c6", |
... | ... | @@ -505,47 +483,15 @@ def test_bid_data_meat_tender(): |
505 | 483 | } |
506 | 484 | ] |
507 | 485 | }) |
508 | - return bid | |
509 | - | |
510 | 486 | |
511 | -def test_lots_bid_data(): | |
512 | - bid = test_bid_data() | |
513 | - del bid.data.value | |
514 | - bid.data.update({ | |
515 | - "lotValues": [ | |
516 | - { | |
517 | - "value": { | |
518 | - "currency": "UAH", | |
519 | - "amount": fake.random_int(max=1999), | |
520 | - "valueAddedTaxIncluded": True | |
521 | - }, | |
522 | - "relatedLot": "3c8f387879de4c38957402dbdb8b31af", | |
523 | - "date": "2015-11-01T12:43:12.482645+02:00" | |
524 | - }, | |
525 | - { | |
487 | +def test_bid_value(): | |
488 | + return munchify({ | |
526 | 489 | "value": { |
527 | 490 | "currency": "UAH", |
528 | 491 | "amount": fake.random_int(max=1999), |
529 | 492 | "valueAddedTaxIncluded": True |
530 | - }, | |
531 | - "relatedLot": "bcac8d2ceb5f4227b841a2211f5cb646", | |
532 | - "date": "2015-11-01T12:43:12.482645+02:00" | |
533 | - } | |
534 | - ] | |
535 | - }) | |
536 | - return bid | |
537 | - | |
538 | - | |
539 | -def auction_bid(): | |
540 | - return munchify({ | |
541 | - "data": { | |
542 | - "value": { | |
543 | - "amount": 200, | |
544 | - "currency": "UAH", | |
545 | - "valueAddedTaxIncluded": True | |
546 | - } | |
547 | - } | |
548 | - }) | |
493 | + } | |
494 | + }) | |
549 | 495 | |
550 | 496 | |
551 | 497 | def test_supplier_data(): |
... | ... | @@ -589,8 +535,8 @@ def test_award_data(): |
589 | 535 | |
590 | 536 | def test_item_data(): |
591 | 537 | now = get_now() |
592 | - return { | |
593 | - "description": description_with_id('i', fake.catch_phrase()), | |
538 | + return munchify({ | |
539 | + "description": field_with_id('i', fake.catch_phrase()), | |
594 | 540 | "deliveryDate": { |
595 | 541 | "endDate": (now + timedelta(days=5)).isoformat() |
596 | 542 | }, |
... | ... | @@ -628,7 +574,7 @@ def test_item_data(): |
628 | 574 | "code": u"KGM" |
629 | 575 | }, |
630 | 576 | "quantity": fake.pyint() |
631 | - } | |
577 | + }) | |
632 | 578 | |
633 | 579 | |
634 | 580 | def test_invalid_features_data(): |
... | ... | @@ -672,8 +618,8 @@ def test_invalid_features_data(): |
672 | 618 | def test_lot_data(): |
673 | 619 | return munchify( |
674 | 620 | { |
675 | - "description": description_with_id('l', fake.sentence(nb_words=10, variable_nb_words=True)), | |
676 | - "title": fake.sentence(nb_words=6, variable_nb_words=True), | |
621 | + "description": fake.sentence(nb_words=10, variable_nb_words=True), | |
622 | + "title": field_with_id('l', fake.sentence(nb_words=6, variable_nb_words=True)), | |
677 | 623 | "value": { |
678 | 624 | "currency": "UAH", |
679 | 625 | "amount": 2000 + fake.pyfloat(left_digits=4, right_digits=1, positive=True), |
... | ... | @@ -688,22 +634,19 @@ def test_lot_data(): |
688 | 634 | }) |
689 | 635 | |
690 | 636 | |
691 | -def test_lot_document_data(document, lot_id="3c8f387879de4c38957402dbdb8b31af"): | |
692 | - lot_document = {"documentOf": "lot", "relatedItem": lot_id} | |
693 | - lot_document.update(document.data) | |
694 | - return munchify({"data": lot_document}) | |
637 | +def test_lot_document_data(document, lot_id): | |
638 | + document.data.update({"documentOf": "lot", "relatedItem": lot_id}) | |
639 | + return munchify(document) | |
695 | 640 | |
696 | 641 | |
697 | -def test_lot_question_data(question, lot_id="3c8f387879de4c38957402dbdb8b31af"): | |
698 | - lot_question = {"questionOf": "lot", "relatedItem": lot_id} | |
699 | - lot_question.update(question.data) | |
700 | - return munchify({"data": lot_question}) | |
642 | +def test_lot_question_data(question, lot_id): | |
643 | + question.data.update({"questionOf": "lot", "relatedItem": lot_id}) | |
644 | + return munchify(question) | |
701 | 645 | |
702 | 646 | |
703 | -def test_lot_complaint_data(complaint, lot_id="3c8f387879de4c38957402dbdb8b31af"): | |
704 | - lot_complaint = {"complaintOf": "lot", "relatedItem": lot_id} | |
705 | - lot_complaint.update(complaint.data) | |
706 | - return munchify({"data": lot_complaint}) | |
647 | +def test_lot_complaint_data(complaint, lot_id): | |
648 | + complaint.data.update({"complaintOf": "lot", "relatedItem": lot_id}) | |
649 | + return munchify(complaint) | |
707 | 650 | |
708 | 651 | |
709 | 652 | def test_tender_data_openua(intervals): |
... | ... | @@ -718,6 +661,7 @@ def test_tender_data_openua(intervals): |
718 | 661 | t_data['procurementMethodType'] = 'aboveThresholdUA' |
719 | 662 | t_data['procurementMethodDetails'] = 'quick, ' \ |
720 | 663 | 'accelerator={}'.format(accelerator) |
664 | + t_data['procuringEntity']['kind'] = 'general' | |
721 | 665 | return t_data |
722 | 666 | |
723 | 667 | |
... | ... | @@ -739,4 +683,5 @@ def test_tender_data_openeu(intervals): |
739 | 683 | t_data['procuringEntity']['contactPoint']['name_en'] = fake_en.name() |
740 | 684 | t_data['procuringEntity']['contactPoint']['availableLanguage'] = "en" |
741 | 685 | t_data['procuringEntity']['identifier']['legalName_en'] = "Institution \"Vinnytsia City Council primary and secondary general school № 10\"" |
686 | + t_data['procuringEntity']['kind'] = 'general' | |
742 | 687 | return t_data | ... | ... |
... | ... | @@ -54,36 +54,80 @@ Set Suite Variable With Default Value |
54 | 54 | Завантажуємо дані про користувачів і майданчики |
55 | 55 | Log ${broker} |
56 | 56 | Log ${role} |
57 | + # Suite variable; should be present in every test suite | |
58 | + # in `*** Variables ***` section | |
59 | + Log Many @{used_roles} | |
57 | 60 | |
61 | + # Load brokers data | |
58 | 62 | ${file_path}= Get Variable Value ${BROKERS_FILE} brokers.yaml |
59 | - ${BROKERS}= load_initial_data_from ${file_path} | |
63 | + ${BROKERS}= load_data_from ${file_path} mode=brokers | |
60 | 64 | Log ${BROKERS} |
61 | 65 | Set Suite Variable ${BROKERS} |
66 | + # List of currently used brokers | |
67 | + ${used_brokers}= Create List | |
62 | 68 | |
69 | + # Load users data | |
63 | 70 | ${file_path}= Get Variable Value ${USERS_FILE} users.yaml |
64 | - ${USERS}= load_initial_data_from ${file_path} | |
65 | - Set Global Variable ${USERS} | |
66 | - | |
67 | - Set Suite Variable With Default Value ${role} ${BROKERS['${broker}'].roles.${role}} | |
68 | - Set Suite Variable With Default Value tender_owner Tender_Owner | |
69 | - Set Suite Variable With Default Value provider Tender_User | |
70 | - Set Suite Variable With Default Value provider1 Tender_User1 | |
71 | - Set Suite Variable With Default Value viewer Tender_Viewer | |
72 | - ${active_users}= Create Dictionary tender_owner=${tender_owner} provider=${provider} provider1=${provider1} viewer=${viewer} | |
73 | - | |
74 | - ${users_list}= Get Dictionary Items ${USERS.users} | |
75 | - :FOR ${username} ${user_data} IN @{users_list} | |
76 | - \ Log ${active_users} | |
77 | - \ Log ${username} | |
71 | + ${USERS}= load_data_from ${file_path} | |
72 | + Log ${USERS.users} | |
73 | + Set Suite Variable ${USERS} | |
74 | + # List of currently used users | |
75 | + ${used_users}= Create List | |
76 | + | |
77 | + # Handle `-v role:something` | |
78 | + Run Keyword Unless '${role}' in @{used_roles} | |
79 | + ... Log | |
80 | + ... Role ${role} is not used in this test suite. | |
81 | + ... WARN | |
82 | + Set Suite Variable With Default Value | |
83 | + ... ${role} | |
84 | + ... ${BROKERS['${broker}'].roles.${role}} | |
85 | + | |
86 | + # Set default value for each role if it is not set yet; | |
87 | + # fill `used_users`; | |
88 | + # fill `used_brokers`. | |
89 | + # | |
90 | + # Don't even ask how this works! | |
91 | + :FOR ${tmp_role} IN @{used_roles} | |
92 | + \ Set Suite Variable With Default Value | |
93 | + \ ... ${tmp_role} | |
94 | + \ ... ${BROKERS['Quinta'].roles.${tmp_role}} | |
95 | + \ Append To List ${used_users} ${${tmp_role}} | |
96 | + \ Append To List ${used_brokers} ${USERS.users.${${tmp_role}}.broker} | |
97 | + # Since `@{used_roles}` is already a suite variable, | |
98 | + # let's make `@{used_brokers}` alike. | |
99 | + ${used_brokers}= Remove Duplicates ${used_brokers} | |
100 | + Set Suite Variable ${used_brokers} | |
101 | + # We need to create two lists since Robot Framework doesn't support | |
102 | + # dicts in `:FOR` loops. | |
103 | + Log Many @{used_users} | |
104 | + Log Many @{used_brokers} | |
105 | + | |
106 | + # A list of all users in users file | |
107 | + ${known_users}= Get Dictionary Keys ${USERS.users} | |
108 | + | |
109 | + # Check whether users file contains an entry for each | |
110 | + # selected user before preparing any clients | |
111 | + :FOR ${username} IN @{used_users} | |
112 | + \ List Should Contain Value | |
113 | + \ ... ${known_users} | |
114 | + \ ... ${username} | |
115 | + \ ... msg=User ${username} not found in users file! | |
116 | + | |
117 | + # Prepare a client for each user | |
118 | + :FOR ${username} IN @{used_users} | |
78 | 119 | \ ${munch_dict}= munch_dict data=${True} |
79 | - \ Log Many ${munch_dict} | |
80 | - \ ${status}= Run Keyword And Return Status Dictionary Should Contain Value ${active_users} ${username} | |
81 | - \ ${keywords_file}= Get Broker Property By Username ${username} keywords_file | |
82 | - \ Run Keyword If ${status} Завантажуємо бібліотеку з реалізацією для майданчика ${keywords_file} | |
83 | - \ Run Keyword If ${status} Викликати для учасника ${username} Підготувати клієнт для користувача | |
84 | - \ Run Keyword If ${status} Set To Dictionary ${USERS.users['${username}']} tender_data=${munch_dict} | |
120 | + \ ${keywords_file}= Get Broker Property ${USERS.users.${username}.broker} keywords_file | |
121 | + \ Завантажуємо бібліотеку з реалізацією для майданчика ${keywords_file} | |
122 | + \ Run As ${username} Підготувати клієнт для користувача | |
85 | 123 | \ ${LAST_REFRESH_DATE}= Get Current TZdate |
86 | - \ Set To Dictionary ${USERS.users['${username}']} LAST_REFRESH_DATE ${LAST_REFRESH_DATE} | |
124 | + \ Set To Dictionary ${USERS} ${username}=${USERS.users.${username}} | |
125 | + \ Set To Dictionary ${USERS.${username}} tender_data=${munch_dict} | |
126 | + \ Set To Dictionary ${USERS.${username}} LAST_REFRESH_DATE ${LAST_REFRESH_DATE} | |
127 | + | |
128 | + # Drop all unused users | |
129 | + Keep In Dictionary ${USERS.users} @{used_users} | |
130 | + Log Many @{USERS} | |
87 | 131 | |
88 | 132 | |
89 | 133 | Get Broker Property |
... | ... | @@ -92,11 +136,9 @@ Get Broker Property |
92 | 136 | ... This keyword returns a property of specified broker |
93 | 137 | ... if that property exists, otherwise, it returns a |
94 | 138 | ... default value. |
95 | - ${status}= Run Keyword And Return Status Should Contain ${BROKERS['${broker_name}']} ${property} | |
96 | - Return From Keyword If ${status} ${BROKERS['${broker_name}'].${property}} | |
97 | - # If broker doesn't have that property, fall back to default value | |
98 | - Should Contain ${BROKERS['Default']} ${property} | |
99 | - [return] ${BROKERS['Default'].${property}} | |
139 | + Run Keyword If '${broker_name}'=='${None}' Fail \${broker_name} is NoneType | |
140 | + Should Contain ${BROKERS['${broker_name}']} ${property} | |
141 | + Return From Keyword ${BROKERS['${broker_name}'].${property}} | |
100 | 142 | |
101 | 143 | |
102 | 144 | Get Broker Property By Username |
... | ... | @@ -115,18 +157,22 @@ Get Broker Property By Username |
115 | 157 | ... tender_uaid=${TENDER['TENDER_UAID']} |
116 | 158 | ... last_modification_date=${TENDER['LAST_MODIFICATION_DATE']} |
117 | 159 | ... tender_owner=${USERS.users['${tender_owner}'].broker} |
160 | + ... mode=${mode} | |
118 | 161 | Run Keyword If '${USERS.users['${tender_owner}'].broker}' == 'Quinta' |
119 | 162 | ... Run Keyword And Ignore Error |
120 | 163 | ... Set To Dictionary ${artifact} |
121 | 164 | ... access_token=${USERS.users['${tender_owner}'].access_token} |
122 | 165 | ... tender_id=${USERS.users['${tender_owner}'].tender_data.data.id} |
166 | + ${status} ${lots_ids}= Run Keyword And Ignore Error Отримати ідентифікатори об’єктів ${viewer} lots | |
167 | + Run Keyword If ${status}'=='PASS' | |
168 | + ... Set To Dictionary ${artifact} lots=${lots_ids} | |
123 | 169 | Log ${artifact} |
124 | 170 | log_object_data ${artifact} artifact update=${True} |
125 | 171 | |
126 | 172 | |
127 | 173 | Завантажити дані про тендер |
128 | 174 | ${file_path}= Get Variable Value ${ARTIFACT_FILE} artifact.yaml |
129 | - ${ARTIFACT}= load_initial_data_from ${file_path} | |
175 | + ${ARTIFACT}= load_data_from ${file_path} | |
130 | 176 | Run Keyword If '${USERS.users['${tender_owner}'].broker}' == 'Quinta' |
131 | 177 | ... Set To Dictionary ${USERS.users['${tender_owner}']} access_token=${ARTIFACT.access_token} |
132 | 178 | ${TENDER}= Create Dictionary |
... | ... | @@ -137,9 +183,7 @@ Get Broker Property By Username |
137 | 183 | |
138 | 184 | |
139 | 185 | Підготовка даних для створення тендера |
140 | - ${custom_intervals}= Get Broker Property By Username ${tender_owner} intervals | |
141 | - ${default_intervals}= Get Broker Property Default intervals | |
142 | - ${period_intervals}= merge_dicts ${default_intervals} ${custom_intervals} | |
186 | + ${period_intervals}= compute_intrs ${BROKERS} ${used_brokers} | |
143 | 187 | ${tender_data}= prepare_test_tender_data ${period_intervals} ${mode} |
144 | 188 | ${TENDER}= Create Dictionary |
145 | 189 | Set Global Variable ${TENDER} |
... | ... | @@ -148,6 +192,11 @@ Get Broker Property By Username |
148 | 192 | [return] ${tender_data} |
149 | 193 | |
150 | 194 | |
195 | +Підготовка даних для створення предмету закупівлі | |
196 | + ${item}= test_item_data | |
197 | + [Return] ${item} | |
198 | + | |
199 | + | |
151 | 200 | Підготовка даних для створення лоту |
152 | 201 | ${lot}= test_lot_data |
153 | 202 | ${reply}= Create Dictionary data=${lot} |
... | ... | @@ -171,8 +220,7 @@ Get Broker Property By Username |
171 | 220 | |
172 | 221 | |
173 | 222 | Підготовка даних для запитання |
174 | - [Arguments] ${lot}=${False} | |
175 | - ${question}= test_question_data ${lot} | |
223 | + ${question}= test_question_data | |
176 | 224 | [Return] ${question} |
177 | 225 | |
178 | 226 | |
... | ... | @@ -182,8 +230,7 @@ Get Broker Property By Username |
182 | 230 | |
183 | 231 | |
184 | 232 | Підготувати дані для подання пропозиції |
185 | - [Arguments] ${aboveThreshold}=${False} | |
186 | - ${supplier_data}= test_bid_data ${aboveThreshold} | |
233 | + ${supplier_data}= test_bid_data ${mode} | |
187 | 234 | [Return] ${supplier_data} |
188 | 235 | |
189 | 236 | |
... | ... | @@ -403,13 +450,26 @@ Get Broker Property By Username |
403 | 450 | Отримати дані із об’єкта тендера |
404 | 451 | [Arguments] ${username} ${object_id} ${field_name} |
405 | 452 | ${object_type}= get_object_type_by_id ${object_id} |
406 | - ${status} ${value}= Run Keyword And Ignore Error Run As ${username} Отримати інформацію із запитання ${object_id} ${field_name} | |
453 | + ${status} ${value}= Run Keyword If '${object_type}'=='question' | |
454 | + ... Run Keyword And Ignore Error Run As ${username} Отримати інформацію із запитання ${object_id} ${field_name} | |
455 | + ... ELSE IF '${object_type}'=='lots' | |
456 | + ... Run Keyword And Ignore Error Run As ${username} Отримати інформацію із лоту ${object_id} ${field_name} | |
407 | 457 | ${field}= Отримати шлях до поля об’єкта ${username} ${field_name} ${object_id} |
408 | 458 | ${field_value}= Run Keyword IF '${status}'=='PASS' Set Variable ${value} |
409 | 459 | ... ELSE Run As ${username} Отримати інформацію із тендера ${field} |
410 | 460 | [return] ${field_value} |
411 | 461 | |
412 | 462 | |
463 | +Отримати ідентифікатори об’єктів | |
464 | + [Arguments] ${username} ${objects_type} | |
465 | + @{objects_ids}= Create List | |
466 | + @{objects}= Get from object ${USERS.users['${username}'].tender_data.data} ${objects_type} | |
467 | + :FOR ${obj} IN @{objects} | |
468 | + \ ${obj_id}= get_id_from_object ${obj} | |
469 | + \ Append To List ${objects_ids} ${obj_id} | |
470 | + [return] ${objects_ids} | |
471 | + | |
472 | + | |
413 | 473 | Викликати для учасника |
414 | 474 | [Arguments] ${username} ${command} @{arguments} |
415 | 475 | Run keyword unless '${WARN_RUN_AS}' == '${True}' |
... | ... | @@ -463,6 +523,20 @@ Require Failure |
463 | 523 | Run Keyword If ${sleep} > 0 Sleep ${sleep} |
464 | 524 | |
465 | 525 | |
526 | +Дочекатись дати початку періоду уточнень | |
527 | + [Arguments] ${username} | |
528 | + Log ${username} | |
529 | + # XXX: HACK: Same as below | |
530 | + ${status} ${date}= Run Keyword And Ignore Error | |
531 | + ... Set Variable | |
532 | + ... ${USERS.users['${username}'].tender_data.data.enquiryPeriod.startDate} | |
533 | + ${date}= Set Variable If | |
534 | + ... '${status}' == 'FAIL' | |
535 | + ... ${USERS.users['${tender_owner}'].initial_data.data.enquiryPeriod.startDate} | |
536 | + ... ${date} | |
537 | + Дочекатись дати ${date} | |
538 | + | |
539 | + | |
466 | 540 | Дочекатись дати початку прийому пропозицій |
467 | 541 | [Arguments] ${username} |
468 | 542 | Log ${username} |
... | ... | @@ -508,6 +582,11 @@ Require Failure |
508 | 582 | Дочекатись дати ${USERS.users['${username}'].tender_data.data.auctionPeriod.startDate} |
509 | 583 | |
510 | 584 | |
585 | +Відкрити сторінку аукціону для глядача | |
586 | + ${url}= Run as ${viewer} Отримати посилання на аукціон для глядача ${TENDER['TENDER_UAID']} | |
587 | + Open browser ${url} ${USERS.users['${viewer}'].browser} | |
588 | + | |
589 | + | |
511 | 590 | Дочекатись дати закінчення аукціону |
512 | 591 | [Arguments] ${username} |
513 | 592 | Log ${username} | ... | ... |
... | ... | @@ -8,17 +8,6 @@ Resource resource.robot |
8 | 8 | ############################################################################################## |
9 | 9 | # CANCELLATIONS |
10 | 10 | ############################################################################################## |
11 | -Можливість створити закупівлю для тестування скасування | |
12 | - ${tender_data}= Підготовка даних для створення тендера | |
13 | - ${adapted_data}= Адаптувати дані для оголошення тендера ${tender_owner} ${tender_data} | |
14 | - ${TENDER_UAID}= Викликати для учасника ${tender_owner} | |
15 | - ... Створити тендер | |
16 | - ... ${adapted_data} | |
17 | - Set To Dictionary ${TENDER} TENDER_UAID=${TENDER_UAID} | |
18 | - Set To Dictionary ${USERS.users['${tender_owner}']} initial_data=${adapted_data} | |
19 | - Log ${TENDER} | |
20 | - | |
21 | - | |
22 | 11 | Можливість скасувати закупівлю |
23 | 12 | ${cancellation_data}= Підготувати дані про скасування ${tender_owner} |
24 | 13 | Викликати для учасника ${tender_owner} |
... | ... | @@ -77,12 +66,6 @@ Resource resource.robot |
77 | 66 | ... ${TENDER['TENDER_UAID']} |
78 | 67 | |
79 | 68 | |
80 | -Можливість модифікації закупівлі | |
81 | - Викликати для учасника ${tender_owner} | |
82 | - ... Модифікувати закупівлю | |
83 | - ... ${TENDER['TENDER_UAID']} | |
84 | - | |
85 | - | |
86 | 69 | Можливість додати документацію до закупівлі |
87 | 70 | ${filepath}= create_fake_doc |
88 | 71 | Викликати для учасника ${tender_owner} |
... | ... | @@ -305,27 +288,21 @@ Resource resource.robot |
305 | 288 | ... items[${ITEMS_NUM}].description |
306 | 289 | |
307 | 290 | |
308 | -Відображення ідентифікатора номенклатури закупівлі | |
291 | +Відображення кількості номенклатури закупівлі | |
309 | 292 | Звірити поле тендера ${viewer} |
310 | 293 | ... ${USERS.users['${tender_owner}'].initial_data} |
311 | - ... items[${ITEMS_NUM}].id | |
312 | - | |
313 | - | |
314 | -Відображення кількості номенклатури закупівлі | |
315 | - Звірити поле тендера із значенням ${viewer} | |
316 | - ... ${USERS.users['${tender_owner}'].additional_items[${ITEMS_NUM}]['quantity']} | |
317 | 294 | ... items[${ITEMS_NUM}].quantity |
318 | 295 | |
319 | 296 | |
320 | 297 | Відображення назви одиниці номенклатури закупівлі |
321 | - Звірити поле тендера із значенням ${viewer} | |
322 | - ... ${USERS.users['${tender_owner}'].additional_items[${ITEMS_NUM}]['unit']['name']} | |
298 | + Звірити поле тендера ${viewer} | |
299 | + ... ${USERS.users['${tender_owner}'].initial_data} | |
323 | 300 | ... items[${ITEMS_NUM}].unit.name |
324 | 301 | |
325 | 302 | |
326 | 303 | Відображення коду одиниці номенклатури закупівлі |
327 | - Звірити поле тендера із значенням ${viewer} | |
328 | - ... ${USERS.users['${tender_owner}'].additional_items[${ITEMS_NUM}]['unit']['code']} | |
304 | + Звірити поле тендера ${viewer} | |
305 | + ... ${USERS.users['${tender_owner}'].initial_data} | |
329 | 306 | ... items[${ITEMS_NUM}].unit.code |
330 | 307 | |
331 | 308 | ... | ... |
... | ... | @@ -10,10 +10,9 @@ Suite Setup Test Suite Setup |
10 | 10 | Suite Teardown Test Suite Teardown |
11 | 11 | |
12 | 12 | *** Variables *** |
13 | -${mode} single | |
13 | +${mode} meat | |
14 | +@{used_roles} tender_owner provider provider1 viewer | |
14 | 15 | |
15 | -${role} viewer | |
16 | -${broker} Quinta | |
17 | 16 | |
18 | 17 | *** Test Cases *** |
19 | 18 | Можливість оголосити однопредметний тендер з неціновим показником |
... | ... | @@ -23,8 +22,7 @@ ${broker} Quinta |
23 | 22 | ... minimal |
24 | 23 | [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера), |
25 | 24 | [Teardown] Оновити LAST_MODIFICATION_DATE |
26 | - ${base_tender_data}= Підготовка даних для створення тендера | |
27 | - ${tender_data}= test_meat_tender_data ${base_tender_data} | |
25 | + ${tender_data}= Підготовка даних для створення тендера | |
28 | 26 | ${adapted_data}= Адаптувати дані для оголошення тендера ${tender_owner} ${tender_data} |
29 | 27 | ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${adapted_data} |
30 | 28 | Set To Dictionary ${USERS.users['${tender_owner}']} initial_data=${adapted_data} |
... | ... | @@ -33,7 +31,7 @@ ${broker} Quinta |
33 | 31 | |
34 | 32 | |
35 | 33 | Можливість знайти однопредметний тендер по ідентифікатору |
36 | - [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору | |
34 | + [Tags] ${USERS.users['${viewer}'].broker}: Можливість знайти тендер | |
37 | 35 | ... viewer tender_owner provider provider1 |
38 | 36 | ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} |
39 | 37 | ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} |
... | ... | @@ -59,7 +57,7 @@ ${broker} Quinta |
59 | 57 | #Подання пропозицій |
60 | 58 | |
61 | 59 | Відображення початку періоду прийому пропозицій оголошеного тендера |
62 | - [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору | |
60 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних тендера | |
63 | 61 | ... viewer provider provider1 |
64 | 62 | ... ${USERS.users['${viewer}'].broker} ${USERS.users['${provider}'].broker} |
65 | 63 | ... ${USERS.users['${provider1}'].broker} |
... | ... | @@ -78,7 +76,7 @@ ${broker} Quinta |
78 | 76 | [Setup] Дочекатись синхронізації з майданчиком ${provider} |
79 | 77 | Дочекатись дати початку прийому пропозицій ${provider} |
80 | 78 | sleep 90 |
81 | - ${bid}= test bid data | |
79 | + ${bid}= test bid data single | |
82 | 80 | Log ${bid} |
83 | 81 | ${failbid}= Require Failure ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} |
84 | 82 | log ${failbid} |
... | ... | @@ -89,7 +87,7 @@ ${broker} Quinta |
89 | 87 | ... provider |
90 | 88 | ... ${USERS.users['${provider}'].broker} |
91 | 89 | [Teardown] Оновити LAST_MODIFICATION_DATE |
92 | - ${bid}= test bid data meat tender | |
90 | + ${bid}= Підготувати дані для подання пропозиції | |
93 | 91 | Log ${bid} |
94 | 92 | ${bidresponses}= Create Dictionary |
95 | 93 | Set To Dictionary ${bidresponses} bid ${bid} |
... | ... | @@ -126,7 +124,7 @@ ${broker} Quinta |
126 | 124 | [Setup] Дочекатись синхронізації з майданчиком ${provider1} |
127 | 125 | [Teardown] Оновити LAST_MODIFICATION_DATE |
128 | 126 | Дочекатись дати початку прийому пропозицій ${provider1} |
129 | - ${bid}= test bid data meat tender | |
127 | + ${bid}= Підготувати дані для подання пропозиції | |
130 | 128 | Log ${bid} |
131 | 129 | ${bidresponses}= Create Dictionary |
132 | 130 | Set To Dictionary ${bidresponses} bid ${bid} |
... | ... | @@ -147,23 +145,105 @@ ${broker} Quinta |
147 | 145 | [Setup] Дочекатись синхронізації з майданчиком ${viewer} |
148 | 146 | Отримати дані із тендера ${viewer} auctionPeriod.startDate |
149 | 147 | |
150 | - | |
151 | -Очікування аукціону | |
152 | - [Tags] ${USERS.users['${viewer}'].broker}: Очікування аукціону | |
148 | +Можливість дочекатися початку аукціону | |
149 | + [Tags] ${USERS.users['${viewer}'].broker}: Можливість дочекатися початку аукціону | |
153 | 150 | ... viewer |
154 | 151 | ... ${USERS.users['${viewer}'].broker} |
155 | 152 | Дочекатись дати початку аукціону ${viewer} |
156 | - sleep 1500 | |
157 | 153 | |
154 | +Можливість дочекатися завершення аукціону | |
155 | + [Tags] ${USERS.users['${viewer}'].broker}: Можливість дочекатися завершення аукціону | |
156 | + ... viewer | |
157 | + ... ${USERS.users['${viewer}'].broker} | |
158 | + [Teardown] Оновити LAST_MODIFICATION_DATE | |
159 | + Відкрити сторінку аукціону для глядача | |
160 | + Wait Until Keyword Succeeds 61 times 30 s Page should contain Аукціон завершився | |
161 | + Wait Until Keyword Succeeds 5 times 30 s Page should not contain очікуємо розкриття учасників | |
162 | + Close browser | |
163 | + | |
164 | +Відображення дати завершення аукціону | |
165 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
166 | + ... viewer | |
167 | + ... ${USERS.users['${viewer}'].broker} | |
168 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
169 | + Отримати дані із тендера ${viewer} auctionPeriod.endDate | |
170 | + | |
171 | +Відображення значення ставки першої пропозиції | |
172 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення пропозицій | |
173 | + ... viewer | |
174 | + ... ${USERS.users['${viewer}'].broker} | |
175 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
176 | + Отримати дані із тендера ${viewer} bids[0].value.amount | |
177 | + | |
178 | +Відображення значення нецінового критерію першої пропозиції | |
179 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення пропозицій | |
180 | + ... viewer | |
181 | + ... ${USERS.users['${viewer}'].broker} | |
182 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
183 | + Отримати дані із тендера ${viewer} bids[0].parameters | |
184 | + | |
185 | +Відображення дати першої пропозиції | |
186 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення пропозицій | |
187 | + ... viewer | |
188 | + ... ${USERS.users['${viewer}'].broker} | |
189 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
190 | + Отримати дані із тендера ${viewer} bids[0].date | |
191 | + | |
192 | +Відображення назви учасника першої пропозиції | |
193 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення пропозицій | |
194 | + ... viewer | |
195 | + ... ${USERS.users['${viewer}'].broker} | |
196 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
197 | + Отримати дані із тендера ${viewer} bids[0].tenderers[0].name | |
198 | + | |
199 | +Відображення значення ставки другої пропозиції | |
200 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення пропозицій | |
201 | + ... viewer | |
202 | + ... ${USERS.users['${viewer}'].broker} | |
203 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
204 | + Отримати дані із тендера ${viewer} bids[1].value.amount | |
205 | + | |
206 | +Відображення значення нецінового критерію другої пропозиції | |
207 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення пропозицій | |
208 | + ... viewer | |
209 | + ... ${USERS.users['${viewer}'].broker} | |
210 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
211 | + Отримати дані із тендера ${viewer} bids[1].parameters | |
212 | + | |
213 | +Відображення дати другої пропозиції | |
214 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення пропозицій | |
215 | + ... viewer | |
216 | + ... ${USERS.users['${viewer}'].broker} | |
217 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
218 | + Отримати дані із тендера ${viewer} bids[1].date | |
219 | + | |
220 | +Відображення назви учасника другої пропозиції | |
221 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення пропозицій | |
222 | + ... viewer | |
223 | + ... ${USERS.users['${viewer}'].broker} | |
224 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
225 | + Отримати дані із тендера ${viewer} bids[1].tenderers[0].name | |
226 | + | |
227 | +Відображення значення ставки пропозиції переможця | |
228 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення даних про постачальника | |
229 | + ... viewer | |
230 | + ... ${USERS.users['${viewer}'].broker} | |
231 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
232 | + Отримати дані із тендера ${viewer} awards[0].value.amount | |
233 | + | |
234 | +Відображення назви переможця | |
235 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення даних про постачальника | |
236 | + ... viewer | |
237 | + ... ${USERS.users['${viewer}'].broker} | |
238 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
239 | + Отримати дані із тендера ${viewer} awards[0].suppliers[0].name | |
158 | 240 | |
159 | 241 | Можливість отримати результати аукціону |
160 | 242 | [Tags] ${USERS.users['${tender_owner}'].broker}: Результати аукціону |
161 | 243 | ... tender_owner |
162 | 244 | ... ${USERS.users['${tender_owner}'].broker} |
163 | - [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | |
164 | - [Teardown] Оновити LAST_MODIFICATION_DATE | |
165 | - ${tender_data}= Викликати для учасника ${tender_owner} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | |
166 | - ${result}= chef ${tender_data.data.bids} ${tender_data.data.features} | |
167 | - Log Many ${result[0]} ${tender_data.data.awards[0]} | |
168 | - Log Many ${result[0].id} ${tender_data.data.awards[0].bid_id} | |
169 | - Should Be Equal ${result[0].id} ${tender_data.data.awards[0].bid_id} | |
245 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
246 | + ${result}= chef ${USERS.users['${viewer}'].tender_data.data.bids} ${USERS.users['${tender_owner}'].initial_data.data.features} | |
247 | + Log ${result} | |
248 | + Should Be Equal ${result[0].tenderers[0].name} ${USERS.users['${viewer}'].tender_data.data.awards[0].suppliers[0].name} | |
249 | + Should Be Equal ${result[0].value.amount} ${USERS.users['${viewer}'].tender_data.data.awards[0].value.amount} | ... | ... |
... | ... | @@ -10,10 +10,9 @@ Suite Setup Test Suite Setup |
10 | 10 | Suite Teardown Test Suite Teardown |
11 | 11 | |
12 | 12 | *** Variables *** |
13 | -${mode} multi | |
13 | +${mode} multiItem | |
14 | +@{used_roles} tender_owner provider provider1 viewer | |
14 | 15 | |
15 | -${role} viewer | |
16 | -${broker} Quinta | |
17 | 16 | |
18 | 17 | *** Test Cases *** |
19 | 18 | Можливість оголосити багатопредметний тендер |
... | ... | @@ -24,7 +23,7 @@ ${broker} Quinta |
24 | 23 | [Teardown] Оновити LAST_MODIFICATION_DATE |
25 | 24 | ${tender_data}= Підготовка даних для створення тендера |
26 | 25 | ${adapted_data}= Адаптувати дані для оголошення тендера ${tender_owner} ${tender_data} |
27 | - ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${adapted_data} | |
26 | + ${TENDER_UAID}= Run As ${tender_owner} Створити тендер ${adapted_data} | |
28 | 27 | Set To Dictionary ${USERS.users['${tender_owner}']} initial_data=${adapted_data} |
29 | 28 | Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID} |
30 | 29 | log ${TENDER} |
... | ... | @@ -36,7 +35,7 @@ ${broker} Quinta |
36 | 35 | ... minimal |
37 | 36 | :FOR ${username} IN ${viewer} ${tender_owner} |
38 | 37 | \ Дочекатись синхронізації з майданчиком ${username} |
39 | - \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | |
38 | + \ Run As ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | |
40 | 39 | |
41 | 40 | Відображення опису позицій закупівлі багатопредметного тендера |
42 | 41 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера |
... | ... | @@ -163,20 +162,53 @@ ${broker} Quinta |
163 | 162 | ... level2 |
164 | 163 | [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} |
165 | 164 | [Teardown] Оновити LAST_MODIFICATION_DATE |
166 | - Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} description description | |
165 | + Run As ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} description description | |
167 | 166 | |
168 | -Можливість додати позицію закупівлі в тендер | |
167 | +Можливість додати шосту позицію закупівлі в тендер | |
169 | 168 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
170 | 169 | ... tender_owner |
171 | 170 | ... ${USERS.users['${tender_owner}'].broker} |
172 | 171 | ... level2 |
173 | 172 | [Teardown] Оновити LAST_MODIFICATION_DATE |
174 | - Викликати для учасника ${tender_owner} Додати предмети закупівлі ${TENDER['TENDER_UAID']} 3 | |
173 | + ${item}= Підготовка даних для створення предмету закупівлі | |
174 | + Run As ${tender_owner} Додати предмет закупівлі ${TENDER['TENDER_UAID']} ${item} | |
175 | + ${item_id}= get_id_from_field ${item.description} | |
176 | + ${item_data}= Create Dictionary item=${item} item_id=${item_id} | |
177 | + ${item_data}= munch_dict arg=${item_data} | |
178 | + Set To Dictionary ${USERS.users['${tender_owner}']} item_data=${item_data} | |
175 | 179 | |
176 | -Можливість видалити позиції закупівлі тендера | |
180 | +Відображення опису нової шостої позиції закупівлі багатопредметного тендера | |
181 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера | |
182 | + ... viewer | |
183 | + ... ${USERS.users['${viewer}'].broker} | |
184 | + ... level2 | |
185 | + Звірити поле тендера із значенням ${viewer} ${USERS.users['${tender_owner}'].item_data.item.description} description ${USERS.users['${tender_owner}'].item_data.item_id} | |
186 | + | |
187 | +Можливість додати сьому позицію закупівлі в тендер | |
188 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
189 | + ... tender_owner | |
190 | + ... ${USERS.users['${tender_owner}'].broker} | |
191 | + ... level2 | |
192 | + [Teardown] Оновити LAST_MODIFICATION_DATE | |
193 | + ${item}= Підготовка даних для створення предмету закупівлі | |
194 | + Run As ${tender_owner} Додати предмет закупівлі ${TENDER['TENDER_UAID']} ${item} | |
195 | + ${item_id}= get_id_from_field ${item.description} | |
196 | + ${item_data}= Create Dictionary item=${item} item_id=${item_id} | |
197 | + ${item_data}= munch_dict arg=${item_data} | |
198 | + Set To Dictionary ${USERS.users['${tender_owner}']} item_data=${item_data} | |
199 | + | |
200 | +Відображення опису нової сьомої позиції закупівлі багатопредметного тендера | |
201 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення полів предметів багатопредметного тендера | |
202 | + ... viewer | |
203 | + ... ${USERS.users['${viewer}'].broker} | |
204 | + ... level2 | |
205 | + Звірити поле тендера із значенням ${viewer} ${USERS.users['${tender_owner}'].item_data.item.description} description ${USERS.users['${tender_owner}'].item_data.item_id} | |
206 | + | |
207 | +Можливість видалити п’яту позицію закупівлі тендера | |
177 | 208 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
178 | 209 | ... tender_owner |
179 | 210 | ... ${USERS.users['${tender_owner}'].broker} |
180 | 211 | ... level2 |
181 | 212 | [Teardown] Оновити LAST_MODIFICATION_DATE |
182 | - Викликати для учасника ${tender_owner} Відняти предмети закупівлі ${TENDER['TENDER_UAID']} 2 | |
213 | + ${item_id}= get_id_from_field ${USERS.users['${tender_owner}'].tender_data.items[4].description} | |
214 | + Run As ${tender_owner} Видалити предмет закупівлі ${TENDER['TENDER_UAID']} ${item_id} | ... | ... |
... | ... | @@ -10,13 +10,11 @@ Suite Setup Test Suite Setup |
10 | 10 | Suite Teardown Test Suite Teardown |
11 | 11 | |
12 | 12 | *** Variables *** |
13 | -${mode} multi | |
14 | - | |
15 | -${role} viewer | |
16 | -${broker} Quinta | |
17 | - | |
13 | +${mode} multiLot | |
14 | +@{used_roles} tender_owner provider provider1 viewer | |
18 | 15 | ${complaint_id} 1 |
19 | 16 | |
17 | + | |
20 | 18 | *** Test Cases *** |
21 | 19 | Можливість оголосити мультилотовий тендер |
22 | 20 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити мультилотовий тендер |
... | ... | @@ -25,13 +23,13 @@ ${complaint_id} 1 |
25 | 23 | ... minimal |
26 | 24 | [Teardown] Оновити LAST_MODIFICATION_DATE |
27 | 25 | ${tender_data}= Підготовка даних для створення тендера |
28 | - ${tender_data}= test_tender_data_multiple_lots ${tender_data} | |
29 | 26 | ${adapted_data}= Адаптувати дані для оголошення тендера ${tender_owner} ${tender_data} |
30 | - ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${adapted_data} | |
27 | + ${TENDER_UAID}= Run As ${tender_owner} Створити тендер ${adapted_data} | |
31 | 28 | Set To Dictionary ${USERS.users['${tender_owner}']} initial_data=${adapted_data} |
32 | - Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID} | |
29 | + Set To Dictionary ${TENDER} TENDER_UAID=${TENDER_UAID} | |
33 | 30 | Log ${TENDER} |
34 | 31 | |
32 | + | |
35 | 33 | Можливість знайти мультилотовий тендер по ідентифікатору |
36 | 34 | [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору |
37 | 35 | ... viewer tender_owner provider provider1 |
... | ... | @@ -40,7 +38,38 @@ ${complaint_id} 1 |
40 | 38 | ... minimal |
41 | 39 | :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} |
42 | 40 | \ Дочекатись синхронізації з майданчиком ${username} |
43 | - \ Викликати для учасника ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | |
41 | + \ Run As ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | |
42 | + | |
43 | +Можливість додати тендерну документацію лоту | |
44 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість завантажити документ | |
45 | + ... tender_owner | |
46 | + ... ${USERS.users['${tender_owner}'].broker} | |
47 | + [Documentation] Закупівельник ${USERS.users['${tender_owner}'].broker} завантажує документацію до оголошеної закупівлі | |
48 | + [Teardown] Оновити LAST_MODIFICATION_DATE | |
49 | + ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data.lots[0]} | |
50 | + ${filepath}= create_fake_doc | |
51 | + Run As ${tender_owner} Завантажити документ в лот ${filepath} ${TENDER['TENDER_UAID']} ${lot_id} | |
52 | + | |
53 | +Відображення заголовку першого лоту | |
54 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
55 | + ... viewer tender_owner provider provider1 | |
56 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} | |
57 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
58 | + ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data.lots[0]} | |
59 | + :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} | |
60 | + \ Дочекатись синхронізації з майданчиком ${username} | |
61 | + \ Звірити поле тендера із значенням ${username} | |
62 | + \ ... ${USERS.users['${tender_owner}'].initial_data.data.lots[0].title} title | |
63 | + \ ... object_id=${lot_id} | |
64 | + | |
65 | +Відображення опису першого лоту | |
66 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
67 | + ... viewer | |
68 | + ... ${USERS.users['${viewer}'].broker} | |
69 | + ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data.lots[0]} | |
70 | + Звірити поле тендера із значенням ${viewer} | |
71 | + ... ${USERS.users['${tender_owner}'].initial_data.data.lots[0].description} description | |
72 | + ... object_id=${lot_id} | |
44 | 73 | |
45 | 74 | ####### |
46 | 75 | #Операції з лотом |
... | ... | @@ -51,81 +80,86 @@ ${complaint_id} 1 |
51 | 80 | ... ${USERS.users['${tender_owner}'].broker} |
52 | 81 | [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} |
53 | 82 | [Teardown] Оновити LAST_MODIFICATION_DATE |
54 | - ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data} | |
55 | 83 | ${lot}= Підготовка даних для створення лоту |
56 | - ${lotcreate}= Викликати для учасника ${tender_owner} Створити лот ${tender_data} ${lot} | |
57 | - ${lotresponses}= Create Dictionary | |
58 | - Set To Dictionary ${lotresponses} resp0 ${lotcreate} | |
59 | - Set To Dictionary ${USERS.users['${tender_owner}']} lotresponses ${lotresponses} | |
60 | - log ${lotcreate} | |
84 | + ${lot_resp}= Run As ${tender_owner} Створити лот ${TENDER['TENDER_UAID']} ${lot} | |
85 | + ${lot_id}= get_id_from_object ${lot.data} | |
86 | + ${lot_data}= Create Dictionary lot=${lot} lot_resp=${lot_resp} lot_id=${lot_id} | |
87 | + ${lot_data}= munch_dict arg=${lot_data} | |
88 | + Set To Dictionary ${USERS.users['${tender_owner}']} lot_data=${lot_data} | |
89 | + log ${lot_resp} | |
61 | 90 | |
62 | 91 | Можливість видалення лоту |
63 | 92 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
64 | 93 | ... tender_owner |
65 | 94 | ... ${USERS.users['${tender_owner}'].broker} |
66 | 95 | [Teardown] Оновити LAST_MODIFICATION_DATE |
67 | - ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data} | |
68 | - ${lot}= Get Variable Value ${USERS.users['${tender_owner}'].lotresponses['resp0']} | |
69 | - ${lotdelete}= Викликати для учасника ${tender_owner} Видалити лот ${tender_data} ${lot} | |
70 | - Log ${lotdelete} | |
96 | + Run As ${tender_owner} Видалити лот ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].lot_data.lot_id} | |
71 | 97 | |
72 | 98 | Можливість повторого створення лоту |
73 | 99 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
74 | 100 | ... tender_owner |
75 | 101 | ... ${USERS.users['${tender_owner}'].broker} |
76 | 102 | [Teardown] Оновити LAST_MODIFICATION_DATE |
77 | - ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data} | |
78 | 103 | ${lot}= Підготовка даних для створення лоту |
79 | - ${lotcreate}= Викликати для учасника ${tender_owner} Створити лот ${tender_data} ${lot} | |
80 | - ${lotresponses}= Create Dictionary | |
81 | - Set To Dictionary ${lotresponses} resp ${lotcreate} | |
82 | - Set To Dictionary ${USERS.users['${tender_owner}']} lotresponses ${lotresponses} | |
83 | - log ${lotcreate} | |
104 | + ${lot_resp}= Run As ${tender_owner} Створити лот ${TENDER['TENDER_UAID']} ${lot} | |
105 | + ${lot_id}= get_id_from_object ${lot.data} | |
106 | + ${lot_data}= Create Dictionary lot=${lot} lot_resp=${lot_resp} lot_id=${lot_id} | |
107 | + ${lot_data}= munch_dict arg=${lot_data} | |
108 | + Set To Dictionary ${USERS.users['${tender_owner}']} lot_data=${lot_data} | |
109 | + log ${lot_resp} | |
110 | + | |
111 | +Відображення заголовку другого лоту | |
112 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
113 | + ... viewer tender_owner provider provider1 | |
114 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} | |
115 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
116 | + :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} | |
117 | + \ Дочекатись синхронізації з майданчиком ${username} | |
118 | + \ Звірити поле тендера із значенням ${username} | |
119 | + \ ... ${USERS.users['${tender_owner}'].lot_data.lot.data.title} title | |
120 | + \ ... object_id=${USERS.users['${tender_owner}'].lot_data.lot_id} | |
84 | 121 | |
85 | -Можливість змінити бюджет нового лоту до 8000 | |
122 | +Відображення опису другого лоту | |
123 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
124 | + ... viewer | |
125 | + ... ${USERS.users['${viewer}'].broker} | |
126 | + Звірити поле тендера із значенням ${viewer} | |
127 | + ... ${USERS.users['${tender_owner}'].lot_data.lot.data.description} description | |
128 | + ... object_id=${USERS.users['${tender_owner}'].lot_data.lot_id} | |
129 | + | |
130 | +Відображення бюджету другого лоту | |
131 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
132 | + ... viewer | |
133 | + ... ${USERS.users['${viewer}'].broker} | |
134 | + Звірити поле тендера із значенням ${viewer} | |
135 | + ... ${USERS.users['${tender_owner}'].lot_data.lot.data.value.amount} value.amount | |
136 | + ... object_id=${USERS.users['${tender_owner}'].lot_data.lot_id} | |
137 | + | |
138 | +Можливість змінити бюджет другого лоту до 100 | |
86 | 139 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
87 | 140 | ... tender_owner |
88 | 141 | ... ${USERS.users['${tender_owner}'].broker} |
89 | 142 | [Teardown] Оновити LAST_MODIFICATION_DATE |
90 | - ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data} | |
91 | - Set To Dictionary ${USERS.users['${tender_owner}'].lotresponses['resp'].data.value} amount 8000 | |
92 | - ${fixlotto8000resp}= Викликати для учасника ${tender_owner} Змінити лот ${tender_data} ${USERS.users['${tender_owner}'].lotresponses['resp']} | |
93 | - Set To Dictionary ${USERS.users['${tender_owner}'].lotresponses} fixlotto8000resp ${fixlotto8000resp} | |
94 | - log ${fixlotto8000resp} | |
143 | + Run As ${tender_owner} Змінити лот ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].lot_data.lot_id} value.amount 100 | |
95 | 144 | |
96 | -Можливість змінити бюджет нового лоту до 100 | |
145 | + | |
146 | +Можливість змінити бюджет другого лоту до 8000 | |
97 | 147 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
98 | 148 | ... tender_owner |
99 | 149 | ... ${USERS.users['${tender_owner}'].broker} |
100 | 150 | [Teardown] Оновити LAST_MODIFICATION_DATE |
101 | - ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data} | |
102 | - Set To Dictionary ${USERS.users['${tender_owner}'].lotresponses['resp'].data.value} amount 8000 | |
103 | - ${fixlotto100resp}= Викликати для учасника ${tender_owner} Змінити лот ${tender_data} ${USERS.users['${tender_owner}'].lotresponses['resp']} | |
104 | - Set To Dictionary ${USERS.users['${tender_owner}'].lotresponses} fixlotto100resp ${fixlotto100resp} | |
105 | - log ${fixlotto100resp} | |
106 | - | |
151 | + Run As ${tender_owner} Змінити лот ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].lot_data.lot_id} value.amount 8000 | |
107 | 152 | |
108 | 153 | ##### |
109 | 154 | #Предмети закупівлі лоту |
110 | 155 | |
111 | -Можливість додати позицію закупівлі в тендер | |
112 | - [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
113 | - ... tender_owner | |
114 | - ... ${USERS.users['${tender_owner}'].broker} | |
115 | - [Teardown] Оновити LAST_MODIFICATION_DATE | |
116 | - Викликати для учасника ${tender_owner} Додати предмети закупівлі ${TENDER['TENDER_UAID']} 1 | |
117 | - | |
118 | -Можливість добавити предмет закупівлі до лоту | |
156 | +Можливість добавити предмет закупівлі до другого лоту | |
119 | 157 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
120 | 158 | ... tender_owner |
121 | 159 | ... ${USERS.users['${tender_owner}'].broker} |
122 | 160 | [Teardown] Оновити LAST_MODIFICATION_DATE |
123 | - ${items}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data.data['items']} | |
124 | - Log ${items} | |
125 | - ${lot_id}= Get Variable Value ${USERS.users['${tender_owner}'].lotresponses['resp'].data.id} | |
126 | - Set To Dictionary ${items[-1]} relatedLot ${lot_id} | |
127 | - Log ${items[-1]} | |
128 | - Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} items ${items} | |
161 | + ${item}= Підготовка даних для створення предмету закупівлі | |
162 | + Run As ${tender_owner} Додати предмет закупівлі в лот ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].lot_data.lot_id} ${item} | |
129 | 163 | |
130 | 164 | Неможливість видалення лоту з прив’язаними предметами закупівлі |
131 | 165 | [Documentation] |
... | ... | @@ -133,126 +167,47 @@ ${complaint_id} 1 |
133 | 167 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
134 | 168 | ... tender_owner |
135 | 169 | ... ${USERS.users['${tender_owner}'].broker} |
136 | - ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data} | |
137 | - ${lot}= Get Variable Value ${USERS.users['${tender_owner}'].lotresponses['resp']} | |
138 | - Require Failure ${tender_owner} Видалити лот ${tender_data} ${lot} | |
139 | - | |
140 | -Можливість видалити позиції закупівлі тендера | |
141 | - [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | |
142 | - ... tender_owner | |
143 | - ... ${USERS.users['${tender_owner}'].broker} | |
144 | - [Teardown] Оновити LAST_MODIFICATION_DATE | |
145 | - ${items}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data.data['items']} | |
146 | - Log ${items} | |
147 | - ${resp}= Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} items ${items[:-1]} | |
148 | - Log ${resp} | |
149 | - | |
150 | -Можливість додати тендерну документацію лоту | |
151 | - [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість завантажити документ | |
152 | - ... tender_owner | |
153 | - ... ${USERS.users['${tender_owner}'].broker} | |
154 | - [Documentation] Закупівельник ${USERS.users['${tender_owner}'].broker} завантажує документацію до оголошеної закупівлі | |
155 | - [Teardown] Оновити LAST_MODIFICATION_DATE | |
156 | - ${filepath}= create_fake_doc | |
157 | - ${lot_id}= Get Variable Value ${USERS.users['${tender_owner}'].lotresponses['resp'].data.id} | |
158 | - ${doc_upload_reply}= Викликати для учасника ${tender_owner} Завантажити документ в лот ${filepath} ${TENDER['TENDER_UAID']} ${lot_id} | |
159 | - ${file_upload_process_data} = Create Dictionary filepath=${filepath} doc_upload_reply=${doc_upload_reply} | |
160 | - log ${file_upload_process_data} | |
161 | - Set To Dictionary ${USERS.users['${tender_owner}']} file_upload_process_data ${file_upload_process_data} | |
162 | - Log ${lot_id} | |
163 | - Log ${USERS.users['${tender_owner}']} | |
170 | + ${lot_id}= Get Variable Value ${USERS.users['${tender_owner}'].lot_data.lot_id} | |
171 | + Require Failure ${tender_owner} Видалити лот ${TENDER['TENDER_UAID']} ${lot_id} | |
164 | 172 | |
165 | 173 | |
166 | 174 | ####### |
167 | 175 | #Запитання до лоту |
168 | 176 | |
169 | -Можливість задати питання | |
177 | +Можливість задати питання до лоту | |
170 | 178 | [Tags] ${USERS.users['${provider}'].broker}: Можливість задати запитання |
171 | 179 | ... provider |
172 | 180 | ... ${USERS.users['${provider}'].broker} |
173 | 181 | [Setup] Дочекатись синхронізації з майданчиком ${provider} |
174 | 182 | [Teardown] Оновити LAST_MODIFICATION_DATE |
183 | + ${lot_id}= Get Variable Value ${USERS.users['${tender_owner}'].lot_data.lot_id} | |
175 | 184 | ${question}= Підготовка даних для запитання |
176 | - ${question_resp}= Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${question} | |
185 | + ${question_resp}= Run As ${provider} Задати питання до лоту ${TENDER['TENDER_UAID']} ${lot_id} ${question} | |
177 | 186 | ${now}= Get Current TZdate |
178 | 187 | ${question.data.date}= Set variable ${now} |
179 | - ${question_id}= get_id_from_field ${question.data.description} | |
188 | + ${question_id}= get_id_from_object ${question.data} | |
180 | 189 | ${question_data}= Create Dictionary question=${question} question_resp=${question_resp} question_id=${question_id} |
181 | 190 | ${question_data}= munch_dict arg=${question_data} |
182 | - Set To Dictionary ${USERS.users['${provider}']} question_data ${question_data} | |
191 | + Set To Dictionary ${USERS.users['${provider}']} question_data=${question_data} | |
183 | 192 | |
184 | 193 | |
185 | -Можливість відповісти на запитання | |
194 | +Можливість відповісти на запитання до лоту | |
186 | 195 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відповісти на запитання |
187 | 196 | ... tender_owner |
188 | 197 | ... ${USERS.users['${tender_owner}'].broker} |
189 | 198 | [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} |
190 | 199 | [Teardown] Оновити LAST_MODIFICATION_DATE |
191 | 200 | ${answer}= Підготовка даних для відповіді на запитання |
192 | - ${answer_resp}= Викликати для учасника ${tender_owner} | |
201 | + ${answer_resp}= Run As ${tender_owner} | |
193 | 202 | ... Відповісти на питання ${TENDER['TENDER_UAID']} |
194 | 203 | ... ${USERS.users['${provider}']['question_data']['question_resp']} ${answer} |
195 | 204 | ... question_id=${USERS.users['${provider}'].question_data.question_id} |
196 | 205 | ${now}= Get Current TZdate |
197 | 206 | ${answer.data.date}= Set variable ${now} |
198 | 207 | ${answer_data}= Create Dictionary answer=${answer} answer_resp=${answer_resp} |
199 | - Set To Dictionary ${USERS.users['${provider}']} answer_data ${answer_data} | |
208 | + Set To Dictionary ${USERS.users['${provider}']} answer_data=${answer_data} | |
200 | 209 | |
201 | 210 | ###### |
202 | -#Cкарга на лот | |
203 | -# | |
204 | -# | |
205 | -##### Дочекатися скарг на лот | |
206 | -# | |
207 | -# | |
208 | -#Можливість подати скаргу на лот | |
209 | -# [Tags] ${USERS.users['${provider}'].broker}: Можливість подати скаргу на умови | |
210 | -# [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі | |
211 | -# Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[${complaint_id}]} | |
212 | -# ${LAST_MODIFICATION_DATE}= Get Current Date | |
213 | -# Set Global Variable ${LAST_MODIFICATION_DATE} | |
214 | -# | |
215 | -#Можливість побачити скаргу користувачем | |
216 | -# [Tags] ${USERS.users['${provider}'].broker}: Відображення основних даних оголошеного тендера | |
217 | -# Викликати для учасника ${provider} Порівняти скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[${complaint_id}]} | |
218 | -# | |
219 | -#Можливість побачити скаргу анонімом | |
220 | -# [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера | |
221 | -# Викликати для учасника ${viewer} Порівняти скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[${complaint_id}]} | |
222 | -# | |
223 | -#Можливість відхилити скаргу на лот | |
224 | -# [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відхилити скаргу на умови | |
225 | -# Set To Dictionary ${COMPLAINTS[0].data} status declined | |
226 | -# Викликати для учасника ${tender_owner} Обробити скаргу ${TENDER['TENDER_UAID']} 0 ${COMPLAINTS[${complaint_id}]} | |
227 | -# log many ${COMPLAINTS[${complaint_id}]} | |
228 | -# викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} | |
229 | -# | |
230 | -#Можливість відкинути скаргу на лот | |
231 | -# [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відкинути скаргу на умови | |
232 | -# Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[${complaint_id}]} | |
233 | -# ${LAST_MODIFICATION_DATE}= Get Current Date | |
234 | -# Set Global Variable ${LAST_MODIFICATION_DATE} | |
235 | -# Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} | |
236 | -# Set To Dictionary ${COMPLAINTS[0].data} status invalid | |
237 | -# Викликати для учасника ${tender_owner} Обробити скаргу ${TENDER['TENDER_UAID']} 1 ${COMPLAINTS[${complaint_id}]} | |
238 | -# log many ${COMPLAINTS[${complaint_id}]} | |
239 | -# ${LAST_MODIFICATION_DATE}= Get Current Date | |
240 | -# Set Global Variable ${LAST_MODIFICATION_DATE} | |
241 | -# Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} | |
242 | -# | |
243 | -#Можливість задовільнити скаргу на лот | |
244 | -# [Tags] ${USERS.users['${provider}'].broker}: Можливість відповісти на запитання | |
245 | -# Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[${complaint_id}]} | |
246 | -# ${LAST_MODIFICATION_DATE}= Get Current Date | |
247 | -# Set Global Variable ${LAST_MODIFICATION_DATE} | |
248 | -# Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} | |
249 | -# Set To Dictionary ${COMPLAINTS[0].data} status resolved | |
250 | -# Викликати для учасника ${tender_owner} Обробити скаргу ${TENDER['TENDER_UAID']} 2 ${COMPLAINTS[${complaint_id}]} | |
251 | -# log many ${COMPLAINTS[${complaint_id}]} | |
252 | -# ${LAST_MODIFICATION_DATE}= Get Current Date | |
253 | -# Set Global Variable ${LAST_MODIFICATION_DATE} | |
254 | -# | |
255 | -###### | |
256 | 211 | #Подання пропозицій |
257 | 212 | |
258 | 213 | Відображення початку періоду прийому пропозицій оголошеного тендера |
... | ... | @@ -282,14 +237,10 @@ ${complaint_id} 1 |
282 | 237 | ... provider |
283 | 238 | ... ${USERS.users['${provider}'].broker} |
284 | 239 | [Setup] Дочекатись синхронізації з майданчиком ${provider} |
285 | - ${bid}= test lots bid data | |
286 | - Log ${bid} | |
287 | - ${bidresponses}= Create Dictionary | |
288 | - Set To Dictionary ${bidresponses} bid ${bid} | |
289 | - Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} | |
290 | - ${bid_before_bidperiod_resp}= Require Failure ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
291 | - Set To Dictionary ${USERS.users['${provider}'].bidresponses} bid_before_bidperiod_resp ${bid_before_bidperiod_resp} | |
292 | - log ${USERS.users['${provider}']} | |
240 | + @{lots_ids}= Отримати ідентифікатори об’єктів ${provider} lots | |
241 | + ${bid}= Підготувати дані для подання пропозиції | |
242 | + ${bid_before_bidperiod_resp}= Require Failure ${provider} Подати цінову пропозицію на лоти ${TENDER['TENDER_UAID']} ${bid} ${lots_ids} | |
243 | + log ${bid_before_bidperiod_resp} | |
293 | 244 | |
294 | 245 | Неможливість подати цінову пропозицію без прив’язки до лоту |
295 | 246 | [Documentation] |
... | ... | @@ -299,35 +250,28 @@ ${complaint_id} 1 |
299 | 250 | ... ${USERS.users['${provider}'].broker} |
300 | 251 | [Setup] Дочекатись синхронізації з майданчиком ${provider} |
301 | 252 | Дочекатись дати початку прийому пропозицій ${provider} |
302 | - ${bid}= test bid data | |
303 | - Log ${bid} | |
304 | - ${bidresponses}= Create Dictionary | |
305 | - Set To Dictionary ${bidresponses} bid ${bid} | |
306 | - Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} | |
253 | + ${bid}= Підготувати дані для подання пропозиції | |
307 | 254 | ${no_lot_bid_resp}= Require Failure ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} |
308 | - Set To Dictionary ${USERS.users['${provider}'].bidresponses} no_lot_bid_resp ${no_lot_bid_resp} | |
309 | - log ${USERS.users['${provider}']} | |
255 | + log ${no_lot_bid_resp} | |
310 | 256 | |
311 | 257 | Можливість подати цінову пропозицію першим учасником |
312 | 258 | [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію |
313 | 259 | ... provider |
314 | 260 | ... ${USERS.users['${provider}'].broker} |
315 | 261 | [Teardown] Оновити LAST_MODIFICATION_DATE |
316 | - ${bid}= test lots bid data | |
317 | - Log ${bid} | |
318 | - ${bidresponses}= Create Dictionary | |
319 | - Set To Dictionary ${bidresponses} bid ${bid} | |
320 | - Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} | |
321 | - ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
322 | - Set To Dictionary ${USERS.users['${provider}'].bidresponses} resp ${resp} | |
323 | - log ${USERS.users['${provider}']} | |
262 | + @{lots_ids}= Отримати ідентифікатори об’єктів ${provider} lots | |
263 | + ${bid}= Підготувати дані для подання пропозиції | |
264 | + ${bidresponses}= Create Dictionary bid=${bid} | |
265 | + Set To Dictionary ${USERS.users['${provider}']} bidresponses=${bidresponses} | |
266 | + ${resp}= Run As ${provider} Подати цінову пропозицію на лоти ${TENDER['TENDER_UAID']} ${bid} ${lots_ids} | |
267 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} resp=${resp} | |
324 | 268 | |
325 | 269 | Можливість скасувати цінову пропозицію |
326 | 270 | [Tags] ${USERS.users['${provider}'].broker}: Можливість скасувати цінову пропозицію |
327 | 271 | ... provider |
328 | 272 | ... ${USERS.users['${provider}'].broker} |
329 | 273 | [Teardown] Оновити LAST_MODIFICATION_DATE |
330 | - ${canceledbidresp}= Викликати для учасника ${provider} Скасувати цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].bidresponses['resp']} | |
274 | + ${canceledbidresp}= Run As ${provider} Скасувати цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].bidresponses['resp']} | |
331 | 275 | Log ${canceledbidresp} |
332 | 276 | |
333 | 277 | Можливість подати повторно цінову пропозицію першим учасником |
... | ... | @@ -336,22 +280,19 @@ ${complaint_id} 1 |
336 | 280 | ... ${USERS.users['${provider}'].broker} |
337 | 281 | [Teardown] Оновити LAST_MODIFICATION_DATE |
338 | 282 | Дочекатись дати початку прийому пропозицій ${provider} |
339 | - ${bid}= test lots bid data | |
340 | - Log ${bid} | |
341 | - ${bidresponses}= Create Dictionary | |
342 | - Set To Dictionary ${bidresponses} bid ${bid} | |
343 | - Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses} | |
344 | - ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
345 | - Set To Dictionary ${USERS.users['${provider}'].bidresponses} resp ${resp} | |
346 | - log ${USERS.users['${provider}'].bidresponses} | |
283 | + @{lots_ids}= Отримати ідентифікатори об’єктів ${provider} lots | |
284 | + ${bid}= Підготувати дані для подання пропозиції | |
285 | + ${bidresponses}= Create Dictionary bid=${bid} | |
286 | + Set To Dictionary ${USERS.users['${provider}']} bidresponses=${bidresponses} | |
287 | + ${resp}= Run As ${provider} Подати цінову пропозицію на лоти ${TENDER['TENDER_UAID']} ${bid} ${lots_ids} | |
288 | + Set To Dictionary ${USERS.users['${provider}'].bidresponses} resp=${resp} | |
347 | 289 | |
348 | 290 | Можливість змінити повторну цінову пропозицію до 2000 |
349 | 291 | [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію |
350 | 292 | ... provider |
351 | 293 | ... ${USERS.users['${provider}'].broker} |
352 | 294 | [Teardown] Оновити LAST_MODIFICATION_DATE |
353 | - ${fixbidto2000resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} lotValues.0.value.amount 2000 | |
354 | - Set To Dictionary ${USERS.users['${provider}'].bidresponses} fixbidto2000resp ${fixbidto2000resp} | |
295 | + ${fixbidto2000resp}= Run As ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} lotValues.0.value.amount 2000 | |
355 | 296 | log ${fixbidto2000resp} |
356 | 297 | |
357 | 298 | Можливість змінити повторну цінову пропозицію до 10 |
... | ... | @@ -359,8 +300,7 @@ ${complaint_id} 1 |
359 | 300 | ... provider |
360 | 301 | ... ${USERS.users['${provider}'].broker} |
361 | 302 | [Teardown] Оновити LAST_MODIFICATION_DATE |
362 | - ${fixbidto10resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} lotValues.0.value.amount 10 | |
363 | - Set To Dictionary ${USERS.users['${provider}'].bidresponses} fixbidto10resp ${fixbidto10resp} | |
303 | + ${fixbidto10resp}= Run As ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} lotValues.0.value.amount 10 | |
364 | 304 | log ${fixbidto10resp} |
365 | 305 | |
366 | 306 | Можливість подати цінову пропозицію другим учасником |
... | ... | @@ -370,15 +310,12 @@ ${complaint_id} 1 |
370 | 310 | [Setup] Дочекатись синхронізації з майданчиком ${provider1} |
371 | 311 | [Teardown] Оновити LAST_MODIFICATION_DATE |
372 | 312 | Дочекатись дати початку прийому пропозицій ${provider1} |
373 | - ${bid}= test lots bid data | |
374 | - Log ${bid} | |
375 | - ${bidresponses}= Create Dictionary | |
376 | - Set To Dictionary ${bidresponses} bid ${bid} | |
377 | - Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} | |
378 | - ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | |
379 | - Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp ${resp} | |
380 | - log ${resp} | |
381 | - log ${USERS.users['${provider1}'].bidresponses} | |
313 | + @{lots_ids}= Отримати ідентифікатори об’єктів ${provider1} lots | |
314 | + ${bid}= Підготувати дані для подання пропозиції | |
315 | + ${bidresponses}= Create Dictionary bid=${bid} | |
316 | + Set To Dictionary ${USERS.users['${provider1}']} bidresponses=${bidresponses} | |
317 | + ${resp}= Run As ${provider1} Подати цінову пропозицію на лоти ${TENDER['TENDER_UAID']} ${bid} ${lots_ids} | |
318 | + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} resp=${resp} | |
382 | 319 | |
383 | 320 | Неможливість побачити цінові пропозиції учасників під час прийому пропозицій |
384 | 321 | [Tags] ${USERS.users['${viewer}'].broker}: Можливість подати цінову пропозицію |
... | ... | @@ -396,7 +333,6 @@ ${complaint_id} 1 |
396 | 333 | [Setup] Дочекатись синхронізації з майданчиком ${provider1} |
397 | 334 | Дочекатись дати закінчення прийому пропозицій ${provider1} |
398 | 335 | ${failfixbidto2000resp}= Require Failure ${provider1} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} lotValues.0.value.amount 2000 |
399 | - Set To Dictionary ${USERS.users['${provider1}'].bidresponses} failfixbidto2000resp ${failfixbidto2000resp} | |
400 | 336 | log ${failfixbidto2000resp} |
401 | 337 | |
402 | 338 | Неможливість змінити цінову пропозицію до 1 після закінчення прийому пропозицій |
... | ... | @@ -406,7 +342,6 @@ ${complaint_id} 1 |
406 | 342 | ... provider1 |
407 | 343 | ... ${USERS.users['${provider1}'].broker} |
408 | 344 | ${failfixbidto1resp}= Require Failure ${provider1} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} lotValues.0.value.amount 1 |
409 | - Set To Dictionary ${USERS.users['${provider1}'].bidresponses} failfixbidto1resp ${failfixbidto1resp} | |
410 | 345 | log ${failfixbidto1resp} |
411 | 346 | |
412 | 347 | Неможливість скасувати цінову пропозицію |
... | ... | @@ -416,3 +351,4 @@ ${complaint_id} 1 |
416 | 351 | ... provider1 |
417 | 352 | ... ${USERS.users['${provider1}'].broker} |
418 | 353 | ${biddingresponse}= Require Failure ${provider1} Скасувати цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider1}'].bidresponses['resp']} |
354 | + log ${biddingresponse} | ... | ... |
... | ... | @@ -6,8 +6,7 @@ Suite Teardown Close all browsers |
6 | 6 | |
7 | 7 | *** Variables *** |
8 | 8 | ${mode} negotiation.quick |
9 | -${role} viewer | |
10 | -${broker} Quinta | |
9 | +@{used_roles} tender_owner viewer | |
11 | 10 | |
12 | 11 | |
13 | 12 | *** Test Cases *** |
... | ... | @@ -20,7 +19,7 @@ ${broker} Quinta |
20 | 19 | ... ${USERS.users['${tender_owner}'].broker} |
21 | 20 | ... minimal |
22 | 21 | [Teardown] Оновити LAST_MODIFICATION_DATE |
23 | - Можливість створити закупівлю для тестування скасування | |
22 | + Можливість створити закупівлю | |
24 | 23 | |
25 | 24 | |
26 | 25 | Можливість скасувати переговорну процедуру за нагальною потребою |
... | ... | @@ -73,24 +72,6 @@ ${broker} Quinta |
73 | 72 | Можливість створити закупівлю |
74 | 73 | |
75 | 74 | |
76 | -Можливість знайти переговорну процедуру за нагальною потребою по ідентифікатору | |
77 | - [Tags] ${USERS.users['${viewer}'].broker}: Можливість знайти процедуру | |
78 | - ... viewer | |
79 | - ... ${USERS.users['${viewer}'].broker} | |
80 | - ... minimal | |
81 | - [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
82 | - Можливість знайти закупівлю по ідентифікатору | |
83 | - | |
84 | - | |
85 | -Можливість модифікації переговорної процедури за нагальною потребою | |
86 | - [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість модифікації процедури | |
87 | - ... tender_owner | |
88 | - ... ${USERS.users['${tender_owner}'].broker} | |
89 | - ... level2 | |
90 | - [Teardown] Оновити LAST_MODIFICATION_DATE | |
91 | - Можливість модифікації закупівлі | |
92 | - | |
93 | - | |
94 | 75 | Можливість додати документацію до переговорної процедури за нагальною потребою |
95 | 76 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість додати документацію до процедури |
96 | 77 | ... tender_owner |
... | ... | @@ -108,6 +89,15 @@ ${broker} Quinta |
108 | 89 | [Teardown] Оновити LAST_MODIFICATION_DATE |
109 | 90 | Можливість зареєструвати і підтвердити постачальника до закупівлі |
110 | 91 | |
92 | + | |
93 | +Можливість знайти переговорну процедуру за нагальною потребою по ідентифікатору | |
94 | + [Tags] ${USERS.users['${viewer}'].broker}: Можливість знайти процедуру | |
95 | + ... viewer | |
96 | + ... ${USERS.users['${viewer}'].broker} | |
97 | + ... minimal | |
98 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
99 | + Можливість знайти закупівлю по ідентифікатору | |
100 | + | |
111 | 101 | ############################################################################################## |
112 | 102 | # MAIN DATA |
113 | 103 | ############################################################################################## |
... | ... | @@ -339,13 +329,6 @@ ${broker} Quinta |
339 | 329 | Відображення опису номенклатури закупівлі |
340 | 330 | |
341 | 331 | |
342 | -Відображення ідентифікатора номенклатури переговорної процедури за нагальною потребою | |
343 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури | |
344 | - ... viewer | |
345 | - ... ${USERS.users['${viewer}'].broker} | |
346 | - Відображення ідентифікатора номенклатури закупівлі | |
347 | - | |
348 | - | |
349 | 332 | Відображення кількості номенклатури переговорної процедури за нагальною потребою |
350 | 333 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури |
351 | 334 | ... viewer | ... | ... |
... | ... | @@ -6,8 +6,7 @@ Suite Teardown Close all browsers |
6 | 6 | |
7 | 7 | *** Variables *** |
8 | 8 | ${mode} negotiation |
9 | -${role} viewer | |
10 | -${broker} Quinta | |
9 | +@{used_roles} tender_owner viewer | |
11 | 10 | |
12 | 11 | |
13 | 12 | *** Test Cases *** |
... | ... | @@ -20,7 +19,7 @@ ${broker} Quinta |
20 | 19 | ... ${USERS.users['${tender_owner}'].broker} |
21 | 20 | ... minimal |
22 | 21 | [Teardown] Оновити LAST_MODIFICATION_DATE |
23 | - Можливість створити закупівлю для тестування скасування | |
22 | + Можливість створити закупівлю | |
24 | 23 | |
25 | 24 | |
26 | 25 | Можливість скасувати переговорну процедуру |
... | ... | @@ -73,24 +72,6 @@ ${broker} Quinta |
73 | 72 | Можливість створити закупівлю |
74 | 73 | |
75 | 74 | |
76 | -Можливість знайти переговорну процедуру по ідентифікатору | |
77 | - [Tags] ${USERS.users['${viewer}'].broker}: Можливість знайти процедуру | |
78 | - ... viewer | |
79 | - ... ${USERS.users['${viewer}'].broker} | |
80 | - ... minimal | |
81 | - [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
82 | - Можливість знайти закупівлю по ідентифікатору | |
83 | - | |
84 | - | |
85 | -Можливість модифікації переговорної процедури | |
86 | - [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість модифікації процедури | |
87 | - ... tender_owner | |
88 | - ... ${USERS.users['${tender_owner}'].broker} | |
89 | - ... level2 | |
90 | - [Teardown] Оновити LAST_MODIFICATION_DATE | |
91 | - Можливість модифікації закупівлі | |
92 | - | |
93 | - | |
94 | 75 | Можливість додати документацію до переговорної процедури |
95 | 76 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість додати документацію до процедури |
96 | 77 | ... tender_owner |
... | ... | @@ -108,6 +89,15 @@ ${broker} Quinta |
108 | 89 | [Teardown] Оновити LAST_MODIFICATION_DATE |
109 | 90 | Можливість зареєструвати і підтвердити постачальника до закупівлі |
110 | 91 | |
92 | + | |
93 | +Можливість знайти переговорну процедуру по ідентифікатору | |
94 | + [Tags] ${USERS.users['${viewer}'].broker}: Можливість знайти процедуру | |
95 | + ... viewer | |
96 | + ... ${USERS.users['${viewer}'].broker} | |
97 | + ... minimal | |
98 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
99 | + Можливість знайти закупівлю по ідентифікатору | |
100 | + | |
111 | 101 | ############################################################################################## |
112 | 102 | # MAIN DATA |
113 | 103 | ############################################################################################## |
... | ... | @@ -339,13 +329,6 @@ ${broker} Quinta |
339 | 329 | Відображення опису номенклатури закупівлі |
340 | 330 | |
341 | 331 | |
342 | -Відображення ідентифікатора номенклатури переговорної процедури | |
343 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури | |
344 | - ... viewer | |
345 | - ... ${USERS.users['${viewer}'].broker} | |
346 | - Відображення ідентифікатора номенклатури закупівлі | |
347 | - | |
348 | - | |
349 | 332 | Відображення кількості номенклатури переговорної процедури |
350 | 333 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури |
351 | 334 | ... viewer | ... | ... |
... | ... | @@ -6,9 +6,7 @@ Suite Teardown Test Suite Teardown |
6 | 6 | |
7 | 7 | *** Variables *** |
8 | 8 | ${mode} openeu |
9 | - | |
10 | -${role} viewer | |
11 | -${broker} Quinta | |
9 | +@{used_roles} tender_owner provider provider1 viewer | |
12 | 10 | |
13 | 11 | |
14 | 12 | *** Test Cases *** |
... | ... | @@ -72,6 +70,7 @@ ${broker} Quinta |
72 | 70 | ... ${USERS.users['${provider}'].broker} |
73 | 71 | [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі |
74 | 72 | [Teardown] Оновити LAST_MODIFICATION_DATE |
73 | + Дочекатись дати початку прийому пропозицій ${provider} | |
75 | 74 | ${claim}= Підготовка даних для подання вимоги |
76 | 75 | ${claim_resp}= Викликати для учасника ${provider} |
77 | 76 | ... Створити вимогу |
... | ... | @@ -107,7 +106,7 @@ ${broker} Quinta |
107 | 106 | ... provider |
108 | 107 | ... ${USERS.users['${provider}'].broker} |
109 | 108 | [Teardown] Оновити LAST_MODIFICATION_DATE |
110 | - ${bid}= Підготувати дані для подання пропозиції aboveThreshold=${True} | |
109 | + ${bid}= Підготувати дані для подання пропозиції | |
111 | 110 | Log ${bid} |
112 | 111 | ${bidresponses}= Create Dictionary |
113 | 112 | Set To Dictionary ${bidresponses} bid ${bid} |
... | ... | @@ -177,7 +176,7 @@ ${broker} Quinta |
177 | 176 | ... provider1 |
178 | 177 | ... ${USERS.users['${provider1}'].broker} |
179 | 178 | [Teardown] Оновити LAST_MODIFICATION_DATE |
180 | - ${bid}= Підготувати дані для подання пропозиції aboveThreshold=${True} | |
179 | + ${bid}= Підготувати дані для подання пропозиції | |
181 | 180 | Log ${bid} |
182 | 181 | ${bidresponses}= Create Dictionary |
183 | 182 | Set To Dictionary ${bidresponses} bid ${bid} |
... | ... | @@ -227,7 +226,7 @@ Cкасувати цінову пропозицію другого учасни |
227 | 226 | ... provider1 |
228 | 227 | ... ${USERS.users['${provider1}'].broker} |
229 | 228 | [Teardown] Оновити LAST_MODIFICATION_DATE |
230 | - ${bid}= Підготувати дані для подання пропозиції aboveThreshold=${True} | |
229 | + ${bid}= Підготувати дані для подання пропозиції | |
231 | 230 | Log ${bid} |
232 | 231 | ${bidresponses}= Create Dictionary |
233 | 232 | Set To Dictionary ${bidresponses} bid ${bid} |
... | ... | @@ -349,7 +348,7 @@ Cкасувати цінову пропозицію другого учасни |
349 | 348 | ... provider1 |
350 | 349 | ... ${USERS.users['${provider1}'].broker} |
351 | 350 | [Teardown] Оновити LAST_MODIFICATION_DATE |
352 | - ${bid}= Підготувати дані для подання пропозиції aboveThreshold=${True} | |
351 | + ${bid}= Підготувати дані для подання пропозиції | |
353 | 352 | Log ${bid} |
354 | 353 | ${bidresponses}= Create Dictionary |
355 | 354 | Set To Dictionary ${bidresponses} bid ${bid} | ... | ... |
... | ... | @@ -6,9 +6,7 @@ Suite Teardown Test Suite Teardown |
6 | 6 | |
7 | 7 | *** Variables *** |
8 | 8 | ${mode} openua |
9 | - | |
10 | -${role} viewer | |
11 | -${broker} Quinta | |
9 | +@{used_roles} tender_owner provider provider1 viewer | |
12 | 10 | |
13 | 11 | |
14 | 12 | *** Test Cases *** |
... | ... | @@ -64,6 +62,7 @@ ${broker} Quinta |
64 | 62 | ... ${USERS.users['${provider}'].broker} |
65 | 63 | [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі |
66 | 64 | [Teardown] Оновити LAST_MODIFICATION_DATE |
65 | + Дочекатись дати початку прийому пропозицій ${provider} | |
67 | 66 | ${claim}= Підготовка даних для подання вимоги |
68 | 67 | ${claim_resp}= Викликати для учасника ${provider} |
69 | 68 | ... Створити вимогу |
... | ... | @@ -99,7 +98,7 @@ ${broker} Quinta |
99 | 98 | ... provider |
100 | 99 | ... ${USERS.users['${provider}'].broker} |
101 | 100 | [Teardown] Оновити LAST_MODIFICATION_DATE |
102 | - ${bid}= Підготувати дані для подання пропозиції aboveThreshold=${True} | |
101 | + ${bid}= Підготувати дані для подання пропозиції | |
103 | 102 | Log ${bid} |
104 | 103 | ${bidresponses}= Create Dictionary |
105 | 104 | Set To Dictionary ${bidresponses} bid ${bid} |
... | ... | @@ -113,7 +112,7 @@ ${broker} Quinta |
113 | 112 | ... provider1 |
114 | 113 | ... ${USERS.users['${provider1}'].broker} |
115 | 114 | [Teardown] Оновити LAST_MODIFICATION_DATE |
116 | - ${bid}= Підготувати дані для подання пропозиції aboveThreshold=${True} | |
115 | + ${bid}= Підготувати дані для подання пропозиції | |
117 | 116 | Log ${bid} |
118 | 117 | ${bidresponses}= Create Dictionary |
119 | 118 | Set To Dictionary ${bidresponses} bid ${bid} |
... | ... | @@ -163,7 +162,7 @@ Cкасувати цінову пропозицію другого учасни |
163 | 162 | ... provider1 |
164 | 163 | ... ${USERS.users['${provider1}'].broker} |
165 | 164 | [Teardown] Оновити LAST_MODIFICATION_DATE |
166 | - ${bid}= Підготувати дані для подання пропозиції aboveThreshold=${True} | |
165 | + ${bid}= Підготувати дані для подання пропозиції | |
167 | 166 | Log ${bid} |
168 | 167 | ${bidresponses}= Create Dictionary |
169 | 168 | Set To Dictionary ${bidresponses} bid ${bid} |
... | ... | @@ -288,7 +287,7 @@ Cкасувати цінову пропозицію другого учасни |
288 | 287 | ... provider1 |
289 | 288 | ... ${USERS.users['${provider1}'].broker} |
290 | 289 | [Teardown] Оновити LAST_MODIFICATION_DATE |
291 | - ${bid}= Підготувати дані для подання пропозиції aboveThreshold=${True} | |
290 | + ${bid}= Підготувати дані для подання пропозиції | |
292 | 291 | Log ${bid} |
293 | 292 | ${bidresponses}= Create Dictionary |
294 | 293 | Set To Dictionary ${bidresponses} bid ${bid} | ... | ... |
... | ... | @@ -6,8 +6,7 @@ Suite Teardown Close all browsers |
6 | 6 | |
7 | 7 | *** Variables *** |
8 | 8 | ${mode} reporting |
9 | -${role} viewer | |
10 | -${broker} Quinta | |
9 | +@{used_roles} tender_owner viewer | |
11 | 10 | |
12 | 11 | |
13 | 12 | *** Test Cases *** |
... | ... | @@ -20,7 +19,7 @@ ${broker} Quinta |
20 | 19 | ... ${USERS.users['${tender_owner}'].broker} |
21 | 20 | ... minimal |
22 | 21 | [Teardown] Оновити LAST_MODIFICATION_DATE |
23 | - Можливість створити закупівлю для тестування скасування | |
22 | + Можливість створити закупівлю | |
24 | 23 | |
25 | 24 | |
26 | 25 | Можливість скасувати звіт про укладений договір |
... | ... | @@ -73,24 +72,6 @@ ${broker} Quinta |
73 | 72 | Можливість створити закупівлю |
74 | 73 | |
75 | 74 | |
76 | -Можливість знайти звіт про укладений договір по ідентифікатору | |
77 | - [Tags] ${USERS.users['${viewer}'].broker}: Можливість знайти процедуру | |
78 | - ... viewer | |
79 | - ... ${USERS.users['${viewer}'].broker} | |
80 | - ... minimal | |
81 | - [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
82 | - Можливість знайти закупівлю по ідентифікатору | |
83 | - | |
84 | - | |
85 | -Можливість модифікації звіту про укладений договір | |
86 | - [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість модифікації процедури | |
87 | - ... tender_owner | |
88 | - ... ${USERS.users['${tender_owner}'].broker} | |
89 | - ... level2 | |
90 | - [Teardown] Оновити LAST_MODIFICATION_DATE | |
91 | - Можливість модифікації закупівлі | |
92 | - | |
93 | - | |
94 | 75 | Можливість додати документацію до звіту про укладений договір |
95 | 76 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість додати документацію до процедури |
96 | 77 | ... tender_owner |
... | ... | @@ -108,6 +89,35 @@ ${broker} Quinta |
108 | 89 | [Teardown] Оновити LAST_MODIFICATION_DATE |
109 | 90 | Можливість зареєструвати і підтвердити постачальника до закупівлі |
110 | 91 | |
92 | + | |
93 | +Можливість укласти угоду для звіту про укладений договір | |
94 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість укласти угоду для процедури | |
95 | + ... ${tender_owner} | |
96 | + ... ${USERS.users['${tender_owner}'].broker} | |
97 | + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | |
98 | + [Teardown] Оновити LAST_MODIFICATION_DATE | |
99 | + Можливість укласти угоду для закупівлі | |
100 | + | |
101 | + | |
102 | +Можливість знайти звіт про укладений договір по ідентифікатору | |
103 | + [Tags] ${USERS.users['${viewer}'].broker}: Можливість знайти процедуру | |
104 | + ... viewer | |
105 | + ... ${USERS.users['${viewer}'].broker} | |
106 | + ... minimal | |
107 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
108 | + Можливість знайти закупівлю по ідентифікатору | |
109 | + | |
110 | +############################################################################################## | |
111 | +# CONTRACTS | |
112 | +############################################################################################## | |
113 | + | |
114 | +Відображення статусу підписаної угоди з постачальником звіту про укладений договір | |
115 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення угоди з постачальником процедури | |
116 | + ... viewer | |
117 | + ... ${USERS.users['${viewer}'].broker} | |
118 | + [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
119 | + Відображення статусу підписаної угоди з постачальником закупівлі | |
120 | + | |
111 | 121 | ############################################################################################## |
112 | 122 | # MAIN DATA |
113 | 123 | ############################################################################################## |
... | ... | @@ -325,13 +335,6 @@ ${broker} Quinta |
325 | 335 | Відображення опису номенклатури закупівлі |
326 | 336 | |
327 | 337 | |
328 | -Відображення ідентифікатора номенклатури звіту про укладений договір | |
329 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури | |
330 | - ... viewer | |
331 | - ... ${USERS.users['${viewer}'].broker} | |
332 | - Відображення ідентифікатора номенклатури закупівлі | |
333 | - | |
334 | - | |
335 | 338 | Відображення кількості номенклатури звіту про укладений договір |
336 | 339 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури процедури |
337 | 340 | ... viewer |
... | ... | @@ -546,23 +549,3 @@ ${broker} Quinta |
546 | 549 | ... viewer |
547 | 550 | ... ${USERS.users['${viewer}'].broker} |
548 | 551 | Відображення вартості номенклатури постачальника закупівлі |
549 | - | |
550 | -############################################################################################## | |
551 | -# CONTRACTS | |
552 | -############################################################################################## | |
553 | - | |
554 | -Можливість укласти угоду для звіту про укладений договір | |
555 | - [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість укласти угоду для процедури | |
556 | - ... ${tender_owner} | |
557 | - ... ${USERS.users['${tender_owner}'].broker} | |
558 | - [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | |
559 | - [Teardown] Оновити LAST_MODIFICATION_DATE | |
560 | - Можливість укласти угоду для закупівлі | |
561 | - | |
562 | - | |
563 | -Відображення статусу підписаної угоди з постачальником звіту про укладений договір | |
564 | - [Tags] ${USERS.users['${viewer}'].broker}: Відображення угоди з постачальником процедури | |
565 | - ... viewer | |
566 | - ... ${USERS.users['${viewer}'].broker} | |
567 | - [Setup] Дочекатись синхронізації з майданчиком ${viewer} | |
568 | - Відображення статусу підписаної угоди з постачальником закупівлі | ... | ... |
... | ... | @@ -16,13 +16,10 @@ from robot.output.loggerhelper import Message |
16 | 16 | # can access them by simply importing library "service_keywords". |
17 | 17 | # Please ignore the warning given by Flake8 or other linter. |
18 | 18 | from .initial_data import ( |
19 | - auction_bid, | |
20 | 19 | create_fake_doc, |
21 | 20 | create_fake_sentence, |
22 | - test_additional_items_data, | |
23 | 21 | test_award_data, |
24 | 22 | test_bid_data, |
25 | - test_bid_data_meat_tender, | |
26 | 23 | test_cancel_claim_data, |
27 | 24 | test_cancel_tender_data, |
28 | 25 | test_change_cancellation_document_field_data, |
... | ... | @@ -40,14 +37,13 @@ from .initial_data import ( |
40 | 37 | test_lot_data, |
41 | 38 | test_lot_document_data, |
42 | 39 | test_lot_question_data, |
43 | - test_lots_bid_data, | |
44 | - test_meat_tender_data, | |
45 | 40 | test_question_answer_data, |
46 | 41 | test_question_data, |
47 | 42 | test_submit_claim_data, |
48 | 43 | test_supplier_data, |
49 | 44 | test_tender_data, |
50 | 45 | test_tender_data_limited, |
46 | + test_tender_data_meat, | |
51 | 47 | test_tender_data_multiple_items, |
52 | 48 | test_tender_data_multiple_lots, |
53 | 49 | test_tender_data_openeu, |
... | ... | @@ -142,14 +138,65 @@ def munch_to_object(data, format="yaml"): |
142 | 138 | return data.toYAML(allow_unicode=True, default_flow_style=False) |
143 | 139 | |
144 | 140 | |
145 | -def load_initial_data_from(file_name): | |
141 | +def load_data_from(file_name, mode=None): | |
146 | 142 | if not os.path.exists(file_name): |
147 | 143 | file_name = os.path.join(os.path.dirname(__file__), 'data', file_name) |
148 | 144 | with open(file_name) as file_obj: |
149 | 145 | if file_name.endswith(".json"): |
150 | - return Munch.fromDict(load(file_obj)) | |
146 | + file_data = Munch.fromDict(load(file_obj)) | |
151 | 147 | elif file_name.endswith(".yaml"): |
152 | - return fromYAML(file_obj) | |
148 | + file_data = fromYAML(file_obj) | |
149 | + if mode == "brokers": | |
150 | + default = file_data.pop('Default') | |
151 | + brokers = {} | |
152 | + for k, v in file_data.iteritems(): | |
153 | + brokers[k] = merge_dicts(default, v) | |
154 | + return brokers | |
155 | + else: | |
156 | + return file_data | |
157 | + | |
158 | + | |
159 | +def compute_intrs(brokers_data, used_brokers): | |
160 | + """Compute optimal values for period intervals. | |
161 | + | |
162 | + Notice: This function is maximally effective if ``brokers_data`` | |
163 | + does not contain ``Default`` entry. | |
164 | + Using `load_data_from` with ``mode='brokers'`` is recommended. | |
165 | + """ | |
166 | + num_types = (int, long, float) | |
167 | + | |
168 | + def recur(l, r): | |
169 | + l, r = deepcopy(l), deepcopy(r) | |
170 | + if isinstance(l, list) and isinstance(r, list) and len(l) == len(r): | |
171 | + lst = [] | |
172 | + for ll, rr in zip(l, r): | |
173 | + lst.append(recur(ll, rr)) | |
174 | + return lst | |
175 | + elif isinstance(l, num_types) and isinstance(r, num_types): | |
176 | + if l == r: | |
177 | + return l | |
178 | + if l > r: | |
179 | + return l | |
180 | + if l < r: | |
181 | + return r | |
182 | + elif isinstance(l, dict) and isinstance(r, dict): | |
183 | + for k, v in r.iteritems(): | |
184 | + if k not in l.keys(): | |
185 | + l[k] = v | |
186 | + else: | |
187 | + l[k] = recur(l[k], v) | |
188 | + return l | |
189 | + else: | |
190 | + raise TypeError("Couldn't recur({0}, {1})".format( | |
191 | + str(type(l)), str(type(r)))) | |
192 | + | |
193 | + intrs = [] | |
194 | + for i in used_brokers: | |
195 | + intrs.append(brokers_data[i]['intervals']) | |
196 | + result = intrs.pop(0) | |
197 | + for i in intrs: | |
198 | + result = recur(result, i) | |
199 | + return result | |
153 | 200 | |
154 | 201 | |
155 | 202 | def prepare_test_tender_data(procedure_intervals, mode): |
... | ... | @@ -171,20 +218,24 @@ def prepare_test_tender_data(procedure_intervals, mode): |
171 | 218 | assert 'accelerator' not in intervals.keys(), \ |
172 | 219 | "Accelerator is not available for mode '{0}'".format(mode) |
173 | 220 | |
174 | - if mode == 'single': | |
175 | - return munchify({'data': test_tender_data(intervals)}) | |
176 | - elif mode == 'multi': | |
221 | + if mode == 'meat': | |
222 | + return munchify({'data': test_tender_data_meat(intervals)}) | |
223 | + elif mode == 'multiItem': | |
177 | 224 | return munchify({'data': test_tender_data_multiple_items(intervals)}) |
178 | - elif mode == 'reporting': | |
179 | - return munchify({'data': test_tender_data_limited(intervals, 'reporting')}) | |
225 | + elif mode == 'multiLot': | |
226 | + return munchify({'data': test_tender_data_multiple_lots(intervals)}) | |
180 | 227 | elif mode == 'negotiation': |
181 | 228 | return munchify({'data': test_tender_data_limited(intervals, 'negotiation')}) |
182 | 229 | elif mode == 'negotiation.quick': |
183 | 230 | return munchify({'data': test_tender_data_limited(intervals, 'negotiation.quick')}) |
184 | - elif mode == 'openua': | |
185 | - return munchify({'data': test_tender_data_openua(intervals)}) | |
186 | 231 | elif mode == 'openeu': |
187 | 232 | return munchify({'data': test_tender_data_openeu(intervals)}) |
233 | + elif mode == 'openua': | |
234 | + return munchify({'data': test_tender_data_openua(intervals)}) | |
235 | + elif mode == 'reporting': | |
236 | + return munchify({'data': test_tender_data_limited(intervals, 'reporting')}) | |
237 | + elif mode == 'single': | |
238 | + return munchify({'data': test_tender_data(intervals)}) | |
188 | 239 | raise ValueError("Invalid mode for prepare_test_tender_data") |
189 | 240 | |
190 | 241 | |
... | ... | @@ -207,14 +258,6 @@ def run_keyword_and_ignore_keyword_definitions(name, *args, **kwargs): |
207 | 258 | return status, _ |
208 | 259 | |
209 | 260 | |
210 | -def set_tender_periods(tender): | |
211 | - now = get_now() | |
212 | - tender.data.enquiryPeriod.endDate = (now + timedelta(minutes=2)).isoformat() | |
213 | - tender.data.tenderPeriod.startDate = (now + timedelta(minutes=2)).isoformat() | |
214 | - tender.data.tenderPeriod.endDate = (now + timedelta(minutes=4)).isoformat() | |
215 | - return tender | |
216 | - | |
217 | - | |
218 | 261 | def set_access_key(tender, access_token): |
219 | 262 | tender.access = munchify({"token": access_token}) |
220 | 263 | return tender |
... | ... | @@ -279,57 +322,6 @@ def create_data_dict(path_to_value=None, value=None): |
279 | 322 | return data_dict |
280 | 323 | |
281 | 324 | |
282 | -def cancel_tender(cancellation_reason): | |
283 | - return { | |
284 | - 'data': { | |
285 | - 'reason': cancellation_reason | |
286 | - } | |
287 | - } | |
288 | - | |
289 | - | |
290 | -def confirm_supplier(supplier_id): | |
291 | - return { | |
292 | - "data": { | |
293 | - "status": "active", | |
294 | - "id": supplier_id | |
295 | - } | |
296 | - } | |
297 | - | |
298 | - | |
299 | -def change_cancellation_document_field(key, value): | |
300 | - data = { | |
301 | - "data": { | |
302 | - key: value | |
303 | - } | |
304 | - } | |
305 | - return data | |
306 | - | |
307 | - | |
308 | -def confirm_cancellation(cancellation_id): | |
309 | - data = { | |
310 | - "data": { | |
311 | - "status": "active", | |
312 | - "id": cancellation_id | |
313 | - } | |
314 | - } | |
315 | - return data | |
316 | - | |
317 | - | |
318 | -def confirm_contract(contract_id): | |
319 | - data = { | |
320 | - "data": { | |
321 | - "id": contract_id, | |
322 | - "status": "active" | |
323 | - } | |
324 | - } | |
325 | - return data | |
326 | - | |
327 | - | |
328 | -def additional_items_data(tender_id, access_token): | |
329 | - data = {"access": {"token": access_token}, "data": {"id": tender_id, "items": [{"unit": {"code": "MON", "name": "month"}, "quantity": 9}]}} | |
330 | - return data | |
331 | - | |
332 | - | |
333 | 325 | def munch_dict(arg=None, data=False): |
334 | 326 | if arg is None: |
335 | 327 | arg = {} |
... | ... | @@ -338,8 +330,11 @@ def munch_dict(arg=None, data=False): |
338 | 330 | return munchify(arg) |
339 | 331 | |
340 | 332 | |
341 | -def get_id_from_field(field): | |
342 | - return re.match(r'(^[filq]-[0-9a-fA-F]{8}): ', field).group(1) | |
333 | +def get_id_from_object(obj): | |
334 | + obj_id = re.match(r'(^[filq]-[0-9a-fA-F]{8}): ', obj['title']) | |
335 | + if not obj_id: | |
336 | + obj_id = re.match(r'(^[filq]-[0-9a-fA-F]{8}): ', obj['description']) | |
337 | + return obj_id.group(1) | |
343 | 338 | |
344 | 339 | |
345 | 340 | def get_object_type_by_id(object_id): |
... | ... | @@ -348,12 +343,14 @@ def get_object_type_by_id(object_id): |
348 | 343 | |
349 | 344 | |
350 | 345 | def get_object_index_by_id(data, object_id): |
346 | + if not data: | |
347 | + return 0 | |
351 | 348 | for index, element in enumerate(data): |
352 | - element_id = get_id_from_field(element['description']) | |
349 | + element_id = get_id_from_object(element) | |
353 | 350 | if element_id == object_id: |
354 | 351 | break |
355 | 352 | else: |
356 | - index = 0 | |
353 | + index += 1 | |
357 | 354 | return index |
358 | 355 | |
359 | 356 | # GUI Frontends common | ... | ... |
... | ... | @@ -11,9 +11,8 @@ Suite Teardown Test Suite Teardown |
11 | 11 | |
12 | 12 | *** Variables *** |
13 | 13 | ${mode} single |
14 | +@{used_roles} tender_owner provider provider1 viewer | |
14 | 15 | |
15 | -${role} viewer | |
16 | -${broker} Quinta | |
17 | 16 | |
18 | 17 | *** Test Cases *** |
19 | 18 | Можливість оголосити однопредметний тендер |
... | ... | @@ -329,7 +328,7 @@ ${broker} Quinta |
329 | 328 | ${question_resp}= Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${question} |
330 | 329 | ${now}= Get Current TZdate |
331 | 330 | ${question.data.date}= Set variable ${now} |
332 | - ${question_id}= get_id_from_field ${question.data.description} | |
331 | + ${question_id}= get_id_from_object ${question.data} | |
333 | 332 | ${question_data}= Create Dictionary question=${question} question_resp=${question_resp} question_id=${question_id} |
334 | 333 | ${question_data}= munch_dict arg=${question_data} |
335 | 334 | Set To Dictionary ${USERS.users['${provider}']} question_data=${question_data} | ... | ... |
Please
register
or
login
to post a comment