Commit f7d8b3755522e62c53e8e5339dd5133faf339a56

Authored by Taras Kozlovskyi
1 parent 324c3fbc

Improved OpenProcurementProcess

1   -# -*- coding: utf-8 -
2   -from munch import munchify
3   -from .initial_data import (
4   - test_tender_data, test_question_data, test_question_answer_data,
5   - test_bid_data
6   -)
7   -
8   -from dateutil.parser import parse
9   -from dateutil.tz import tzlocal
10   -from datetime import datetime, timedelta
11   -
12   -from json import loads as convert_from_string_to_dict
13   -from openprocurement_client.client import Client
14   -from StringIO import StringIO
15   -from robot.output import LOGGER
16   -from robot.output.loggerhelper import Message
17   -
18   -
19   -def prepare_api(key=''):
20   - return Client(key)
21   -
22   -
23   -def prepare_test_tender_data():
24   - tender = munchify({'data': test_tender_data})
25   - return tender
26   -
27   -
28   -def set_tender_periods(tender):
29   - now = datetime.now()
30   - tender.data.enquiryPeriod.endDate = (now + timedelta(minutes=2)).isoformat()
31   - tender.data.tenderPeriod.startDate = (now + timedelta(minutes=2)).isoformat()
32   - tender.data.tenderPeriod.endDate = (now + timedelta(minutes=4)).isoformat()
33   - return tender
34   -
35   -
36   -def set_access_key(tender, access_token):
37   - tender.access = munchify({"token": access_token})
38   - return tender
39   -
40   -
41   -def upload_tender_document(api, tender):
42   - file = StringIO()
43   - file.name = 'тест.txt'
44   - file.write("test text dataaaфвфв")
45   - file.seek(0)
46   - return api.upload_document(tender, file)
47   -
48   -
49   -def patch_tender_document(api, tender, doc_id):
50   - file = StringIO()
51   - file.name = 'test1.txt'
52   - file.write("контент")
53   - file.seek(0)
54   - return api.update_document(tender, doc_id, file)
55   -
56   -
57   -def create_approve_award_request_data(award_id):
58   - return munchify({"data": {"status": "active", "id": award_id}})
59   -
60   -
61   -def calculate_wait_to_date(date_stamp):
62   - date = parse(date_stamp)
63   - LOGGER.log_message(Message("date: {}".format(date.isoformat()), "INFO"))
64   - now = datetime.now(tzlocal())
65   - LOGGER.log_message(Message("now: {}".format(now.isoformat()), "INFO"))
66   - wait_seconds = (date - now).total_seconds()
67   - wait_seconds += 2
68   - if wait_seconds < 0:
69   - return 0
70   - return wait_seconds
... ... @@ -5,19 +5,135 @@ LIbrary Collections
5 5 LIbrary Selenium2Library
6 6 Library DebugLibrary
7 7
8   -Test Setup TestCaseSetup
  8 +Suite Setup TestCaseSetup
  9 +Suite Teardown Close all browsers
9 10
10 11
11 12 *** Variables ***
12   -@{important_fields} description minimalStep.amount procuringEntity.name tenderID title value.amount
13   -
  13 +${viewer} E-tender User
  14 +${provider} Andrew
  15 +@{item_fields} description quantity classification.id classification.description deliveryAddress deliveryDate
14 16
15 17 *** Test Cases ***
16   -Створення тендера
17   - [tags] all_stages
18   - Власник тендера створив тендер
19   - Інші учасники побачили створений тендер
20   - [Teardown] Close all browsers
  18 +Можливість оголосити тендер
  19 + [Tags] ${USERS.users['${USERS.tender_owner}'].broker}: Можливість оголосити тендер
  20 + Викликати для учасника ${USERS.tender_owner} Створити тендер
  21 + ${LAST_MODIFICATION_DATE}= Get Current Date
  22 + Set Global Variable ${LAST_MODIFICATION_DATE}
  23 +
  24 +Пошук тендера по ідентифікатору
  25 + [Tags] ${USERS.users['${viewer}'].broker}: Пошук тендера по ідентифікатору
  26 + Дочекатись синхронізації з майданчиком ${viewer}
  27 + Викликати для учасника ${viewer} Пошук тендера по ідентифікатору ${TENDER_DATA.data.tenderID} ${TENDER_DATA.data.id}
  28 +
  29 +Відображення заголовоку оголошеного тендера
  30 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
  31 + Звірити поле тендера ${viewer} title
  32 +
  33 +Відображення tenderID оголошеного тендера
  34 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
  35 + Звірити поле тендера ${viewer} tenderID
  36 +
  37 +Відображення опису оголошеного тендера
  38 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
  39 + Звірити поле тендера ${viewer} description
  40 +
  41 +Відображення початоку періоду уточнення оголошеного тендера
  42 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
  43 + Звірити поле тендера ${viewer} enquiryPeriod.startDate
  44 +
  45 +Відображення закінчення періоду уточнення оголошеного тендера
  46 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
  47 + Звірити поле тендера ${viewer} enquiryPeriod.endDate
  48 +
  49 +Відображення початоку періоду прийому пропозицій оголошеного тендера
  50 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
  51 + Звірити поле тендера ${viewer} tenderPeriod.startDate
  52 +
  53 +Відображення закінчення періоду прийому пропозицій оголошеного тендера
  54 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
  55 + Звірити поле тендера ${viewer} tenderPeriod.endDate
  56 +
  57 +Відображення бюджету оголошеного тендера
  58 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
  59 + Звірити поле тендера ${viewer} value.amount
  60 +
  61 +Відображення мінімального кроку оголошеного тендера
  62 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
  63 + Звірити поле тендера ${viewer} minimalStep.amount
  64 +
  65 +Відображення procuringEntity.name оголошеного тендера
  66 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера
  67 + Звірити поле тендера ${viewer} procuringEntity.name
  68 +
  69 +
  70 +
  71 +
  72 +Відображення предмету закупівлі однопредметного тендера
  73 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення однопредметного тендера
  74 + Звірити поле тендера ${viewer} items[0].description
  75 +
  76 +Відображення кількісті предметів закупівлі однопредметного тендера
  77 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення однопредметного тендера
  78 + Звірити поле тендера ${viewer} items[0].quantity
  79 +
  80 +Відображення класифікаторів закупівлі однопредметного тендера
  81 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення однопредметного тендера
  82 + Звірити поле тендера ${viewer} items[0].classification.id
  83 + Звірити поле тендера ${viewer} items[0].classification.description
  84 +
  85 +Відображення місце поставки закупівлі однопредметного тендера
  86 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення однопредметного тендера
  87 + Звірити поле тендера ${viewer} items[0].deliveryAddress
  88 +
  89 +Відображення строки поставки закупівлі однопредметного тендера
  90 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення однопредметного тендера
  91 + Звірити поле тендера ${viewer} items[0].deliveryDate.endDate
  92 +
  93 +Задати питання
  94 + [Tags] ${USERS.users['${provider}'].broker}: Можливість задати запитання
  95 + Викликати для учасника ${provider} Задати питання ${TENDER_DATA.data.id} ${QUESTIONS[0]}
  96 + ${LAST_MODIFICATION_DATE}= Get Current Date
  97 + Set Global Variable ${LAST_MODIFICATION_DATE}
  98 + отримати останні зміни в тендері
  99 +
  100 +
  101 +Відображення заголовоку анонімного питання без відповіді
  102 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення анонімного питання без відповідей
  103 + Дочекатись синхронізації з майданчиком ${viewer}
  104 + Викликати для учасника ${viewer} обновити сторінку з тендером ${TENDER_DATA.data.tenderID} ${TENDER_DATA.data.id}
  105 + Звірити поле тендера ${viewer} questions[0].title
  106 +
  107 +Відображення опис анонімного питання без відповіді
  108 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення анонімного питання без відповідей
  109 + Звірити поле тендера ${viewer} questions[0].description
  110 +
  111 +
  112 +Відображення дата анонімного питання без відповіді
  113 + [Tags] ${USERS.users['${viewer}'].broker}: Відображення анонімного питання без відповідей
  114 + Звірити поле тендера ${viewer} questions[0].date
  115 +
  116 + # ${users_list}= Get Dictionary Items ${USERS.users}
  117 + # :FOR ${username} ${User_Data} IN @{users_list}
  118 + # \ Run Keyword If '${User_Name}' != '${USERS.tender_owner}' Відображення основних даних оголошеного тендера ${username}
  119 +#
  120 +# Відображення однопредметного тендера
  121 + # ${users_list}= Get Dictionary Items ${USERS.users}
  122 + # :FOR ${username} ${User_Data} IN @{users_list}
  123 + # \ Run Keyword If '${User_Name}' != '${USERS.tender_owner}' Відображення однопредметного тендера ${username}
  124 +#
  125 +#
  126 +# Можливість змінити основні властивості тендера
  127 + # [tags] all_stages
  128 + # Власник змінив основні властивості тендера
  129 + # Інші учасники побачили створений тендер
  130 +#
  131 +# Питання і відповідь
  132 + # Учасник Andrew задав 1-ше питання
  133 + # Інші учасники побачили 1-ше питання
  134 + # Власник відповів на 1-ше питання
  135 + # Інші учасники побачили відповідь на 1-ше питання
  136 +#
21 137
22 138
23 139 *** Keywords ***
... ... @@ -27,47 +143,61 @@ TestCaseSetup
27 143
28 144
29 145 Завантажуємо дані про корисувачів і площадки
30   -
31 146 # Init Brokers
32 147 ${file_path}= Get Variable Value ${BROKERS_FILE} brokers.yaml
33 148 ${BROKERS}= load_initial_data_from ${file_path}
34 149 Set Global Variable ${BROKERS}
35 150 ${brokers_list}= Get Dictionary Items ${BROKERS}
36 151 :FOR ${Broker_Name} ${Broker_Data} IN @{brokers_list}
37   - \ Завантажуємо бібліотеку з реалізацією ${Broker_Data.broker_api} площадки
38   -
  152 + \ Завантажуємо бібліотеку з реалізацією ${Broker_Data.keywords_file} площадки
39 153 # Init Users
40 154 ${file_path}= Get Variable Value ${USERS_FILE} users.yaml
41 155 ${USERS}= load_initial_data_from ${file_path}
42 156 Set Global Variable ${USERS}
43 157 ${users_list}= Get Dictionary Items ${USERS.users}
44 158 :FOR ${username} ${user_data} IN @{users_list}
45   - \ Викликати "Підготувати клієнт для користувача" для учасника "${username}"
  159 + \ Викликати для учасника ${username} Підготувати клієнт для користувача
46 160
47 161 Підготовка початкових даних
  162 + @{QUESTIONS} = Create list
  163 + ${question}= test question data
  164 + Append to list ${QUESTIONS} ${question}
  165 + Set Global Variable ${QUESTIONS}
48 166 ${INITIAL_TENDER_DATA}= prepare_test_tender_data
49 167 Set Global Variable ${INITIAL_TENDER_DATA}
50 168
51   -Завантажуємо бібліотеку з реалізацією ${broker_api} площадки
52   - Import Resource ${CURDIR}/brokers/${broker_api}.robot
53   -
54   -Власник тендера створив тендер
55   - Викликати "Створити тендер" для учасника "${USERS.tender_owner}"
56   - Log Учасник ${USERS.tender_owner} використовуючи майданчик ${USERS.users['${USERS.tender_owner}'].broker} з імплементацією api: ${BROKERS['${USERS.users['${USERS.tender_owner}'].broker}'].broker_api} створює тендер WARN
57   -
58   -
59   -Інші учасники побачили створений тендер
60   - Log Очікуємо синхронізації з майданчиками WARN
61   - Sleep 15
62   - ${users_list}= Get Dictionary Items ${USERS.users}
63   - :FOR ${User_Name} ${User_Data} IN @{users_list}
64   - \ Run Keyword If '${User_Name}' != '${USERS.tender_owner}' Учасник ${User_Name} побачив створений тендер
65   -
66   -
67   -Учасник ${User_Name} побачив створений тендер
68   - Викликати "Звірити інформацію про тендер" для учасника "${username}"
69   - Log Учасник ${User_Name} використовуючи майданчик ${USERS.users['${User_Name}'].broker} з імплементацією api: ${BROKERS['${USERS.users['${User_Name}'].broker}'].broker_api} перевірив створений тендер WARN
70   -
71   -
72   -Викликати "${command}" для учасника "${username}"
73   - Run keyword ${BROKERS['${USERS.users['${username}'].broker}'].broker_api}.${command} ${username}
\ No newline at end of file
  169 +Завантажуємо бібліотеку з реалізацією ${keywords_file} площадки
  170 + Import Resource ${CURDIR}/brokers/${keywords_file}.robot
  171 +
  172 +
  173 +##################################################################################
  174 +Дочекатись синхронізації з майданчиком
  175 + [Arguments] ${username}
  176 + [Documentation]
  177 + ... ${ARGUMENTS[0]} == username
  178 + ... ${ARGUMENTS[1]} == tenderId
  179 + ... ${ARGUMENTS[2]} == id
  180 +
  181 + ${now}= Get Current Date
  182 + ${delta}= Subtract Date From Date ${now} ${LAST_MODIFICATION_DATE}
  183 + ${wait_timout}= Subtract Time From Time ${BROKERS['${USERS.users['${username}'].broker}'].timout_on_wait} ${delta}
  184 + Run Keyword If ${wait_timout}>0 Sleep ${wait_timout}
  185 +
  186 +отримати останні зміни в тендері
  187 + ${TENDER_DATA}= Викликати для учасника ${USERS.tender_owner} Пошук тендера по ідентифікатору ${TENDER_DATA.data.tenderID} ${TENDER_DATA.data.id}
  188 + Set To Dictionary ${TENDER_DATA} access_token ${access_token}
  189 + Set Global Variable ${TENDER_DATA}
  190 + Log object data ${TENDER_DATA} tender_with_question
  191 +
  192 +Звірити поле тендера
  193 + [Arguments] ${username} ${field}
  194 + ${field_response}= Викликати для учасника ${username} отримати інформацію із тендера ${field}
  195 + ${field_value}= Get_From_Object ${TENDER_DATA.data} ${field}
  196 + Should Be Equal ${field_value} ${field_response} Майданчик ${USERS.users['${username}'].broker}
  197 +
  198 +
  199 +Викликати для учасника
  200 + [Arguments] ${username} ${command} @{arguments}
  201 + ${status} ${value}= run_keyword_and_ignore_keyword_definations ${BROKERS['${USERS.users['${username}'].broker}'].keywords_file}.${command} ${username} @{arguments}
  202 + Run keyword if '${status}' == 'FAIL' Log Учасник ${username} не зміг виконати "${command}" WARN
  203 + [return] ${value}
... ...
1   -*** Setting ***
2   -Resource keywords.robot
3   -Resource resource.robot
4   -
5   -*** Test Cases ***
6   -Tender process
7   - [tags] all_stages
8   - Create api wrapper
9   - Create tender
10   - Change tender title
11   - Upload tender documentation
12   - Change tender periods
13   - Create question
14   - Write answer on first question
15   - Wait to tender period with name tenderPeriod
16   - Submit bids
17   - Review tender
18   - Wait to start of auction's worker
19   - Get particular urls for bids
20   - Get auction url for observer
21   - Game process begin
22   - Wait to end of auction
23   - Review tender
24   - Activate award
25   - [Teardown] Close all browsers
1   -*** Setting ***
2   -Resource keywords.robot
3   -Resource resource.robot
4   -Resource auction_keywords.robot
5   -
6   -
7   -*** Test Cases ***
8   -Valid Login
9   - Open Browser as observer
10   - Open Browser To Login Page bidder1
11   - Open Browser To Login Page bidder2
12   - Switch Browser observer
13   - Auction is in standby
14   - Auction is between rounds → 1
15   - Auction is on round 1
16   -
17   -auction runs 1 round
18   - bidder1 leaves bid 475000
19   - bidder2 leaves bid 470000
20   - Switch Browser observer
21   - Auction is between rounds 1 → 2
22   -
23   -auction runs 2 round
24   - Auction is on round 2
25   - bidder1 leaves bid 465000
26   - bidder2 leaves bid 460000
27   - Switch Browser observer
28   - Auction is between rounds 2 → 3
29   -
30   -auction is on last round
31   - Auction is on last round 3
32   - bidder1 leaves bid 455000
33   - bidder2 leaves bid 450000
34   - Switch Browser observer
35   - Auction is finished
36   - [Teardown] Close Browser
37   -
1   -*** Setting ***
2   -Library op_robot_tests.tests_files.ApiCommands
3   -Library String
4   -LIbrary Collections
5   -LIbrary Selenium2Library
6   -
7   -
8   -*** Variables ***
9   -${BROWSER} googlechrome
10   -${DELAY} 1
11   -${URL} http://cygnet.office.quintagroup.com:9001/tenders/ua3
12   -#http://auction-sandbox.openprocurement.org/
13   -
14   -
15   -${AUCTION_URL} http://cygnet.office.quintagroup.com:9001/tenders/ua3
16   -${LOGIN URL1} ${AUCTION_URL}/login?bidder_id=d3ba84c66c9e4f34bfb33cc3c686f137&hash=4e79e605bfecbaa9ac4d0d974c541ee2988f7377
17   -${LOGIN URL2} ${AUCTION_URL}/login?bidder_id=5675acc9232942e8940a034994ad883e&hash=bd4a790aac32b73e853c26424b032e5a29143d1f
18   -
19   -#$x('/html/body/div/div[1]/div/div[1]//*[contains(text(),"Аукціон завершився")]')
20   -#[<span ng-if=​"$parent.info_timer.msg" class=​"ng-binding ng-scope">​…​</span>​]
21   -# http://cygnet.office.quintagroup.com:9001/tenders/ua3/login?bidder_id=d3ba84c66c9e4f34bfb33cc3c686f137&hash=4e79e605bfecbaa9ac4d0d974c541ee2988f7377
22   -
23   -*** Keywords ***
24   -Open Browser as observer
25   - Open Browser ${AUCTION_URL} ${BROWSER} observer
26   - Maximize Browser Window
27   - Capture Page Screenshot
28   -
29   -Open Browser To Login Page bidder1
30   - Open Browser ${LOGIN URL1} ${BROWSER} bidder1
31   - Maximize Browser Window
32   - Oauth Confirm Page Should Be Open
33   - Capture Page Screenshot
34   - Agree with rules
35   -
36   -Open Browser To Login Page bidder2
37   - Open Browser ${LOGIN URL2} ${BROWSER} bidder2
38   - Maximize Browser Window
39   - Oauth Confirm Page Should Be Open
40   - Capture Page Screenshot
41   - Agree with rules
42   -
43   -Agree with rules
44   - Click Button xpath=//form/div/button[1]
45   - #Auction Page Should Be Open
46   -
47   -Oauth Confirm Page Should Be Open
48   - Title Should Be Authorization
49   -
50   -Auction Page Should Be Open
51   - Location Should Be ${AUCTION_URL}
52   - Page Should Contain UA-11111
53   - Wait Until Page Contains до закінчення вашої черги 600
54   - Capture Page Screenshot
55   -
56   -Start Browser
57   - Open Browser ${URL} ${BROWSER}
58   - Capture Page Screenshot
59   -
60   -Auction is in standby
61   - Page Should Contain до початку аукціону 600
62   - ${value} = Get Text xpath = //p[@class="round-number ng-scope"]
63   - Should Be Equal ${value} Очікування
64   - Capture Page Screenshot
65   -
66   -Auction is between rounds ${value1}
67   - Wait Until Page Contains до початку раунду 600
68   - ${value} = Get Text xpath = //span[@class="round-number ng-binding"]
69   - Should Be Equal ${value1} ${value}
70   - Capture Page Screenshot
71   -
72   -Auction is on round ${value3}
73   - Wait Until Page Contains до закінчення раунду 600
74   - ${round} = Get Text xpath = //p[@class="round-label ng-scope"]
75   - ${number} = Get Text xpath = //p[@class="round-number ng-binding"]
76   - Should Be Equal ${round} Раунд
77   - Should Be Equal ${number} ${value3}
78   - Capture Page Screenshot
79   -
80   -Auction is on last round ${value3}
81   - Wait Until Page Contains до оголошення результатів 600
82   - ${round} = Get Text xpath = //p[@class="round-label ng-scope"]
83   - ${number} = Get Text xpath = //p[@class="round-number ng-binding"]
84   - Should Be Equal ${round} Раунд
85   - Should Be Equal ${number} ${value3}
86   - Capture Page Screenshot
87   -
88   -Auction is finished
89   - Wait Until Page Contains Аукціон завершився 600
90   - ${value} = Get Text xpath = //p[@class="round-number ng-scope"]
91   - Should Be Equal ${value} Завершено
92   - Capture Page Screenshot
93   -
94   -*** Keywords ***
95   -#bidding keywords
96   -
97   -#get minimum bid value
98   -
99   -submit bid ${amount}
100   - Wait Until Page Contains до закінчення вашої черги 300
101   - Input Text xpath = //input[@id="bid"] ${amount}
102   - Click Button xpath = //button[@class="btn btn-success ng-scope"]
103   - Wait Until Page Contains Заявку прийнято 10
104   - Page Should Not Contain Надто висока заявка
105   -
106   -bidder1 leaves bid ${amount}
107   - Switch Browser bidder1
108   - submit bid ${amount}
109   -
110   -bidder2 leaves bid ${amount}
111   - Switch Browser bidder2
112   - submit bid ${amount}
113   -
114   -
\ No newline at end of file
1 1 *** Setting ***
2 2 Library Selenium2Screenshots
  3 +Library String
  4 +Library DateTime
  5 +
  6 +*** Variables ***
  7 +${locator.tenderId} jquery=h3
  8 +${locator.title} jquery=tender-subject-info>div.row:contains("Назва закупівлі:")>:eq(1)>
  9 +${locator.description} jquery=tender-subject-info>div.row:contains("Детальний опис закупівлі:")>:eq(1)>
  10 +${locator.minimalStep.amount} jquery=tender-subject-info>div.row:contains("Мінімальний крок аукціону, грн.:")>:eq(1)>
  11 +${locator.procuringEntity.name} jquery=customer-info>div.row:contains("Найменування:")>:eq(1)>
  12 +${locator.value.amount} jquery=tender-subject-info>div.row:contains("Повний доступний бюджет закупівлі, грн.:")>:eq(1)>
  13 +${locator.tenderPeriod.startDate} jquery=tender-procedure-info>div.row:contains("Початок прийому пропозицій:")>:eq(1)>
  14 +${locator.tenderPeriod.endDate} jquery=tender-procedure-info>div.row:contains("Завершення прийому пропозицій:")>:eq(1)>
  15 +${locator.enquiryPeriod.startDate} jquery=tender-procedure-info>div.row:contains("Початок періоду уточнень:")>:eq(1)>
  16 +${locator.enquiryPeriod.endDate} jquery=tender-procedure-info>div.row:contains("Завершення періоду уточнень:")>:eq(1)>
3 17
4 18 *** Keywords ***
5 19 Підготувати клієнт для користувача
6 20 [Arguments] ${username}
7 21 [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо
8   - Open Browser ${BROKERS['${USERS.users['${username}'].broker}'].url} ${USERS.users['${username}'].browser} ${username}
  22 + Open Browser ${BROKERS['${USERS.users['${username}'].broker}'].url} ${USERS.users['${username}'].browser} alias=${username}
9 23 Set Window Position @{USERS.users['${username}'].position}
10 24 Set Window Size @{USERS.users['${username}'].size}
11 25 Log Variables
12 26
13   -Створити тендер
  27 +Пошук тендера по ідентифікатору
14 28 [Arguments] @{ARGUMENTS}
15   - Log Variables
  29 + [Documentation]
  30 + ... ${ARGUMENTS[0]} == username
  31 + ... ${ARGUMENTS[1]} == tenderId
  32 + ... ${ARGUMENTS[2]} == id
  33 + ${current_location}= Get Location
  34 + Run keyword if '${BROKERS['${USERS.users['${username}'].broker}'].url}/#/tenderDetailes/${ARGUMENTS[2]}'=='${current_location}' Reload Page
  35 + Go to ${BROKERS['${USERS.users['${username}'].broker}'].url}
  36 + Wait Until Page Contains E-TENDER - центр електронної торгівлі 10
  37 + sleep 1
  38 + Input Text jquery=input[ng-change='search()'] ${ARGUMENTS[1]}
  39 + Click Link jquery=a[ng-click='search()']
  40 + sleep 2
  41 + ${last_note_id}= Add pointy note jquery=a[href^="#/tenderDetailes"] Found tender with tenderID "${ARGUMENTS[1]}" width=200 position=bottom
  42 + sleep 1
  43 + Remove element ${last_note_id}
  44 + Click Link jquery=a[href^="#/tenderDetailes"]
  45 + Wait Until Page Contains ${ARGUMENTS[1]} 10
  46 + sleep 1
  47 + Capture Page Screenshot
16 48
  49 +обновити сторінку з тендером
  50 + [Arguments] @{ARGUMENTS}
  51 + [Documentation]
  52 + ... ${ARGUMENTS[0]} == username
  53 + ... ${ARGUMENTS[1]} == tenderId
  54 + ... ${ARGUMENTS[2]} == id
  55 + ${current_location}= Get Location
  56 + Run keyword if '${BROKERS['${USERS.users['${username}'].broker}'].url}/#/tenderDetailes/${ARGUMENTS[2]}'=='${current_location}' Reload Page
  57 + Run keyword unless '${BROKERS['${USERS.users['${username}'].broker}'].url}/#/tenderDetailes/${ARGUMENTS[2]}'=='${current_location}' Пошук тендера по ідентифікатору @{ARGUMENTS}
  58 + Wait Until Page Contains ${ARGUMENTS[1]} 10
  59 + sleep 1
  60 +
  61 +отримати інформацію із тендера
  62 + [Arguments] @{ARGUMENTS}
  63 + [Documentation]
  64 + ... ${ARGUMENTS[0]} == username
  65 + ... ${ARGUMENTS[1]} == fieldname
  66 + Switch browser ${ARGUMENTS[0]}
  67 + ${return_value}= run keyword отримати інформацію про ${ARGUMENTS[1]}
  68 + [return] ${return_value}
  69 +
  70 +Відмітити на сторінці поле з тендера
  71 + [Arguments] ${fieldname} ${locator}
  72 + ${last_note_id}= Add pointy note ${locator} Found ${fieldname} width=200 position=bottom
  73 + Align elements horizontally ${locator} ${last_note_id}
  74 + sleep 1
  75 + Remove element ${last_note_id}
  76 +
  77 +Отримати тест із поля і показати на сторінці
  78 + [Arguments] ${fieldname}
  79 + відмітити на сторінці поле з тендера ${fieldname} ${locator.${fieldname}}
  80 + ${return_value}= Get Text ${locator.${fieldname}}
  81 + [return] ${return_value}
  82 +
  83 +отримати інформацію про tenderId
  84 + ${return_value}= Отримати тест із поля і показати на сторінці tenderId
  85 + [return] ${return_value.split(' ')[1]}
  86 +
  87 +отримати інформацію про title
  88 + ${return_value}= Отримати тест із поля і показати на сторінці title
  89 + [return] ${return_value}
  90 +
  91 +отримати інформацію про description
  92 + ${return_value}= Отримати тест із поля і показати на сторінці description
  93 + [return] ${return_value}
  94 +
  95 +отримати інформацію про minimalStep.amount
  96 + ${return_value}= Отримати тест із поля і показати на сторінці minimalStep.amount
  97 + ${return_value}= Convert To Number ${return_value.split(' ')[0]}
  98 + [return] ${return_value}
  99 +
  100 +отримати інформацію про procuringEntity.name
  101 + ${return_value}= Отримати тест із поля і показати на сторінці procuringEntity.name
  102 + [return] ${return_value}
  103 +
  104 +
  105 +отримати інформацію про value.amount
  106 + ${return_value}= Отримати тест із поля і показати на сторінці value.amount
  107 + ${return_value}= Convert To Number ${return_value.split(' ')[0].replace(',', '')}
  108 + [return] ${return_value}
  109 +
  110 +отримати інформацію про tenderPeriod.startDate
  111 + ${return_value}= Отримати тест із поля і показати на сторінці tenderPeriod.startDate
  112 + [return] ${return_value}
  113 +
  114 +отримати інформацію про tenderPeriod.endDate
  115 + ${return_value}= Отримати тест із поля і показати на сторінці tenderPeriod.endDate
  116 + [return] ${return_value}
  117 +
  118 +отримати інформацію про enquiryPeriod.startDate
  119 + ${return_value}= Отримати тест із поля і показати на сторінці enquiryPeriod.startDate
  120 + [return] ${return_value}
  121 +
  122 +отримати інформацію про enquiryPeriod.endDate
  123 + ${return_value}= Отримати тест із поля і показати на сторінці enquiryPeriod.endDate
  124 + [return] ${return_value}
  125 +
  126 +
  127 +отримати інформацію про items[${item_id}].description
  128 + No Operation
  129 +
  130 +отримати інформацію про items[${item_id}].quantity
  131 + відмітити на сторінці поле з тендера items[${item_id}].quantity jquery=tender-subject-info>div.row:contains("Кількість:")>:eq(1)>
  132 + ${return_value}= Get Text jquery=tender-subject-info>div.row:contains("Кількість:")>:eq(1)>
  133 + ${return_value}= Convert To Number ${return_value}
  134 + [return] ${return_value}
  135 +
  136 +отримати інформацію про items[${item_id}].classification.id
  137 + відмітити на сторінці поле з тендера items[0].classification.id jquery=tender-subject-info>div.row:contains("Класифікатор CPV:")>:eq(1)>
  138 + ${return_value}= Get Text jquery=tender-subject-info>div.row:contains("Класифікатор CPV:")>:eq(1)>
  139 + [return] ${return_value.split(' ')[0]}
  140 +
  141 +
  142 +отримати інформацію про items[${item_id}].classification.description
  143 + відмітити на сторінці поле з тендера classification.description jquery=tender-subject-info>div.row:contains("Класифікатор CPV:")>:eq(1)>
  144 + ${return_value}= Get Text jquery=tender-subject-info>div.row:contains("Класифікатор CPV:")>:eq(1)>
  145 + ${return_value}= catenate @{return_value.split(' ')[1:]}
  146 + [return] ${return_value}
  147 +
  148 +отримати інформацію про items[${item_id}].deliveryAddress
  149 + No Operation
  150 +
  151 +отримати інформацію про items[${item_id}].deliveryDate
  152 + No Operation
  153 +
  154 +отримати інформацію про questions[${question_id}].title
  155 + відмітити на сторінці поле з тендера questions title jquery=tender-questions>div:eq(1)>div.row:contains("Тема:")>:eq(1)>
  156 + ${return_value}= Get Text jquery=tender-questions>div:eq(1)>div.row:contains("Тема:")>:eq(1)>
  157 + [return] ${return_value}
  158 +
  159 +отримати інформацію про questions[${question_id}].description
  160 + відмітити на сторінці поле з тендера questions title jquery=tender-questions>div:eq(1)>div.row:contains("Питання:")>:eq(1)>
  161 + ${return_value}= Get Text jquery=tender-questions>div:eq(1)>div.row:contains("Питання:")>:eq(1)>
  162 + [return] ${return_value}
  163 +
  164 +отримати інформацію про questions[${question_id}].date
  165 + відмітити на сторінці поле з тендера questions title jquery=tender-questions>div:eq(1)>div.row:contains("Дата:")>:eq(1)>
  166 + ${return_value}= Get Text jquery=tender-questions>div:eq(1)>div.row:contains("Дата:")>:eq(1)>
  167 + [return] ${return_value}
17 168
18   -Звірити інформацію про тендер
19   - [Arguments] ${username}
20   - Go to ${BROKERS['${USERS.users['${username}'].broker}'].url}/#/tenderDetailes/${TENDER_DATA.data.id}
21   - Wait Until Page Contains ${TENDER_DATA.data.tenderID} 10
22   - ${last_note_id}= Add pointy note css=h3.panel-title Verify information about the tender position=bottom
23   - :FOR ${field} IN @{important_fields}
24   - \ Page Should Contain ${TENDER_DATA.data.${field}}
25   - \ Remove element ${last_note_id}
26   - \ ${last_note_id}= Add pointy note css=h3.panel-title checked information about field "${field}" width=200 color=green position=bottom
27   - \ sleep 1
\ No newline at end of file
... ...
... ... @@ -3,29 +3,117 @@ Library op_robot_tests.tests_files.brokers.openprocurement_client_helper
3 3
4 4 *** Keywords ***
5 5 Підготувати клієнт для користувача
6   - [Arguments] ${username}
  6 + [Arguments] @{ARGUMENTS}
7 7 [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо
8   - ${api_wrapper}= prepare_api_wrapper ${BROKERS['${USERS.users['${username}'].broker}'].api_key}
9   - Set To Dictionary ${USERS.users['${username}']} client ${api_wrapper}
  8 + ${api_wrapper}= prepare_api_wrapper ${BROKERS['${USERS.users['${ARGUMENTS[0]}'].broker}'].api_key}
  9 + Set To Dictionary ${USERS.users['${ARGUMENTS[0]}']} client ${api_wrapper}
10 10 Log Variables
11 11
12 12 Створити тендер
13   - [Arguments] ${username}
  13 + [Arguments] @{ARGUMENTS}
14 14 ${INITIAL_TENDER_DATA}= prepare_test_tender_data
15 15 Log object data ${INITIAL_TENDER_DATA}
16   - ${TENDER_DATA}= Call Method ${USERS.users['${username}'].client} create_tender ${INITIAL_TENDER_DATA}
  16 + ${TENDER_DATA}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} create_tender ${INITIAL_TENDER_DATA}
17 17 Log object data ${TENDER_DATA} cteated_tender
18 18 ${access_token}= Get Variable Value ${TENDER_DATA.access.token}
19   - Set To Dictionary ${USERS.users['${username}']} access_token ${access_token}
  19 + Set Global Variable ${access_token}
  20 + Set To Dictionary ${USERS.users['${ARGUMENTS[0]}']} access_token ${access_token}
20 21 Log access_token: ${access_token}
21 22 Log tender_id: ${TENDER_DATA.data.id}
22   - Log Variables
23 23 Set Global Variable ${TENDER_DATA}
  24 + [return] ${TENDER_DATA}
  25 +
  26 +Пошук тендера по ідентифікатору
  27 + [Arguments] @{ARGUMENTS}
  28 + [Documentation]
  29 + ... ${ARGUMENTS[0]} == username
  30 + ... ${ARGUMENTS[1]} == tenderId
  31 + ... ${ARGUMENTS[2]} == id
  32 + ${tender_data}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${ARGUMENTS[2]}
  33 + Set To Dictionary ${USERS.users['${ARGUMENTS[0]}']} tender_data ${tender_data}
  34 + [return] ${tender_data}
  35 +
  36 +
  37 +отримати інформацію із тендера
  38 + [Arguments] @{ARGUMENTS}
  39 + [Documentation]
  40 + ... ${ARGUMENTS[0]} == username
  41 + ... ${ARGUMENTS[1]} == fieldname
  42 + [return] ${USERS.users['${ARGUMENTS[0]}'].tender_data.data.${ARGUMENTS[1]}}
  43 +
  44 +
  45 +
  46 +отримати інформацію про description для предмету закупівлі в однопредметному тендері
  47 + [Arguments] @{ARGUMENTS}
  48 + [Documentation]
  49 + ... ${ARGUMENTS[0]} == username
  50 + [return] ${USERS.users['${ARGUMENTS[0]}'].tender_data.data['items'][0].description}
  51 +
  52 +отримати інформацію про quantity для предмету закупівлі в однопредметному тендері
  53 + [Arguments] @{ARGUMENTS}
  54 + [Documentation]
  55 + ... ${ARGUMENTS[0]} == username
  56 + [return] ${USERS.users['${ARGUMENTS[0]}'].tender_data.data['items'][0].quantity}
  57 +
  58 +
  59 +отримати інформацію про classification.id для предмету закупівлі в однопредметному тендері
  60 + [Arguments] @{ARGUMENTS}
  61 + [Documentation]
  62 + ... ${ARGUMENTS[0]} == username
  63 + [return] ${USERS.users['${ARGUMENTS[0]}'].tender_data.data['items'][0].classification.id}
  64 +
  65 +
  66 +отримати інформацію про classification.description для предмету закупівлі в однопредметному тендері
  67 + [Arguments] @{ARGUMENTS}
  68 + [Documentation]
  69 + ... ${ARGUMENTS[0]} == username
  70 + [return] ${USERS.users['${ARGUMENTS[0]}'].tender_data.data['items'][0].classification.description}
  71 +
  72 +
  73 +отримати інформацію про deliveryAddress для предмету закупівлі в однопредметному тендері
  74 + [Arguments] @{ARGUMENTS}
  75 + [Documentation]
  76 + ... ${ARGUMENTS[0]} == username
  77 + [return] ${USERS.users['${ARGUMENTS[0]}'].tender_data.data['items'][0].deliveryAddress}
  78 +
  79 +отримати інформацію про deliveryDate для предмету закупівлі в однопредметному тендері
  80 + [Arguments] @{ARGUMENTS}
  81 + [Documentation]
  82 + ... ${ARGUMENTS[0]} == username
  83 + [return] ${USERS.users['${ARGUMENTS[0]}'].tender_data.data['items'][0].deliveryDate}
  84 +
  85 +Внести зміни в тендер
  86 + [Arguments] @{ARGUMENTS}
  87 + [Documentation]
  88 + ... ${ARGUMENTS[0]} == username
  89 + ... ${ARGUMENTS[1]} == id
  90 + ... ${ARGUMENTS[2]} == fieldname
  91 + ... ${ARGUMENTS[3]} == fieldvalue
  92 + отримати тендер ${ARGUMENTS[0]} ${ARGUMENTS[1]}
  93 + Set_To_Object ${TENDER_DATA.data} ${ARGUMENTS[2]} ${ARGUMENTS[3]}
  94 +
  95 + ${TENDER_DATA}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_tender ${TENDER_DATA}
  96 + ${TENDER_DATA}= set_access_key ${TENDER_DATA} ${USERS.users['${ARGUMENTS[0]}'].access_token}
  97 + Set Global Variable ${TENDER_DATA}
  98 +
  99 +отримати тендер
  100 + [Arguments] @{ARGUMENTS}
  101 + [Documentation]
  102 + ... ${ARGUMENTS[0]} == username
  103 + ... ${ARGUMENTS[1]} == id
  104 + ${TENDER_DATA}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${ARGUMENTS[1]}
  105 + Log object data ${TENDER_DATA}
  106 + ${TENDER_DATA}= set_access_key ${TENDER_DATA} ${USERS.users['${ARGUMENTS[0]}'].access_token}
  107 + Set Global Variable ${TENDER_DATA}
  108 +
  109 +
24 110
25   -Звірити інформацію про тендер
26   - [Arguments] ${username}
27   - ${tender}= Call Method ${USERS.users['${username}'].client} get_tender ${TENDER_DATA.data.id}
28   - Log object data ${tender}
29   - :FOR ${field} IN @{important_fields}
30   - \ Page Should Contain ${TENDER_DATA.data.${field}}
31   - \ Log Учасник ${username} звірив поле "${field}" warn
\ No newline at end of file
  111 +Задати питання
  112 + [Documentation]
  113 + ... ${ARGUMENTS[0]} == username
  114 + ... ${ARGUMENTS[1]} == tender_uid
  115 + ... ${ARGUMENTS[2]} == question
  116 + [Arguments] @{ARGUMENTS}
  117 + ${tender}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} get_tender ${ARGUMENTS[1]}
  118 + ${question}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} create_question ${tender} ${ARGUMENTS[2]}
  119 + Log object data ${question} question
\ No newline at end of file
... ...
1 1 E-tender:
2   - broker_api: etender
  2 + keywords_file: etender
3 3 url: http://services.e-tender.biz:100
  4 + timout_on_wait: 15
4 5 Quinta:
5 6 api_key: e9c3ccb8e8124f26941d5f9639a4ebc3
6   - broker_api: openprocurement_client
  7 + keywords_file: openprocurement_client
  8 + timout_on_wait: 0
... ...
1   -tender_owner: Taras
  1 +tender_owner: Tender Owner
2 2 users:
3   - Taras:
  3 + Tender Owner:
4 4 broker: Quinta
5   - Andew:
  5 + E-tender User:
6 6 broker: E-tender
7 7 username: test
8 8 browser: chrome
9   - position: [1060, 0]
10   - size: [860, 1000]
11   - Andew1:
  9 + position: [960, 0]
  10 + size: [960, 1000]
  11 + Andrew:
12 12 broker: Quinta
\ No newline at end of file
... ...
... ... @@ -46,6 +46,20 @@ test_tender_data = {
46 46 "items": [
47 47 {
48 48 "description": fake.catch_phrase(),
  49 + "deliveryDate": {
  50 + "endDate": (now + timedelta(days=5)).isoformat()
  51 + },
  52 + "deliveryLocation": {
  53 + "latitude": "49.8500° N",
  54 + "longitude": "24.0167° E"
  55 + },
  56 + "deliveryAddress": {
  57 + "countryName": u"Україна",
  58 + "postalCode": fake.postalcode(),
  59 + "region": u"м. Київ",
  60 + "locality": u"м. Київ",
  61 + "streetAddress": fake.street_address()
  62 + },
49 63 "classification": {
50 64 "scheme": u"CPV",
51 65 "id": u"44617100-9",
... ...
1   -*** Setting ***
2   -Library op_robot_tests.tests_files.ApiCommands
3   -Library String
4   -LIbrary Collections
5   -LIbrary Selenium2Library
6   -Library DebugLibrary
7   -
8   -
9   -*** Keywords ***
10   -Init auction data
11   - ${auction_data}= load_initial_data_from auction_data.yaml
12   - Set Global Variable ${auction_data}
13   -
14   -Create api wrapper
15   - Init auction data
16   - ${API}= prepare_api ${api_key}
17   - Set Global Variable ${API}
18   - LOG ${API}
19   - Log Variables
20   -
21   -Set access key on tender
22   - ${tender}= set_access_key ${tender} ${access_token}
23   - Set Global Variable ${tender}
24   -
25   -Create tender
26   - ${init_tender_data}= prepare_test_tender_data
27   - Log object data ${init_tender_data}
28   - ${tender}= Call Method ${API} create_tender ${init_tender_data}
29   - Log object data ${tender} tender_creater
30   - ${access_token}= Get Variable Value ${tender.access.token}
31   - Set Global Variable ${access_token}
32   - ${tender_id}= Get Variable Value ${tender.data.id}
33   - Set Global Variable ${tender_id}
34   - Log access_key: ${access_token}
35   - Log tender_id: ${tender_id}
36   - Log Variables
37   - Set Global Variable ${tender}
38   - [return] ${tender}
39   -
40   -Change tender title
41   - ${new_tender_sufix}= Generate Random String 3 [NUMBERS]
42   - ${new_tender_title}= Set Variable 1-QUINTA-KT-${new_tender_sufix}
43   - Log new title: ${new_tender_title}
44   - Log object data ${tender}
45   - ${tender.data.title}= Set Variable ${new_tender_title}
46   - ${tender.data.title_en}= Set Variable ${new_tender_title}
47   - ${tender.data.title_ru}= Set Variable ${new_tender_title}
48   - Log object data ${tender}
49   - ${tender}= Call Method ${API} patch_tender ${tender}
50   - Set Global Variable ${tender}
51   - Log object data ${tender} tender_changed_titles
52   - Set access key on tender
53   -
54   -Change tender periods
55   - Log object data ${tender}
56   - ${tender}= set_tender_periods ${tender}
57   - Log object data ${tender}
58   - ${tender}= Call Method ${API} patch_tender ${tender}
59   - Set Global Variable ${tender}
60   - Log object data ${tender} tender_changed_periods
61   - Set access key on tender
62   -
63   -Upload tender documentation
64   - ${file}= upload tender document ${API} ${tender}
65   - patch tender document ${API} ${tender} ${file.data.id}
66   -
67   -Create question
68   - ${question}= test question data
69   - Log object data ${question}
70   - ${question}= Call Method ${API} create_question ${tender} ${question}
71   - Log object data ${question} question_created
72   - [return] ${question}
73   -
74   -
75   -Write answer on first question
76   - ${questions}= Call Method ${API} get_questions ${tender}
77   - Log object data ${questions}
78   - ${question}= Set Variable ${questions.data[0]}
79   - Log object data ${question}
80   -
81   - ${question}= Call Method ${API} get_question ${tender} ${questions.data[0].id}
82   - Log object data ${question}
83   - ${question}= set_access_key ${question} ${access_token}
84   - Log object data ${question}
85   -
86   - ${answer}= test_question_answer_data
87   - Log object data ${answer}
88   - ${question.data.answer}= Set Variable ${answer['data']['answer']}
89   - Log object data ${question}
90   - ${question}= Call Method ${API} patch_question ${tender} ${question}
91   - Log object data ${question}
92   - [return] ${question}
93   -
94   -Review tender
95   - ${tender}= Call Method ${API} get_tender ${tender_id}
96   - Set Global Variable ${tender}
97   - Log object data ${tender}
98   - Set access key on tender
99   -
100   -Wait to tender period with name ${period_name}
101   - log ${tender.data.${period_name}.startDate}
102   - ${wait_seconds}= calculate wait to date ${tender.data.${period_name}.startDate}
103   - Sleep ${wait_seconds} Wait on ${period_name}
104   - Review tender
105   -
106   -Wait to start of auction's worker
107   - Sleep 4 minutes
108   -
109   -Submit bids
110   - Review tender
111   - Log object data ${tender} tender_before_submit_bids
112   - ${bids_items}= Get Dictionary Items ${auction_data.bidders}
113   - :FOR ${bidder_key} ${bidder_data} IN @{bids_items}
114   - \ ${bid}= test bid data
115   - \ Log object data ${bid}
116   - \ ${temp_amount}= Get Variable Value ${auction_data.bidders.${bidder_key}.start_bid}
117   - \ Log ${temp_amount}
118   - \ ${bid.data.value.amount}= Get Variable Value ${temp_amount}
119   - \ ${bids_data}= Submit in tender bid with data ${bid}
120   - \ Set To Dictionary ${auction_data.bidders.${bidder_key}} tender_bid_data ${bids_data}
121   - Log object data ${auction_data} auction_data_after_submit_bids
122   - Set Global Variable ${auction_data}
123   -
124   -
125   -
126   -Submit in tender bid with data
127   - [Arguments] ${bid}
128   - ${bid_data}= Call Method ${API} create_bid ${tender} ${bid}
129   - Log object data ${bid_data}
130   - [return] ${bid_data}
131   -
132   -
133   -Get particular urls for bids
134   - ${bids_items}= Get Dictionary Items ${auction_data.bidders}
135   - :FOR ${bidder_key} ${bidder_data} IN @{bids_items}
136   - \ ${approved_bid}= Call Method ${API} get_bid ${tender} ${bidder_data.tender_bid_data.data.id} ${bidder_data.tender_bid_data.access.token}
137   - \ Log object data ${approved_bid}
138   - \ Log ${approved_bid.data.participationUrl}
139   - \ Set To Dictionary ${auction_data.bidders.${bidder_key}} start_url ${approved_bid.data.participationUrl}
140   - Log object data ${auction_data} auction_data_after_get_particular_urls
141   - Set Global Variable ${auction_data}
142   -
143   -
144   -Get auction url for observer
145   - Review tender
146   - Set To Dictionary ${auction_data.observer} start_url ${tender.data.auctionUrl}
147   - Log object data ${auction_data} auction_data_after_add_auction_url
148   - Set Global Variable ${auction_data}
149   -
150   -
151   -Wait to end of auction
152   - Sleep 1 minutes Wait to end of auction
153   -
154   -
155   -Activate award
156   - Review tender
157   - Log object data ${tender} tender_after_add_auction
158   - ${awards}= Call Method ${API} get_awards ${tender}
159   - Log object data ${awards} initial_get_awards_response json
160   - ${award_approve}= create_approve_award_request_data ${awards.data[0].id}
161   - Log object data ${award_approve} active_award_request json
162   - ${approved_award}= Call Method ${API} patch_award ${tender} ${award_approve}
163   - Log object data ${approved_award} activeted_award_response json
164   - ${award_canceled}= create_approve_award_request_data ${awards.data[0].id}
165   - Set To Dictionary ${award_canceled.data} status cancelled
166   - Log object data ${award_canceled} cancel_award_request json
167   - ${canceled_award}= Call Method ${API} patch_award ${tender} ${award_canceled}
168   - Log object data ${canceled_award} cancel_award_response json
169   - ${awards}= Call Method ${API} get_awards ${tender}
170   - Log object data ${awards} awards_after_cancel_one json
171   - ${unsuccessful_award_request}= create_approve_award_request_data ${awards.data[1].id}
172   - Set To Dictionary ${unsuccessful_award_request.data} status unsuccessful
173   - Log object data ${unsuccessful_award_request} unsuccessful_award_request json
174   - ${unsuccessful_award_response}= Call Method ${API} patch_award ${tender} ${unsuccessful_award_request}
175   - Log object data ${unsuccessful_award_response} unsuccessful_award_response json
176   - ${award_canceled}= create_approve_award_request_data ${awards.data[0].id}
177   - ${awards}= Call Method ${API} get_awards ${tender}
178   - Log object data ${awards} awards_after_unsuccessful_one json
179   - ${next_award_activate_request}= create_approve_award_request_data ${awards.data[2].id}
180   - Set To Dictionary ${next_award_activate_request.data} status active
181   - Log object data ${next_award_activate_request} next_award_activate_request json
182   - ${next_award_activate_response}= Call Method ${API} patch_award ${tender} ${next_award_activate_request}
183   - Log object data ${next_award_activate_response} next_award_activate_response json
184   -
185   -Game process begin
186   - Open Browser To bidder0 Login Page
187   - Open Browser To bidder1 Login Page
188   - Open Browser as observer
189   - Auction is on round 1
190   - bidder1 leaves bid 40000
191   - Capture Page Screenshot
192   - bidder0 leaves bid 39000
193   - Capture Page Screenshot
194   - Auction is finished
195   - Capture Page Screenshot
196   -
197   -Open Browser To ${bidder} Login Page
198   - Open Browser ${auction_data.bidders.${bidder}.start_url} ${auction_data.bidders.${bidder}.browser} ${bidder}
199   - Maximize Browser Window
200   - Oauth Confirm Page Should Be Open
201   - ${bidder} agree with rules
202   - Sleep 2
203   - Capture Page Screenshot
204   -
205   -
206   -Open Browser as observer
207   - Open Browser ${auction_data.observer.start_url} ${auction_data.observer.browser} observer
208   - Maximize Browser Window
209   - Capture Page Screenshot
210   -
211   -Oauth Confirm Page Should Be Open
212   - Title Should Be Authorization
213   - Capture Page Screenshot
214   -
215   -${bidder} agree with rules
216   - Click Element css=.btn.btn-success
217   - Wait Until Page Contains ${tender.data.tenderID} 20
218   - Capture Page Screenshot
219   -
220   -
221   -submit bid ${amount} on auction
222   - Wait Until Page Contains до закінчення вашої черги 600
223   - Input Text xpath = //input[@id="bid-amount-input"] ${amount}
224   - Click Button xpath = //button[@id="place-bid-button"]
225   - Wait Until Page Contains Заявку прийнято 10
226   - Page Should Not Contain Надто висока заявка
227   -
228   -${bidder} leaves bid ${amount}
229   - Switch Browser ${bidder}
230   - submit bid ${amount} on auction
231   -
232   -
233   -Auction is finished
234   - Wait Until Page Contains Аукціон завершився 700
235   - ${value} = Get Text xpath= //p[@class="round-number ng-scope"]
236   - Should Be Equal ${value} Завершено
237   - Capture Page Screenshot
238   -
239   -Auction is on round ${value3}
240   - Wait Until Page Contains до закінчення раунду 1200
241   - ${round} = Get Text xpath = //p[@class="round-label ng-scope"]
242   - ${number} = Get Text xpath = //p[@class="round-number ng-binding"]
243   - Should Be Equal ${round} Раунд
244   - Should Be Equal ${number} ${value3}
245   - Capture Page Screenshot
\ No newline at end of file
1   -*** Variables ***
2   -${api_key} e9c3ccb8e8124f26941d5f9639a4ebc3
... ... @@ -5,8 +5,10 @@ from json import load
5 5 from robot.output import LOGGER
6 6 from robot.output.loggerhelper import Message
7 7 from robot.libraries.BuiltIn import BuiltIn
8   -
9   -
  8 +from robot.errors import HandlerExecutionFailed
  9 +from datetime import datetime, timedelta
  10 +from dpath.util import set as xpathset
  11 +from jsonpath_rw import parse
10 12 from .initial_data import (
11 13 test_tender_data, test_question_data, test_question_answer_data,
12 14 test_bid_data
... ... @@ -40,3 +42,54 @@ def load_initial_data_from(file_name):
40 42
41 43 def prepare_test_tender_data():
42 44 return munchify({'data': test_tender_data})
  45 +
  46 +
  47 +def run_keyword_and_ignore_keyword_definations(name, *args):
  48 + """Runs the given keyword with given arguments and returns the status as a Boolean value.
  49 +
  50 + This keyword returns `True` if the keyword that is executed succeeds and
  51 + `False` if it fails. This is useful, for example, in combination with
  52 + `Run Keyword If`. If you are interested in the error message or return
  53 + value, use `Run Keyword And Ignore Error` instead.
  54 +
  55 + The keyword name and arguments work as in `Run Keyword`.
  56 +
  57 + Example:
  58 + | ${passed} = | `Run Keyword And Return Status` | Keyword | args |
  59 + | `Run Keyword If` | ${passed} | Another keyword |
  60 +
  61 + New in Robot Framework 2.7.6.
  62 + """
  63 + try:
  64 + status, _ = BuiltIn().run_keyword_and_ignore_error(name, *args)
  65 + except HandlerExecutionFailed, e:
  66 + LOGGER.log_message(Message("Keyword {} not implemented", "ERROR"))
  67 + return "FAIL", ""
  68 + return status, _
  69 +
  70 +
  71 +def set_tender_periods(tender):
  72 + now = datetime.now()
  73 + tender.data.enquiryPeriod.endDate = (now + timedelta(minutes=2)).isoformat()
  74 + tender.data.tenderPeriod.startDate = (now + timedelta(minutes=2)).isoformat()
  75 + tender.data.tenderPeriod.endDate = (now + timedelta(minutes=4)).isoformat()
  76 + return tender
  77 +
  78 +
  79 +def set_access_key(tender, access_token):
  80 + tender.access = munchify({"token": access_token})
  81 + return tender
  82 +
  83 +
  84 +def set_to_object(obj, attribute, value):
  85 + xpathset(obj, attribute.replace('.', '/'), value)
  86 + return obj
  87 +
  88 +
  89 +def get_from_object(obj, attribute):
  90 + """Gets data from a dictionary using a dotted accessor-string"""
  91 + jsonpath_expr = parse(attribute)
  92 + return_list = [i.value for i in jsonpath_expr.find(obj)]
  93 + if return_list:
  94 + return return_list[0]
  95 + return None
... ...
... ... @@ -27,7 +27,9 @@ setup(name='op_robot_tests',
27 27 'iso8601',
28 28 'PyYAML',
29 29 'munch',
30   - 'fake-factory'
  30 + 'fake-factory',
  31 + 'dpath',
  32 + 'jsonpath-rw'
31 33 ],
32 34 entry_points={
33 35 'console_scripts': [
... ...
Please register or login to post a comment