From 93cf3ad880e3f52af680a112bad52d6604092bbd Mon Sep 17 00:00:00 2001
From: mykhaly <yurkamykhalchuk@gmail.com>
Date: Thu, 4 Feb 2016 15:25:44 +0200
Subject: [PATCH] Added test suite for limited procurement procedure

---
 op_robot_tests/tests_files/brokers/openprocurement_client.robot | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 op_robot_tests/tests_files/initial_data.py                      |  87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 op_robot_tests/tests_files/limited.robot                        |  91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 op_robot_tests/tests_files/service_keywords.py                  |  51 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 4 files changed, 330 insertions(+), 1 deletion(-)
 create mode 100644 op_robot_tests/tests_files/limited.robot

diff --git a/op_robot_tests/tests_files/brokers/openprocurement_client.robot b/op_robot_tests/tests_files/brokers/openprocurement_client.robot
index a7a2d33..26acbfb 100644
--- a/op_robot_tests/tests_files/brokers/openprocurement_client.robot
+++ b/op_robot_tests/tests_files/brokers/openprocurement_client.robot
@@ -425,3 +425,105 @@ Library  openprocurement_client_helper.py
   ${tender_lot}=  Call Method  ${USERS.users['${ARGUMENTS[0]}'].client}   delete_lot   ${tender}   ${ARGUMENTS[2]}
   Log   ${tender_lot}
   [return]  ${tender_lot}
+
+
+Додати постачальника
+  [Arguments]  ${username}  ${tenderUAID}
+  log  ${username}
+  log  ${tenderUAID}
+  ${supplier_data}=  test supplier data
+  log  ${supplier_data}
+  ${tenderID}=  openprocurement_client.Отримати internal id по UAid  ${username}   ${tenderUAID}
+  ${tender}=  Call Method  ${USERS.users['${username}'].client}  get_tender  ${tenderID}
+  ${tender}=  set_access_key  ${tender}   ${USERS.users['${username}'].access_token}
+  ${reply}=  Call Method  ${USERS.users['${username}'].client}  create_award  ${tender}  ${supplier_data}
+  [return]   ${reply}
+
+
+Підтвердити постачальника
+  [Arguments]  ${username}  ${tenderUAID}
+  log  ${username}
+  log  ${tenderUAID}
+  ${tenderID}=  openprocurement_client.Отримати internal id по UAid  ${username}   ${tenderUAID}
+  ${tender}=  Call Method  ${USERS.users['${username}'].client}  get_tender  ${tenderID}
+  ${tender}=  set_access_key  ${tender}   ${USERS.users['${username}'].access_token}
+  log  ${tender}
+  ${award_data}=  Confirm supplier  ${tender['data']['awards'][0]['id']}
+  log  ${award_data}
+  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_award  ${tender}  ${award_data}
+  [return]   ${reply}
+
+
+Додати запит на скасування
+  [Arguments]  ${username}  ${tenderUAID}
+  ${tenderID}=  openprocurement_client.Отримати internal id по UAid  ${username}   ${tenderUAID}
+  ${tender}=  Call Method  ${USERS.users['${username}'].client}  get_tender  ${tenderID}
+  ${tender}=  set_access_key  ${tender}   ${USERS.users['${username}'].access_token}
+  ${cancel_data}=  Cancel tender  prost :))
+  log  ${cancel_data}
+  ${reply}=  Call Method  ${USERS.users['${username}'].client}  create_cancellation  ${tender}  ${cancel_data}
+  [return]   ${reply}
+
+
+Завантажити документацію до запиту на скасування
+  [Arguments]  ${username}  ${path}  ${tenderid}
+  log  ${username}
+  log  ${path}
+  log  ${tenderid}
+  ${internalid}=  Отримати internal id по UAid  ${username}  ${tenderid}
+  ${tender}=  Call Method  ${USERS.users['${username}'].client}  get_tender  ${internalid}
+  ${tender}=  set_access_key  ${tender}  ${USERS.users['${username}'].access_token}
+  ${response}=  Call Method  ${USERS.users['${username}'].client}  upload_cancellation_document  ${path}  ${tender}  ${tender['data']['cancellations'][0]['id']}
+  log  ${response}
+  ${uploaded_file} =  Create Dictionary   filepath  ${path}   upload_response  ${response}
+  [return]  ${uploaded_file}
+
+
+Змінити опис документа в скасуванні
+  [Arguments]  ${username}   ${tenderUAID}
+  Log  ${username}
+  Log  ${tenderUAID}
+  ${tenderID}=  openprocurement_client.Отримати internal id по UAid  ${username}   ${tenderUAID}
+  ${tender}=  Call Method  ${USERS.users['${username}'].client}  get_tender  ${tenderID}
+  ${tender}=  set_access_key  ${tender}   ${USERS.users['${username}'].access_token}
+  ${data}=  change_cancellation_document_field  description  test_description
+  log  ${data}
+  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_cancellation_document  ${tender}  ${data}
+  [return]   ${reply}
+
+
+Завантажити нову версію документа до запиту на скасування
+  [Arguments]  ${username}  ${path}
+  ${internalid}=  Отримати internal id по UAid  ${username}  ${TENDER['TENDER_UAID']}
+  ${tender}=  Call Method  ${USERS.users['${username}'].client}  get_tender  ${internalid}
+  ${tender}=  set_access_key  ${tender}   ${USERS.users['${username}'].access_token}
+  ${response}=  Call Method  ${USERS.users['${username}'].client}  update_cancellation_document  ${path}  ${tender}   ${tender['data']['cancellations'][0]['id']}   ${tender['data']['cancellations'][0]['documents'][0]['id']}
+  ${uploaded_file} =  Create Dictionary   filepath  ${path}   upload_response  ${response}
+  Log  ${uploaded_file}
+  [return]  ${uploaded_file}
+
+
+Підтвердити скасування закупівлі
+  [Arguments]  ${username}   ${tenderUAID}
+  log  ${username}
+  log  ${tenderUAID}
+  ${tenderID}=  openprocurement_client.Отримати internal id по UAid  ${username}   ${tenderUAID}
+  ${tender}=  Call Method  ${USERS.users['${username}'].client}  get_tender  ${tenderID}
+  ${tender}=  set_access_key  ${tender}   ${USERS.users['${username}'].access_token}
+  ${data}=  Confirm cancellation  ${tender['data']['cancellations'][0]['id']}
+  log  ${data}
+  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_cancellation  ${tender}  ${data}
+  [return]   ${reply}
+
+
+Підтвердити підписання контракту
+  [Arguments]  ${username}  ${tenderUAID}
+  log  ${username}
+  log  ${tenderUAID}
+  ${tenderID}=  openprocurement_client.Отримати internal id по UAid  ${username}   ${tenderUAID}
+  ${tender}=  Call Method  ${USERS.users['${username}'].client}  get_tender  ${tenderID}
+  ${tender}=  set_access_key  ${tender}   ${USERS.users['${username}'].access_token}
+  ${data}=  confirm contract  ${tender['data']['contracts'][0]['id']}
+  log  ${data}
+  ${reply}=  Call Method  ${USERS.users['${username}'].client}  patch_contract  ${tender}  ${data}
+  [return]   ${reply}
diff --git a/op_robot_tests/tests_files/initial_data.py b/op_robot_tests/tests_files/initial_data.py
index 2a14bdc..e7a9eb1 100644
--- a/op_robot_tests/tests_files/initial_data.py
+++ b/op_robot_tests/tests_files/initial_data.py
@@ -112,6 +112,58 @@ def test_tender_data(intervals):
     return t_data
 
 
+def test_tender_data_limited(intervals):
+    return {
+        "items": [
+            {
+                "additionalClassifications": [
+                    {
+                        "description": u"Послуги шкільних їдалень",
+                        "id": "55.51.10.300",
+                        "scheme": u"ДКПП"
+                    }
+                ],
+                "classification": {
+                    "description": u"Послуги з харчування у школах",
+                    "id": "55523100-3",
+                    "scheme": "CPV"
+                },
+                "description": u"Послуги шкільних їдалень",
+                "id": "2dc54675d6364e2baffbc0f8e74432ac"
+            }
+        ],
+        "owner": "test.quintagroup.com",
+        "procurementMethod": "limited",
+        "procurementMethodType": "reporting",
+        "procuringEntity": {
+            "address": {
+                "countryName": u"Україна",
+                "locality": u"м. Вінниця",
+                "postalCode": "21027",
+                "region": u"м. Вінниця",
+                "streetAddress": u"вул. Стахурського. 22"
+            },
+            "contactPoint": {
+                "name": u"Куца Світлана Валентинівна",
+                "telephone": "+380 (432) 46-53-02",
+                "url": "http://sch10.edu.vn.ua/"
+            },
+            "identifier": {
+                "id": "21725150",
+                "legalName": u"Заклад \"Загальноосвітня школа І-ІІІ ступенів № 10 Вінницької міської ради\"",
+                "scheme": u"UA-EDR"
+            },
+            "name": u"ЗОСШ #10 м.Вінниці"
+        },
+        "value": {
+            "amount": 500000,
+            "currency": "UAH",
+            "valueAddedTaxIncluded": True
+        },
+        "title": u"Послуги шкільних їдалень",
+    }
+
+
 def test_tender_data_multiple_items(intervals):
     now = get_now()
     t_data = test_tender_data(intervals)
@@ -566,6 +618,41 @@ def auction_bid():
     })
 
 
+def test_supplier_data():
+    return {
+        "data": {
+            "suppliers": [
+                {
+                    "address": {
+                        "countryName": u"Україна",
+                        "locality": u"м. Вінниця",
+                        "postalCode": "21100",
+                        "region": u"м. Вінниця",
+                        "streetAddress": u"вул. Островського, 33"
+                    },
+                    "contactPoint": {
+                        "email": "soleksuk@gmail.com",
+                        "name": u"Сергій Олексюк",
+                        "telephone": "+380 (432) 21-69-30"
+                    },
+                    "identifier": {
+                        "id": "13313462",
+                        "legalName": u"Державне комунальне підприємство громадського харчування «Школяр»",
+                        "scheme": "UA-EDR",
+                        "uri": "http://sch10.edu.vn.ua/"
+                    },
+                    "name": u"ДКП «Школяр»"
+                }
+            ],
+            "value": {
+                "amount": 475000,
+                "currency": "UAH",
+                "valueAddedTaxIncluded": True
+            }
+        }
+    }
+
+
 def test_award_data():
     return munchify({'data': {}})
 
diff --git a/op_robot_tests/tests_files/limited.robot b/op_robot_tests/tests_files/limited.robot
new file mode 100644
index 0000000..9a8dfa8
--- /dev/null
+++ b/op_robot_tests/tests_files/limited.robot
@@ -0,0 +1,91 @@
+*** Settings ***
+Library         op_robot_tests.tests_files.service_keywords
+Library         String
+Library         Collections
+Library         Selenium2Library
+Library         DebugLibrary
+Resource        keywords.robot
+Resource        resource.robot
+Suite Setup     TestSuiteSetup
+Suite Teardown  Close all browsers
+
+
+*** Variables ***
+${mode}         limited
+${role}         viewer
+${broker}       Quinta
+
+
+*** Test Cases ***
+Можливість створити пряму закупівлю
+  [Tags]   ${USERS.users['${tender_owner}'].broker}: Можливість створити тендер
+  ${tender_data}=  Підготовка початкових даних
+  ${TENDER_UAID}=  Викликати для учасника  ${tender_owner}  Створити тендер  ${tender_data}
+  ${LAST_MODIFICATION_DATE}=  Get Current TZdate
+  Set To Dictionary  ${USERS.users['${tender_owner}']}  initial_data  ${tender_data}
+  Set To Dictionary  ${TENDER}   TENDER_UAID             ${TENDER_UAID}
+  Set To Dictionary  ${TENDER}   LAST_MODIFICATION_DATE  ${LAST_MODIFICATION_DATE}
+  log  ${TENDER}
+  log  ${tender_data}
+
+
+Пошук прямої закупівлі по ідентифікатору
+  [Tags]   ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору
+  Дочекатись синхронізації з майданчиком    ${viewer}
+  Викликати для учасника   ${viewer}   Пошук тендера по ідентифікатору   ${TENDER['TENDER_UAID']}
+  Log  ${TENDER['TENDER_UAID']}
+
+
+Можливість додати документацію до прямої закупівлі
+  [Tags]    ${USERS.users['${tender_owner}'].broker}: Можливість завантажити документацію
+  [Documentation]   Закупівельник   ${USERS.users['${tender_owner}'].broker}  завантажує документацію  до  оголошеної закупівлі
+  ${filepath}=   create_fake_doc
+  ${doc_upload_reply}=  Викликати для учасника   ${tender_owner}   Завантажити документ  ${filepath}  ${TENDER['TENDER_UAID']}
+  ${file_upload_process_data}=  Create Dictionary   filepath=${filepath}  doc_upload_reply=${doc_upload_reply}
+  log  ${file_upload_process_data}
+  Set To Dictionary  ${USERS.users['${tender_owner}']}   file_upload_process_data   ${file_upload_process_data}
+  Log  ${USERS.users['${tender_owner}']}
+
+
+Можливість зареєструвати і підтвердити постачальника
+  ${award_response}=  Викликати для учасника  ${tender_owner}   Додати постачальника  ${TENDER['TENDER_UAID']}
+  Log  ${award_response}
+  ${award_confirmation_response}=  Викликати для учасника  ${tender_owner}   Підтвердити постачальника  ${TENDER['TENDER_UAID']}
+  log  ${award_confirmation_response}
+
+
+Можливість укласти угоду
+  ${contract_confirmation_response}=  Викликати для учасника  ${tender_owner}  Підтвердити підписання контракту  shouldfail   ${TENDER['TENDER_UAID']}
+  log  ${contract_confirmation_response}
+
+
+Можливість сформувати запит на скасування
+  ${cancellation_response}=  Викликати для учасника  ${tender_owner}   Додати запит на скасування    ${TENDER['TENDER_UAID']}
+  log  ${cancellation_response}
+  Set To Dictionary  ${USERS.users['${tender_owner}']}   cancellation_response_field  ${cancellation_response}
+  log  ${USERS.users['${tender_owner}']['cancellation_response_field']}
+
+
+Можливість додати документацію до запиту на скасування
+  ${filepath}=   create_fake_doc
+  ${doc_upload_reply}=  Викликати для учасника   ${tender_owner}   Завантажити документацію до запиту на скасування  ${filepath}  ${TENDER['TENDER_UAID']}
+  log  ${doc_upload_reply}
+  ${file_upload_process_data}=  Create Dictionary   filepath=${filepath}  doc_upload_reply=${doc_upload_reply}
+  log  ${file_upload_process_data}
+  Set To Dictionary  ${USERS.users['${tender_owner}']}   file_upload_process_data   ${file_upload_process_data}
+
+
+Можливість змінити опис процедури і інші поля
+  ${cancellation_document_updated_data}=  Викликати для учасника  ${tender_owner}  Змінити опис документа в скасуванні   ${TENDER['TENDER_UAID']}
+  log  ${cancellation_document_updated_data}
+
+
+Можливість завантажити нову версію документа до запиту на скасування
+  ${filepath}=   create_fake_doc
+  ${doc_upload_reply}=  Викликати для учасника   ${tender_owner}  Завантажити нову версію документа до запиту на скасування  ${filepath}
+  log  ${doc_upload_reply}
+
+
+Можливість активувати скасування закупівлі
+  ${cancellation_confirmation_response}=  Викликати для учасника  ${tender_owner}  Підтвердити скасування закупівлі    ${TENDER['TENDER_UAID']}
+  log  ${cancellation_confirmation_response}
diff --git a/op_robot_tests/tests_files/service_keywords.py b/op_robot_tests/tests_files/service_keywords.py
index 004b0b9..49e5b66 100644
--- a/op_robot_tests/tests_files/service_keywords.py
+++ b/op_robot_tests/tests_files/service_keywords.py
@@ -19,7 +19,8 @@ from .initial_data import (
     test_invalid_features_data, test_item_data, test_lot_complaint_data,
     test_lot_data, test_lot_document_data, test_lot_question_data,
     test_lots_bid_data, test_meat_tender_data, test_question_answer_data,
-    test_question_data, test_tender_data, test_tender_data_multiple_items,
+    test_question_data, test_supplier_data, test_tender_data,
+    test_tender_data_limited, test_tender_data_multiple_items,
     test_tender_data_multiple_lots
 )
 from .local_time import get_now, TZ
@@ -106,6 +107,8 @@ def prepare_test_tender_data(period_intervals, mode):
         return munchify({'data': test_tender_data(period_intervals)})
     elif mode == 'multi':
         return munchify({'data': test_tender_data_multiple_items(period_intervals)})
+    elif mode == 'limited':
+        return munchify({'data': test_tender_data_limited(period_intervals)})
     raise ValueError('Invalid mode for test_tender_data')
 
 
@@ -179,6 +182,52 @@ def merge_dicts(left, right):
     return new
 
 
+def cancel_tender(cancellation_reason):
+    return {
+        'data': {
+            'reason': cancellation_reason
+        }
+    }
+
+
+def confirm_supplier(supplier_id):
+    return {
+        "data": {
+            "status": "active",
+            "id": supplier_id
+        }
+    }
+
+
+def change_cancellation_document_field(key, value):
+    data = {
+        "data": {
+            key: value
+        }
+    }
+    return data
+
+
+def confirm_cancellation(cancellation_id):
+    data = {
+        "data": {
+            "status": "active",
+            "id": cancellation_id
+        }
+    }
+    return data
+
+
+def confirm_contract(contract_id):
+    data = {
+        "data": {
+            "id": contract_id,
+            "status": "active"
+        }
+    }
+    return data
+
+
 # GUI Frontends common
 def add_data_for_gui_frontends(tender_data):
     now = get_now()
--
libgit2 0.24.0