Showing
5 changed files
with
260 additions
and
5 deletions
@@ -35,6 +35,7 @@ gh = git://github.com/ | @@ -35,6 +35,7 @@ gh = git://github.com/ | ||
35 | gh_push = git@github.com: | 35 | gh_push = git@github.com: |
36 | 36 | ||
37 | [sources] | 37 | [sources] |
38 | +barbecue = git ${remotes:gh}openprocurement/barbecue.git | ||
38 | openprocurement_client = git ${remotes:gh}openprocurement/openprocurement.client.python.git | 39 | openprocurement_client = git ${remotes:gh}openprocurement/openprocurement.client.python.git |
39 | robot_tests.broker.etender = git ${remotes:gh}openprocurement/robot_tests.broker.etender.git | 40 | robot_tests.broker.etender = git ${remotes:gh}openprocurement/robot_tests.broker.etender.git |
40 | robot_tests.broker.privatmarket = git ${remotes:gh}openprocurement/robot_tests.broker.privatmarket.git | 41 | robot_tests.broker.privatmarket = git ${remotes:gh}openprocurement/robot_tests.broker.privatmarket.git |
@@ -282,6 +282,59 @@ def test_tender_data_multiple_lots(intervals): | @@ -282,6 +282,59 @@ def test_tender_data_multiple_lots(intervals): | ||
282 | return t_data | 282 | return t_data |
283 | 283 | ||
284 | 284 | ||
285 | +def test_meat_tender_data(tender): | ||
286 | + item_id = "edd0032574bf4402877ad5f362df225a" | ||
287 | + tender.data['items'][0].id = item_id | ||
288 | + tender.data.features = [ | ||
289 | + { | ||
290 | + "code": "ee3e24bc17234a41bd3e3a04cc28e9c6", | ||
291 | + "featureOf": "tenderer", | ||
292 | + "title": "Термін оплати", | ||
293 | + "description": "Умови відстрочки платежу після поставки товару", | ||
294 | + "enum": [ | ||
295 | + { | ||
296 | + "value": 0.15, | ||
297 | + "title": "180 днів та більше" | ||
298 | + }, | ||
299 | + { | ||
300 | + "value": 0.1, | ||
301 | + "title": "90-179 днів", | ||
302 | + }, | ||
303 | + { | ||
304 | + "value": 0.05, | ||
305 | + "title": "30-89 днів" | ||
306 | + }, | ||
307 | + { | ||
308 | + "value": 0, | ||
309 | + "title": "Менше 30 днів" | ||
310 | + } | ||
311 | + ] | ||
312 | + }, | ||
313 | + { | ||
314 | + "code": "48cfd91612c04125ab406374d7cc8d93", | ||
315 | + "featureOf": "item", | ||
316 | + "relatedItem": item_id, | ||
317 | + "title": "Сорт", | ||
318 | + "description": "Сорт продукції", | ||
319 | + "enum": [ | ||
320 | + { | ||
321 | + "value": 0.05, | ||
322 | + "title": "Вищий" | ||
323 | + }, | ||
324 | + { | ||
325 | + "value": 0.01, | ||
326 | + "title": "Перший", | ||
327 | + }, | ||
328 | + { | ||
329 | + "value": 0, | ||
330 | + "title": "Другий" | ||
331 | + } | ||
332 | + ] | ||
333 | + } | ||
334 | + ] | ||
335 | + return tender | ||
336 | + | ||
337 | + | ||
285 | def test_question_data(): | 338 | def test_question_data(): |
286 | return munchify({ | 339 | return munchify({ |
287 | "data": { | 340 | "data": { |
@@ -390,6 +443,46 @@ def test_bid_data(): | @@ -390,6 +443,46 @@ def test_bid_data(): | ||
390 | }) | 443 | }) |
391 | 444 | ||
392 | 445 | ||
446 | +def test_bid_data_meat_tender(): | ||
447 | + return munchify({ | ||
448 | + "data": { | ||
449 | + "tenderers": [ | ||
450 | + { | ||
451 | + "address": { | ||
452 | + "countryName": "Україна", | ||
453 | + "locality": "м. Вінниця", | ||
454 | + "postalCode": "21100", | ||
455 | + "region": "м. Вінниця", | ||
456 | + "streetAddress": fake.street_address() | ||
457 | + }, | ||
458 | + "contactPoint": { | ||
459 | + "name": fake.name(), | ||
460 | + "telephone": fake.phone_number() | ||
461 | + }, | ||
462 | + "identifier": { | ||
463 | + "scheme": u"UA-EDR", | ||
464 | + "id": u"{:08d}".format(fake.pyint()), | ||
465 | + }, | ||
466 | + "name": fake.company() | ||
467 | + } | ||
468 | + ], | ||
469 | + "parameters": [ | ||
470 | + { | ||
471 | + "code": "ee3e24bc17234a41bd3e3a04cc28e9c6", | ||
472 | + "value": fake.random_element(elements=(0.15, 0.1, 0.05, 0)) | ||
473 | + }, | ||
474 | + { | ||
475 | + "code": "48cfd91612c04125ab406374d7cc8d93", | ||
476 | + "value": fake.random_element(elements=(0.05, 0.01, 0)) | ||
477 | + } | ||
478 | + ], | ||
479 | + "value": { | ||
480 | + "amount": 500 | ||
481 | + } | ||
482 | + } | ||
483 | + }) | ||
484 | + | ||
485 | + | ||
393 | def auction_bid(): | 486 | def auction_bid(): |
394 | return munchify({ | 487 | return munchify({ |
395 | "data": { | 488 | "data": { |
@@ -448,3 +541,53 @@ def test_item_data(): | @@ -448,3 +541,53 @@ def test_item_data(): | ||
448 | }, | 541 | }, |
449 | "quantity": fake.pyint() | 542 | "quantity": fake.pyint() |
450 | } | 543 | } |
544 | + | ||
545 | + | ||
546 | +def test_invalid_features_data(): | ||
547 | + return [ | ||
548 | + { | ||
549 | + "code": "ee3e24bc17234a41bd3e3a04cc28e9c6", | ||
550 | + "featureOf": "tenderer", | ||
551 | + "title": "Термін оплати", | ||
552 | + "description": "Умови відстрочки платежу після поставки товару", | ||
553 | + "enum": [ | ||
554 | + { | ||
555 | + "value": 0.35, | ||
556 | + "title":"180 днів та більше" | ||
557 | + }, | ||
558 | + { | ||
559 | + "value": 0.1, | ||
560 | + "title": "90-179 днів", | ||
561 | + }, | ||
562 | + { | ||
563 | + "value": 0.05, | ||
564 | + "title": "30-89 днів" | ||
565 | + }, | ||
566 | + { | ||
567 | + "value": 0, | ||
568 | + "title": "Менше 30 днів" | ||
569 | + } | ||
570 | + ] | ||
571 | + }, | ||
572 | + { | ||
573 | + "code": "48cfd91612c04125ab406374d7cc8d93", | ||
574 | + "featureOf": "item", | ||
575 | + "relatedItem": "edd0032574bf4402877ad5f362df225a", | ||
576 | + "title": "Сорт", | ||
577 | + "description": "Сорт продукції", | ||
578 | + "enum":[ | ||
579 | + { | ||
580 | + "value": 0.35, | ||
581 | + "title": "Вищий" | ||
582 | + }, | ||
583 | + { | ||
584 | + "value": 0.01, | ||
585 | + "title": "Перший", | ||
586 | + }, | ||
587 | + { | ||
588 | + "value": 0, | ||
589 | + "title": "Другий" | ||
590 | + } | ||
591 | + ] | ||
592 | + } | ||
593 | +] |
op_robot_tests/tests_files/meatTender.robot
0 → 100644
1 | +*** Settings *** | ||
2 | +Library op_robot_tests.tests_files.service_keywords | ||
3 | +Library String | ||
4 | +Library Collections | ||
5 | +Library Selenium2Library | ||
6 | +Library DebugLibrary | ||
7 | +Resource keywords.robot | ||
8 | +Resource resource.robot | ||
9 | +Suite Setup TestSuiteSetup | ||
10 | +Suite Teardown Close all browsers | ||
11 | + | ||
12 | +*** Variables *** | ||
13 | +${mode} single | ||
14 | + | ||
15 | +${role} viewer | ||
16 | +${broker} Quinta | ||
17 | + | ||
18 | +*** Test Cases *** | ||
19 | +Можливість оголосити однопредметний тендер з неціновим показником | ||
20 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | ||
21 | + [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера), | ||
22 | + ${base_tender_data}= Підготовка початкових даних | ||
23 | + ${tender_data}= test_meat_tender_data ${base_tender_data} | ||
24 | + ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data} | ||
25 | + ${LAST_MODIFICATION_DATE}= Get Current Date | ||
26 | + Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID} | ||
27 | + Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE} | ||
28 | + log ${TENDER} | ||
29 | + | ||
30 | +Пошук однопредметного тендера по ідентифікатору | ||
31 | + [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору | ||
32 | + Дочекатись синхронізації з майданчиком ${viewer} | ||
33 | + Викликати для учасника ${viewer} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | ||
34 | + | ||
35 | +Неможливість перевищити ліміт для нецінових критеріїв | ||
36 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер | ||
37 | + ${invalid_features}= test_invalid_features_data | ||
38 | + ${fail}= Викликати для учасника ${tender_owner} Внести зміни в тендер shouldfail ${TENDER['TENDER_UAID']} features ${invalid_features} | ||
39 | + Log ${fail} | ||
40 | + | ||
41 | +###### | ||
42 | +#Подання пропозицій | ||
43 | + | ||
44 | +Неможливість подати цінову пропозицію без нецінового показника | ||
45 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію | ||
46 | + Дочекатись дати початку прийому пропозицій | ||
47 | + sleep 90 | ||
48 | + ${bid}= test bid data | ||
49 | + Log ${bid} | ||
50 | + ${biddingresponse0}= Викликати для учасника ${provider} Подати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${bid} | ||
51 | + log ${biddingresponse0} | ||
52 | + | ||
53 | +Подати цінову пропозицію з неціновим показником | ||
54 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію | ||
55 | + ${bid}= test bid data meat tender | ||
56 | + Log ${bid} | ||
57 | + ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | ||
58 | + ${biddingresponse0}= Create Dictionary | ||
59 | + Set To Dictionary ${biddingresponse0} resp ${resp} | ||
60 | + Set To Dictionary ${USERS.users['${provider}']} biddingresponse0 ${biddingresponse0} | ||
61 | + log ${resp} | ||
62 | + | ||
63 | +Можливість змінити неціновий показник повторної цінової пропозиції до 0 | ||
64 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | ||
65 | + Set To Dictionary ${USERS.users['${provider}'].biddingresponse0['resp'].data.parameters[0]} value 0 | ||
66 | + Log ${USERS.users['${provider}'].biddingresponse0['resp'].data.parameters[0]} | ||
67 | + ${fixbidparamsto0resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].biddingresponse0['resp']} | ||
68 | + Set To Dictionary ${USERS.users['${provider}'].biddingresponse0} fixbidparamsto0resp ${fixbidparamsto0resp} | ||
69 | + log ${fixbidparamsto0resp} | ||
70 | + | ||
71 | +Можливість змінити неціновий показник повторної цінової пропозиції до 0.15 | ||
72 | + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію | ||
73 | + Set To Dictionary ${USERS.users['${provider}'].biddingresponse0['resp'].data.parameters[0]} value 0.15 | ||
74 | + Log ${USERS.users['${provider}'].biddingresponse0['resp'].data.parameters[0]} | ||
75 | + ${fixbidparamsto015resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].biddingresponse0['resp']} | ||
76 | + Set To Dictionary ${USERS.users['${provider}'].biddingresponse0} fixbidparamsto015resp ${fixbidparamsto015resp} | ||
77 | + log ${fixbidparamsto015resp} | ||
78 | + | ||
79 | +Подати цінову пропозицію з неціновим показником другим учасником | ||
80 | + [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію | ||
81 | + Дочекатись дати початку прийому пропозицій | ||
82 | + ${bid}= test bid data meat tender | ||
83 | + Log ${bid} | ||
84 | + ${bidresponses}= Create Dictionary | ||
85 | + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | ||
86 | + Set To Dictionary ${bidresponses} resp ${resp} | ||
87 | + Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses} | ||
88 | + log ${resp} | ||
89 | + log ${USERS.users['${provider1}'].bidresponses} | ||
90 | + | ||
91 | +###### | ||
92 | +#Аукціон | ||
93 | + | ||
94 | +Очікування аукціону | ||
95 | + Дочекатись синхронізації з майданчиком ${tender_owner} | ||
96 | + ${tender_data}= Викликати для учасника ${tender_owner} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | ||
97 | + log ${tender_data.data.auctionPeriod.startDate} | ||
98 | + Дочекатись дати початку аукціону | ||
99 | + sleep 1500 | ||
100 | + | ||
101 | +Завершення аукціону | ||
102 | + Дочекатись синхронізації з майданчиком ${tender_owner} | ||
103 | + ${tender_data}= Викликати для учасника ${tender_owner} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | ||
104 | + ${result}= chef ${tender_data.data.bids} ${tender_data.data.features} | ||
105 | + Log Many ${result[0]} ${tender_data.data.awards[0]} | ||
106 | + Log Many ${result[0].id} ${tender_data.data.awards[0].bid_id} | ||
107 | + Should Be Equal ${result[0].id} ${tender_data.data.awards[0].bid_id} |
@@ -14,13 +14,16 @@ from robot.output.loggerhelper import Message | @@ -14,13 +14,16 @@ from robot.output.loggerhelper import Message | ||
14 | # can access them by simply importing library "service_keywords". | 14 | # can access them by simply importing library "service_keywords". |
15 | # Please ignore the warning given by Flake8 or other linter. | 15 | # Please ignore the warning given by Flake8 or other linter. |
16 | from .initial_data import ( | 16 | from .initial_data import ( |
17 | - auction_bid, create_fake_doc, | ||
18 | - test_award_data, test_bid_data, test_complaint_data, | ||
19 | - test_complaint_reply_data, test_item_data, test_question_answer_data, | ||
20 | - test_question_data, test_tender_data, test_tender_data_multiple_lots | 17 | + auction_bid, create_fake_doc, test_award_data, test_bid_data, |
18 | + test_bid_data_meat_tender, test_complaint_data, test_complaint_reply_data, | ||
19 | + test_invalid_features_data, test_item_data, test_meat_tender_data, | ||
20 | + test_question_answer_data, test_question_data, test_tender_data, | ||
21 | + test_tender_data_multiple_lots | ||
21 | ) | 22 | ) |
22 | from .local_time import get_now, TZ | 23 | from .local_time import get_now, TZ |
23 | import os | 24 | import os |
25 | +import calendar | ||
26 | +from barbecue import chef | ||
24 | 27 | ||
25 | 28 | ||
26 | def get_current_tzdate(): | 29 | def get_current_tzdate(): |
@@ -32,7 +32,8 @@ setup(name='op_robot_tests', | @@ -32,7 +32,8 @@ setup(name='op_robot_tests', | ||
32 | 'dateutils', | 32 | 'dateutils', |
33 | 'pytz', | 33 | 'pytz', |
34 | 'parse', | 34 | 'parse', |
35 | - 'chromedriver' | 35 | + 'chromedriver', |
36 | + 'barbecue' | ||
36 | ], | 37 | ], |
37 | entry_points={ | 38 | entry_points={ |
38 | 'console_scripts': [ | 39 | 'console_scripts': [ |
Please
register
or
login
to post a comment