Commit 5c6d0b9734f9df00c72b5fb61aa9cc5e75d008cb

Authored by Myroslav Opyr
2 parents 360b3b2c 086de0f2

Merge pull request #37 from selurvedu/periods_and_tender_data

Period intervals; initial tender data
@@ -9,11 +9,6 @@ parts = @@ -9,11 +9,6 @@ parts =
9 mkdirs 9 mkdirs
10 scripts 10 scripts
11 11
12 -[mkdirs]  
13 -recipe = z3c.recipe.mkdir  
14 -paths =  
15 - ${buildout:directory}/var/log  
16 -  
17 [scripts] 12 [scripts]
18 recipe = zc.recipe.egg 13 recipe = zc.recipe.egg
19 eggs = 14 eggs =
1 -*** Setting *** 1 +*** Settings ***
2 Library Selenium2Screenshots 2 Library Selenium2Screenshots
3 Library String 3 Library String
4 Library DateTime 4 Library DateTime
  5 +Library etender_service.py
5 6
6 *** Variables *** 7 *** Variables ***
7 ${locator.tenderId} jquery=h3 8 ${locator.tenderId} jquery=h3
@@ -44,7 +45,7 @@ ${locator.questions[0].answer} xpath=(//div[@tex @@ -44,7 +45,7 @@ ${locator.questions[0].answer} xpath=(//div[@tex
44 45
45 Підготувати клієнт для користувача 46 Підготувати клієнт для користувача
46 [Arguments] @{ARGUMENTS} 47 [Arguments] @{ARGUMENTS}
47 - [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо 48 + [Documentation] Відкрити браузер, створити об’єкт api wrapper, тощо
48 ... ${ARGUMENTS[0]} == username 49 ... ${ARGUMENTS[0]} == username
49 Open Browser ${USERS.users['${ARGUMENTS[0]}'].homepage} ${USERS.users['${username}'].browser} alias=${ARGUMENTS[0]} 50 Open Browser ${USERS.users['${ARGUMENTS[0]}'].homepage} ${USERS.users['${username}'].browser} alias=${ARGUMENTS[0]}
50 Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size} 51 Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size}
@@ -63,8 +64,8 @@ Login @@ -63,8 +64,8 @@ Login
63 [Documentation] 64 [Documentation]
64 ... ${ARGUMENTS[0]} == username 65 ... ${ARGUMENTS[0]} == username
65 ... ${ARGUMENTS[1]} == tender_data 66 ... ${ARGUMENTS[1]} == tender_data
66 - ${INITIAL_TENDER_DATA}= procuringEntity_name ${INITIAL_TENDER_DATA}  
67 - ${tender_data}= Add_data_for_GUI_FrontEnds ${ARGUMENTS[1]} 67 + ${tender_data}= Add_data_for_GUI_FrontEnds ${ARGUMENTS[1]}
  68 + ${tender_data}= procuring_entity_name ${tender_data}
68 ${items}= Get From Dictionary ${tender_data.data} items 69 ${items}= Get From Dictionary ${tender_data.data} items
69 ${title}= Get From Dictionary ${tender_data.data} title 70 ${title}= Get From Dictionary ${tender_data.data} title
70 ${description}= Get From Dictionary ${tender_data.data} description 71 ${description}= Get From Dictionary ${tender_data.data} description
@@ -201,8 +202,7 @@ Set Multi Ids @@ -201,8 +202,7 @@ Set Multi Ids
201 ... ${ARGUMENTS[0]} == username 202 ... ${ARGUMENTS[0]} == username
202 ... ${ARGUMENTS[1]} == ${TENDER_UAID} 203 ... ${ARGUMENTS[1]} == ${TENDER_UAID}
203 Switch browser ${ARGUMENTS[0]} 204 Switch browser ${ARGUMENTS[0]}
204 - ${url}= Get Broker Property By Username ${ARGUMENTS[0]} url  
205 - Go To ${url} 205 + Go To ${USERS.users['${ARGUMENTS[0]}'].homepage}
206 Wait Until Page Contains Прозорі закупівлі 10 206 Wait Until Page Contains Прозорі закупівлі 10
207 sleep 1 207 sleep 1
208 Input Text jquery=input[ng-change='searchChange()'] ${ARGUMENTS[1]} 208 Input Text jquery=input[ng-change='searchChange()'] ${ARGUMENTS[1]}
  1 +from iso8601 import parse_date
  2 +
  3 +
  4 +def convert_date_to_etender_format(isodate):
  5 + iso_dt = parse_date(isodate)
  6 + date_string = iso_dt.strftime("%d-%m-%Y")
  7 + return date_string
  8 +
  9 +
  10 +def convert_datetime_for_delivery(isodate):
  11 + iso_dt = parse_date(isodate)
  12 + date_string = iso_dt.strftime("%Y-%m-%d %H:%M")
  13 + return date_string
  14 +
  15 +
  16 +def convert_time_to_etender_format(isodate):
  17 + iso_dt = parse_date(isodate)
  18 + time_string = iso_dt.strftime("%H:%M")
  19 + return time_string
  20 +
  21 +
  22 +def procuring_entity_name(tender_data):
  23 + tender_data.data.procuringEntity['name'] = u"Повна назва невідомо чого"
  24 + return tender_data
1 -*** Setting *** 1 +*** Settings ***
2 Library Selenium2Screenshots 2 Library Selenium2Screenshots
3 Library String 3 Library String
4 Library DateTime 4 Library DateTime
  5 +Library netcast_service.py
5 6
6 *** Variables *** 7 *** Variables ***
7 ${locator.tenderId} xpath=//td[./text()='TenderID']/following-sibling::td[1] 8 ${locator.tenderId} xpath=//td[./text()='TenderID']/following-sibling::td[1]
@@ -29,10 +30,12 @@ ${locator.questions[0].answer} xpath=//div[@class = 'answer relative']//di @@ -29,10 +30,12 @@ ${locator.questions[0].answer} xpath=//div[@class = 'answer relative']//di
29 *** Keywords *** 30 *** Keywords ***
30 Підготувати клієнт для користувача 31 Підготувати клієнт для користувача
31 [Arguments] @{ARGUMENTS} 32 [Arguments] @{ARGUMENTS}
32 - [Documentation] Відкрити брaузер, створити обєкт api wrapper, тощо 33 + [Documentation] Відкрити браузер, створити об’єкт api wrapper, тощо
33 ... ${ARGUMENTS[0]} == username 34 ... ${ARGUMENTS[0]} == username
34 - ${url}= Get Broker Property By Username ${ARGUMENTS[0]} url  
35 - Open Browser ${url} ${USERS.users['${ARGUMENTS[0]}'].browser} alias=${ARGUMENTS[0]} 35 + Open Browser
  36 + ... ${USERS.users['${ARGUMENTS[0]}'].homepage}
  37 + ... ${USERS.users['${ARGUMENTS[0]}'].browser}
  38 + ... alias=${ARGUMENTS[0]}
36 Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size} 39 Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size}
37 Set Window Position @{USERS.users['${ARGUMENTS[0]}'].position} 40 Set Window Position @{USERS.users['${ARGUMENTS[0]}'].position}
38 Run Keyword And Ignore Error Pre Login ${ARGUMENTS[0]} 41 Run Keyword And Ignore Error Pre Login ${ARGUMENTS[0]}
@@ -53,7 +56,7 @@ Login @@ -53,7 +56,7 @@ Login
53 Pre Login 56 Pre Login
54 [Arguments] @{ARGUMENTS} 57 [Arguments] @{ARGUMENTS}
55 [Documentation] 58 [Documentation]
56 - ... ${ARGUMENTS[0]} == username 59 + ... ${ARGUMENTS[0]} == username
57 ${login}= Get Broker Property By Username ${ARGUMENTS[0]} login 60 ${login}= Get Broker Property By Username ${ARGUMENTS[0]} login
58 ${password}= Get Broker Property By Username ${ARGUMENTS[0]} password 61 ${password}= Get Broker Property By Username ${ARGUMENTS[0]} password
59 Wait Until Page Contains Element name=siteLogin 10 62 Wait Until Page Contains Element name=siteLogin 10
@@ -233,8 +236,7 @@ Set Multi Ids @@ -233,8 +236,7 @@ Set Multi Ids
233 ... ${ARGUMENTS[0]} == username 236 ... ${ARGUMENTS[0]} == username
234 ... ${ARGUMENTS[1]} == tenderId 237 ... ${ARGUMENTS[1]} == tenderId
235 Switch browser ${ARGUMENTS[0]} 238 Switch browser ${ARGUMENTS[0]}
236 - ${url}= Get Broker Property By Username ${ARGUMENTS[0]} url  
237 - Go To ${url} 239 + Go To ${USERS.users['${ARGUMENTS[0]}'].homepage}
238 Wait Until Page Contains Держзакупівлі.онлайн 10 240 Wait Until Page Contains Держзакупівлі.онлайн 10
239 Click Element xpath=//a[text()='Закупівлі'] 241 Click Element xpath=//a[text()='Закупівлі']
240 sleep 1 242 sleep 1
  1 +from datetime import datetime, timedelta
  2 +
  3 +
  4 +def subtract_from_time(date_time, subtr_min, subtr_sec):
  5 + sub = datetime.strptime(date_time, "%d.%m.%Y %H:%M")
  6 + sub = (sub - timedelta(minutes=int(subtr_min),
  7 + seconds=int(subtr_sec))).isoformat()
  8 + return sub
1 -*** Setting *** 1 +*** Settings ***
2 Library Selenium2Screenshots 2 Library Selenium2Screenshots
3 Library String 3 Library String
4 Library DateTime 4 Library DateTime
  5 +Library newtend_service.py
5 6
6 *** Variables *** 7 *** Variables ***
7 ${locator.title} xpath=//div[@ng-bind="tender.title"] 8 ${locator.title} xpath=//div[@ng-bind="tender.title"]
@@ -40,10 +41,12 @@ ${locator.QUESTIONS[0].date} xpath=//span[@class="date ng-binding"] @@ -40,10 +41,12 @@ ${locator.QUESTIONS[0].date} xpath=//span[@class="date ng-binding"]
40 41
41 Підготувати клієнт для користувача 42 Підготувати клієнт для користувача
42 [Arguments] @{ARGUMENTS} 43 [Arguments] @{ARGUMENTS}
43 - [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо 44 + [Documentation] Відкрити браузер, створити об’єкт api wrapper, тощо
44 ... ${ARGUMENTS[0]} == username 45 ... ${ARGUMENTS[0]} == username
45 - ${url}= Get Broker Property By Username ${ARGUMENTS[0]} url  
46 - Open Browser ${url} ${USERS.users['${username}'].browser} alias=${ARGUMENTS[0]} 46 + Open Browser
  47 + ... ${USERS.users['${ARGUMENTS[0]}'].homepage}
  48 + ... ${USERS.users['${ARGUMENTS[0]}'].browser}
  49 + ... alias=${ARGUMENTS[0]}
47 Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size} 50 Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size}
48 Set Window Position @{USERS.users['${ARGUMENTS[0]}'].position} 51 Set Window Position @{USERS.users['${ARGUMENTS[0]}'].position}
49 Run Keyword If '${username}' != 'Newtend_Viewer' Login 52 Run Keyword If '${username}' != 'Newtend_Viewer' Login
@@ -63,20 +66,19 @@ Login @@ -63,20 +66,19 @@ Login
63 [Arguments] @{ARGUMENTS} 66 [Arguments] @{ARGUMENTS}
64 [Documentation] 67 [Documentation]
65 ... ${ARGUMENTS[0]} == username 68 ... ${ARGUMENTS[0]} == username
66 - ... ${ARGUMENTS[1]} == initial_tender_data  
67 -## Inicialisation  
68 - #${prepared_tender_data}= Add_data_for_GUI_FrontEnds ${ARGUMENTS[1]}  
69 - ${INITIAL_TENDER_DATA}= Add_data_for_GUI_FrontEnds ${INITIAL_TENDER_DATA}  
70 - ${INITIAL_TENDER_DATA}= Update_data_for_Newtend ${INITIAL_TENDER_DATA}  
71 - ${items}= Get From Dictionary ${INITIAL_TENDER_DATA.data} items  
72 - ${title}= Get From Dictionary ${INITIAL_TENDER_DATA.data} title  
73 - ${description}= Get From Dictionary ${INITIAL_TENDER_DATA.data} description  
74 - ${budget}= Get From Dictionary ${INITIAL_TENDER_DATA.data.value} amount  
75 - ${step_rate}= Get From Dictionary ${INITIAL_TENDER_DATA.data.minimalStep} amount  
76 - ${start_date}= Get From Dictionary ${INITIAL_TENDER_DATA.data.tenderPeriod} startDate  
77 - ${end_date}= Get From Dictionary ${INITIAL_TENDER_DATA.data.tenderPeriod} endDate  
78 - ${enquiry_start_date}= Get From Dictionary ${INITIAL_TENDER_DATA.data.enquiryPeriod} startDate  
79 - ${enquiry_end_date}= Get From Dictionary ${INITIAL_TENDER_DATA.data.enquiryPeriod} endDate 69 + ... ${ARGUMENTS[1]} == tender_data
  70 +## Initialisation
  71 + ${prepared_tender_data}= Add_data_for_GUI_FrontEnds ${ARGUMENTS[1]}
  72 + ${prepared_tender_data}= Update_data_for_Newtend ${prepared_tender_data}
  73 + ${items}= Get From Dictionary ${prepared_tender_data.data} items
  74 + ${title}= Get From Dictionary ${prepared_tender_data.data} title
  75 + ${description}= Get From Dictionary ${prepared_tender_data.data} description
  76 + ${budget}= Get From Dictionary ${prepared_tender_data.data.value} amount
  77 + ${step_rate}= Get From Dictionary ${prepared_tender_data.data.minimalStep} amount
  78 + ${start_date}= Get From Dictionary ${prepared_tender_data.data.tenderPeriod} startDate
  79 + ${end_date}= Get From Dictionary ${prepared_tender_data.data.tenderPeriod} endDate
  80 + ${enquiry_start_date}= Get From Dictionary ${prepared_tender_data.data.enquiryPeriod} startDate
  81 + ${enquiry_end_date}= Get From Dictionary ${prepared_tender_data.data.enquiryPeriod} endDate
80 82
81 Selenium2Library.Switch Browser ${ARGUMENTS[0]} 83 Selenium2Library.Switch Browser ${ARGUMENTS[0]}
82 Go To ${USERS.users['${username}'].homepage} 84 Go To ${USERS.users['${username}'].homepage}
  1 +from datetime import datetime
  2 +from iso8601 import parse_date
  3 +from calendar import monthrange
  4 +
  5 +
  6 +def newtend_date_picker_index(isodate):
  7 + now = datetime.today()
  8 + date_str = '01' + str(now.month) + str(now.year)
  9 + first_day_of_month = datetime.strptime(date_str, "%d%m%Y")
  10 + mod = first_day_of_month.isoweekday() - 2
  11 + iso_dt = parse_date(isodate)
  12 + # last_day_of_month = monthrange(now.year, now.month)[1]
  13 + # LOGGER.log_message(Message("last_day_of_month: {}".format(last_day_of_month), "INFO"))
  14 + if now.day > iso_dt.day:
  15 + mod = monthrange(now.year, now.month)[1] + mod
  16 + return mod + iso_dt.day
  17 +
  18 +
  19 +def update_data_for_newtend(tender_data):
  20 + tender_data.data.procuringEntity['name'] = u"openprocurement"
  21 + return tender_data
@@ -22,7 +22,7 @@ Library Selenium2Screenshots @@ -22,7 +22,7 @@ Library Selenium2Screenshots
22 22
23 Підготувати клієнт для користувача 23 Підготувати клієнт для користувача
24 [Arguments] @{ARGUMENTS} 24 [Arguments] @{ARGUMENTS}
25 - [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо 25 + [Documentation] Відкрити браузер, створити об’єкт api wrapper, тощо
26 ${api_wrapper}= prepare_api_wrapper ${USERS.users['${ARGUMENTS[0]}'].api_key} ${API_HOST_URL} ${api_version} 26 ${api_wrapper}= prepare_api_wrapper ${USERS.users['${ARGUMENTS[0]}'].api_key} ${API_HOST_URL} ${api_version}
27 Set To Dictionary ${USERS.users['${ARGUMENTS[0]}']} client ${api_wrapper} 27 Set To Dictionary ${USERS.users['${ARGUMENTS[0]}']} client ${api_wrapper}
28 ${ID_MAP}= Create Dictionary 28 ${ID_MAP}= Create Dictionary
@@ -67,9 +67,9 @@ Library Selenium2Screenshots @@ -67,9 +67,9 @@ Library Selenium2Screenshots
67 [Documentation] 67 [Documentation]
68 ... ${ARGUMENTS[0]} == username 68 ... ${ARGUMENTS[0]} == username
69 ... ${ARGUMENTS[1]} == fieldname 69 ... ${ARGUMENTS[1]} == fieldname
70 - log ${ARGUMENTS}  
71 - ${field_value}= Get_From_Object ${USERS.users['${ARGUMENTS[0]}'].tender_data.data} ${ARGUMENTS[1]}  
72 - log ${field_value} 70 + Log Many @{ARGUMENTS}
  71 + ${field_value}= Get_From_Object ${USERS.users['${ARGUMENTS[0]}'].tender_data.data} ${ARGUMENTS[1]}
  72 + Log ${field_value}
73 [return] ${field_value} 73 [return] ${field_value}
74 74
75 Внести зміни в тендер 75 Внести зміни в тендер
@@ -104,11 +104,11 @@ Library Selenium2Screenshots @@ -104,11 +104,11 @@ Library Selenium2Screenshots
104 ... ${ARGUMENTS[2]} == number 104 ... ${ARGUMENTS[2]} == number
105 ${internalid}= Отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]} 105 ${internalid}= Отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
106 Отримати тендер ${ARGUMENTS[0]} ${internalid} 106 Отримати тендер ${ARGUMENTS[0]} ${internalid}
107 - ${items}= get from object ${TENDER_DATA.data} items  
108 - log ${items} 107 + @{items}= Get From Object ${TENDER_DATA.data} items
  108 + Log Many @{items}
109 :FOR ${INDEX} IN RANGE ${ARGUMENTS[2]} 109 :FOR ${INDEX} IN RANGE ${ARGUMENTS[2]}
110 \ Remove From List ${items} 0 110 \ Remove From List ${items} 0
111 - log ${items} 111 + Log Many @{items}
112 Set_To_Object ${TENDER_DATA.data} items ${items} 112 Set_To_Object ${TENDER_DATA.data} items ${items}
113 ${TENDER_DATA}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_tender ${TENDER_DATA} 113 ${TENDER_DATA}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_tender ${TENDER_DATA}
114 ${TENDER_DATA}= set_access_key ${TENDER_DATA} ${USERS.users['${ARGUMENTS[0]}'].access_token} 114 ${TENDER_DATA}= set_access_key ${TENDER_DATA} ${USERS.users['${ARGUMENTS[0]}'].access_token}
@@ -121,12 +121,13 @@ Library Selenium2Screenshots @@ -121,12 +121,13 @@ Library Selenium2Screenshots
121 ... ${ARGUMENTS[2]} == number 121 ... ${ARGUMENTS[2]} == number
122 ${internalid}= Отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]} 122 ${internalid}= Отримати internal id по UAid ${ARGUMENTS[0]} ${ARGUMENTS[1]}
123 Отримати тендер ${ARGUMENTS[0]} ${internalid} 123 Отримати тендер ${ARGUMENTS[0]} ${internalid}
124 - ${items}= get from object ${TENDER_DATA.data} items 124 + @{items}= Get From Object ${TENDER_DATA.data} items
125 ${item}= get variable value ${items[1]} 125 ${item}= get variable value ${items[1]}
126 - log ${items} 126 + Run Keyword And Continue On Failure Remove From Dictionary ${item} id
  127 + Log Many @{items}
127 :FOR ${INDEX} IN RANGE ${ARGUMENTS[2]} 128 :FOR ${INDEX} IN RANGE ${ARGUMENTS[2]}
128 \ Append To List ${items} ${item} 129 \ Append To List ${items} ${item}
129 - log ${items} 130 + Log Many @{items}
130 Set_To_Object ${TENDER_DATA.data} items ${items} 131 Set_To_Object ${TENDER_DATA.data} items ${items}
131 ${TENDER_DATA}= set_access_key ${TENDER_DATA} ${USERS.users['${ARGUMENTS[0]}'].access_token} 132 ${TENDER_DATA}= set_access_key ${TENDER_DATA} ${USERS.users['${ARGUMENTS[0]}'].access_token}
132 ${TENDER_DATA}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_tender ${TENDER_DATA} 133 ${TENDER_DATA}= Call Method ${USERS.users['${ARGUMENTS[0]}'].client} patch_tender ${TENDER_DATA}
1 from openprocurement_client.client import Client 1 from openprocurement_client.client import Client
2 2
3 3
4 -def prepare_api_wrapper(key='',  
5 - host_url='https://api-sandbox.openprocurement.org',  
6 - api_version='0.8'): 4 +def prepare_api_wrapper(key, host_url, api_version):
7 return Client(key, host_url, api_version) 5 return Client(key, host_url, api_version)
8 6
9 7
@@ -20,9 +20,11 @@ ${PASSWORD} 1234 @@ -20,9 +20,11 @@ ${PASSWORD} 1234
20 [Arguments] ${username} 20 [Arguments] ${username}
21 log many @{ARGUMENTS} 21 log many @{ARGUMENTS}
22 log ${username} 22 log ${username}
23 - [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо  
24 - ${url}= Get Broker Property By Username ${ARGUMENTS[0]} url  
25 - Open Browser ${url} ${USERS.users['${username}'].browser} alias=${username} 23 + [Documentation] Відкрити браузер, створити об’єкт api wrapper, тощо
  24 + Open Browser
  25 + ... ${USERS.users['${username}'].homepage}
  26 + ... ${USERS.users['${username}'].browser}
  27 + ... alias=${username}
26 Set Window Position @{USERS.users['${username}'].position} 28 Set Window Position @{USERS.users['${username}'].position}
27 #Set Window Size @{USERS.users['${username}'].size} 29 #Set Window Size @{USERS.users['${username}'].size}
28 Log Variables 30 Log Variables
@@ -46,11 +48,11 @@ Login @@ -46,11 +48,11 @@ Login
46 Login 48 Login
47 49
48 ${start_date}= Get From Dictionary ${ARGUMENTS[1].data.tenderPeriod} startDate 50 ${start_date}= Get From Dictionary ${ARGUMENTS[1].data.tenderPeriod} startDate
49 - ${start_date}= convert_date_to_prom_format ${start_date} 51 + ${start_date}= convert_datetime_to_dot_format ${start_date}
50 ${end_date}= Get From Dictionary ${ARGUMENTS[1].data.tenderPeriod} endDate 52 ${end_date}= Get From Dictionary ${ARGUMENTS[1].data.tenderPeriod} endDate
51 - ${end_date}= convert_date_to_prom_format ${end_date} 53 + ${end_date}= convert_datetime_to_dot_format ${end_date}
52 ${enquiry_end_date}= Get From Dictionary ${ARGUMENTS[1].data.enquiryPeriod} endDate 54 ${enquiry_end_date}= Get From Dictionary ${ARGUMENTS[1].data.enquiryPeriod} endDate
53 - ${enquiry_end_date}= convert_date_to_prom_format ${enquiry_end_date} 55 + ${enquiry_end_date}= convert_datetime_to_dot_format ${enquiry_end_date}
54 56
55 ${items}= Get From Dictionary ${ARGUMENTS[1].data} items 57 ${items}= Get From Dictionary ${ARGUMENTS[1].data} items
56 ${delivery_date}= Get From Dictionary ${items[0].deliveryDate} endDate 58 ${delivery_date}= Get From Dictionary ${items[0].deliveryDate} endDate
@@ -100,9 +102,9 @@ Get tender id @@ -100,9 +102,9 @@ Get tender id
100 ... ${ARGUMENTS[2]} == id 102 ... ${ARGUMENTS[2]} == id
101 Switch browser ${ARGUMENTS[0]} 103 Switch browser ${ARGUMENTS[0]}
102 ${current_location}= Get Location 104 ${current_location}= Get Location
103 - ${url}= Get Broker Property By Username ${ARGUMENTS[0]} url  
104 - Run Keyword If '${url}/#/tenderDetailes/${ARGUMENTS[2]}'=='${current_location}' Reload Page  
105 - Go to ${url} 105 + ${homepage}= Set Variable ${USERS.users['${ARGUMENTS[0]}'].homepage}
  106 + Run Keyword If '${homepage}/#/tenderDetailes/${ARGUMENTS[2]}'=='${current_location}' Reload Page
  107 + Go To ${homepage}
106 Wait Until Page Contains Допороговые закупки Украины 10 108 Wait Until Page Contains Допороговые закупки Украины 10
107 sleep 1 109 sleep 1
108 Input Text id=search ${ARGUMENTS[1]} 110 Input Text id=search ${ARGUMENTS[1]}
@@ -10,7 +10,7 @@ ${telephone} +380976535447 @@ -10,7 +10,7 @@ ${telephone} +380976535447
10 *** Keywords *** 10 *** Keywords ***
11 Підготувати клієнт для користувача 11 Підготувати клієнт для користувача
12 [Arguments] @{ARGUMENTS} 12 [Arguments] @{ARGUMENTS}
13 - [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо 13 + [Documentation] Відкрити браузер, створити об’єкт api wrapper, тощо
14 ... ${ARGUMENTS[0]} == username 14 ... ${ARGUMENTS[0]} == username
15 Open Browser ${USERS.users['${ARGUMENTS[0]}'].homepage} ${USERS.users['${username}'].browser} alias=${ARGUMENTS[0]} 15 Open Browser ${USERS.users['${ARGUMENTS[0]}'].homepage} ${USERS.users['${username}'].browser} alias=${ARGUMENTS[0]}
16 Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size} 16 Set Window Size @{USERS.users['${ARGUMENTS[0]}'].size}
@@ -39,7 +39,7 @@ ${telephone} +380976535447 @@ -39,7 +39,7 @@ ${telephone} +380976535447
39 ${step_rate}= Get From Dictionary ${prepared_tender_data.data.minimalStep} amount 39 ${step_rate}= Get From Dictionary ${prepared_tender_data.data.minimalStep} amount
40 ${countryName}= Get From Dictionary ${prepared_tender_data.data.procuringEntity.address} countryName 40 ${countryName}= Get From Dictionary ${prepared_tender_data.data.procuringEntity.address} countryName
41 ${delivery_end_date}= Get From Dictionary ${items[0].deliveryDate} endDate 41 ${delivery_end_date}= Get From Dictionary ${items[0].deliveryDate} endDate
42 - ${delivery_end_date}= convert_date_to_prom_format ${delivery_end_date} 42 + ${delivery_end_date}= convert_datetime_to_dot_format ${delivery_end_date}
43 ${cpv}= Convert To String "Картонки" 43 ${cpv}= Convert To String "Картонки"
44 ${cpv_id}= Get From Dictionary ${items[0].classification} id 44 ${cpv_id}= Get From Dictionary ${items[0].classification} id
45 ${cpv_id_1}= Get Substring ${cpv_id} 0 3 45 ${cpv_id_1}= Get Substring ${cpv_id} 0 3
@@ -6,9 +6,11 @@ Library DateTime @@ -6,9 +6,11 @@ Library DateTime
6 *** Keywords *** 6 *** Keywords ***
7 Підготувати клієнт для користувача 7 Підготувати клієнт для користувача
8 [Arguments] ${username} 8 [Arguments] ${username}
9 - [Documentation] Відкрити брaвзер, створити обєкт api wrapper, тощо  
10 - ${url}= Get Broker Property By Username ${username} url  
11 - Open Browser ${url} ${USERS.users['${username}'].browser} alias=${username} 9 + [Documentation] Відкрити браузер, створити об’єкт api wrapper, тощо
  10 + Open Browser
  11 + ... ${USERS.users['${username}'].homepage}
  12 + ... ${USERS.users['${username}'].browser}
  13 + ... alias=${username}
12 Set Window Position @{USERS.users['${username}'].position} 14 Set Window Position @{USERS.users['${username}'].position}
13 Set Window Size @{USERS.users['${username}'].size} 15 Set Window Size @{USERS.users['${username}'].size}
14 Log Variables 16 Log Variables
@@ -21,9 +23,9 @@ Library DateTime @@ -21,9 +23,9 @@ Library DateTime
21 ... ${ARGUMENTS[2]} == id 23 ... ${ARGUMENTS[2]} == id
22 Switch browser ${ARGUMENTS[0]} 24 Switch browser ${ARGUMENTS[0]}
23 ${current_location}= Get Location 25 ${current_location}= Get Location
24 - ${url}= Get Broker Property By Username ${ARGUMENTS[0]} url  
25 - Run Keyword If '${url}/#/tenderDetailes/${ARGUMENTS[2]}'=='${current_location}' Reload Page  
26 - Go To ${url} 26 + ${homepage}= Set Variable ${USERS.users['${ARGUMENTS[0]}'].homepage}
  27 + Run Keyword If '${homepage}/#/tenderDetailes/${ARGUMENTS[2]}'=='${current_location}' Reload Page
  28 + Go To ${homepage}
27 Wait Until Page Contains Офіційний майданчик державних закупівель України 10 29 Wait Until Page Contains Офіційний майданчик державних закупівель України 10
28 sleep 1 30 sleep 1
29 Input Text id=j_idt18:datalist:j_idt67 ${ARGUMENTS[1]} 31 Input Text id=j_idt18:datalist:j_idt67 ${ARGUMENTS[1]}
1 Default: 1 Default:
2 # These values are used by default unless a 2 # These values are used by default unless a
3 # specific broker entry overrides them. 3 # specific broker entry overrides them.
  4 + intervals:
  5 + enquiry: 11
  6 + tender: 18
  7 + auction: 0
  8 + qualification: 0
  9 + award: 0
  10 + complaint: 0
4 timeout_on_wait: 300 11 timeout_on_wait: 300
5 - period_interval: 3  
6 Quinta: 12 Quinta:
  13 + intervals:
  14 + enquiry: 2
  15 + tender: 5
7 keywords_file: openprocurement_client 16 keywords_file: openprocurement_client
8 - timeout_on_wait: 15  
9 roles: 17 roles:
10 tender_owner: Tender_Owner 18 tender_owner: Tender_Owner
11 provider: Tender_User 19 provider: Tender_User
12 provider1: Tender_User1 20 provider1: Tender_User1
13 viewer: Tender_Viewer 21 viewer: Tender_Viewer
  22 + timeout_on_wait: 15
14 E-tender: 23 E-tender:
15 keywords_file: etender 24 keywords_file: etender
16 - url: http://bid.uat.e-tender.biz/  
17 - timeout_on_wait: 60  
18 roles: 25 roles:
19 tender_owner: E-tender_Owner 26 tender_owner: E-tender_Owner
20 provider: E-tender_Provider1 27 provider: E-tender_Provider1
21 provider1: E-tender_Provider2 28 provider1: E-tender_Provider2
22 viewer: E-tender_Viewer 29 viewer: E-tender_Viewer
  30 + timeout_on_wait: 60
23 Netcast: 31 Netcast:
24 keywords_file: netcast 32 keywords_file: netcast
25 - url: http://dz2.byustudio.in.ua  
26 login: admin 33 login: admin
27 password: uStudio 34 password: uStudio
28 roles: 35 roles:
@@ -31,26 +38,24 @@ Netcast: @@ -31,26 +38,24 @@ Netcast:
31 viewer: Netcast_Viewer 38 viewer: Netcast_Viewer
32 Newtend: 39 Newtend:
33 keywords_file: newtend 40 keywords_file: newtend
34 - url: http://openprocurement:test@dev23.newtend.com  
35 roles: 41 roles:
36 tender_owner: Newtend_Owner 42 tender_owner: Newtend_Owner
37 provider: Newtend_Provider1 43 provider: Newtend_Provider1
38 viewer: Newtend_Viewer 44 viewer: Newtend_Viewer
39 Prom: 45 Prom:
  46 + intervals:
  47 + enquiry: 5
  48 + tender: 31
40 keywords_file: prom 49 keywords_file: prom
41 - url: http://dz.dz-test.net/  
42 - period_interval: 31  
43 roles: 50 roles:
44 tender_owner: Prom_Owner 51 tender_owner: Prom_Owner
45 viewer: Prom_Viewer 52 viewer: Prom_Viewer
46 Publicbid: 53 Publicbid:
47 keywords_file: publicbid 54 keywords_file: publicbid
48 - url: https://public-bid.com.ua/  
49 roles: 55 roles:
50 tender_owner: Publicbid_Owner 56 tender_owner: Publicbid_Owner
51 viewer: Publicbid_Viewer 57 viewer: Publicbid_Viewer
52 SmartTender: 58 SmartTender:
53 keywords_file: smarttender 59 keywords_file: smarttender
54 - url: http://smarttender.biz/tenders  
55 roles: 60 roles:
56 viewer: SmartTender_Viewer 61 viewer: SmartTender_Viewer
@@ -73,7 +73,7 @@ users: @@ -73,7 +73,7 @@ users:
73 Newtend_Owner: 73 Newtend_Owner:
74 broker: Newtend 74 broker: Newtend
75 username: Newtendtest 75 username: Newtendtest
76 - homepage: "http://dev23.newtend.com/openprocurement/#/home/page/1" 76 + homepage: "http://openprocurement:test@dev23.newtend.com/"
77 login: openprocurement@mailinator.com 77 login: openprocurement@mailinator.com
78 password: 123123 78 password: 123123
79 browser: chrome 79 browser: chrome
@@ -82,7 +82,7 @@ users: @@ -82,7 +82,7 @@ users:
82 Newtend_Provider1: 82 Newtend_Provider1:
83 broker: Newtend 83 broker: Newtend
84 username: Newtendtest 84 username: Newtendtest
85 - homepage: "http://dev23.newtend.com/openprocurement/tenders" 85 + homepage: "http://openprocurement:test@dev23.newtend.com/"
86 login: openprocboss@mailinator.com 86 login: openprocboss@mailinator.com
87 password: 123123 87 password: 123123
88 browser: chrome 88 browser: chrome
@@ -91,7 +91,7 @@ users: @@ -91,7 +91,7 @@ users:
91 Newtend_Viewer: 91 Newtend_Viewer:
92 broker: Newtend 92 broker: Newtend
93 username: Newtendtest 93 username: Newtendtest
94 - homepage: "http://dev23.newtend.com/openprocurement/tenders" 94 + homepage: "http://openprocurement:test@dev23.newtend.com/openprocurement/tenders"
95 browser: chrome 95 browser: chrome
96 position: [800, 400] 96 position: [800, 400]
97 size: [800, 700] 97 size: [800, 700]
1 -from datetime import date, datetime, timedelta  
2 -from dateutil.parser import parse  
3 -from dateutil.tz import tzlocal  
4 -from iso8601 import parse_date  
5 -from jsonpath_rw import parse as parse_path  
6 -from pytz import timezone  
7 -from robot.output import LOGGER  
8 -from robot.output.loggerhelper import Message  
9 -from robot.libraries.BuiltIn import BuiltIn  
10 -from robot.errors import HandlerExecutionFailed  
11 -from op_robot_tests.tests_files.initial_data import (  
12 - test_tender_data  
13 -)  
14 -import time  
15 -  
16 -TIMEZONE = timezone('Europe/Kiev')  
17 -  
18 -  
19 -def convert_date_to_etender_format(isodate):  
20 - iso_dt = parse_date(isodate)  
21 - date_string = iso_dt.strftime("%d-%m-%Y")  
22 - return date_string  
23 -  
24 -  
25 -def convert_time_to_etender_format(isodate):  
26 - iso_dt = parse_date(isodate)  
27 - time_string = iso_dt.strftime("%H:%M")  
28 - return time_string  
@@ -25,13 +25,13 @@ def create_fake_doc(): @@ -25,13 +25,13 @@ def create_fake_doc():
25 return tf.name 25 return tf.name
26 26
27 27
28 -def test_tender_data(period_interval): 28 +def test_tender_data(intervals):
29 now = get_now() 29 now = get_now()
30 return { 30 return {
31 "title": u"[ТЕСТУВАННЯ] " + fake.catch_phrase(), 31 "title": u"[ТЕСТУВАННЯ] " + fake.catch_phrase(),
32 "mode": "test", 32 "mode": "test",
33 "submissionMethodDetails": "quick", 33 "submissionMethodDetails": "quick",
34 - "description": u"Тестовий тендер", # Error @prom when "Тестовый тендер" 34 + "description": u"Тестовий тендер",
35 "description_ru": u"Тестовый тендер", 35 "description_ru": u"Тестовый тендер",
36 "description_en": "Test tender", 36 "description_en": "Test tender",
37 "procuringEntity": { 37 "procuringEntity": {
@@ -58,11 +58,11 @@ def test_tender_data(period_interval): @@ -58,11 +58,11 @@ def test_tender_data(period_interval):
58 } 58 }
59 }, 59 },
60 "value": { 60 "value": {
61 - "amount": 50000, # Error @prom when float '50000.99' 61 + "amount": 50000.99,
62 "currency": u"UAH" 62 "currency": u"UAH"
63 }, 63 },
64 "minimalStep": { 64 "minimalStep": {
65 - "amount": 100, # Error @prom when float '100.1' 65 + "amount": 100.1,
66 "currency": u"UAH" 66 "currency": u"UAH"
67 }, 67 },
68 "items": [ 68 "items": [
@@ -72,8 +72,8 @@ def test_tender_data(period_interval): @@ -72,8 +72,8 @@ def test_tender_data(period_interval):
72 "endDate": (now + timedelta(days=5)).isoformat() 72 "endDate": (now + timedelta(days=5)).isoformat()
73 }, 73 },
74 "deliveryLocation": { 74 "deliveryLocation": {
75 - "latitude": u"49.8500° N",  
76 - "longitude": u"24.0167° E" 75 + "latitude": 49.8500,
  76 + "longitude": 24.0167
77 }, 77 },
78 "deliveryAddress": { 78 "deliveryAddress": {
79 "countryName": u"Україна", 79 "countryName": u"Україна",
@@ -109,149 +109,21 @@ def test_tender_data(period_interval): @@ -109,149 +109,21 @@ def test_tender_data(period_interval):
109 ], 109 ],
110 "enquiryPeriod": { 110 "enquiryPeriod": {
111 "startDate": (now).isoformat(), 111 "startDate": (now).isoformat(),
112 - "endDate": (now + timedelta(minutes=1)).isoformat() 112 + "endDate": (now + timedelta(minutes=(
  113 + intervals['enquiry']))).isoformat()
113 }, 114 },
114 "tenderPeriod": { 115 "tenderPeriod": {
115 "startDate": (now + timedelta(minutes=2)).isoformat(), 116 "startDate": (now + timedelta(minutes=2)).isoformat(),
116 - "endDate": (now + timedelta(minutes=(2 + period_interval))).isoformat() 117 + "endDate": (now + timedelta(minutes=(
  118 + intervals['tender']))).isoformat()
117 } 119 }
118 } 120 }
119 121
120 122
121 -def prom_test_tender_data(): 123 +def test_tender_data_multiple_lots(intervals):
122 now = get_now() 124 now = get_now()
123 - return {  
124 - "title": fake.catch_phrase(),  
125 - "mode": "test",  
126 - "submissionMethodDetails": "quick",  
127 - "description": u"Тестовий тендер", # Error @prom when "Тестовый тендер"  
128 - "description_ru": u"Тестовый тендер",  
129 - "description_en": "Test tender",  
130 - "procuringEntity": {  
131 - "name": fake.company(),  
132 - "name_ru": fake_ru.company(),  
133 - "name_en": fake_en.company(),  
134 - "identifier": {  
135 - "scheme": u"UA-EDR",  
136 - "id": u"0000{}".format(fake.pyint()),  
137 - "uri": fake.image_url(width=None, height=None)  
138 - },  
139 - "address": {  
140 - "countryName": u"Україна",  
141 - "countryName_ru": u"Украина",  
142 - "countryName_en": "Ukraine",  
143 - "postalCode": fake.postalcode(),  
144 - "region": u"м. Київ",  
145 - "locality": u"м. Київ",  
146 - "streetAddress": fake.street_address()  
147 - },  
148 - "contactPoint": {  
149 - "name": fake.name(),  
150 - "telephone": fake.phone_number()  
151 - }  
152 - },  
153 - "value": {  
154 - "amount": 50000, # Error @prom when float '50000.99'  
155 - "currency": u"UAH"  
156 - },  
157 - "minimalStep": {  
158 - "amount": 100, # Error @prom when float '100.1'  
159 - "currency": u"UAH"  
160 - },  
161 - "items": [  
162 - {  
163 - "description": fake.catch_phrase(),  
164 - "deliveryDate": {  
165 - "startDate": (now + timedelta(days=4)).isoformat(),  
166 - "endDate": (now + timedelta(days=5)).isoformat()  
167 - },  
168 - "deliveryLocation": {  
169 - "latitude": "49.8500° N",  
170 - "longitude": "24.0167° E"  
171 - },  
172 - "deliveryAddress": {  
173 - "countryName": u"Україна",  
174 - "countryName_ru": u"Украина",  
175 - "countryName_en": "Ukraine",  
176 - "postalCode": fake.postalcode(),  
177 - "region": u"м. Київ",  
178 - "locality": u"м. Київ",  
179 - "streetAddress": fake.street_address()  
180 - },  
181 - "classification": {  
182 - "scheme": u"CPV",  
183 - "id": u"44617100-9",  
184 - "description": u"Картонки",  
185 - "description_ru": u"Большие картонные коробки",  
186 - "description_en": u"Cartons"  
187 - },  
188 - "additionalClassifications": [  
189 - {  
190 - "scheme": u"ДКПП",  
191 - "id": u"17.21.1",  
192 - "description": u"Папір і картон гофровані, паперова й картонна тара"  
193 - }  
194 - ],  
195 - "unit": {  
196 - "name": u"кілограм",  
197 - "name_ru": u"килограмм",  
198 - "name_en": "kilogram",  
199 - "code": u"KGM"  
200 - },  
201 - "quantity": fake.pyint()  
202 - }  
203 - ],  
204 - "enquiryPeriod": {  
205 - "startDate": (now + timedelta(days=1)).isoformat(),  
206 - "endDate": (now + timedelta(days=2)).isoformat()  
207 - },  
208 - "tenderPeriod": {  
209 - "startDate": (now + timedelta(days=3)).isoformat(),  
210 - "endDate": (now + timedelta(days=5)).isoformat()  
211 - }  
212 - }  
213 -  
214 -  
215 -def test_tender_data_multiple_lots(period_interval):  
216 - now = get_now()  
217 - return {  
218 - "title": fake.catch_phrase(),  
219 - "mode": "test",  
220 - "submissionMethodDetails": "quick",  
221 - "description": u"Тестовий тендер",  
222 - "description_ru": u"Тестовый тендер",  
223 - "description_en": "Test tender",  
224 - "procuringEntity": {  
225 - "name": fake.company(),  
226 - "name_ru": fake_ru.company(),  
227 - "name_en": fake_en.company(),  
228 - "identifier": {  
229 - "scheme": u"UA-EDR",  
230 - "id": u"0000{}".format(fake.pyint()),  
231 - "uri": fake.image_url(width=None, height=None)  
232 - },  
233 - "address": {  
234 - "countryName": u"Україна",  
235 - "countryName_ru": u"Украина",  
236 - "countryName_en": "Ukraine",  
237 - "postalCode": fake.postalcode(),  
238 - "region": u"м. Київ",  
239 - "locality": u"м. Київ",  
240 - "streetAddress": fake.street_address()  
241 - },  
242 - "contactPoint": {  
243 - "name": fake.name(),  
244 - "telephone": fake.phone_number()  
245 - }  
246 - },  
247 - "value": {  
248 - "amount": 50000.99,  
249 - "currency": u"UAH"  
250 - },  
251 - "minimalStep": {  
252 - "amount": 100.1,  
253 - "currency": u"UAH"  
254 - }, 125 + t_data = test_tender_data(intervals)
  126 + t_data.update({
255 "items": [ 127 "items": [
256 { 128 {
257 "description": fake.catch_phrase(), 129 "description": fake.catch_phrase(),
@@ -413,16 +285,9 @@ def test_tender_data_multiple_lots(period_interval): @@ -413,16 +285,9 @@ def test_tender_data_multiple_lots(period_interval):
413 }, 285 },
414 "quantity": fake.pyint() 286 "quantity": fake.pyint()
415 } 287 }
416 - ],  
417 - "enquiryPeriod": {  
418 - "startDate": (now).isoformat(),  
419 - "endDate": (now + timedelta(minutes=1)).isoformat()  
420 - },  
421 - "tenderPeriod": {  
422 - "startDate": (now + timedelta(minutes=2)).isoformat(),  
423 - "endDate": (now + timedelta(minutes=(2 + period_interval))).isoformat()  
424 - }  
425 - } 288 + ]
  289 + })
  290 + return t_data
426 291
427 292
428 def test_question_data(): 293 def test_question_data():
@@ -539,7 +404,7 @@ def auction_bid(): @@ -539,7 +404,7 @@ def auction_bid():
539 "value": { 404 "value": {
540 "amount": 200, 405 "amount": 200,
541 "currency": "UAH", 406 "currency": "UAH",
542 - "valueAddedTaxIncluded": true 407 + "valueAddedTaxIncluded": "true"
543 } 408 }
544 } 409 }
545 }) 410 })
@@ -7,12 +7,10 @@ Library Selenium2Library @@ -7,12 +7,10 @@ Library Selenium2Library
7 Library DateTime 7 Library DateTime
8 Library Selenium2Screenshots 8 Library Selenium2Screenshots
9 Library DebugLibrary 9 Library DebugLibrary
10 -Library op_robot_tests.tests_files.brokers.openprocurement_client_helper  
11 10
12 *** Keywords *** 11 *** Keywords ***
13 TestSuiteSetup 12 TestSuiteSetup
14 Завантажуємо дані про користувачів і майданчики 13 Завантажуємо дані про користувачів і майданчики
15 - Підготовка початкових даних  
16 14
17 Set Suite Variable With Default Value 15 Set Suite Variable With Default Value
18 [Arguments] ${suite_var} ${def_value} 16 [Arguments] ${suite_var} ${def_value}
@@ -51,9 +49,9 @@ Set Suite Variable With Default Value @@ -51,9 +49,9 @@ Set Suite Variable With Default Value
51 Get Broker Property 49 Get Broker Property
52 [Arguments] ${broker_name} ${property} 50 [Arguments] ${broker_name} ${property}
53 [Documentation] 51 [Documentation]
54 - ... This keyword returns a property of specified broker  
55 - ... if that property exists, otherwise, it returns a  
56 - ... default value. 52 + ... This keyword returns a property of specified broker
  53 + ... if that property exists, otherwise, it returns a
  54 + ... default value.
57 ${status}= Run Keyword And Return Status Should Contain ${BROKERS['${broker_name}']} ${property} 55 ${status}= Run Keyword And Return Status Should Contain ${BROKERS['${broker_name}']} ${property}
58 Return From Keyword If ${status} ${BROKERS['${broker_name}'].${property}} 56 Return From Keyword If ${status} ${BROKERS['${broker_name}'].${property}}
59 # If broker doesn't have that property, fall back to default value 57 # If broker doesn't have that property, fall back to default value
@@ -62,37 +60,39 @@ Get Broker Property @@ -62,37 +60,39 @@ Get Broker Property
62 60
63 Get Broker Property By Username 61 Get Broker Property By Username
64 [Documentation] 62 [Documentation]
65 - ... This keyword gets the corresponding broker name  
66 - ... for a specified username and then calls  
67 - ... "Get Broker Property" 63 + ... This keyword gets the corresponding broker name
  64 + ... for a specified username and then calls
  65 + ... "Get Broker Property"
68 [Arguments] ${username} ${property} 66 [Arguments] ${username} ${property}
69 ${broker_name}= Get Variable Value ${USERS.users['${username}'].broker} 67 ${broker_name}= Get Variable Value ${USERS.users['${username}'].broker}
70 Run Keyword And Return Get Broker Property ${broker_name} ${property} 68 Run Keyword And Return Get Broker Property ${broker_name} ${property}
71 69
72 Підготовка початкових даних 70 Підготовка початкових даних
73 - @{QUESTIONS} = Create list 71 + @{QUESTIONS}= Create list
74 ${question}= test question data 72 ${question}= test question data
75 - Append to list ${QUESTIONS} ${question}  
76 - Set Global Variable ${QUESTIONS}  
77 - @{ANSWERS} = Create list 73 + Append to list ${QUESTIONS} ${question}
  74 + Set Global Variable @{QUESTIONS}
  75 + @{ANSWERS}= Create list
78 ${answer}= test_question_answer_data 76 ${answer}= test_question_answer_data
79 - Append to list ${ANSWERS} ${answer}  
80 - Set Global Variable ${ANSWERS}  
81 - @{COMPLAINTS} = Create list 77 + Append to list ${ANSWERS} ${answer}
  78 + Set Global Variable @{ANSWERS}
  79 + @{COMPLAINTS}= Create list
82 ${complaint}= test_complaint_data 80 ${complaint}= test_complaint_data
83 - Append to list ${COMPLAINTS} ${complaint}  
84 - Set Global Variable ${COMPLAINTS}  
85 - @{REPLIES} = Create list 81 + Append to list ${COMPLAINTS} ${complaint}
  82 + Set Global Variable @{COMPLAINTS}
  83 + @{REPLIES}= Create list
86 ${reply}= test_complaint_reply_data 84 ${reply}= test_complaint_reply_data
87 - Append to list ${REPLIES} ${reply}  
88 - Set Global Variable ${REPLIES}  
89 - ${period_interval}= Get Broker Property By Username ${tender_owner} period_interval  
90 - ${INITIAL_TENDER_DATA}= prepare_test_tender_data ${period_interval} ${mode}  
91 - Set Global Variable ${INITIAL_TENDER_DATA} 85 + Append to list ${REPLIES} ${reply}
  86 + Set Global Variable @{REPLIES}
  87 + ${custom_intervals}= Get Broker Property By Username ${tender_owner} intervals
  88 + ${default_intervals}= Get Broker Property Default intervals
  89 + ${period_intervals}= merge_dicts ${default_intervals} ${custom_intervals}
  90 + ${tender_data}= prepare_test_tender_data ${period_intervals} ${mode}
92 ${TENDER}= Create Dictionary 91 ${TENDER}= Create Dictionary
93 Set Global Variable ${TENDER} 92 Set Global Variable ${TENDER}
94 Log ${TENDER} 93 Log ${TENDER}
95 - Log ${INITIAL_TENDER_DATA} 94 + Log ${tender_data}
  95 + [return] ${tender_data}
96 96
97 Завантажуємо бібліотеку з реалізацією для майданчика ${keywords_file} 97 Завантажуємо бібліотеку з реалізацією для майданчика ${keywords_file}
98 Import Resource ${CURDIR}/brokers/${keywords_file}.robot 98 Import Resource ${CURDIR}/brokers/${keywords_file}.robot
@@ -101,8 +101,8 @@ Get Broker Property By Username @@ -101,8 +101,8 @@ Get Broker Property By Username
101 Дочекатись синхронізації з майданчиком 101 Дочекатись синхронізації з майданчиком
102 [Arguments] ${username} 102 [Arguments] ${username}
103 [Documentation] 103 [Documentation]
104 - ... Get ${wait_timeout} for specified user and wait  
105 - ... until that timeout runs out. 104 + ... Get ${wait_timeout} for specified user and wait
  105 + ... until that timeout runs out.
106 ${now}= Get Current Date 106 ${now}= Get Current Date
107 ${delta}= Subtract Date From Date ${now} ${TENDER['LAST_MODIFICATION_DATE']} 107 ${delta}= Subtract Date From Date ${now} ${TENDER['LAST_MODIFICATION_DATE']}
108 ${timeout_on_wait}= Get Broker Property By Username ${username} timeout_on_wait 108 ${timeout_on_wait}= Get Broker Property By Username ${username} timeout_on_wait
@@ -110,51 +110,43 @@ Get Broker Property By Username @@ -110,51 +110,43 @@ Get Broker Property By Username
110 Run Keyword If ${wait_timeout}>0 Sleep ${wait_timeout} 110 Run Keyword If ${wait_timeout}>0 Sleep ${wait_timeout}
111 111
112 Звірити поле тендера 112 Звірити поле тендера
113 - [Arguments] ${username} ${field}  
114 - ${field_value}= Get_From_Object ${INITIAL_TENDER_DATA.data} ${field}  
115 - Звірити поле ${username} ${field} ${field_value}  
116 -  
117 -Звірити поле  
118 - [Arguments] ${username} ${field} ${subject}  
119 - ${field_response}= Викликати для учасника ${username} Отримати інформацію із тендера ${field}  
120 - Should Not Be Equal ${field_response} ${None}  
121 - Should Be Equal ${subject} ${field_response} Майданчик ${USERS.users['${username}'].broker}  
122 -  
123 -Звірити поле створеного тендера  
124 - [Arguments] ${initial} ${tender_data} ${field}  
125 - ${field_value}= Get_From_Object ${initial} ${field}  
126 - ${field_response}= Get_From_Object ${tender_data} ${field}  
127 - Should Not Be Equal ${field_response} ${None}  
128 - Should Not Be Equal ${field_value} ${None}  
129 - Should Be Equal ${field_value} ${field_response} 113 + [Arguments] ${username} ${tender_data} ${field}
  114 + ${left}= Get_From_Object ${tender_data.data} ${field}
  115 + ${right}= Викликати для учасника ${username} Отримати інформацію із тендера ${field}
  116 + Порівняти об'єкти ${left} ${right}
  117 +
  118 +Порівняти об'єкти
  119 + [Arguments] ${left} ${right}
  120 + Should Not Be Equal ${left} ${None}
  121 + Should Not Be Equal ${right} ${None}
  122 + Should Be Equal ${left} ${right}
130 123
131 Звірити дату тендера 124 Звірити дату тендера
132 - [Arguments] ${username} ${field}  
133 - ${isodate}= Get_From_Object ${INITIAL_TENDER_DATA.data} ${field}  
134 - Should Not Be Equal ${isodate} ${None}  
135 - Звірити дату ${username} ${field} ${isodate} 125 + [Arguments] ${username} ${tender_data} ${field}
  126 + ${left}= Get_From_Object ${tender_data.data} ${field}
  127 + ${right}= Викликати для учасника ${username} Отримати інформацію із тендера ${field}
  128 + Звірити дату ${left} ${right}
136 129
137 Звірити дату 130 Звірити дату
138 - [Arguments] ${username} ${field} ${subject}  
139 - ${field_date}= Викликати для учасника ${username} Отримати інформацію із тендера ${field}  
140 - ${returned}= compare_date ${subject} ${field_date}  
141 - Should Not Be Equal ${field_date} ${None}  
142 - Should Not Be Equal ${returned} ${None}  
143 - Should Be True '${returned}' == 'True' 131 + [Arguments] ${left} ${right}
  132 + Should Not Be Equal ${left} ${None}
  133 + Should Not Be Equal ${right} ${None}
  134 + ${status}= compare_date ${left} ${right}
  135 + Should Be True ${status}
144 136
145 Звірити поля предметів закупівлі багатопредметного тендера 137 Звірити поля предметів закупівлі багатопредметного тендера
146 - [Arguments] ${username} ${field} 138 + [Arguments] ${username} ${tender_data} ${field}
147 Дочекатись синхронізації з майданчиком ${username} 139 Дочекатись синхронізації з майданчиком ${username}
148 - @{items}= Get_From_Object ${INITIAL_TENDER_DATA.data} items 140 + @{items}= Get_From_Object ${tender_data.data} items
149 ${len_of_items}= Get Length ${items} 141 ${len_of_items}= Get Length ${items}
150 :FOR ${index} IN RANGE ${len_of_items} 142 :FOR ${index} IN RANGE ${len_of_items}
151 \ Log ${index} 143 \ Log ${index}
152 \ Звірити поле тендера ${viewer} items[${index}].${field} 144 \ Звірити поле тендера ${viewer} items[${index}].${field}
153 145
154 Звірити дату предметів закупівлі багатопредметного тендера 146 Звірити дату предметів закупівлі багатопредметного тендера
155 - [Arguments] ${username} ${field} 147 + [Arguments] ${username} ${tender_data} ${field}
156 Дочекатись синхронізації з майданчиком ${username} 148 Дочекатись синхронізації з майданчиком ${username}
157 - @{items}= Get_From_Object ${INITIAL_TENDER_DATA.data} items 149 + @{items}= Get_From_Object ${tender_data.data} items
158 ${len_of_items}= Get Length ${items} 150 ${len_of_items}= Get Length ${items}
159 :FOR ${index} IN RANGE ${len_of_items} 151 :FOR ${index} IN RANGE ${len_of_items}
160 \ Log ${index} 152 \ Log ${index}
@@ -162,13 +154,13 @@ Get Broker Property By Username @@ -162,13 +154,13 @@ Get Broker Property By Username
162 154
163 Викликати для учасника 155 Викликати для учасника
164 [Documentation] 156 [Documentation]
165 - ... Cause sometimes keyword SHOULD fail to pass the testcase,  
166 - ... this keyword takes "shouldfail" argument as first one in @{arguments}  
167 - ... and switches the behaviour of keyword and "shouldfail" 157 + ... Cause sometimes keyword SHOULD fail to pass the testcase,
  158 + ... this keyword takes "shouldfail" argument as first one in @{arguments}
  159 + ... and switches the behaviour of keyword and "shouldfail"
168 [Arguments] ${username} ${command} @{arguments} 160 [Arguments] ${username} ${command} @{arguments}
169 Log ${username} 161 Log ${username}
170 Log ${command} 162 Log ${command}
171 - Log ${arguments} 163 + Log Many @{arguments}
172 ${state}= change_state ${arguments} 164 ${state}= change_state ${arguments}
173 Run Keyword And Return If '${state}' == 'shouldfail' SwitchState ${username} ${command} @{arguments} 165 Run Keyword And Return If '${state}' == 'shouldfail' SwitchState ${username} ${command} @{arguments}
174 Run Keyword And Return If '${state}' == 'pass' Normal ${username} ${command} @{arguments} 166 Run Keyword And Return If '${state}' == 'pass' Normal ${username} ${command} @{arguments}
@@ -177,17 +169,17 @@ Normal @@ -177,17 +169,17 @@ Normal
177 [Arguments] ${username} ${command} @{arguments} 169 [Arguments] ${username} ${command} @{arguments}
178 Log ${username} 170 Log ${username}
179 Log ${command} 171 Log ${command}
180 - Log ${arguments} 172 + Log Many @{arguments}
181 ${keywords_file}= Get Broker Property By Username ${username} keywords_file 173 ${keywords_file}= Get Broker Property By Username ${username} keywords_file
182 Run Keyword And Return ${keywords_file}.${command} ${username} @{arguments} 174 Run Keyword And Return ${keywords_file}.${command} ${username} @{arguments}
183 175
184 SwitchState 176 SwitchState
185 [Arguments] ${username} ${command} @{arguments} 177 [Arguments] ${username} ${command} @{arguments}
186 - log ${username}  
187 - log ${command}  
188 - log ${arguments} 178 + Log ${username}
  179 + Log ${command}
  180 + Log Many @{arguments}
189 Remove From List ${arguments} 0 181 Remove From List ${arguments} 0
190 - log ${arguments} 182 + Log Many @{arguments}
191 ${keywords_file}= Get Broker Property By Username ${username} keywords_file 183 ${keywords_file}= Get Broker Property By Username ${username} keywords_file
192 ${status} ${value}= run_keyword_and_ignore_keyword_definitions ${keywords_file}.${command} ${username} @{arguments} 184 ${status} ${value}= run_keyword_and_ignore_keyword_definitions ${keywords_file}.${command} ${username} @{arguments}
193 Run keyword if '${status}' == 'PASS' Log Учасник ${username} зміг виконати "${command}" WARN 185 Run keyword if '${status}' == 'PASS' Log Учасник ${username} зміг виконати "${command}" WARN
@@ -199,13 +191,13 @@ SwitchState @@ -199,13 +191,13 @@ SwitchState
199 Run Keyword If ${wait_timeout}>0 Sleep ${wait_timeout} 191 Run Keyword If ${wait_timeout}>0 Sleep ${wait_timeout}
200 192
201 Дочекатись дати початку прийому пропозицій 193 Дочекатись дати початку прийому пропозицій
202 - Дочекатись дати ${TENDER_DATA.data.tenderPeriod.startDate} 194 + Дочекатись дати ${tender_data.data.tenderPeriod.startDate}
203 195
204 Дочекатись дати закінчення прийому пропозицій 196 Дочекатись дати закінчення прийому пропозицій
205 - Дочекатись дати ${TENDER_DATA.data.tenderPeriod.endDate} 197 + Дочекатись дати ${tender_data.data.tenderPeriod.endDate}
206 198
207 Дочекатись дати початку аукціону 199 Дочекатись дати початку аукціону
208 - Дочекатись дати ${TENDER_DATA.data.auctionPeriod.startDate} 200 + Дочекатись дати ${tender_data.data.auctionPeriod.startDate}
209 201
210 Дочекатись дати закінчення аукціону 202 Дочекатись дати закінчення аукціону
211 - Дочекатись дати ${TENDER_DATA.data.auctionPeriod.endDate} 203 + Дочекатись дати ${tender_data.data.auctionPeriod.endDate}
@@ -18,7 +18,8 @@ ${broker} Quinta @@ -18,7 +18,8 @@ ${broker} Quinta
18 *** Test Cases *** 18 *** Test Cases ***
19 Можливість оголосити багатопредметний тендер 19 Можливість оголосити багатопредметний тендер
20 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер 20 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер
21 - ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${INITIAL_TENDER_DATA} 21 + ${tender_data}= Підготовка початкових даних
  22 + ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data}
22 ${LAST_MODIFICATION_DATE}= Get Current Date 23 ${LAST_MODIFICATION_DATE}= Get Current Date
23 Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID} 24 Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID}
24 Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE} 25 Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE}
1 *** Variables *** 1 *** Variables ***
2 -${api_key} e9c3ccb8e8124f26941d5f9639a4ebc3  
3 ${API_HOST_URL} https://api-sandbox.openprocurement.org 2 ${API_HOST_URL} https://api-sandbox.openprocurement.org
4 -${api_version} 0.8 3 +${api_version} 0.9
1 # -*- coding: utf-8 - 1 # -*- coding: utf-8 -
2 -import os  
3 -from munch import munchify, Munch, fromYAML  
4 -from json import load  
5 -from iso8601 import parse_date  
6 -from robot.output import LOGGER  
7 -from robot.output.loggerhelper import Message  
8 -from robot.libraries.BuiltIn import BuiltIn  
9 -from robot.errors import HandlerExecutionFailed  
10 -from datetime import datetime, timedelta, date 2 +from datetime import datetime, timedelta
11 from dateutil.parser import parse 3 from dateutil.parser import parse
12 -from dateutil.tz import tzlocal  
13 -from pytz import timezone  
14 from dpath.util import set as xpathset 4 from dpath.util import set as xpathset
  5 +from iso8601 import parse_date
  6 +from json import load
15 from jsonpath_rw import parse as parse_path 7 from jsonpath_rw import parse as parse_path
16 -import time 8 +from munch import fromYAML, Munch, munchify
  9 +from pytz import timezone
  10 +from robot.errors import HandlerExecutionFailed
  11 +from robot.libraries.BuiltIn import BuiltIn
  12 +from robot.output import LOGGER
  13 +from robot.output.loggerhelper import Message
  14 +# These imports are not pointless. Robot's resource and testsuite files
  15 +# can access them by simply importing library "service_keywords".
  16 +# Please ignore the warning given by Flake8 or other linter.
17 from .initial_data import ( 17 from .initial_data import (
18 - test_tender_data, test_question_data, test_question_answer_data,  
19 - test_bid_data, test_award_data, test_complaint_data, test_complaint_reply_data, test_tender_data_multiple_lots,  
20 - auction_bid, prom_test_tender_data, create_fake_doc 18 + auction_bid, create_fake_doc,
  19 + test_award_data, test_bid_data, test_complaint_data,
  20 + test_complaint_reply_data, test_question_answer_data,
  21 + test_question_data, test_tender_data, test_tender_data_multiple_lots
21 ) 22 )
22 -import calendar 23 +import os
23 24
24 25
25 TZ = timezone(os.environ['TZ'] if 'TZ' in os.environ else 'Europe/Kiev') 26 TZ = timezone(os.environ['TZ'] if 'TZ' in os.environ else 'Europe/Kiev')
26 27
  28 +
27 def get_now(): 29 def get_now():
28 return datetime.now(TZ) 30 return datetime.now(TZ)
29 31
  32 +
30 def get_date(): 33 def get_date():
31 - return get_now().isoformat() 34 + return get_now().isoformat()
  35 +
32 36
33 def get_file_contents(path): 37 def get_file_contents(path):
34 with open(path, 'r') as f: 38 with open(path, 'r') as f:
35 return unicode(f.read()) or u'' 39 return unicode(f.read()) or u''
36 40
  41 +
37 def change_state(arguments): 42 def change_state(arguments):
38 try: 43 try:
39 if arguments[0] == "shouldfail": 44 if arguments[0] == "shouldfail":
@@ -42,22 +47,26 @@ def change_state(arguments): @@ -42,22 +47,26 @@ def change_state(arguments):
42 except IndexError: 47 except IndexError:
43 return "pass" 48 return "pass"
44 49
45 -def prepare_prom_test_tender_data():  
46 - return munchify({'data': prom_test_tender_data()}) 50 +
  51 +def prepare_prom_test_tender_data(period_intervals, mode):
  52 + t_data = prepare_test_tender_data(period_intervals, mode)
  53 + return munchify({'data': t_data})
  54 +
47 55
48 def compare_date(data1, data2): 56 def compare_date(data1, data2):
49 - data1=parse(data1)  
50 - data2=parse(data2) 57 + data1 = parse(data1)
  58 + data2 = parse(data2)
51 if data1.tzinfo is None: 59 if data1.tzinfo is None:
52 data1 = TZ.localize(data1) 60 data1 = TZ.localize(data1)
53 if data2.tzinfo is None: 61 if data2.tzinfo is None:
54 data2 = TZ.localize(data2) 62 data2 = TZ.localize(data2)
55 63
56 - delta = (data1-data2).total_seconds() 64 + delta = (data1 - data2).total_seconds()
57 if abs(delta) > 60: 65 if abs(delta) > 60:
58 - return False 66 + return False
59 return True 67 return True
60 68
  69 +
61 def log_object_data(data, file_name=None, format="yaml"): 70 def log_object_data(data, file_name=None, format="yaml"):
62 """Log object data in pretty format (JSON or YAML) 71 """Log object data in pretty format (JSON or YAML)
63 72
@@ -89,10 +98,6 @@ def log_object_data(data, file_name=None, format="yaml"): @@ -89,10 +98,6 @@ def log_object_data(data, file_name=None, format="yaml"):
89 with open(os.path.join(output_dir, file_name + '.' + format), "w") as file_obj: 98 with open(os.path.join(output_dir, file_name + '.' + format), "w") as file_obj:
90 file_obj.write(data) 99 file_obj.write(data)
91 100
92 -def convert_date_to_prom_format(isodate):  
93 - iso_dt=parse_date(isodate)  
94 - day_string = iso_dt.strftime("%d.%m.%Y %H:%M")  
95 - return day_string  
96 101
97 def load_initial_data_from(file_name): 102 def load_initial_data_from(file_name):
98 if not os.path.exists(file_name): 103 if not os.path.exists(file_name):
@@ -104,12 +109,12 @@ def load_initial_data_from(file_name): @@ -104,12 +109,12 @@ def load_initial_data_from(file_name):
104 return fromYAML(file_obj) 109 return fromYAML(file_obj)
105 110
106 111
107 -def prepare_test_tender_data(period_interval=2, mode='single'): 112 +def prepare_test_tender_data(period_intervals, mode):
108 if mode == 'single': 113 if mode == 'single':
109 - return munchify({'data': test_tender_data(period_interval=period_interval)}) 114 + return munchify({'data': test_tender_data(period_intervals)})
110 elif mode == 'multi': 115 elif mode == 'multi':
111 - return munchify({'data': test_tender_data_multiple_lots(period_interval=period_interval)})  
112 - raise ValueError('A very specific bad thing happened') 116 + return munchify({'data': test_tender_data_multiple_lots(period_intervals)})
  117 + raise ValueError('Invalid mode for test_tender_data')
113 118
114 119
115 def run_keyword_and_ignore_keyword_definitions(name, *args): 120 def run_keyword_and_ignore_keyword_definitions(name, *args):
@@ -130,7 +135,7 @@ def run_keyword_and_ignore_keyword_definitions(name, *args): @@ -130,7 +135,7 @@ def run_keyword_and_ignore_keyword_definitions(name, *args):
130 """ 135 """
131 try: 136 try:
132 status, _ = BuiltIn().run_keyword_and_ignore_error(name, *args) 137 status, _ = BuiltIn().run_keyword_and_ignore_error(name, *args)
133 - except HandlerExecutionFailed, e: 138 + except HandlerExecutionFailed:
134 LOGGER.log_message(Message("Keyword {} not implemented", "ERROR")) 139 LOGGER.log_message(Message("Keyword {} not implemented", "ERROR"))
135 return "FAIL", "" 140 return "FAIL", ""
136 return status, _ 141 return status, _
@@ -174,62 +179,35 @@ def wait_to_date(date_stamp): @@ -174,62 +179,35 @@ def wait_to_date(date_stamp):
174 return 0 179 return 0
175 return wait_seconds 180 return wait_seconds
176 181
177 -##GUI Frontends common 182 +
  183 +def merge_dicts(left, right):
  184 + new = {}
  185 + new.update(left)
  186 + new.update(right)
  187 + return new
  188 +
  189 +
  190 +# GUI Frontends common
  191 +def add_data_for_gui_frontends(tender_data):
  192 + now = datetime.now()
  193 + # tender_data.data.enquiryPeriod['startDate'] = (now + timedelta(minutes=2)).isoformat()
  194 + tender_data.data.enquiryPeriod['endDate'] = (now + timedelta(minutes=6)).isoformat()
  195 + tender_data.data.tenderPeriod['startDate'] = (now + timedelta(minutes=7)).isoformat()
  196 + tender_data.data.tenderPeriod['endDate'] = (now + timedelta(minutes=11)).isoformat()
  197 + return tender_data
  198 +
  199 +
178 def convert_date_to_slash_format(isodate): 200 def convert_date_to_slash_format(isodate):
179 - iso_dt=parse_date(isodate) 201 + iso_dt = parse_date(isodate)
180 date_string = iso_dt.strftime("%d/%m/%Y") 202 date_string = iso_dt.strftime("%d/%m/%Y")
181 - return date_string 203 + return date_string
  204 +
  205 +
  206 +def convert_datetime_to_dot_format(isodate):
  207 + iso_dt = parse_date(isodate)
  208 + day_string = iso_dt.strftime("%d.%m.%Y %H:%M")
  209 + return day_string
182 210
183 -def Add_data_for_GUI_FrontEnds(INITIAL_TENDER_DATA):  
184 - now = datetime.now()  
185 - #INITIAL_TENDER_DATA.data.enquiryPeriod['startDate'] = (now + timedelta(minutes=2)).isoformat()  
186 - INITIAL_TENDER_DATA.data.enquiryPeriod['endDate'] = (now + timedelta(minutes=6)).isoformat()  
187 - INITIAL_TENDER_DATA.data.tenderPeriod['startDate'] = (now + timedelta(minutes=7)).isoformat()  
188 - INITIAL_TENDER_DATA.data.tenderPeriod['endDate'] = (now + timedelta(minutes=11)).isoformat()  
189 - return INITIAL_TENDER_DATA  
190 211
191 def local_path_to_file(file_name): 212 def local_path_to_file(file_name):
192 return os.path.join(os.path.dirname(__file__), 'documents', file_name) 213 return os.path.join(os.path.dirname(__file__), 'documents', file_name)
193 -  
194 -## E-Tender  
195 -def convert_date_to_etender_format(isodate):  
196 - iso_dt=parse_date(isodate)  
197 - date_string = iso_dt.strftime("%d-%m-%Y")  
198 - return date_string  
199 -  
200 -def convert_date_for_delivery(isodate):  
201 - iso_dt=parse_date(isodate)  
202 - date_string = iso_dt.strftime("%Y-%m-%d %H:%M")  
203 - return date_string  
204 -  
205 -def convert_time_to_etender_format(isodate):  
206 - iso_dt=parse_date(isodate)  
207 - time_string = iso_dt.strftime("%H:%M")  
208 - return time_string  
209 -  
210 -def procuringEntity_name(INITIAL_TENDER_DATA):  
211 - INITIAL_TENDER_DATA.data.procuringEntity['name'] = u"Повна назва невідомо чого"  
212 - return INITIAL_TENDER_DATA  
213 -  
214 -##Newtend  
215 -def newtend_date_picker_index(isodate):  
216 - now = datetime.today()  
217 - date_str = '01' + str(now.month) + str(now.year)  
218 - first_day_of_month = datetime.strptime(date_str, "%d%m%Y")  
219 - mod = first_day_of_month.isoweekday() - 2  
220 - iso_dt=parse_date(isodate)  
221 - last_day_of_month = calendar.monthrange(now.year, now.month)[1]  
222 - #LOGGER.log_message(Message("last_day_of_month: {}".format(last_day_of_month), "INFO"))  
223 - if now.day>iso_dt.day:  
224 - mod = calendar.monthrange(now.year, now.month)[1] + mod  
225 - return mod + iso_dt.day  
226 -  
227 -def Update_data_for_Newtend(INITIAL_TENDER_DATA):  
228 - #INITIAL_TENDER_DATA.data.items[0].classification['description'] = u"Картонки"  
229 - INITIAL_TENDER_DATA.data.procuringEntity['name'] = u"openprocurement"  
230 - return INITIAL_TENDER_DATA  
231 -  
232 -def subtract_from_time(date_time,substr_min,substr_sec):  
233 - now = datetime.strptime(date_time,"%d.%m.%Y %H:%M")  
234 - now = (now - timedelta(minutes=int(substr_min), seconds = int (substr_sec) )).isoformat()  
235 - return now  
@@ -21,7 +21,8 @@ ${question_id} 0 @@ -21,7 +21,8 @@ ${question_id} 0
21 Можливість оголосити однопредметний тендер 21 Можливість оголосити однопредметний тендер
22 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер 22 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер
23 [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера), 23 [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера),
24 - ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${INITIAL_TENDER_DATA} 24 + ${tender_data}= Підготовка початкових даних
  25 + ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data}
25 ${LAST_MODIFICATION_DATE}= Get Current Date 26 ${LAST_MODIFICATION_DATE}= Get Current Date
26 Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID} 27 Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID}
27 Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE} 28 Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE}
@@ -289,7 +290,7 @@ ${question_id} 0 @@ -289,7 +290,7 @@ ${question_id} 0
289 [Documentation] 290 [Documentation]
290 ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed" 291 ... "shouldfail" argument as first switches the behaviour of keyword and "Викликати для учасника" to "fail if passed"
291 [Tags] ${USERS.users['${provider}'].broker}: Можливість задати запитання 292 [Tags] ${USERS.users['${provider}'].broker}: Можливість задати запитання
292 - ${resp}= Викликати для учасника ${provider} Задати питання shouldfail ${TENDER['TENDER_UAID']} ${questions[${question_id}]} 293 + ${resp}= Викликати для учасника ${provider} Задати питання shouldfail ${TENDER['TENDER_UAID']} ${QUESTIONS[${question_id}]}
293 294
294 Подати цінову пропозицію другим учасником 295 Подати цінову пропозицію другим учасником
295 [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію 296 [Tags] ${USERS.users['${provider1}'].broker}: Можливість подати цінову пропозицію
@@ -19,7 +19,8 @@ ${broker} Quinta @@ -19,7 +19,8 @@ ${broker} Quinta
19 Можливість оголосити однопредметний тендер 19 Можливість оголосити однопредметний тендер
20 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер 20 [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер
21 [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера), 21 [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера),
22 - ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${INITIAL_TENDER_DATA} 22 + ${tender_data}= Підготовка початкових даних
  23 + ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data}
23 ${LAST_MODIFICATION_DATE}= Get Current Date 24 ${LAST_MODIFICATION_DATE}= Get Current Date
24 Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID} 25 Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID}
25 Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE} 26 Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE}
Please register or login to post a comment