From 6742bd6ed2955c8b1b7cef16f8c5b44b40e865a1 Mon Sep 17 00:00:00 2001 From: annawzz Date: Thu, 26 Jan 2017 14:58:27 +0200 Subject: [PATCH 1/6] Add functions for creating artifact and loading artifact data Also, add to artifact: 1) bid start values; 2) difference between start and changed bid values. That's needed to compare bids in qualification period. --- .../brokers/openprocurement_client.robot | 2 + .../tests_files/service_keywords.py | 87 +++++++++++++++++++ 2 files changed, 89 insertions(+) diff --git a/op_robot_tests/tests_files/brokers/openprocurement_client.robot b/op_robot_tests/tests_files/brokers/openprocurement_client.robot index f5eb69f64..31defb0c8 100644 --- a/op_robot_tests/tests_files/brokers/openprocurement_client.robot +++ b/op_robot_tests/tests_files/brokers/openprocurement_client.robot @@ -629,6 +629,7 @@ Library openprocurement_client_helper.py Set To Dictionary ${USERS.users['${username}'].bidresponses['bid'].data} id=${reply['data']['id']} Log ${reply_active} Set To Dictionary ${USERS.users['${username}']} bid_id=${reply['data']['id']} + Set To Dictionary ${USERS.users['${username}']} bid_start_value=${reply['data']['value']['amount']} Log ${reply} [return] ${reply} @@ -640,6 +641,7 @@ Library openprocurement_client_helper.py Set_To_Object ${bid.data} ${fieldname} ${fieldvalue} ${tender}= set_access_key ${tender} ${USERS.users['${username}'].bidresponses['resp'].access.token} ${reply}= Call Method ${USERS.users['${username}'].client} patch_bid ${tender} ${bid} + Set To Dictionary ${USERS.users['${username}']} bid_changed_value=${reply['data']['value']['amount']} Log ${reply} [return] ${reply} diff --git a/op_robot_tests/tests_files/service_keywords.py b/op_robot_tests/tests_files/service_keywords.py index 51a61087a..53c30021f 100644 --- a/op_robot_tests/tests_files/service_keywords.py +++ b/op_robot_tests/tests_files/service_keywords.py @@ -562,6 +562,93 @@ def local_path_to_file(file_name): return os.path.join(os.path.dirname(__file__), 'documents', file_name) +def create_artifact(): + api = BuiltIn().get_variable_value('${api_version}') + tender_data = BuiltIn().get_variable_value('${TENDER}') + users = BuiltIn().get_variable_value('${USERS.users}') + mode = BuiltIn().get_variable_value('${MODE}') + tender_owner = BuiltIn().get_variable_value('${tender_owner}') + provider = BuiltIn().get_variable_value('${provider}') + provider1 = BuiltIn().get_variable_value('${provider1}') + + artifact = { + 'api_version': api, + 'mode': mode, + 'tender_uaid': tender_data.get('TENDER_UAID', ''), + 'last_modification_date': tender_data.get('LAST_MODIFICATION_DATE', ''), + 'tender_owner': users[tender_owner].get('broker', ''), + 'access_token': users[tender_owner].get('access_token', ''), + 'tender_id': users[tender_owner]['tender_data']['data'].get('id', ''), + 'provider_access_token': users[provider].get('access_token', ''), + 'provider1_access_token': users[provider1].get('access_token', ''), + 'provider_bid_id': users[provider].get('bid_id', ''), + 'provider1_bid_id': users[provider1].get('bid_id', ''), + 'provider_bid_start_value': users[provider].get('bid_start_value',''), + 'provider1_bid_start_value': users[provider1].get('bid_start_value','') + } + if (users[provider].get('bid_changed_value','') != '' and artifact['provider_bid_start_value'] != ''): + if(float(users[provider].get('bid_changed_value','')) != 0): + artifact['provider_bid_difference'] = float(users[provider].get('bid_changed_value','')) - float(artifact['provider_bid_start_value']) + else: + artifact['provider_bid_difference'] = 0 + if (users[provider1].get('bid_changed_value','') != '' and artifact['provider1_bid_start_value'] != ''): + if(float(users[provider1].get('bid_changed_value','')) != 0): + artifact['provider1_bid_difference'] = float(users[provider1].get('bid_changed_value','')) - float(artifact['provider1_bid_start_value']) + else: + artifact['provider1_bid_difference'] = 0 + + suite = BuiltIn().get_variable_value('${SUITE NAME}') + if ('openProcedure' in suite): + log_object_data(data=artifact, file_name='artifact', update=False, artifact=True) + else: + log_object_data(data=artifact, file_name='artifact', update=True, artifact=True) + + +def load_tender_data(filepath): + artifact = load_data_from(filepath) + users = BuiltIn().get_variable_value('${USERS.users}') + tender_owner = BuiltIn().get_variable_value('${tender_owner}') + provider = BuiltIn().get_variable_value('${provider}') + provider1 = BuiltIn().get_variable_value('${provider1}') + + provider_update = { + 'access_token': artifact.get('provider_access_token', ''), + 'bid_id': artifact.get('provider_bid_id', ''), + 'bid_start_value': artifact.get('provider_bid_start_value', '') + } + provider1_update = { + 'access_token': artifact.get('provider1_access_token', ''), + 'bid_id': artifact.get('provider1_bid_id', ''), + 'bid_start_value': artifact.get('provider1_bid_start_value', '') + } + + users[provider].update(provider_update) + users[provider1].update(provider1_update) + users[tender_owner].access_token = artifact.get('access_token', '') + + if (artifact['provider_bid_difference'] == 0): + users[provider].bid_changed_value = 0 + else: + users[provider].bid_changed_value = artifact['provider_bid_start_value'] + artifact['provider_bid_difference'] + if (artifact['provider1_bid_difference'] == 0): + users[provider1].bid_changed_value = 0 + else: + users[provider1].bid_changed_value = artifact['provider1_bid_start_value'] + artifact['provider1_bid_difference'] + + mode = artifact.get('mode', '') + tender_data = { + 'TENDER_UAID': artifact.get('tender_uaid', ''), + 'LAST_MODIFICATION_DATE': artifact.get('last_modification_date', ''), + 'LOT_ID': '' + } + + BuiltIn().set_suite_variable("${MODE}", mode) + BuiltIn().set_suite_variable("${TENDER}", tender_data) + # Suite variable artifact - for reading bid_ids from artifact (not bidresponses) + BuiltIn().set_suite_variable("${ARTIFACT}", artifact) + log_object_data(data=artifact, file_name='artifact', update=True, artifact=True) + + def compare_CAV_groups(length, *items): # Checks CAV groups of *items # Arguments: length - number of items From 27520686f89c5cd669b4068d54d29770b3b31807 Mon Sep 17 00:00:00 2001 From: annawzz Date: Thu, 26 Jan 2017 15:02:20 +0200 Subject: [PATCH 2/6] Use new functions instead of using keywords Also, add roles in suites where needed. --- op_robot_tests/tests_files/auction.robot | 7 ++++--- op_robot_tests/tests_files/contract_signing.robot | 6 +++--- op_robot_tests/tests_files/keywords.robot | 2 +- op_robot_tests/tests_files/qualification.robot | 4 ++-- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/op_robot_tests/tests_files/auction.robot b/op_robot_tests/tests_files/auction.robot index 0008fb7bb..aecc2c02a 100644 --- a/op_robot_tests/tests_files/auction.robot +++ b/op_robot_tests/tests_files/auction.robot @@ -7,7 +7,7 @@ Suite Teardown Test Suite Teardown *** Variables *** -@{USED_ROLES} viewer +@{USED_ROLES} viewer tender_owner provider provider1 *** Test Cases *** @@ -15,8 +15,9 @@ Suite Teardown Test Suite Teardown [Tags] ${USERS.users['${viewer}'].broker}: Пошук лоту ... ${USERS.users['${viewer}'].broker} ... find_tender level1 - Завантажити дані про тендер - Run As ${viewer} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} + load_tender_data artifact.yaml + :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} + \ ${resp}= Run As ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} ############################################################################################## # AUCTION diff --git a/op_robot_tests/tests_files/contract_signing.robot b/op_robot_tests/tests_files/contract_signing.robot index 1fb9c29c6..1cea2cf49 100644 --- a/op_robot_tests/tests_files/contract_signing.robot +++ b/op_robot_tests/tests_files/contract_signing.robot @@ -5,7 +5,7 @@ Suite Setup Test Suite Setup Suite Teardown Test Suite Teardown *** Variables *** -@{USED_ROLES} tender_owner viewer +@{USED_ROLES} tender_owner viewer provider provider1 *** Test Cases *** @@ -14,8 +14,8 @@ Suite Teardown Test Suite Teardown ... viewer tender_owner ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} ... find_tender level1 - Завантажити дані про тендер - :FOR ${username} IN ${viewer} ${tender_owner} + load_tender_data artifact.yaml + :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} \ Run As ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} ############################################################################################## diff --git a/op_robot_tests/tests_files/keywords.robot b/op_robot_tests/tests_files/keywords.robot index 0bca3f857..27fb31fa7 100644 --- a/op_robot_tests/tests_files/keywords.robot +++ b/op_robot_tests/tests_files/keywords.robot @@ -25,7 +25,7 @@ Test Suite Setup Test Suite Teardown Close all browsers - Run Keyword And Ignore Error Створити артефакт + create_artifact Set Suite Variable With Default Value diff --git a/op_robot_tests/tests_files/qualification.robot b/op_robot_tests/tests_files/qualification.robot index 4e20598e0..5126901e3 100644 --- a/op_robot_tests/tests_files/qualification.robot +++ b/op_robot_tests/tests_files/qualification.robot @@ -19,8 +19,8 @@ ${award_index} ${0} ... viewer tender_owner ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} ... find_tender level1 - Завантажити дані про тендер - :FOR ${username} IN ${viewer} ${tender_owner} + load_tender_data artifact.yaml + :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} \ ${resp}= Run As ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} From 9e77d57c7a3f5b0af696301b5791953c5d738f2d Mon Sep 17 00:00:00 2001 From: annawzz Date: Thu, 26 Jan 2017 15:05:37 +0200 Subject: [PATCH 3/6] Delete unnecessary keywords, edit formatting --- op_robot_tests/tests_files/initial_data.py | 4 +-- op_robot_tests/tests_files/keywords.robot | 36 +--------------------- 2 files changed, 3 insertions(+), 37 deletions(-) diff --git a/op_robot_tests/tests_files/initial_data.py b/op_robot_tests/tests_files/initial_data.py index 67924cd4c..adf4ec2f0 100644 --- a/op_robot_tests/tests_files/initial_data.py +++ b/op_robot_tests/tests_files/initial_data.py @@ -440,8 +440,8 @@ def test_tender_data_dgf_other(params): data['dgfID'] = fake.dgfID() data['dgfDecisionID'] = fake.dgfDecisionID() - data['dgfDecisionDate'] = (get_now() + timedelta(days=-2)).strftime('%Y-%m-%d') - data['tenderAttempts'] = fake.random_int(min=1, max=4) + data['dgfDecisionDate'] = (get_now() + timedelta(days=-2)).strftime('%Y-%m-%d') + data['tenderAttempts'] = fake.random_int(min=1, max=4) del data["procuringEntity"] for i in range(params['number_of_items']): diff --git a/op_robot_tests/tests_files/keywords.robot b/op_robot_tests/tests_files/keywords.robot index 27fb31fa7..43e107194 100644 --- a/op_robot_tests/tests_files/keywords.robot +++ b/op_robot_tests/tests_files/keywords.robot @@ -161,41 +161,6 @@ Get Broker Property By Username Run Keyword And Return Get Broker Property ${broker_name} ${property} -Створити артефакт - ${artifact}= Create Dictionary - ... api_version=${api_version} - ... tender_uaid=${TENDER['TENDER_UAID']} - ... last_modification_date=${TENDER['LAST_MODIFICATION_DATE']} - ... mode=${MODE} - Run Keyword And Ignore Error Set To Dictionary ${artifact} - ... tender_owner=${USERS.users['${tender_owner}'].broker} - ... access_token=${USERS.users['${tender_owner}'].access_token} - ... tender_id=${USERS.users['${tender_owner}'].tender_data.data.id} - Run Keyword And Ignore Error Set To Dictionary ${artifact} tender_owner_access_token=${USERS.users['${tender_owner}'].access_token} - Run Keyword And Ignore Error Set To Dictionary ${artifact} provider_access_token=${USERS.users['${provider}'].access_token} - Run Keyword And Ignore Error Set To Dictionary ${artifact} provider1_access_token=${USERS.users['${provider1}'].access_token} - Run Keyword And Ignore Error Set To Dictionary ${artifact} provider_bid_id=${USERS.users['${provider}'].bid_id} - Run Keyword And Ignore Error Set To Dictionary ${artifact} provider1_bid_id=${USERS.users['${provider1}'].bid_id} - Log ${artifact} - log_object_data ${artifact} file_name=artifact update=${True} artifact=${True} - - -Завантажити дані про тендер - ${file_path}= Get Variable Value ${ARTIFACT_FILE} artifact.yaml - ${ARTIFACT}= load_data_from ${file_path} - Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${tender_owner}']} access_token=${ARTIFACT.access_token} - ${TENDER}= Create Dictionary TENDER_UAID=${ARTIFACT.tender_uaid} LAST_MODIFICATION_DATE=${ARTIFACT.last_modification_date} LOT_ID=${Empty} - ${MODE}= Get Variable Value ${MODE} ${ARTIFACT.mode} - Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${tender_owner}']} access_token=${ARTIFACT.tender_owner_access_token} - Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${provider}']} access_token=${ARTIFACT.provider_access_token} - Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${provider1}']} access_token=${ARTIFACT.provider1_access_token} - Set Suite Variable ${MODE} - Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${provider}']} bid_id=${ARTIFACT.provider_bid_id} - Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${provider1}']} bid_id=${ARTIFACT.provider1_bid_id} - Set Suite Variable ${TENDER} - log_object_data ${ARTIFACT} file_name=artifact update=${True} artifact=${True} - - Підготувати дані для створення тендера [Arguments] ${tender_parameters} ${period_intervals}= compute_intrs ${BROKERS} ${used_brokers} @@ -217,6 +182,7 @@ Get Broker Property By Username ${reply}= test_feature_data [Return] ${reply} + Підготувати дані для подання вимоги ${claim}= test_claim_data [Return] ${claim} From 92448f423a2a809c2904398abb3783914488db89 Mon Sep 17 00:00:00 2001 From: annawzz Date: Thu, 26 Jan 2017 15:33:00 +0200 Subject: [PATCH 4/6] Add keyword and function for bids comparison --- op_robot_tests/tests_files/keywords.robot | 6 ++++++ op_robot_tests/tests_files/service_keywords.py | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/op_robot_tests/tests_files/keywords.robot b/op_robot_tests/tests_files/keywords.robot index 43e107194..a7293be16 100644 --- a/op_robot_tests/tests_files/keywords.robot +++ b/op_robot_tests/tests_files/keywords.robot @@ -371,6 +371,12 @@ Log differences between dicts Порівняти об'єкти ${left} ${right} +Звірити відображення ставки учасника + [Arguments] ${username} ${tender_uaid} ${bid_index} + ${left}= get_current_bid_value artifact.yaml ${bid_index} + Звірити поле тендера із значенням ${username} ${tender_uaid} ${left} bids[${bid_index}]['value']['amount'] + + Звірити значення поля серед усіх документів тендера [Arguments] ${username} ${tender_uaid} ${field} ${value} ${number_of_documents}= Run As ${username} Отримати кількість документів в тендері ${tender_uaid} diff --git a/op_robot_tests/tests_files/service_keywords.py b/op_robot_tests/tests_files/service_keywords.py index 53c30021f..fc79ccfd3 100644 --- a/op_robot_tests/tests_files/service_keywords.py +++ b/op_robot_tests/tests_files/service_keywords.py @@ -504,6 +504,16 @@ def get_complaint_index_by_complaintID(data, complaintID): return index +def get_current_bid_value(filepath, index): + artifact = load_data_from(filepath) + if (index == '0'): + return float(artifact['provider_bid_start_value']) + float(artifact['provider_bid_difference']) + if (index == '1'): + return float(artifact['provider1_bid_start_value']) + float(artifact['provider1_bid_difference']) + else: + raise ValueError("Invalid provider index") + + def generate_test_bid_data(tender_data): bid = test_bid_data() if 'aboveThreshold' in tender_data.get('procurementMethodType', '') or 'competitiveDialogue' in tender_data.get('procurementMethodType', ''): From d192c81cbdaa227856fbbd3a2e228811de9f2f2b Mon Sep 17 00:00:00 2001 From: annawzz Date: Thu, 26 Jan 2017 15:36:08 +0200 Subject: [PATCH 5/6] Check bid values Check matching of start bid values and bid values in qualification period, taking into account changes in tendering and auction periods. --- op_robot_tests/tests_files/qualification.robot | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/op_robot_tests/tests_files/qualification.robot b/op_robot_tests/tests_files/qualification.robot index 5126901e3..044ff1924 100644 --- a/op_robot_tests/tests_files/qualification.robot +++ b/op_robot_tests/tests_files/qualification.robot @@ -32,6 +32,22 @@ ${award_index} ${0} Дочекатись дати початку періоду кваліфікації ${viewer} ${TENDER['TENDER_UAID']} +Відображення ставки першого учасника на етапі кваліфікації + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних лоту + ... viewer + ... ${USERS.users['${viewer}'].broker} + ... tender_view level1 + Звірити відображення ставки учасника ${provider} ${TENDER['TENDER_UAID']} 0 + + +Відображення ставки другого учасника на етапі кваліфікації + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних лоту + ... viewer + ... ${USERS.users['${viewer}'].broker} + ... tender_view level1 + Звірити відображення ставки учасника ${provider1} ${TENDER['TENDER_UAID']} 1 + + Можливість створити вимогу про виправлення визначення переможця, додати до неї документацію і подати її користувачем [Tags] ${USERS.users['${provider}'].broker}: Процес оскарження ... provider From 90da5ed3486d92c5866810cac13d0a38e729857f Mon Sep 17 00:00:00 2001 From: annawzz Date: Thu, 26 Jan 2017 15:06:04 +0200 Subject: [PATCH 6/6] Add reading bid IDs from artifact where it's possible Depending on the role, try to read bid id from artifact. If artifact doesn't exist, read it from bidresponses (or tender.data.awards). --- .../brokers/openprocurement_client.robot | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/op_robot_tests/tests_files/brokers/openprocurement_client.robot b/op_robot_tests/tests_files/brokers/openprocurement_client.robot index 31defb0c8..04613c917 100644 --- a/op_robot_tests/tests_files/brokers/openprocurement_client.robot +++ b/op_robot_tests/tests_files/brokers/openprocurement_client.robot @@ -75,7 +75,12 @@ Library openprocurement_client_helper.py Завантажити протокол аукціону [Arguments] ${username} ${tender_uaid} ${filepath} ${award_index} ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} - ${bid_id}= Get Variable Value ${tender.data.awards[${award_index}].bid_id} + ${bid_id}= Run Keyword If + ... '${username}' == '${provider}' + ... Get Variable Value ${ARTIFACT.provider_bid_id} ${tender.data.awards[${award_index}].bid_id} + ... ELSE Run Keyword If + ... '${username}' == '${provider1}' + ... Get Variable Value ${ARTIFACT.provider1_bid_id} ${tender.data.awards[${award_index}].bid_id} ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} ${response}= Call Method ${USERS.users['${username}'].client} upload_bid_document ${filepath} ${tender} ${bid_id} documents Keep In Dictionary ${response['data']} id @@ -657,7 +662,12 @@ Library openprocurement_client_helper.py Завантажити документ в ставку [Arguments] ${username} ${path} ${tender_uaid} ${doc_type}=documents - ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['resp'].data.id} + ${bid_id}= Run Keyword If + ... '${username}' == '${provider}' + ... Get Variable Value ${ARTIFACT.provider_bid_id} ${USERS.users['${username}'].bidresponses['resp'].data.id} + ... ELSE Run Keyword If + ... '${username}' == '${provider1}' + ... Get Variable Value ${ARTIFACT.provider1_bid_id} ${USERS.users['${username}'].bidresponses['resp'].data.id} ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} ${tender}= set_access_key ${tender} ${USERS.users['${username}'].bidresponses['resp'].access.token} ${response}= Call Method ${USERS.users['${username}'].client} upload_bid_document ${path} ${tender} ${bid_id} ${doc_type} @@ -668,7 +678,12 @@ Library openprocurement_client_helper.py Змінити документ в ставці [Arguments] ${username} ${tender_uaid} ${path} ${docid} - ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['resp'].data.id} + ${bid_id}= Run Keyword If + ... '${username}' == '${provider}' + ... Get Variable Value ${ARTIFACT.provider_bid_id} ${USERS.users['${username}'].bidresponses['resp'].data.id} + ... ELSE Run Keyword If + ... '${username}' == '${provider1}' + ... Get Variable Value ${ARTIFACT.provider1_bid_id} ${USERS.users['${username}'].bidresponses['resp'].data.id} ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} ${tender}= set_access_key ${tender} ${USERS.users['${username}'].bidresponses['resp'].access.token} ${response}= Call Method ${USERS.users['${username}'].client} update_bid_document ${path} ${tender} ${bid_id} ${docid} @@ -679,7 +694,12 @@ Library openprocurement_client_helper.py Змінити документацію в ставці [Arguments] ${username} ${tender_uaid} ${doc_data} ${docid} - ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['resp'].data.id} + ${bid_id}= Run Keyword If + ... '${username}' == '${provider}' + ... Get Variable Value ${ARTIFACT.provider_bid_id} ${USERS.users['${username}'].bidresponses['resp'].data.id} + ... ELSE Run Keyword If + ... '${username}' == '${provider1}' + ... Get Variable Value ${ARTIFACT.provider1_bid_id} ${USERS.users['${username}'].bidresponses['resp'].data.id} ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} ${tender}= set_access_key ${tender} ${USERS.users['${username}'].bidresponses['resp'].access.token} ${reply}= Call Method ${USERS.users['${username}'].client} patch_bid_document ${tender} ${doc_data} ${bid_id} ${docid}