Commit 5568bd1c2eb653f0df7d6d861cd23c408d24ed0e

Authored by selurvedu
2 parents 1b2210e3 4140169a

Merge pull request #28 from Leits/master

Add tests for MEAT and multilot tenders
... ... @@ -35,6 +35,7 @@ gh = git://github.com/
35 35 gh_push = git@github.com:
36 36
37 37 [sources]
  38 +barbecue = git ${remotes:gh}openprocurement/barbecue.git
38 39 openprocurement_client = git ${remotes:gh}openprocurement/openprocurement.client.python.git
39 40 robot_tests.broker.etender = git ${remotes:gh}openprocurement/robot_tests.broker.etender.git
40 41 robot_tests.broker.privatmarket = git ${remotes:gh}openprocurement/robot_tests.broker.privatmarket.git
... ...
... ... @@ -121,10 +121,9 @@ Library openprocurement_client_helper.py
121 121 ${internalid}= Отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
122 122 Отримати тендер ${ARGUMENTS[0]} ${internalid}
123 123 @{items}= Get From Object ${TENDER_DATA.data} items
124   - ${item}= get variable value ${items[1]}
125   - Run Keyword And Continue On Failure Remove From Dictionary ${item} id
126 124 Log Many @{items}
127 125 :FOR ${INDEX} IN RANGE ${ARGUMENTS[2]}
  126 + \ ${item}= test_item_data
128 127 \ Append To List ${items} ${item}
129 128 Log Many @{items}
130 129 Set_To_Object ${TENDER_DATA.data} items ${items}
... ... @@ -349,3 +348,57 @@ Library openprocurement_client_helper.py
349 348 ${contents} ${filename}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_file ${tender} ${ARGUMENTS[2]} ${token}
350 349 log ${filename}
351 350 [return] ${contents} ${filename}
  351 +
  352 +
  353 +Створити лот
  354 + [Documentation]
  355 + ... ${ARGUMENTS[0]} == username
  356 + ... ${ARGUMENTS[1]} == tender
  357 + ... ${ARGUMENTS[2]} == lot
  358 + [Arguments] @{ARGUMENTS}
  359 + log many @{ARGUMENTS}
  360 + ${tender}= set_access_key ${ARGUMENTS[1]} ${USERS.users['${ARGUMENTS[0]}'].access_token}
  361 + ${tender_lot}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} create_lot ${tender} ${ARGUMENTS[2]}
  362 + Log ${tender_lot}
  363 + [return] ${tender_lot}
  364 +
  365 +Змінити лот
  366 + [Documentation]
  367 + ... ${ARGUMENTS[0]} == username
  368 + ... ${ARGUMENTS[1]} == tender
  369 + ... ${ARGUMENTS[2]} == lot
  370 + [Arguments] @{ARGUMENTS}
  371 + log many @{ARGUMENTS}
  372 + ${tender}= set_access_key ${ARGUMENTS[1]} ${USERS.users['${ARGUMENTS[0]}'].access_token}
  373 + ${tender_lot}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_lot ${tender} ${ARGUMENTS[2]}
  374 + Log ${tender_lot}
  375 + [return] ${tender_lot}
  376 +
  377 +Завантажити документ в лот
  378 + [Documentation]
  379 + ... ${ARGUMENTS[0]} == username
  380 + ... ${ARGUMENTS[1]} == filepath
  381 + ... ${ARGUMENTS[2]} == tenderUAID
  382 + ... ${ARGUMENTS[3]} == lot_id
  383 + [Arguments] @{ARGUMENTS}
  384 + log many @{ARGUMENTS}
  385 + ${tenderID}= openprocurement_client.Отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[2]}
  386 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${tenderID}
  387 + ${tender}= set_access_key ${tender} ${USERS.users['${ARGUMENTS[0]}'].access_token}
  388 + ${doc}= Завантажити документ ${ARGUMENTS[0]} ${ARGUMENTS[1]} ${ARGUMENTS[2]}
  389 + ${lot_doc}= test_lot_document_data ${doc} ${ARGUMENTS[3]}
  390 + ${reply}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_document ${tender} ${lot_doc}
  391 + Log object data ${reply} reply
  392 + [return] ${reply}
  393 +
  394 +Видалити лот
  395 + [Documentation]
  396 + ... ${ARGUMENTS[0]} == username
  397 + ... ${ARGUMENTS[1]} == tender
  398 + ... ${ARGUMENTS[2]} == lot
  399 + [Arguments] @{ARGUMENTS}
  400 + log many @{ARGUMENTS}
  401 + ${tender}= set_access_key ${ARGUMENTS[1]} ${USERS.users['${ARGUMENTS[0]}'].access_token}
  402 + ${tender_lot}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} delete_lot ${tender} ${ARGUMENTS[2]}
  403 + Log ${tender_lot}
  404 + [return] ${tender_lot}
... ...
... ... @@ -112,7 +112,7 @@ def test_tender_data(intervals):
112 112 return t_data
113 113
114 114
115   -def test_tender_data_multiple_lots(intervals):
  115 +def test_tender_data_multiple_items(intervals):
116 116 now = get_now()
117 117 t_data = test_tender_data(intervals)
118 118 t_data.update({
... ... @@ -282,6 +282,83 @@ def test_tender_data_multiple_lots(intervals):
282 282 return t_data
283 283
284 284
  285 +def test_tender_data_multiple_lots(t_data):
  286 + for i in range(3):
  287 + t_data['data']['items'][i]['relatedLot'] = "3c8f387879de4c38957402dbdb8b31af"
  288 + t_data['data']['items'][3]['relatedLot'] = "bcac8d2ceb5f4227b841a2211f5cb646"
  289 + t_data['data']['lots'] = [
  290 + {
  291 + "id": "3c8f387879de4c38957402dbdb8b31af",
  292 + "title": "Lot #1: Kyiv stationery",
  293 + "description": "Items for Kyiv office",
  294 + "value": {"currency": "UAH", "amount": 34000.0, "valueAddedTaxIncluded": "true"},
  295 + "minimalStep": {"currency": "UAH", "amount": 30.0, "valueAddedTaxIncluded": "true"},
  296 + "status": "active"
  297 + }, {
  298 + "id": "bcac8d2ceb5f4227b841a2211f5cb646",
  299 + "title": "Lot #2: Lviv stationery",
  300 + "description": "Items for Lviv office",
  301 + "value": {"currency": "UAH", "amount": 9000.0, "valueAddedTaxIncluded": "true"},
  302 + "minimalStep": {"currency": "UAH", "amount": 35.0, "valueAddedTaxIncluded": "true"},
  303 + "status": "active"
  304 + }
  305 + ]
  306 + return t_data
  307 +
  308 +
  309 +def test_meat_tender_data(tender):
  310 + item_id = "edd0032574bf4402877ad5f362df225a"
  311 + tender.data['items'][0].id = item_id
  312 + tender.data.features = [
  313 + {
  314 + "code": "ee3e24bc17234a41bd3e3a04cc28e9c6",
  315 + "featureOf": "tenderer",
  316 + "title": "Термін оплати",
  317 + "description": "Умови відстрочки платежу після поставки товару",
  318 + "enum": [
  319 + {
  320 + "value": 0.15,
  321 + "title": "180 днів та більше"
  322 + },
  323 + {
  324 + "value": 0.1,
  325 + "title": "90-179 днів",
  326 + },
  327 + {
  328 + "value": 0.05,
  329 + "title": "30-89 днів"
  330 + },
  331 + {
  332 + "value": 0,
  333 + "title": "Менше 30 днів"
  334 + }
  335 + ]
  336 + },
  337 + {
  338 + "code": "48cfd91612c04125ab406374d7cc8d93",
  339 + "featureOf": "item",
  340 + "relatedItem": item_id,
  341 + "title": "Сорт",
  342 + "description": "Сорт продукції",
  343 + "enum": [
  344 + {
  345 + "value": 0.05,
  346 + "title": "Вищий"
  347 + },
  348 + {
  349 + "value": 0.01,
  350 + "title": "Перший",
  351 + },
  352 + {
  353 + "value": 0,
  354 + "title": "Другий"
  355 + }
  356 + ]
  357 + }
  358 + ]
  359 + return tender
  360 +
  361 +
285 362 def test_question_data():
286 363 return munchify({
287 364 "data": {
... ... @@ -390,6 +467,93 @@ def test_bid_data():
390 467 })
391 468
392 469
  470 +def test_bid_data_meat_tender():
  471 + return munchify({
  472 + "data": {
  473 + "tenderers": [
  474 + {
  475 + "address": {
  476 + "countryName": "Україна",
  477 + "locality": "м. Вінниця",
  478 + "postalCode": "21100",
  479 + "region": "м. Вінниця",
  480 + "streetAddress": fake.street_address()
  481 + },
  482 + "contactPoint": {
  483 + "name": fake.name(),
  484 + "telephone": fake.phone_number()
  485 + },
  486 + "identifier": {
  487 + "scheme": u"UA-EDR",
  488 + "id": u"{:08d}".format(fake.pyint()),
  489 + },
  490 + "name": fake.company()
  491 + }
  492 + ],
  493 + "parameters": [
  494 + {
  495 + "code": "ee3e24bc17234a41bd3e3a04cc28e9c6",
  496 + "value": fake.random_element(elements=(0.15, 0.1, 0.05, 0))
  497 + },
  498 + {
  499 + "code": "48cfd91612c04125ab406374d7cc8d93",
  500 + "value": fake.random_element(elements=(0.05, 0.01, 0))
  501 + }
  502 + ],
  503 + "value": {
  504 + "amount": 500
  505 + }
  506 + }
  507 + })
  508 +
  509 +
  510 +def test_lots_bid_data():
  511 + return munchify({
  512 + "data": {
  513 + "tenderers": [
  514 + {
  515 + "address": {
  516 + "countryName": "Україна",
  517 + "locality": "м. Вінниця",
  518 + "postalCode": "21100",
  519 + "region": "м. Вінниця",
  520 + "streetAddress": fake.street_address()
  521 + },
  522 + "contactPoint": {
  523 + "name": fake.name(),
  524 + "telephone": fake.phone_number()
  525 + },
  526 + "identifier": {
  527 + "scheme": u"UA-EDR",
  528 + "id": u"{:08d}".format(fake.pyint()),
  529 + },
  530 + "name": fake.company()
  531 + }
  532 + ],
  533 + "lotValues": [
  534 + {
  535 + "value": {
  536 + "currency": "UAH",
  537 + "amount": 1000 + fake.pyfloat(left_digits=3, right_digits=0, positive=True),
  538 + "valueAddedTaxIncluded": "true"
  539 + },
  540 + "relatedLot": "3c8f387879de4c38957402dbdb8b31af",
  541 + "date": "2015-11-01T12:43:12.482645+02:00"
  542 + },
  543 + {
  544 + "value": {
  545 + "currency": "UAH",
  546 + "amount": 1000 + fake.pyfloat(left_digits=3, right_digits=0, positive=True),
  547 + "valueAddedTaxIncluded": "true"
  548 + },
  549 + "relatedLot": "bcac8d2ceb5f4227b841a2211f5cb646",
  550 + "date": "2015-11-01T12:43:12.482645+02:00"
  551 + }
  552 + ]
  553 + }
  554 + })
  555 +
  556 +
393 557 def auction_bid():
394 558 return munchify({
395 559 "data": {
... ... @@ -404,3 +568,135 @@ def auction_bid():
404 568
405 569 def test_award_data():
406 570 return munchify({'data': {}})
  571 +
  572 +
  573 +def test_item_data():
  574 + now = get_now()
  575 + return {
  576 + "description": fake.catch_phrase(),
  577 + "deliveryDate": {
  578 + "endDate": (now + timedelta(days=5)).isoformat()
  579 + },
  580 + "deliveryLocation": {
  581 + "latitude": 49.8500,
  582 + "longitude": 24.0167
  583 + },
  584 + "deliveryAddress": {
  585 + "countryName": u"Україна",
  586 + "countryName_ru": u"Украина",
  587 + "countryName_en": "Ukraine",
  588 + "postalCode": fake.postalcode(),
  589 + "region": u"м. Київ",
  590 + "locality": u"м. Київ",
  591 + "streetAddress": fake.street_address()
  592 + },
  593 + "classification": {
  594 + "scheme": u"CPV",
  595 + "id": u"44617100-9",
  596 + "description": u"Картонки",
  597 + "description_ru": u"Большие картонные коробки",
  598 + "description_en": u"Cartons"
  599 + },
  600 + "additionalClassifications": [
  601 + {
  602 + "scheme": u"ДКПП",
  603 + "id": u"17.21.1",
  604 + "description": u"Папір і картон гофровані, паперова й картонна тара"
  605 + }
  606 + ],
  607 + "unit": {
  608 + "name": u"кілограм",
  609 + "name_ru": u"килограмм",
  610 + "name_en": "kilogram",
  611 + "code": u"KGM"
  612 + },
  613 + "quantity": fake.pyint()
  614 + }
  615 +
  616 +
  617 +def test_invalid_features_data():
  618 + return [
  619 + {
  620 + "code": "ee3e24bc17234a41bd3e3a04cc28e9c6",
  621 + "featureOf": "tenderer",
  622 + "title": "Термін оплати",
  623 + "description": "Умови відстрочки платежу після поставки товару",
  624 + "enum": [
  625 + {
  626 + "value": 0.35,
  627 + "title": "180 днів та більше"
  628 + },
  629 + {
  630 + "value": 0.1,
  631 + "title": "90-179 днів",
  632 + },
  633 + {
  634 + "value": 0.05,
  635 + "title": "30-89 днів"
  636 + },
  637 + {
  638 + "value": 0,
  639 + "title": "Менше 30 днів"
  640 + }
  641 + ]
  642 + },
  643 + {
  644 + "code": "48cfd91612c04125ab406374d7cc8d93",
  645 + "featureOf": "item",
  646 + "relatedItem": "edd0032574bf4402877ad5f362df225a",
  647 + "title": "Сорт",
  648 + "description": "Сорт продукції",
  649 + "enum": [
  650 + {
  651 + "value": 0.35,
  652 + "title": "Вищий"
  653 + },
  654 + {
  655 + "value": 0.01,
  656 + "title": "Перший",
  657 + },
  658 + {
  659 + "value": 0,
  660 + "title": "Другий"
  661 + }
  662 + ]
  663 + }
  664 + ]
  665 +
  666 +
  667 +def test_lot_data():
  668 + return munchify(
  669 + {'data':
  670 + {
  671 + "description": fake.sentence(nb_words=10, variable_nb_words=True),
  672 + "title": fake.sentence(nb_words=6, variable_nb_words=True),
  673 + "value": {
  674 + "currency": "UAH",
  675 + "amount": fake.pyfloat(left_digits=4, right_digits=1, positive=True),
  676 + "valueAddedTaxIncluded": "true"
  677 + },
  678 + "minimalStep": {
  679 + "currency": "UAH",
  680 + "amount": 30.0,
  681 + "valueAddedTaxIncluded": "true"
  682 + },
  683 + "status": "active"
  684 + }})
  685 +
  686 +
  687 +def test_lot_document_data(document, lot_id="3c8f387879de4c38957402dbdb8b31af"):
  688 + lot_document = {"documentOf": "lot", "relatedItem": lot_id}
  689 + lot_document.update(document.data)
  690 + return munchify({"data": lot_document})
  691 +
  692 +
  693 +def test_lot_question_data(question, lot_id="3c8f387879de4c38957402dbdb8b31af"):
  694 + lot_question = {"questionOf": "lot", "relatedItem": lot_id}
  695 + lot_question.update(question.data)
  696 + return munchify({"data": lot_question})
  697 +
  698 +
  699 +def test_lot_complaint_data(complaint, lot_id="3c8f387879de4c38957402dbdb8b31af"):
  700 + lot_complaint = {"complaintOf": "lot", "relatedItem": lot_id}
  701 + lot_complaint.update(complaint.data)
  702 + return munchify({"data": lot_complaint})
... ...
... ... @@ -71,7 +71,8 @@ Get Broker Property By Username
71 71 Підготовка початкових даних
72 72 @{QUESTIONS}= Create list
73 73 ${question}= test question data
74   - Append to list ${QUESTIONS} ${question}
  74 + ${question_lot}= test_lot_question_data ${question}
  75 + Append to list ${QUESTIONS} ${question} ${question_lot}
75 76 Set Global Variable @{QUESTIONS}
76 77 @{ANSWERS}= Create list
77 78 ${answer}= test_question_answer_data
... ... @@ -79,7 +80,8 @@ Get Broker Property By Username
79 80 Set Global Variable @{ANSWERS}
80 81 @{COMPLAINTS}= Create list
81 82 ${complaint}= test_complaint_data
82   - Append to list ${COMPLAINTS} ${complaint}
  83 + ${complaint_lot}= test_lot_complaint_data ${complaint}
  84 + Append to list ${COMPLAINTS} ${complaint} ${complaint_lot}
83 85 Set Global Variable @{COMPLAINTS}
84 86 @{REPLIES}= Create list
85 87 ${reply}= test_complaint_reply_data
... ...
  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}
... ...
... ... @@ -113,4 +113,4 @@ ${broker} Quinta
113 113
114 114 Можливість видалити позиції закупівлі тендера
115 115 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер
116   - Викликати для учасника ${tender_owner} Додати предмети закупівлі ${TENDER['TENDER_UAID']} 2
  116 + Викликати для учасника ${tender_owner} Відняти предмети закупівлі ${TENDER['TENDER_UAID']} 2
... ...
  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} multi
  14 +
  15 +${role} viewer
  16 +${broker} Quinta
  17 +
  18 +${question_id} 1
  19 +${complaint_id} 1
  20 +
  21 +*** Test Cases ***
  22 +Можливість оголосити мультилотовий тендер
  23 + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити мультилотовий тендер
  24 + ${tender_data}= Підготовка початкових даних
  25 + ${tender_data}= test_tender_data_multiple_lots ${tender_data}
  26 + ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data}
  27 + ${LAST_MODIFICATION_DATE}= Get Current Date
  28 + Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID}
  29 + Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE}
  30 + log ${TENDER}
  31 +
  32 +Пошук мультилотового тендера по ідентифікатору
  33 + [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору
  34 + Дочекатись синхронізації з майданчиком ${viewer}
  35 + Викликати для учасника ${viewer} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']}
  36 +
  37 +Отримання тендера
  38 + Дочекатись синхронізації з майданчиком ${tender_owner}
  39 + Викликати для учасника ${tender_owner} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']}
  40 +
  41 +#######
  42 +#Операції з лотом
  43 +
  44 +Створення лоту
  45 + ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data}
  46 + ${lot}= test lot data
  47 + ${lotcreate}= Викликати для учасника ${tender_owner} Створити лот ${tender_data} ${lot}
  48 + ${lotresponses}= Create Dictionary
  49 + Set To Dictionary ${lotresponses} resp0 ${lotcreate}
  50 + Set To Dictionary ${USERS.users['${tender_owner}']} lotresponses ${lotresponses}
  51 + log ${lotcreate}
  52 +
  53 +Можливість видалення лоту
  54 + ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data}
  55 + ${lot}= Get Variable Value ${USERS.users['${tender_owner}'].lotresponses['resp0']}
  56 + ${lotdelete}= Викликати для учасника ${tender_owner} Видалити лот ${tender_data} ${lot}
  57 + Log ${lotdelete}
  58 +
  59 +Повторне створення лоту
  60 + ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data}
  61 + ${lot}= test lot data
  62 + ${lotcreate}= Викликати для учасника ${tender_owner} Створити лот ${tender_data} ${lot}
  63 + ${lotresponses}= Create Dictionary
  64 + Set To Dictionary ${lotresponses} resp ${lotcreate}
  65 + Set To Dictionary ${USERS.users['${tender_owner}']} lotresponses ${lotresponses}
  66 + log ${lotcreate}
  67 +
  68 +Можливість змінити цінову пропозицію у новому лоті до 8000
  69 + ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data}
  70 + Set To Dictionary ${USERS.users['${tender_owner}'].lotresponses['resp'].data.value} amount 8000
  71 + ${fixlotto8000resp}= Викликати для учасника ${tender_owner} Змінити лот ${tender_data} ${USERS.users['${tender_owner}'].lotresponses['resp']}
  72 + Set To Dictionary ${USERS.users['${tender_owner}'].lotresponses} fixlotto8000resp ${fixlotto8000resp}
  73 + log ${fixlotto8000resp}
  74 +
  75 +Можливість змінити цінову пропозицію у новому лоті до 100
  76 + ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data}
  77 + Set To Dictionary ${USERS.users['${tender_owner}'].lotresponses['resp'].data.value} amount 8000
  78 + ${fixlotto100resp}= Викликати для учасника ${tender_owner} Змінити лот ${tender_data} ${USERS.users['${tender_owner}'].lotresponses['resp']}
  79 + Set To Dictionary ${USERS.users['${tender_owner}'].lotresponses} fixlotto100resp ${fixlotto100resp}
  80 + log ${fixlotto100resp}
  81 +
  82 +
  83 +#####
  84 +#Предмети закупівлі лоту
  85 +
  86 +Можливість додати позицію закупівлі в тендер
  87 + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер
  88 + Викликати для учасника ${tender_owner} Додати предмети закупівлі ${TENDER['TENDER_UAID']} 1
  89 +
  90 +Добавити предмет закупівлі до лоту
  91 + Log ${tender_data.data['items']}
  92 + ${items}= Get Variable Value ${tender_data.data['items']}
  93 + ${lot_id}= Get Variable Value ${USERS.users['${tender_owner}'].lotresponses['resp'].data.id}
  94 + Set To Dictionary ${items[-1]} relatedLot ${lot_id}
  95 + Log ${items[-1]}
  96 + Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} items ${items}
  97 +
  98 +Неможливість видалення лоту з прив’язаними предметами закупівлі
  99 + ${tender_data}= Get Variable Value ${USERS.users['${tender_owner}'].tender_data}
  100 + ${lot}= Get Variable Value ${USERS.users['${tender_owner}'].lotresponses['resp']}
  101 + Викликати для учасника ${tender_owner} Видалити лот shouldfail ${tender_data} ${lot}
  102 +
  103 +Можливість видалити позиції закупівлі тендера
  104 + ${items}= Get Variable Value ${tender_data.data['items']}
  105 + Log ${tender_data.data}
  106 + Викликати для учасника ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} items ${items[:-1]}
  107 + Log ${tender_data.data}
  108 +
  109 +Можливість додати тендерну документацію лоту
  110 + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість завантажити документ
  111 + [Documentation] Закупівельник ${USERS.users['${tender_owner}'].broker} завантажує документацію до оголошеної закупівлі
  112 + ${filepath}= create_fake_doc
  113 + ${lot_id}= Get Variable Value ${USERS.users['${tender_owner}'].lotresponses['resp'].data.id}
  114 + ${doc_upload_reply}= Викликати для учасника ${tender_owner} Завантажити документ в лот ${filepath} ${TENDER['TENDER_UAID']} ${lot_id}
  115 + ${file_upload_process_data} = Create Dictionary filepath=${filepath} doc_upload_reply=${doc_upload_reply}
  116 + log ${file_upload_process_data}
  117 + Set To Dictionary ${USERS.users['${tender_owner}']} file_upload_process_data ${file_upload_process_data}
  118 + Log ${lot_id}
  119 + Log ${USERS.users['${tender_owner}']}
  120 +
  121 +
  122 +#######
  123 +#Запитання до лоту
  124 +
  125 +Задати питання
  126 + [Tags] ${USERS.users['${provider}'].broker}: Можливість задати запитання
  127 + ${question}= Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${QUESTIONS[${question_id}]}
  128 + log ${question}
  129 + ${now}= Get Current Date
  130 + Set To Dictionary ${QUESTIONS[${question_id}].data} date ${now}
  131 +
  132 +Відповісти на запитання
  133 + [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відповісти на запитання
  134 + Викликати для учасника ${tender_owner} Відповісти на питання ${TENDER['TENDER_UAID']} 0 ${ANSWERS[0]}
  135 + ${now}= Get Current Date
  136 + Set To Dictionary ${ANSWERS[${question_id}-1].data} date ${now}
  137 +
  138 +
  139 +######
  140 +#Cкарга на лот
  141 +#
  142 +#
  143 +##### Дочекатися скарг на лот
  144 +#
  145 +#
  146 +#Можливість подати скаргу на лот
  147 +# [Tags] ${USERS.users['${provider}'].broker}: Можливість подати скаргу на умови
  148 +# [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі
  149 +# Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[${complaint_id}]}
  150 +# ${LAST_MODIFICATION_DATE}= Get Current Date
  151 +# Set Global Variable ${LAST_MODIFICATION_DATE}
  152 +#
  153 +#Можливість побачити скаргу користувачем
  154 +# [Tags] ${USERS.users['${provider}'].broker}: Відображення основних даних оголошеного тендера
  155 +# Викликати для учасника ${provider} Порівняти скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[${complaint_id}]}
  156 +#
  157 +#Можливість побачити скаргу анонімом
  158 +# [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
  159 +# Викликати для учасника ${viewer} Порівняти скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[${complaint_id}]}
  160 +#
  161 +#Можливість відхилити скаргу на лот
  162 +# [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відхилити скаргу на умови
  163 +# Set To Dictionary ${COMPLAINTS[0].data} status declined
  164 +# Викликати для учасника ${tender_owner} Обробити скаргу ${TENDER['TENDER_UAID']} 0 ${COMPLAINTS[${complaint_id}]}
  165 +# log many ${COMPLAINTS[${complaint_id}]}
  166 +# викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']}
  167 +#
  168 +#Можливість відкинути скаргу на лот
  169 +# [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відкинути скаргу на умови
  170 +# Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[${complaint_id}]}
  171 +# ${LAST_MODIFICATION_DATE}= Get Current Date
  172 +# Set Global Variable ${LAST_MODIFICATION_DATE}
  173 +# Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']}
  174 +# Set To Dictionary ${COMPLAINTS[0].data} status invalid
  175 +# Викликати для учасника ${tender_owner} Обробити скаргу ${TENDER['TENDER_UAID']} 1 ${COMPLAINTS[${complaint_id}]}
  176 +# log many ${COMPLAINTS[${complaint_id}]}
  177 +# ${LAST_MODIFICATION_DATE}= Get Current Date
  178 +# Set Global Variable ${LAST_MODIFICATION_DATE}
  179 +# Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']}
  180 +#
  181 +#Можливість задовільнити скаргу на лот
  182 +# [Tags] ${USERS.users['${provider}'].broker}: Можливість відповісти на запитання
  183 +# Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[${complaint_id}]}
  184 +# ${LAST_MODIFICATION_DATE}= Get Current Date
  185 +# Set Global Variable ${LAST_MODIFICATION_DATE}
  186 +# Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']}
  187 +# Set To Dictionary ${COMPLAINTS[0].data} status resolved
  188 +# Викликати для учасника ${tender_owner} Обробити скаргу ${TENDER['TENDER_UAID']} 2 ${COMPLAINTS[${complaint_id}]}
  189 +# log many ${COMPLAINTS[${complaint_id}]}
  190 +# ${LAST_MODIFICATION_DATE}= Get Current Date
  191 +# Set Global Variable ${LAST_MODIFICATION_DATE}
  192 +#
  193 +######
  194 +#Подання пропозицій
  195 +
  196 +Неможливість подати цінову пропозицію до початку періоду подачі пропозицій
  197 + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію
  198 + ${bid}= test lots bid data
  199 + Log ${bid}
  200 + ${bidresponses}= Create Dictionary
  201 + ${bid_before_bidperiod_resp}= Викликати для учасника ${provider} Подати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${bid}
  202 + Set To Dictionary ${bidresponses} bid_before_bidperiod_resp ${bid_before_bidperiod_resp}
  203 + Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses}
  204 + log ${USERS.users['${provider}']}
  205 +
  206 +Неможливість подати цінову пропозицію без прив’язки до лоту
  207 + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію
  208 + Дочекатись дати початку прийому пропозицій
  209 + ${bid}= test bid data
  210 + Log ${bid}
  211 + ${bidresponses}= Create Dictionary
  212 + ${no_lot_bid_resp}= Викликати для учасника ${provider} Подати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${bid}
  213 + Set To Dictionary ${bidresponses} no_lot_bid_resp ${no_lot_bid_resp}
  214 + Set To Dictionary ${USERS.users['${provider}']} bidresponses ${bidresponses}
  215 + log ${USERS.users['${provider}']}
  216 +
  217 +Подати цінову пропозицію першим учасником
  218 + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію
  219 + ${bid}= test lots bid data
  220 + Log ${bid}
  221 + ${biddingresponse0}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid}
  222 + Set Global Variable ${biddingresponse0}
  223 + log ${biddingresponse0}
  224 +
  225 +Можливість скасувати цінову пропозицію
  226 + [Tags] ${USERS.users['${provider}'].broker}: Можливість скасувати цінову пропозицію
  227 + ${biddingresponse_0}= Викликати для учасника ${provider} Скасувати цінову пропозицію ${TENDER['TENDER_UAID']} ${biddingresponse0}
  228 +
  229 +Подати повторно цінову пропозицію першим учасником
  230 + [Tags] ${USERS.users['${provider}'].broker}: Можливість подати цінову пропозицію
  231 + Дочекатись дати початку прийому пропозицій
  232 + ${bid}= test lots bid data
  233 + Log ${bid}
  234 + ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid}
  235 + Set To Dictionary ${USERS.users['${provider}'].bidresponses} resp ${resp}
  236 + log ${resp}
  237 + log ${USERS.users['${provider}'].bidresponses}
  238 +
  239 +Можливість змінити повторну цінову пропозицію до 2000
  240 + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію
  241 + Set To Dictionary ${USERS.users['${provider}'].bidresponses['resp'].data.lotValues[0].value} amount 2000
  242 + Log ${USERS.users['${provider}'].bidresponses['resp'].data.lotValues[0].value}
  243 + ${fixbidto50000resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].bidresponses['resp']}
  244 + Set To Dictionary ${USERS.users['${provider}'].bidresponses} fixbidto50000resp ${fixbidto50000resp}
  245 + log ${fixbidto50000resp}
  246 +
  247 +Можливість змінити повторну цінову пропозицію до 100
  248 + [Tags] ${USERS.users['${provider}'].broker}: Можливість змінити цінову пропозицію
  249 + Set To Dictionary ${USERS.users['${provider}'].bidresponses['resp'].data.lotValues[0].value} amount 100
  250 + Log ${USERS.users['${provider}'].bidresponses['fixbidto50000resp'].data.lotValues[0].value}
  251 + ${fixbidto10resp}= Викликати для учасника ${provider} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} ${USERS.users['${provider}'].bidresponses['resp']}
  252 + Set To Dictionary ${USERS.users['${provider}'].bidresponses} fixbidto10resp ${fixbidto10resp}
  253 + log ${fixbidto10resp}
  254 +
  255 +Подати цінову пропозицію другим учасником
  256 + [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію
  257 + Дочекатись дати початку прийому пропозицій
  258 + ${bid}= test lots bid data
  259 + Log ${bid}
  260 + ${bidresponses}= Create Dictionary
  261 + ${resp}= Викликати для учасника ${provider1} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid}
  262 + Set To Dictionary ${bidresponses} resp ${resp}
  263 + Set To Dictionary ${USERS.users['${provider1}']} bidresponses ${bidresponses}
  264 + log ${resp}
  265 + log ${USERS.users['${provider1}'].bidresponses}
  266 +
  267 +Неможливість побачити цінові пропозиції учасників під час прийому пропозицій
  268 + [Tags] ${USERS.users['${viewer}'].broker}: Можливість подати цінову пропозицію
  269 + ${bids}= Викликати для учасника ${viewer} Отримати інформацію із тендера bids
  270 + Should Be Equal ${bids} ${None}
  271 +
  272 +Неможливість змінити цінову пропозицію до 50000 після закінчення прийому пропозицій
  273 + [Tags] ${USERS.users['${provider1}'].broker}: Неможливість змінити цінову пропозицію до 50000 після закінчення прийому пропозицій
  274 + Дочекатись дати закінчення прийому пропозицій
  275 + Set To Dictionary ${USERS.users['${provider1}'].bidresponses['resp'].data.lotValues[0].value} amount 50000
  276 + Log ${USERS.users['${provider1}'].bidresponses['resp'].data.lotValues[0].value}
  277 + ${failfixbidto50000resp}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${USERS.users['${provider1}'].bidresponses['resp']}
  278 + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} failfixbidto50000resp ${failfixbidto50000resp}
  279 + log ${failfixbidto50000resp}
  280 +
  281 +Неможливість змінити цінову пропозицію до 1 після закінчення прийому пропозицій
  282 + [Tags] ${USERS.users['${provider1}'].broker}: Неможливість змінити цінову пропозицію до 1 після закінчення прийому пропозицій
  283 + Set To Dictionary ${USERS.users['${provider1}'].bidresponses['resp'].data.lotValues[0].value} amount 1
  284 + Log ${USERS.users['${provider1}'].bidresponses['resp'].data.lotValues[0].value}
  285 + ${failfixbidto1resp}= Викликати для учасника ${provider1} Змінити цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${USERS.users['${provider1}'].bidresponses['resp']}
  286 + Set To Dictionary ${USERS.users['${provider1}'].bidresponses} failfixbidto1resp ${failfixbidto1resp}
  287 + log ${failfixbidto1resp}
  288 +
  289 +Неможливість скасувати цінову пропозицію
  290 + [Tags] ${USERS.users['${provider1}'].broker}: Можливість скасувати цінову пропозицію
  291 + ${biddingresponse}= Викликати для учасника ${provider1} Скасувати цінову пропозицію shouldfail ${TENDER['TENDER_UAID']} ${USERS.users['${provider1}'].bidresponses['resp']}
  292 +
  293 +Отримання тендера після закінчення прийому пропозицій
  294 + Дочекатись синхронізації з майданчиком ${viewer}
  295 + Викликати для учасника ${viewer} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']}
... ...
1 1 *** Variables ***
2   -${API_HOST_URL} https://api-sandbox.openprocurement.org
3   -${api_version} 0.9
  2 +${API_HOST_URL} https://lb.api-sandbox.openprocurement.org
  3 +${api_version} 0.10
... ...
... ... @@ -14,13 +14,17 @@ from robot.output.loggerhelper import Message
14 14 # can access them by simply importing library "service_keywords".
15 15 # Please ignore the warning given by Flake8 or other linter.
16 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_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_lot_complaint_data,
  20 + test_lot_data, test_lot_document_data, test_lot_question_data,
  21 + test_lots_bid_data, test_meat_tender_data, test_question_answer_data,
  22 + test_question_data, test_tender_data, test_tender_data_multiple_items,
  23 + test_tender_data_multiple_lots
21 24 )
22 25 from .local_time import get_now, TZ
23 26 import os
  27 +from barbecue import chef
24 28
25 29
26 30 def get_current_tzdate():
... ... @@ -101,7 +105,7 @@ def prepare_test_tender_data(period_intervals, mode):
101 105 if mode == 'single':
102 106 return munchify({'data': test_tender_data(period_intervals)})
103 107 elif mode == 'multi':
104   - return munchify({'data': test_tender_data_multiple_lots(period_intervals)})
  108 + return munchify({'data': test_tender_data_multiple_items(period_intervals)})
105 109 raise ValueError('Invalid mode for test_tender_data')
106 110
107 111
... ...
... ... @@ -32,7 +32,8 @@ setup(name='op_robot_tests',
32 32 'dateutils',
33 33 'pytz',
34 34 'parse',
35   - 'chromedriver'
  35 + 'chromedriver',
  36 + 'barbecue'
36 37 ],
37 38 entry_points={
38 39 'console_scripts': [
... ...
Please register or login to post a comment