Showing
20 changed files
with
674 additions
and
229 deletions
... | ... | @@ -14,6 +14,7 @@ recipe = zc.recipe.egg |
14 | 14 | eggs = |
15 | 15 | op_robot_tests |
16 | 16 | openprocurement_client |
17 | + robotframework | |
17 | 18 | robotframework-lint |
18 | 19 | robotframework-debuglibrary |
19 | 20 | robot_tests.broker.dzo |
... | ... | @@ -70,8 +71,14 @@ robot_tests.broker.uub = git ${remotes:gh}openprocurement/robot_tests.b |
70 | 71 | robot_tests.broker.aps = git ${remotes:gh}openprocurement/robot_tests.broker.aps.git |
71 | 72 | |
72 | 73 | [versions] |
73 | -fake-factory = 0.5.3 | |
74 | +Faker = 0.7.7 | |
75 | +mr.developer = 1.34 | |
74 | 76 | restkit = 4.2.2.op1 |
75 | 77 | rfc6266 = 0.0.6.op1 |
76 | 78 | robotframework = 3.0.0 |
77 | -robotframework-selenium2library = 1.7.4 | |
79 | +robotframework-debuglibrary = 0.8 | |
80 | +robotframework-lint = 0.7 | |
81 | +robotframework-selenium2library = 1.8.0 | |
82 | +setuptools = 18.3.2 | |
83 | +zc.buildout = 2.5.3 | |
84 | +zc.recipe.egg = 2.0.3 | ... | ... |
... | ... | @@ -3,6 +3,8 @@ |
3 | 3 | """ |
4 | 4 | Setuptools bootstrapping installer. |
5 | 5 | |
6 | +Maintained at https://github.com/pypa/setuptools/tree/bootstrap. | |
7 | + | |
6 | 8 | Run this script to install or upgrade setuptools. |
7 | 9 | """ |
8 | 10 | |
... | ... | @@ -16,24 +18,30 @@ import subprocess |
16 | 18 | import platform |
17 | 19 | import textwrap |
18 | 20 | import contextlib |
19 | -import warnings | |
21 | +import json | |
22 | +import codecs | |
20 | 23 | |
21 | 24 | from distutils import log |
22 | 25 | |
23 | 26 | try: |
24 | 27 | from urllib.request import urlopen |
28 | + from urllib.parse import urljoin | |
25 | 29 | except ImportError: |
26 | 30 | from urllib2 import urlopen |
31 | + from urlparse import urljoin | |
27 | 32 | |
28 | 33 | try: |
29 | 34 | from site import USER_SITE |
30 | 35 | except ImportError: |
31 | 36 | USER_SITE = None |
32 | 37 | |
38 | +LATEST = object() | |
33 | 39 | DEFAULT_VERSION = "18.3.2" |
34 | -DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/" | |
40 | +DEFAULT_URL = "https://pypi.io/packages/source/s/setuptools/" | |
35 | 41 | DEFAULT_SAVE_DIR = os.curdir |
36 | 42 | |
43 | +MEANINGFUL_INVALID_ZIP_ERR_MSG = 'Maybe {0} is corrupted, delete it and try again.' | |
44 | + | |
37 | 45 | |
38 | 46 | def _python_cmd(*args): |
39 | 47 | """ |
... | ... | @@ -98,8 +106,16 @@ def archive_context(filename): |
98 | 106 | old_wd = os.getcwd() |
99 | 107 | try: |
100 | 108 | os.chdir(tmpdir) |
101 | - with ContextualZipFile(filename) as archive: | |
102 | - archive.extractall() | |
109 | + try: | |
110 | + with ContextualZipFile(filename) as archive: | |
111 | + archive.extractall() | |
112 | + except zipfile.BadZipfile as err: | |
113 | + if not err.args: | |
114 | + err.args = ('', ) | |
115 | + err.args = err.args + ( | |
116 | + MEANINGFUL_INVALID_ZIP_ERR_MSG.format(filename), | |
117 | + ) | |
118 | + raise | |
103 | 119 | |
104 | 120 | # going in the directory |
105 | 121 | subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) |
... | ... | @@ -114,18 +130,19 @@ def archive_context(filename): |
114 | 130 | |
115 | 131 | def _do_download(version, download_base, to_dir, download_delay): |
116 | 132 | """Download Setuptools.""" |
117 | - egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg' | |
118 | - % (version, sys.version_info[0], sys.version_info[1])) | |
133 | + py_desig = 'py{sys.version_info[0]}.{sys.version_info[1]}'.format(sys=sys) | |
134 | + tp = 'setuptools-{version}-{py_desig}.egg' | |
135 | + egg = os.path.join(to_dir, tp.format(**locals())) | |
119 | 136 | if not os.path.exists(egg): |
120 | 137 | archive = download_setuptools(version, download_base, |
121 | - to_dir, download_delay) | |
138 | + to_dir, download_delay) | |
122 | 139 | _build_egg(egg, archive, to_dir) |
123 | 140 | sys.path.insert(0, egg) |
124 | 141 | |
125 | 142 | # Remove previously-imported pkg_resources if present (see |
126 | 143 | # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details). |
127 | 144 | if 'pkg_resources' in sys.modules: |
128 | - del sys.modules['pkg_resources'] | |
145 | + _unload_pkg_resources() | |
129 | 146 | |
130 | 147 | import setuptools |
131 | 148 | setuptools.bootstrap_install_from = egg |
... | ... | @@ -140,6 +157,7 @@ def use_setuptools( |
140 | 157 | Return None. Raise SystemExit if the requested version |
141 | 158 | or later cannot be installed. |
142 | 159 | """ |
160 | + version = _resolve_version(version) | |
143 | 161 | to_dir = os.path.abspath(to_dir) |
144 | 162 | |
145 | 163 | # prior to importing, capture the module state for |
... | ... | @@ -189,6 +207,11 @@ def _conflict_bail(VC_err, version): |
189 | 207 | |
190 | 208 | |
191 | 209 | def _unload_pkg_resources(): |
210 | + sys.meta_path = [ | |
211 | + importer | |
212 | + for importer in sys.meta_path | |
213 | + if importer.__class__.__module__ != 'pkg_resources.extern' | |
214 | + ] | |
192 | 215 | del_modules = [ |
193 | 216 | name for name in sys.modules |
194 | 217 | if name.startswith('pkg_resources') |
... | ... | @@ -222,8 +245,8 @@ def download_file_powershell(url, target): |
222 | 245 | ps_cmd = ( |
223 | 246 | "[System.Net.WebRequest]::DefaultWebProxy.Credentials = " |
224 | 247 | "[System.Net.CredentialCache]::DefaultCredentials; " |
225 | - "(new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)" | |
226 | - % vars() | |
248 | + '(new-object System.Net.WebClient).DownloadFile("%(url)s", "%(target)s")' | |
249 | + % locals() | |
227 | 250 | ) |
228 | 251 | cmd = [ |
229 | 252 | 'powershell', |
... | ... | @@ -248,7 +271,7 @@ download_file_powershell.viable = has_powershell |
248 | 271 | |
249 | 272 | |
250 | 273 | def download_file_curl(url, target): |
251 | - cmd = ['curl', url, '--silent', '--output', target] | |
274 | + cmd = ['curl', url, '--location', '--silent', '--output', target] | |
252 | 275 | _clean_check(cmd, target) |
253 | 276 | |
254 | 277 | |
... | ... | @@ -321,6 +344,7 @@ def download_setuptools( |
321 | 344 | ``downloader_factory`` should be a function taking no arguments and |
322 | 345 | returning a function for downloading a URL to a target. |
323 | 346 | """ |
347 | + version = _resolve_version(version) | |
324 | 348 | # making sure we use the absolute path |
325 | 349 | to_dir = os.path.abspath(to_dir) |
326 | 350 | zip_name = "setuptools-%s.zip" % version |
... | ... | @@ -333,6 +357,27 @@ def download_setuptools( |
333 | 357 | return os.path.realpath(saveto) |
334 | 358 | |
335 | 359 | |
360 | +def _resolve_version(version): | |
361 | + """ | |
362 | + Resolve LATEST version | |
363 | + """ | |
364 | + if version is not LATEST: | |
365 | + return version | |
366 | + | |
367 | + meta_url = urljoin(DEFAULT_URL, '/pypi/setuptools/json') | |
368 | + resp = urlopen(meta_url) | |
369 | + with contextlib.closing(resp): | |
370 | + try: | |
371 | + charset = resp.info().get_content_charset() | |
372 | + except Exception: | |
373 | + # Python 2 compat; assume UTF-8 | |
374 | + charset = 'UTF-8' | |
375 | + reader = codecs.getreader(charset) | |
376 | + doc = json.load(reader(resp)) | |
377 | + | |
378 | + return str(doc['info']['version']) | |
379 | + | |
380 | + | |
336 | 381 | def _build_install_args(options): |
337 | 382 | """ |
338 | 383 | Build the arguments to 'python setup.py install' on the setuptools package. |
... | ... | @@ -347,7 +392,7 @@ def _parse_args(): |
347 | 392 | parser = optparse.OptionParser() |
348 | 393 | parser.add_option( |
349 | 394 | '--user', dest='user_install', action='store_true', default=False, |
350 | - help='install in user site package (requires Python 2.6 or later)') | |
395 | + help='install in user site package') | |
351 | 396 | parser.add_option( |
352 | 397 | '--download-base', dest='download_base', metavar="URL", |
353 | 398 | default=DEFAULT_URL, |
... | ... | @@ -362,9 +407,9 @@ def _parse_args(): |
362 | 407 | default=DEFAULT_VERSION, |
363 | 408 | ) |
364 | 409 | parser.add_option( |
365 | - '--to-dir', | |
366 | - help="Directory to save (and re-use) package", | |
367 | - default=DEFAULT_SAVE_DIR, | |
410 | + '--to-dir', | |
411 | + help="Directory to save (and re-use) package", | |
412 | + default=DEFAULT_SAVE_DIR, | |
368 | 413 | ) |
369 | 414 | options, args = parser.parse_args() |
370 | 415 | # positional arguments are ignored |
... | ... | @@ -372,13 +417,13 @@ def _parse_args(): |
372 | 417 | |
373 | 418 | |
374 | 419 | def _download_args(options): |
375 | - """Return args for download_setuptools function from cmdline args.""" | |
376 | - return dict( | |
377 | - version=options.version, | |
378 | - download_base=options.download_base, | |
379 | - downloader_factory=options.downloader_factory, | |
380 | - to_dir=options.to_dir, | |
381 | - ) | |
420 | + """Return args for download_setuptools function from cmdline args.""" | |
421 | + return dict( | |
422 | + version=options.version, | |
423 | + download_base=options.download_base, | |
424 | + downloader_factory=options.downloader_factory, | |
425 | + to_dir=options.to_dir, | |
426 | + ) | |
382 | 427 | |
383 | 428 | |
384 | 429 | def main(): | ... | ... |
op_robot_tests/rebot.py
deleted
100644 → 0
... | ... | @@ -32,9 +32,7 @@ Resource base_keywords.robot |
32 | 32 | Можливість підтвердити цінову пропозицію учасником ${username} |
33 | 33 | ${status}= Run Keyword IF '${MODE}'=='openeu' Set Variable pending |
34 | 34 | ... ELSE IF '${MODE}'=='openua' Set Variable active |
35 | - ${activestatusresp}= Run As ${username} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} status ${status} | |
36 | - Set To Dictionary ${USERS.users['${username}'].bidresponses} activestatusresp=${activestatusresp} | |
37 | - log ${activestatusresp} | |
35 | + Run As ${username} Змінити цінову пропозицію ${TENDER['TENDER_UAID']} status ${status} | |
38 | 36 | |
39 | 37 | ############################################################################################## |
40 | 38 | # OPENEU Bid documentation |
... | ... | @@ -44,9 +42,7 @@ Resource base_keywords.robot |
44 | 42 | ${confidentialityRationale}= create_fake_sentence |
45 | 43 | ${privat_doc}= create_data_dict data.confidentialityRationale ${confidentialityRationale} |
46 | 44 | Set To Dictionary ${privat_doc.data} confidentiality=buyerOnly |
47 | - ${docid}= Get Variable Value ${USERS.users['${username}'].bidresponses['bid_doc_upload']['upload_response'].data.id} | |
48 | - ${bid_doc_modified}= Run As ${username} Змінити документацію в ставці ${TENDER['TENDER_UAID']} ${privat_doc} ${docid} | |
49 | - Set To Dictionary ${USERS.users['${username}'].bidresponses} bid_doc_modified=${bid_doc_modified} | |
45 | + Run As ${username} Змінити документацію в ставці ${TENDER['TENDER_UAID']} ${privat_doc} ${USERS.users['${username}']['bid_document']['doc_id']} | |
50 | 46 | |
51 | 47 | |
52 | 48 | Можливість завантажити ${doc_type} документ до пропозиції учасником ${username} |
... | ... | @@ -82,4 +78,8 @@ Resource base_keywords.robot |
82 | 78 | |
83 | 79 | |
84 | 80 | Можливість перевести тендер на статус очікування обробки мостом |
85 | - Run As ${tender_owner} Перевести тендер на статус очікування обробки мостом ${TENDER['TENDER_UAID']} | |
\ No newline at end of file | ||
81 | + Run As ${tender_owner} Перевести тендер на статус очікування обробки мостом ${TENDER['TENDER_UAID']} | |
82 | + | |
83 | + | |
84 | +Активувати тендер другого етапу | |
85 | + Run As ${tender_owner} активувати другий етап ${TENDER['TENDER_UAID']} | ... | ... |
... | ... | @@ -35,6 +35,11 @@ Resource resource.robot |
35 | 35 | Run as ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} |
36 | 36 | |
37 | 37 | |
38 | +Можливість знайти тендер по ідентифікатору ${tender_id} та зберегти його в ${save_location} для користувача ${username} | |
39 | + Дочекатись синхронізації з майданчиком ${username} | |
40 | + Run as ${username} Пошук тендера по ідентифікатору ${tender_id} ${save_location} | |
41 | + | |
42 | + | |
38 | 43 | Можливість змінити поле ${field_name} тендера на ${field_value} |
39 | 44 | Run As ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} ${field_name} ${field_value} |
40 | 45 | |
... | ... | @@ -42,8 +47,11 @@ Resource resource.robot |
42 | 47 | Можливість додати документацію до тендера |
43 | 48 | ${file_path} ${file_name} ${file_content}= create_fake_doc |
44 | 49 | Run As ${tender_owner} Завантажити документ ${file_path} ${TENDER['TENDER_UAID']} |
45 | - ${doc_id}= get_id_from_doc_name ${file_name} | |
46 | - ${tender_document}= Create Dictionary doc_name=${file_name} doc_id=${doc_id} doc_content=${file_content} | |
50 | + ${doc_id}= get_id_from_string ${file_name} | |
51 | + ${tender_document}= Create Dictionary | |
52 | + ... doc_name=${file_name} | |
53 | + ... doc_id=${doc_id} | |
54 | + ... doc_content=${file_content} | |
47 | 55 | Set To Dictionary ${USERS.users['${tender_owner}']} tender_document=${tender_document} |
48 | 56 | Remove File ${file_path} |
49 | 57 | |
... | ... | @@ -52,7 +60,9 @@ Resource resource.robot |
52 | 60 | ${item}= Підготувати дані для створення предмету закупівлі ${USERS.users['${tender_owner}'].initial_data.data['items'][0]['classification']['id']} |
53 | 61 | Run As ${tender_owner} Додати предмет закупівлі ${TENDER['TENDER_UAID']} ${item} |
54 | 62 | ${item_id}= get_id_from_object ${item} |
55 | - ${item_data}= Create Dictionary item=${item} item_id=${item_id} | |
63 | + ${item_data}= Create Dictionary | |
64 | + ... item=${item} | |
65 | + ... item_id=${item_id} | |
56 | 66 | ${item_data}= munch_dict arg=${item_data} |
57 | 67 | Set To Dictionary ${USERS.users['${tender_owner}']} item_data=${item_data} |
58 | 68 | |
... | ... | @@ -79,6 +89,14 @@ Resource resource.robot |
79 | 89 | Звірити поле тендера ${username} ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].initial_data} ${field} |
80 | 90 | |
81 | 91 | |
92 | +Отримати доступ до тендера другого етапу та зберегти його | |
93 | + Run as ${tender_owner} Отримати тендер другого етапу та зберегти його ${USERS.users['${tender_owner}'].tender_data.data.stage2TenderID} | |
94 | + ${TENDER_UAID_second_stage}= BuiltIn.Catenate SEPARATOR= ${TENDER['TENDER_UAID']} .2 | |
95 | + Set to dictionary ${TENDER} TENDER_UAID=${TENDER_UAID_second_stage} | |
96 | + :FOR ${username} IN ${tender_owner} ${provider} ${provider1} ${viewer} | |
97 | + \ Можливість знайти тендер по ідентифікатору для користувача ${username} | |
98 | + | |
99 | + | |
82 | 100 | Звірити відображення вмісту документа ${doc_id} із ${left} для користувача ${username} |
83 | 101 | ${file_name}= Run as ${username} Отримати документ ${TENDER['TENDER_UAID']} ${doc_id} |
84 | 102 | ${right}= Get File ${OUTPUT_DIR}${/}${file_name} |
... | ... | @@ -157,8 +175,11 @@ Resource resource.robot |
157 | 175 | ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data.lots[${lot_index}]} |
158 | 176 | ${file_path} ${file_name} ${file_content}= create_fake_doc |
159 | 177 | Run As ${tender_owner} Завантажити документ в лот ${file_path} ${TENDER['TENDER_UAID']} ${lot_id} |
160 | - ${doc_id}= get_id_from_doc_name ${file_name} | |
161 | - ${data}= Create Dictionary doc_name=${file_name} doc_id=${doc_id} doc_content=${file_content} | |
178 | + ${doc_id}= get_id_from_string ${file_name} | |
179 | + ${data}= Create Dictionary | |
180 | + ... doc_name=${file_name} | |
181 | + ... doc_id=${doc_id} | |
182 | + ... doc_content=${file_content} | |
162 | 183 | ${empty_list}= Create List |
163 | 184 | ${lots_documents}= Get variable value ${USERS.users['${tender_owner}'].lots_documents} ${empty_list} |
164 | 185 | Append to list ${lots_documents} ${data} |
... | ... | @@ -177,7 +198,9 @@ Resource resource.robot |
177 | 198 | ${item}= Підготувати дані для створення предмету закупівлі ${USERS.users['${tender_owner}'].initial_data.data['items'][0]['classification']['id']} |
178 | 199 | Run As ${tender_owner} Додати предмет закупівлі в лот ${TENDER['TENDER_UAID']} ${lot_id} ${item} |
179 | 200 | ${item_id}= get_id_from_object ${item} |
180 | - ${item_data}= Create Dictionary item=${item} item_id=${item_id} | |
201 | + ${item_data}= Create Dictionary | |
202 | + ... item=${item} | |
203 | + ... item_id=${item_id} | |
181 | 204 | ${item_data}= munch_dict arg=${item_data} |
182 | 205 | Set To Dictionary ${USERS.users['${tender_owner}']} item_data=${item_data} |
183 | 206 | |
... | ... | @@ -212,12 +235,16 @@ Resource resource.robot |
212 | 235 | Можливість створення лоту із прив’язаним предметом закупівлі |
213 | 236 | ${lot}= Підготувати дані для створення лоту ${USERS.users['${tender_owner}'].tender_data.data.value.amount} |
214 | 237 | ${item}= Підготувати дані для створення предмету закупівлі ${USERS.users['${tender_owner}'].initial_data.data['items'][0]['classification']['id']} |
215 | - ${lot_resp}= Run As ${tender_owner} Створити лот із предметом закупівлі ${TENDER['TENDER_UAID']} ${lot} ${item} | |
238 | + Run As ${tender_owner} Створити лот із предметом закупівлі ${TENDER['TENDER_UAID']} ${lot} ${item} | |
216 | 239 | ${item_id}= get_id_from_object ${item} |
217 | - ${item_data}= Create Dictionary item=${item} item_id=${item_id} | |
240 | + ${item_data}= Create Dictionary | |
241 | + ... item=${item} | |
242 | + ... item_id=${item_id} | |
218 | 243 | ${item_data}= munch_dict arg=${item_data} |
219 | 244 | ${lot_id}= get_id_from_object ${lot.data} |
220 | - ${lot_data}= Create Dictionary lot=${lot} lot_resp=${lot_resp} lot_id=${lot_id} | |
245 | + ${lot_data}= Create Dictionary | |
246 | + ... lot=${lot} | |
247 | + ... lot_id=${lot_id} | |
221 | 248 | ${lot_data}= munch_dict arg=${lot_data} |
222 | 249 | Set To Dictionary ${USERS.users['${tender_owner}']} item_data=${item_data} lot_data=${lot_data} |
223 | 250 | |
... | ... | @@ -234,11 +261,21 @@ Resource resource.robot |
234 | 261 | \ Звірити відображення поля ${field} усіх лотів для користувача ${username} |
235 | 262 | |
236 | 263 | |
264 | +Звірити відображення поля ${field} усіх лотів другого етапу для усіх користувачів | |
265 | + :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} | |
266 | + \ Звірити відображення поля ${field} усіх лотів другого етапу для користувача ${username} | |
267 | + | |
268 | + | |
237 | 269 | Звірити відображення поля ${field} усіх лотів для користувача ${username} |
238 | 270 | :FOR ${lot_index} IN RANGE ${NUMBER_OF_LOTS} |
239 | 271 | \ Звірити відображення поля ${field} ${lot_index} лоту для користувача ${username} |
240 | 272 | |
241 | 273 | |
274 | +Звірити відображення поля ${field} усіх лотів другого етапу для користувача ${username} | |
275 | + :FOR ${lot_index} IN RANGE ${NUMBER_OF_LOTS} | |
276 | + \ Звірити відображення поля ${field} ${lot_index} лоту другого етапу для користувача ${username} | |
277 | + | |
278 | + | |
242 | 279 | Звірити відображення поля ${field} ${lot_index} лоту для користувача ${username} |
243 | 280 | Дочекатись синхронізації з майданчиком ${username} |
244 | 281 | ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data.lots[${lot_index}]} |
... | ... | @@ -246,6 +283,13 @@ Resource resource.robot |
246 | 283 | ... ${USERS.users['${tender_owner}'].initial_data.data.lots[${lot_index}].${field}} ${field} |
247 | 284 | ... object_id=${lot_id} |
248 | 285 | |
286 | +Звірити відображення поля ${field} ${lot_index} лоту другого етапу для користувача ${username} | |
287 | + Дочекатись синхронізації з майданчиком ${username} | |
288 | + ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data.lots[${lot_index}]} | |
289 | + Звірити поле тендера із значенням ${username} ${TENDER['TENDER_UAID']} | |
290 | + ... ${USERS.users['${tender_owner}'].second_stage_data.data.lots[${lot_index}].${field}} ${field} | |
291 | + ... object_id=${lot_id} | |
292 | + | |
249 | 293 | |
250 | 294 | Звірити відображення поля ${field} ${lot_index} лоту з ${data} для користувача ${username} |
251 | 295 | ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data.lots[${lot_index}]} |
... | ... | @@ -286,7 +330,9 @@ Resource resource.robot |
286 | 330 | Set To Dictionary ${feature} featureOf=tenderer |
287 | 331 | Run As ${tender_owner} Додати неціновий показник на тендер ${TENDER['TENDER_UAID']} ${feature} |
288 | 332 | ${feature_id}= get_id_from_object ${feature} |
289 | - ${feature_data}= Create Dictionary feature=${feature} feature_id=${feature_id} | |
333 | + ${feature_data}= Create Dictionary | |
334 | + ... feature=${feature} | |
335 | + ... feature_id=${feature_id} | |
290 | 336 | ${feature_data}= munch_dict arg=${feature_data} |
291 | 337 | Set To Dictionary ${USERS.users['${tender_owner}']} feature_data=${feature_data} |
292 | 338 | |
... | ... | @@ -297,7 +343,9 @@ Resource resource.robot |
297 | 343 | ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data.lots[${lot_index}]} |
298 | 344 | Run As ${tender_owner} Додати неціновий показник на лот ${TENDER['TENDER_UAID']} ${feature} ${lot_id} |
299 | 345 | ${feature_id}= get_id_from_object ${feature} |
300 | - ${feature_data}= Create Dictionary feature=${feature} feature_id=${feature_id} | |
346 | + ${feature_data}= Create Dictionary | |
347 | + ... feature=${feature} | |
348 | + ... feature_id=${feature_id} | |
301 | 349 | ${feature_data}= munch_dict arg=${feature_data} |
302 | 350 | Set To Dictionary ${USERS.users['${tender_owner}']} feature_data=${feature_data} |
303 | 351 | |
... | ... | @@ -308,7 +356,9 @@ Resource resource.robot |
308 | 356 | ${item_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data['items'][${item_index}]} |
309 | 357 | Run As ${tender_owner} Додати неціновий показник на предмет ${TENDER['TENDER_UAID']} ${feature} ${item_id} |
310 | 358 | ${feature_id}= get_id_from_object ${feature} |
311 | - ${feature_data}= Create Dictionary feature=${feature} feature_id=${feature_id} | |
359 | + ${feature_data}= Create Dictionary | |
360 | + ... feature=${feature} | |
361 | + ... feature_id=${feature_id} | |
312 | 362 | ${feature_data}= munch_dict arg=${feature_data} |
313 | 363 | Set To Dictionary ${USERS.users['${tender_owner}']} feature_data=${feature_data} |
314 | 364 | |
... | ... | @@ -357,11 +407,13 @@ Resource resource.robot |
357 | 407 | |
358 | 408 | Можливість задати запитання на тендер користувачем ${username} |
359 | 409 | ${question}= Підготувати дані для запитання |
360 | - ${question_resp}= Run As ${username} Задати запитання на тендер ${TENDER['TENDER_UAID']} ${question} | |
410 | + Run As ${username} Задати запитання на тендер ${TENDER['TENDER_UAID']} ${question} | |
361 | 411 | ${now}= Get Current TZdate |
362 | 412 | ${question.data.date}= Set variable ${now} |
363 | 413 | ${question_id}= get_id_from_object ${question.data} |
364 | - ${question_data}= Create Dictionary question=${question} question_resp=${question_resp} question_id=${question_id} | |
414 | + ${question_data}= Create Dictionary | |
415 | + ... question=${question} | |
416 | + ... question_id=${question_id} | |
365 | 417 | ${question_data}= munch_dict arg=${question_data} |
366 | 418 | Set To Dictionary ${USERS.users['${username}']} tender_question_data=${question_data} |
367 | 419 | |
... | ... | @@ -369,11 +421,13 @@ Resource resource.robot |
369 | 421 | Можливість задати запитання на ${lot_index} лот користувачем ${username} |
370 | 422 | ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data.lots[${lot_index}]} |
371 | 423 | ${question}= Підготувати дані для запитання |
372 | - ${question_resp}= Run As ${username} Задати запитання на лот ${TENDER['TENDER_UAID']} ${lot_id} ${question} | |
424 | + Run As ${username} Задати запитання на лот ${TENDER['TENDER_UAID']} ${lot_id} ${question} | |
373 | 425 | ${now}= Get Current TZdate |
374 | 426 | ${question.data.date}= Set variable ${now} |
375 | 427 | ${question_id}= get_id_from_object ${question.data} |
376 | - ${question_data}= Create Dictionary question=${question} question_resp=${question_resp} question_id=${question_id} | |
428 | + ${question_data}= Create Dictionary | |
429 | + ... question=${question} | |
430 | + ... question_id=${question_id} | |
377 | 431 | ${question_data}= munch_dict arg=${question_data} |
378 | 432 | Set To Dictionary ${USERS.users['${username}']} lots_${lot_index}_question_data=${question_data} |
379 | 433 | |
... | ... | @@ -381,11 +435,13 @@ Resource resource.robot |
381 | 435 | Можливість задати запитання на ${item_index} предмет користувачем ${username} |
382 | 436 | ${item_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data['items'][${item_index}]} |
383 | 437 | ${question}= Підготувати дані для запитання |
384 | - ${question_resp}= Run As ${username} Задати запитання на предмет ${TENDER['TENDER_UAID']} ${item_id} ${question} | |
438 | + Run As ${username} Задати запитання на предмет ${TENDER['TENDER_UAID']} ${item_id} ${question} | |
385 | 439 | ${now}= Get Current TZdate |
386 | 440 | ${question.data.date}= Set variable ${now} |
387 | 441 | ${question_id}= get_id_from_object ${question.data} |
388 | - ${question_data}= Create Dictionary question=${question} question_resp=${question_resp} question_id=${question_id} | |
442 | + ${question_data}= Create Dictionary | |
443 | + ... question=${question} | |
444 | + ... question_id=${question_id} | |
389 | 445 | ${question_data}= munch_dict arg=${question_data} |
390 | 446 | Set To Dictionary ${USERS.users['${username}']} items_${item_index}_question_data=${question_data} |
391 | 447 | |
... | ... | @@ -454,7 +510,9 @@ Resource resource.robot |
454 | 510 | ... Створити чернетку вимоги про виправлення умов закупівлі |
455 | 511 | ... ${TENDER['TENDER_UAID']} |
456 | 512 | ... ${claim} |
457 | - ${claim_data}= Create Dictionary claim=${claim} complaintID=${complaintID} | |
513 | + ${claim_data}= Create Dictionary | |
514 | + ... claim=${claim} | |
515 | + ... complaintID=${complaintID} | |
458 | 516 | ${claim_data}= munch_dict arg=${claim_data} |
459 | 517 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} |
460 | 518 | |
... | ... | @@ -467,7 +525,9 @@ Resource resource.robot |
467 | 525 | ... ${TENDER['TENDER_UAID']} |
468 | 526 | ... ${claim} |
469 | 527 | ... ${lot_id} |
470 | - ${claim_data}= Create Dictionary claim=${claim} complaintID=${complaintID} | |
528 | + ${claim_data}= Create Dictionary | |
529 | + ... claim=${claim} | |
530 | + ... complaintID=${complaintID} | |
471 | 531 | ${claim_data}= munch_dict arg=${claim_data} |
472 | 532 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} |
473 | 533 | |
... | ... | @@ -479,7 +539,9 @@ Resource resource.robot |
479 | 539 | ... ${TENDER['TENDER_UAID']} |
480 | 540 | ... ${claim} |
481 | 541 | ... ${award_index} |
482 | - ${claim_data}= Create Dictionary claim=${claim} complaintID=${complaintID} | |
542 | + ${claim_data}= Create Dictionary | |
543 | + ... claim=${claim} | |
544 | + ... complaintID=${complaintID} | |
483 | 545 | ${claim_data}= munch_dict arg=${claim_data} |
484 | 546 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} |
485 | 547 | |
... | ... | @@ -492,8 +554,13 @@ Resource resource.robot |
492 | 554 | ... ${TENDER['TENDER_UAID']} |
493 | 555 | ... ${claim} |
494 | 556 | ... ${file_path} |
495 | - ${doc_id}= get_id_from_doc_name ${file_name} | |
496 | - ${claim_data}= Create Dictionary claim=${claim} complaintID=${complaintID} doc_name=${file_name} doc_id=${doc_id} doc_content=${file_content} | |
557 | + ${doc_id}= get_id_from_string ${file_name} | |
558 | + ${claim_data}= Create Dictionary | |
559 | + ... claim=${claim} | |
560 | + ... complaintID=${complaintID} | |
561 | + ... doc_name=${file_name} | |
562 | + ... doc_id=${doc_id} | |
563 | + ... doc_content=${file_content} | |
497 | 564 | ${claim_data}= munch_dict arg=${claim_data} |
498 | 565 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} |
499 | 566 | Remove File ${file_path} |
... | ... | @@ -509,8 +576,13 @@ Resource resource.robot |
509 | 576 | ... ${claim} |
510 | 577 | ... ${lot_id} |
511 | 578 | ... ${file_path} |
512 | - ${doc_id}= get_id_from_doc_name ${file_name} | |
513 | - ${claim_data}= Create Dictionary claim=${claim} complaintID=${complaintID} doc_name=${file_name} doc_id=${doc_id} doc_content=${file_content} | |
579 | + ${doc_id}= get_id_from_string ${file_name} | |
580 | + ${claim_data}= Create Dictionary | |
581 | + ... claim=${claim} | |
582 | + ... complaintID=${complaintID} | |
583 | + ... doc_name=${file_name} | |
584 | + ... doc_id=${doc_id} | |
585 | + ... doc_content=${file_content} | |
514 | 586 | ${claim_data}= munch_dict arg=${claim_data} |
515 | 587 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} |
516 | 588 | Remove File ${file_path} |
... | ... | @@ -525,8 +597,13 @@ Resource resource.robot |
525 | 597 | ... ${claim} |
526 | 598 | ... ${award_index} |
527 | 599 | ... ${file_path} |
528 | - ${doc_id}= get_id_from_doc_name ${file_name} | |
529 | - ${claim_data}= Create Dictionary claim=${claim} complaintID=${complaintID} doc_name=${file_name} doc_id=${doc_id} doc_content=${file_content} | |
600 | + ${doc_id}= get_id_from_string ${file_name} | |
601 | + ${claim_data}= Create Dictionary | |
602 | + ... claim=${claim} | |
603 | + ... complaintID=${complaintID} | |
604 | + ... doc_name=${file_name} | |
605 | + ... doc_id=${doc_id} | |
606 | + ... doc_content=${file_content} | |
530 | 607 | ${claim_data}= munch_dict arg=${claim_data} |
531 | 608 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} |
532 | 609 | Remove File ${file_path} |
... | ... | @@ -534,7 +611,9 @@ Resource resource.robot |
534 | 611 | |
535 | 612 | Можливість скасувати вимогу про виправлення умов закупівлі |
536 | 613 | ${cancellation_reason}= create_fake_sentence |
537 | - ${data}= Create Dictionary status=cancelled cancellationReason=${cancellation_reason} | |
614 | + ${data}= Create Dictionary | |
615 | + ... status=cancelled | |
616 | + ... cancellationReason=${cancellation_reason} | |
538 | 617 | ${cancellation_data}= Create Dictionary data=${data} |
539 | 618 | ${cancellation_data}= munch_dict arg=${cancellation_data} |
540 | 619 | Run As ${provider} |
... | ... | @@ -555,7 +634,9 @@ Resource resource.robot |
555 | 634 | |
556 | 635 | Можливість скасувати вимогу про виправлення умов лоту |
557 | 636 | ${cancellation_reason}= create_fake_sentence |
558 | - ${data}= Create Dictionary status=cancelled cancellationReason=${cancellation_reason} | |
637 | + ${data}= Create Dictionary | |
638 | + ... status=cancelled | |
639 | + ... cancellationReason=${cancellation_reason} | |
559 | 640 | ${cancellation_data}= Create Dictionary data=${data} |
560 | 641 | ${cancellation_data}= munch_dict arg=${cancellation_data} |
561 | 642 | Run As ${provider} |
... | ... | @@ -577,7 +658,9 @@ Resource resource.robot |
577 | 658 | Можливість скасувати вимогу про виправлення визначення ${award_index} переможця |
578 | 659 | ${cancellation_reason}= create_fake_sentence |
579 | 660 | ${status}= Set variable if 'open' in '${MODE}' stopping cancelled |
580 | - ${data}= Create Dictionary status=${status} cancellationReason=${cancellation_reason} | |
661 | + ${data}= Create Dictionary | |
662 | + ... status=${status} | |
663 | + ... cancellationReason=${cancellation_reason} | |
581 | 664 | ${cancellation_data}= Create Dictionary data=${data} |
582 | 665 | ${cancellation_data}= munch_dict arg=${cancellation_data} |
583 | 666 | Run As ${provider} |
... | ... | @@ -600,7 +683,9 @@ Resource resource.robot |
600 | 683 | |
601 | 684 | |
602 | 685 | Можливість перетворити вимогу про виправлення умов закупівлі в скаргу |
603 | - ${data}= Create Dictionary status=pending satisfied=${False} | |
686 | + ${data}= Create Dictionary | |
687 | + ... status=pending | |
688 | + ... satisfied=${False} | |
604 | 689 | ${escalation_data}= Create Dictionary data=${data} |
605 | 690 | ${escalation_data}= munch_dict arg=${escalation_data} |
606 | 691 | Run As ${provider} |
... | ... | @@ -620,7 +705,9 @@ Resource resource.robot |
620 | 705 | |
621 | 706 | |
622 | 707 | Можливість перетворити вимогу про виправлення умов лоту в скаргу |
623 | - ${data}= Create Dictionary status=pending satisfied=${False} | |
708 | + ${data}= Create Dictionary | |
709 | + ... status=pending | |
710 | + ... satisfied=${False} | |
624 | 711 | ${escalation_data}= Create Dictionary data=${data} |
625 | 712 | ${escalation_data}= munch_dict arg=${escalation_data} |
626 | 713 | Run As ${provider} |
... | ... | @@ -640,7 +727,9 @@ Resource resource.robot |
640 | 727 | |
641 | 728 | |
642 | 729 | Можливість перетворити вимогу про виправлення визначення ${award_index} переможця в скаргу |
643 | - ${data}= Create Dictionary status=pending satisfied=${False} | |
730 | + ${data}= Create Dictionary | |
731 | + ... status=pending | |
732 | + ... satisfied=${False} | |
644 | 733 | ${escalation_data}= Create Dictionary data=${data} |
645 | 734 | ${escalation_data}= munch_dict arg=${escalation_data} |
646 | 735 | Run As ${provider} |
... | ... | @@ -746,7 +835,9 @@ Resource resource.robot |
746 | 835 | |
747 | 836 | |
748 | 837 | Можливість підтвердити задоволення вимоги про виправлення умов закупівлі |
749 | - ${data}= Create Dictionary status=resolved satisfied=${True} | |
838 | + ${data}= Create Dictionary | |
839 | + ... status=resolved | |
840 | + ... satisfied=${True} | |
750 | 841 | ${confirmation_data}= Create Dictionary data=${data} |
751 | 842 | ${confirmation_data}= munch_dict arg=${confirmation_data} |
752 | 843 | Run As ${provider} |
... | ... | @@ -766,7 +857,9 @@ Resource resource.robot |
766 | 857 | |
767 | 858 | |
768 | 859 | Можливість підтвердити задоволення вимоги про виправлення умов лоту |
769 | - ${data}= Create Dictionary status=resolved satisfied=${True} | |
860 | + ${data}= Create Dictionary | |
861 | + ... status=resolved | |
862 | + ... satisfied=${True} | |
770 | 863 | ${confirmation_data}= Create Dictionary data=${data} |
771 | 864 | ${confirmation_data}= munch_dict arg=${confirmation_data} |
772 | 865 | Run As ${provider} |
... | ... | @@ -786,7 +879,9 @@ Resource resource.robot |
786 | 879 | |
787 | 880 | |
788 | 881 | Можливість підтвердити задоволення вимоги про виправлення визначення ${award_index} переможця |
789 | - ${data}= Create Dictionary status=resolved satisfied=${True} | |
882 | + ${data}= Create Dictionary | |
883 | + ... status=resolved | |
884 | + ... satisfied=${True} | |
790 | 885 | ${confirmation_data}= Create Dictionary data=${data} |
791 | 886 | ${confirmation_data}= munch_dict arg=${confirmation_data} |
792 | 887 | Run As ${provider} |
... | ... | @@ -822,7 +917,22 @@ Resource resource.robot |
822 | 917 | ############################################################################################## |
823 | 918 | |
824 | 919 | Можливість подати цінову пропозицію користувачем ${username} |
825 | - ${bid}= Підготувати дані для подання пропозиції ${username} | |
920 | + ${bid}= Підготувати дані для подання пропозиції | |
921 | + ${bidresponses}= Create Dictionary bid=${bid} | |
922 | + Set To Dictionary ${USERS.users['${username}']} bidresponses=${bidresponses} | |
923 | + ${lots}= Get Variable Value ${USERS.users['${tender_owner}'].initial_data.data.lots} ${None} | |
924 | + ${lots_ids}= Run Keyword IF ${lots} | |
925 | + ... Отримати ідентифікатори об’єктів ${username} lots | |
926 | + ... ELSE Set Variable ${None} | |
927 | + ${features}= Get Variable Value ${USERS.users['${tender_owner}'].initial_data.data.features} ${None} | |
928 | + ${features_ids}= Run Keyword IF ${features} | |
929 | + ... Отримати ідентифікатори об’єктів ${username} features | |
930 | + ... ELSE Set Variable ${None} | |
931 | + Run As ${username} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} ${lots_ids} ${features_ids} | |
932 | + | |
933 | + | |
934 | +Можливість подати цінову пропозицію на другий етап ${index} користувачем ${username} | |
935 | + ${bid}= Підготувати дані для подання пропозиції для другого етапу ${index} | |
826 | 936 | ${bidresponses}= Create Dictionary bid=${bid} |
827 | 937 | Set To Dictionary ${USERS.users['${username}']} bidresponses=${bidresponses} |
828 | 938 | ${lots}= Get Variable Value ${USERS.users['${username}'].tender_data.data.lots} ${None} |
... | ... | @@ -833,12 +943,10 @@ Resource resource.robot |
833 | 943 | ${features_ids}= Run Keyword IF ${features} |
834 | 944 | ... Отримати ідентифікатори об’єктів ${username} features |
835 | 945 | ... ELSE Set Variable ${None} |
836 | - ${resp}= Run As ${username} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} ${lots_ids} ${features_ids} | |
837 | - Set To Dictionary ${USERS.users['${username}'].bidresponses} resp=${resp} | |
838 | - | |
946 | + Run As ${username} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} ${lots_ids} ${features_ids} | |
839 | 947 | |
840 | 948 | Неможливість подати цінову пропозицію без прив’язки до лоту користувачем ${username} |
841 | - ${bid}= Підготувати дані для подання пропозиції ${username} | |
949 | + ${bid}= Підготувати дані для подання пропозиції | |
842 | 950 | ${values}= Get Variable Value ${bid.data.lotValues[0]} |
843 | 951 | Remove From Dictionary ${bid.data} lotValues |
844 | 952 | Set_To_Object ${bid} data ${values} |
... | ... | @@ -846,7 +954,7 @@ Resource resource.robot |
846 | 954 | |
847 | 955 | |
848 | 956 | Неможливість подати цінову пропозицію без нецінових показників користувачем ${username} |
849 | - ${bid}= Підготувати дані для подання пропозиції ${username} | |
957 | + ${bid}= Підготувати дані для подання пропозиції | |
850 | 958 | Remove From Dictionary ${bid.data} parameters |
851 | 959 | Require Failure ${username} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} |
852 | 960 | |
... | ... | @@ -862,16 +970,25 @@ Resource resource.robot |
862 | 970 | |
863 | 971 | Можливість завантажити документ в пропозицію користувачем ${username} |
864 | 972 | ${file_path} ${file_name} ${file_content}= create_fake_doc |
865 | - ${bid_doc_upload}= Run As ${username} Завантажити документ в ставку ${file_path} ${TENDER['TENDER_UAID']} | |
866 | - Set To Dictionary ${USERS.users['${username}'].bidresponses} bid_doc_upload=${bid_doc_upload} | |
973 | + ${doc_id}= get_id_from_string ${file_name} | |
974 | + ${bid_document_data}= Create Dictionary | |
975 | + ... doc_name=${file_name} | |
976 | + ... doc_content=${file_content} | |
977 | + ... doc_id=${doc_id} | |
978 | + Run As ${username} Завантажити документ в ставку ${file_path} ${TENDER['TENDER_UAID']} | |
979 | + Set To Dictionary ${USERS.users['${username}']} bid_document=${bid_document_data} | |
867 | 980 | Remove File ${file_path} |
868 | 981 | |
869 | 982 | |
870 | 983 | Можливість змінити документацію цінової пропозиції користувачем ${username} |
871 | 984 | ${file_path} ${file_name} ${file_content}= create_fake_doc |
872 | - ${docid}= Get Variable Value ${USERS.users['${username}'].bidresponses['bid_doc_upload']['upload_response'].data.id} | |
873 | - ${bid_doc_modified}= Run As ${username} Змінити документ в ставці ${TENDER['TENDER_UAID']} ${file_path} ${docid} | |
874 | - Set To Dictionary ${USERS.users['${username}'].bidresponses} bid_doc_modified=${bid_doc_modified} | |
985 | + ${doc_id}= get_id_from_string ${file_name} | |
986 | + ${bid_document_modified_data}= Create Dictionary | |
987 | + ... doc_name=${file_name} | |
988 | + ... doc_content=${file_content} | |
989 | + ... doc_id=${doc_id} | |
990 | + Run As ${username} Змінити документ в ставці ${TENDER['TENDER_UAID']} ${file_path} ${USERS.users['${username}']['bid_document']['doc_id']} | |
991 | + Set To Dictionary ${USERS.users['${username}']} bid_document_modified=${bid_document_modified_data} | |
875 | 992 | Remove File ${file_path} |
876 | 993 | |
877 | 994 | ############################################################################################## |
... | ... | @@ -885,15 +1002,16 @@ Resource resource.robot |
885 | 1002 | # Awarding |
886 | 1003 | ############################################################################################## |
887 | 1004 | |
888 | -Можливість зареєструвати, додати документацію і підтвердити постачальника до закупівлі | |
889 | - ${supplier_data}= Підготувати дані про постачальника ${tender_owner} | |
1005 | +Можливість зареєструвати, додати документацію і підтвердити першого постачальника до закупівлі | |
1006 | + ${lotIndex} = Set Variable If ${NUMBER_OF_LOTS} > 0 0 -1 | |
1007 | + ${supplier_data}= Підготувати дані про постачальника ${tender_owner} ${lotIndex} | |
890 | 1008 | ${file_path} ${file_name} ${file_content}= create_fake_doc |
891 | 1009 | Run as ${tender_owner} |
892 | 1010 | ... Створити постачальника, додати документацію і підтвердити його |
893 | 1011 | ... ${TENDER['TENDER_UAID']} |
894 | 1012 | ... ${supplier_data} |
895 | 1013 | ... ${file_path} |
896 | - ${doc_id}= get_id_from_doc_name ${file_name} | |
1014 | + ${doc_id}= get_id_from_string ${file_name} | |
897 | 1015 | Set to dictionary ${USERS.users['${tender_owner}']} award_doc_name=${file_name} award_doc_id=${doc_id} award_doc_content=${file_content} |
898 | 1016 | Remove File ${file_path} |
899 | 1017 | |
... | ... | @@ -903,4 +1021,4 @@ Resource resource.robot |
903 | 1021 | ... Підтвердити підписання контракту |
904 | 1022 | ... ${TENDER['TENDER_UAID']} |
905 | 1023 | ... ${0} |
906 | - Run Keyword And Ignore Error Remove From Dictionary ${USERS.users['${viewer}'].tender_data.contracts[0]} status | |
1024 | + Run Keyword And Ignore Error Remove From Dictionary ${USERS.users['${viewer}'].tender_data.data.contracts[0]} status | ... | ... |
... | ... | @@ -19,9 +19,9 @@ Library openprocurement_client_helper.py |
19 | 19 | Підготувати клієнт для користувача |
20 | 20 | [Arguments] ${username} |
21 | 21 | [Documentation] Відкрити браузер, створити об’єкт api wrapper, тощо |
22 | - Log ${api_host_url} | |
23 | - Log ${api_version} | |
24 | - ${api_wrapper}= prepare_api_wrapper ${USERS.users['${username}'].api_key} ${api_host_url} ${api_version} | |
22 | + Log ${API_HOST_URL} | |
23 | + Log ${API_VERSION} | |
24 | + ${api_wrapper}= prepare_api_wrapper ${USERS.users['${username}'].api_key} ${API_HOST_URL} ${API_VERSION} | |
25 | 25 | Set To Dictionary ${USERS.users['${username}']} client=${api_wrapper} |
26 | 26 | Set To Dictionary ${USERS.users['${username}']} access_token=${EMPTY} |
27 | 27 | ${id_map}= Create Dictionary |
... | ... | @@ -38,6 +38,7 @@ Library openprocurement_client_helper.py |
38 | 38 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} |
39 | 39 | ${reply}= Call Method ${USERS.users['${username}'].client} upload_document ${filepath} ${tender} |
40 | 40 | Log object data ${reply} reply |
41 | + #return here is needed to have uploaded doc data in `Завантажити документ в лот` keyword | |
41 | 42 | [return] ${reply} |
42 | 43 | |
43 | 44 | |
... | ... | @@ -77,8 +78,15 @@ Library openprocurement_client_helper.py |
77 | 78 | Створити тендер |
78 | 79 | [Arguments] ${username} ${tender_data} |
79 | 80 | ${tender}= Call Method ${USERS.users['${username}'].client} create_tender ${tender_data} |
80 | - Log object data ${tender} created_tender | |
81 | + Log ${tender} | |
81 | 82 | ${access_token}= Get Variable Value ${tender.access.token} |
83 | + ${status}= Set Variable If 'open' in '${MODE}' active.tendering ${EMPTY} | |
84 | + ${status}= Set Variable If 'below' in '${MODE}' active.enquiries ${status} | |
85 | + ${status}= Set Variable If '${status}'=='${EMPTY}' active ${status} | |
86 | + Set To Dictionary ${tender['data']} status=${status} | |
87 | + ${tender}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} | |
88 | + Log ${tender} | |
89 | + Log ${\n}${API_HOST_URL}/api/${API_VERSION}/tenders/${tender.data.id}${\n} WARN | |
82 | 90 | Set To Dictionary ${USERS.users['${username}']} access_token=${access_token} |
83 | 91 | Set To Dictionary ${USERS.users['${username}']} tender_data=${tender} |
84 | 92 | Log ${USERS.users['${username}'].tender_data} |
... | ... | @@ -86,16 +94,25 @@ Library openprocurement_client_helper.py |
86 | 94 | |
87 | 95 | |
88 | 96 | Пошук тендера по ідентифікатору |
89 | - [Arguments] ${username} ${tender_uaid} | |
97 | + [Arguments] ${username} ${tender_uaid} ${save_key}=tender_data | |
90 | 98 | ${internalid}= openprocurement_client.Отримати internal id по UAid ${username} ${tender_uaid} |
91 | 99 | ${tender}= Call Method ${USERS.users['${username}'].client} get_tender ${internalid} |
92 | 100 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} |
93 | - Set To Dictionary ${USERS.users['${username}']} tender_data=${tender} | |
101 | + Set To Dictionary ${USERS.users['${username}']} ${save_key}=${tender} | |
94 | 102 | ${tender}= munch_dict arg=${tender} |
95 | 103 | Log ${tender} |
96 | 104 | [return] ${tender} |
97 | 105 | |
98 | 106 | |
107 | +Отримати тендер другого етапу та зберегти його | |
108 | + [Arguments] ${username} ${tender_id} | |
109 | + ${response}= Call Method ${USERS.users['${username}'].client} patch_credentials ${tender_id} ${USERS.users['${username}'].access_token} | |
110 | + ${tender}= set_access_key ${response} ${response.access.token} | |
111 | + Set To Dictionary ${USERS.users['${username}']} access_token=${response.access.token} | |
112 | + Set To Dictionary ${USERS.users['${username}']} tender_data=${response} | |
113 | + Log ${tender.data.tenderID} | |
114 | + | |
115 | + | |
99 | 116 | Оновити сторінку з тендером |
100 | 117 | [Arguments] ${username} ${tender_uaid} |
101 | 118 | openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
... | ... | @@ -159,6 +176,7 @@ Library openprocurement_client_helper.py |
159 | 176 | [Arguments] ${username} ${tender_uaid} ${lot} |
160 | 177 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
161 | 178 | ${reply}= Call Method ${USERS.users['${username}'].client} create_lot ${tender} ${lot} |
179 | + #return here is needed to have created lot id in `Створити лот з предметом закупівлі` keyword | |
162 | 180 | [return] ${reply} |
163 | 181 | |
164 | 182 | |
... | ... | @@ -167,7 +185,6 @@ Library openprocurement_client_helper.py |
167 | 185 | ${reply}= openprocurement_client.Створити лот ${username} ${tender_uaid} ${lot} |
168 | 186 | ${lot_id}= get_id_from_object ${lot.data} |
169 | 187 | openprocurement_client.Додати предмет закупівлі в лот ${username} ${tender_uaid} ${lot_id} ${item} |
170 | - [return] ${reply} | |
171 | 188 | |
172 | 189 | |
173 | 190 | Отримати інформацію із лоту |
... | ... | @@ -183,7 +200,6 @@ Library openprocurement_client_helper.py |
183 | 200 | ${lot}= Create Dictionary data=${tender.data.lots[${lot_index}]} |
184 | 201 | Set_To_Object ${lot.data} ${fieldname} ${fieldvalue} |
185 | 202 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_lot ${tender} ${lot} |
186 | - [return] ${reply} | |
187 | 203 | |
188 | 204 | |
189 | 205 | Додати предмет закупівлі в лот |
... | ... | @@ -204,7 +220,6 @@ Library openprocurement_client_helper.py |
204 | 220 | ${doc}= openprocurement_client.Завантажити документ ${username} ${filepath} ${tender_uaid} |
205 | 221 | ${lot_doc}= test_lot_document_data ${doc} ${lot_id} |
206 | 222 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_document ${tender} ${lot_doc} |
207 | - [return] ${reply} | |
208 | 223 | |
209 | 224 | |
210 | 225 | Видалити лот |
... | ... | @@ -217,14 +232,16 @@ Library openprocurement_client_helper.py |
217 | 232 | \ Run Keyword If '${item.relatedLot}'=='${lot.data.id}' |
218 | 233 | \ ... openprocurement_client.Видалити предмет закупівлі ${username} ${tender_uaid} ${item_id} |
219 | 234 | ${reply}= Call Method ${USERS.users['${username}'].client} delete_lot ${tender} ${lot} |
220 | - [return] ${reply} | |
221 | 235 | |
222 | 236 | |
223 | 237 | Скасувати лот |
224 | 238 | [Arguments] ${username} ${tender_uaid} ${lot_id} ${cancellation_reason} ${document} ${new_description} |
225 | 239 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
226 | 240 | ${lot_id}= Get Variable Value ${tender.data.lots[${lot_index}].id} |
227 | - ${data}= Create dictionary reason=${cancellation_reason} cancellationOf=lot relatedLot=${lot_id} | |
241 | + ${data}= Create dictionary | |
242 | + ... reason=${cancellation_reason} | |
243 | + ... cancellationOf=lot | |
244 | + ... relatedLot=${lot_id} | |
228 | 245 | ${cancellation_data}= Create dictionary data=${data} |
229 | 246 | ${cancellation_data}= munch_dict arg=${cancellation_data} |
230 | 247 | ${cancel_reply}= Call Method ${USERS.users['${username}'].client} create_cancellation ${tender} ${cancellation_data} |
... | ... | @@ -302,7 +319,6 @@ Library openprocurement_client_helper.py |
302 | 319 | ${item_id}= Get Variable Value ${tender.data['items'][${item_index}].id} |
303 | 320 | ${question}= test_related_question ${question} item ${item_id} |
304 | 321 | ${reply}= Call Method ${USERS.users['${username}'].client} create_question ${tender} ${question} |
305 | - [return] ${reply} | |
306 | 322 | |
307 | 323 | |
308 | 324 | Задати запитання на лот |
... | ... | @@ -312,14 +328,12 @@ Library openprocurement_client_helper.py |
312 | 328 | ${lot_id}= Get Variable Value ${tender.data.lots[${lot_index}].id} |
313 | 329 | ${question}= test_related_question ${question} lot ${lot_id} |
314 | 330 | ${reply}= Call Method ${USERS.users['${username}'].client} create_question ${tender} ${question} |
315 | - [return] ${reply} | |
316 | 331 | |
317 | 332 | |
318 | 333 | Задати запитання на тендер |
319 | 334 | [Arguments] ${username} ${tender_uaid} ${question} |
320 | 335 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
321 | 336 | ${reply}= Call Method ${USERS.users['${username}'].client} create_question ${tender} ${question} |
322 | - [return] ${reply} | |
323 | 337 | |
324 | 338 | |
325 | 339 | Отримати інформацію із запитання |
... | ... | @@ -334,7 +348,6 @@ Library openprocurement_client_helper.py |
334 | 348 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} |
335 | 349 | ${answer_data.data.id}= openprocurement_client.Отримати інформацію із запитання ${username} ${tender_uaid} ${question_id} id |
336 | 350 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_question ${tender} ${answer_data} |
337 | - [return] ${reply} | |
338 | 351 | |
339 | 352 | ############################################################################## |
340 | 353 | # Claims |
... | ... | @@ -698,10 +711,13 @@ Library openprocurement_client_helper.py |
698 | 711 | \ ${code}= Get Variable Value ${tender.data.features[${feature_index}].code} |
699 | 712 | \ Set To Dictionary ${bid.data.parameters[${index}]} code=${code} |
700 | 713 | ${reply}= Call Method ${USERS.users['${username}'].client} create_bid ${tender} ${bid} |
714 | + Log ${reply} | |
715 | + ${status}= Set Variable If '${MODE}'=='openeu' pending active | |
716 | + Set To Dictionary ${reply['data']} status=${status} | |
717 | + ${reply_active}= Call Method ${USERS.users['${username}'].client} patch_bid ${tender} ${reply} | |
701 | 718 | Set To Dictionary ${USERS.users['${username}']} access_token=${reply['access']['token']} |
702 | 719 | Set To Dictionary ${USERS.users['${username}'].bidresponses['bid'].data} id=${reply['data']['id']} |
703 | - Log ${reply} | |
704 | - [return] ${reply} | |
720 | + Log ${reply_active} | |
705 | 721 | |
706 | 722 | |
707 | 723 | Змінити цінову пропозицію |
... | ... | @@ -709,57 +725,62 @@ Library openprocurement_client_helper.py |
709 | 725 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
710 | 726 | ${bid}= openprocurement_client.Отримати пропозицію ${username} ${tender_uaid} |
711 | 727 | Set_To_Object ${bid.data} ${fieldname} ${fieldvalue} |
712 | - ${tender}= set_access_key ${tender} ${USERS.users['${username}'].bidresponses['resp'].access.token} | |
728 | + ${tender}= set_access_key ${tender} ${USERS.users['${username}']['access_token']} | |
713 | 729 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_bid ${tender} ${bid} |
714 | 730 | Log ${reply} |
715 | - [return] ${reply} | |
716 | 731 | |
717 | 732 | |
718 | 733 | Скасувати цінову пропозицію |
719 | 734 | [Arguments] ${username} ${tender_uaid} |
720 | 735 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
721 | 736 | ${bid_id}= openprocurement_client.Отримати інформацію із пропозиції ${username} ${tender_uaid} id |
722 | - ${reply}= Call Method ${USERS.users['${username}'].client} delete_bid ${tender} ${bid_id} ${USERS.users['${username}'].bidresponses['resp'].access.token} | |
737 | + ${reply}= Call Method ${USERS.users['${username}'].client} delete_bid ${tender} ${bid_id} ${USERS.users['${username}']['access_token']} | |
723 | 738 | Log ${reply} |
724 | - [return] ${reply} | |
725 | 739 | |
726 | 740 | |
727 | 741 | Завантажити документ в ставку |
728 | 742 | [Arguments] ${username} ${path} ${tender_uaid} ${doc_type}=documents |
729 | - ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['resp'].data.id} | |
743 | + ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['bid'].data.id} | |
730 | 744 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
731 | - ${tender}= set_access_key ${tender} ${USERS.users['${username}'].bidresponses['resp'].access.token} | |
745 | + ${tender}= set_access_key ${tender} ${USERS.users['${username}']['access_token']} | |
732 | 746 | ${response}= Call Method ${USERS.users['${username}'].client} upload_bid_document ${path} ${tender} ${bid_id} ${doc_type} |
733 | - ${uploaded_file} = Create Dictionary filepath=${path} upload_response=${response} | |
747 | + ${uploaded_file} = Create Dictionary | |
748 | + ... filepath=${path} | |
749 | + ... upload_response=${response} | |
734 | 750 | Log object data ${uploaded_file} |
735 | 751 | [return] ${uploaded_file} |
736 | 752 | |
737 | 753 | |
738 | 754 | Змінити документ в ставці |
739 | - [Arguments] ${username} ${tender_uaid} ${path} ${docid} | |
740 | - ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['resp'].data.id} | |
755 | + [Arguments] ${username} ${tender_uaid} ${path} ${doc_id} | |
756 | + ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['bid'].data.id} | |
741 | 757 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
742 | - ${tender}= set_access_key ${tender} ${USERS.users['${username}'].bidresponses['resp'].access.token} | |
743 | - ${response}= Call Method ${USERS.users['${username}'].client} update_bid_document ${path} ${tender} ${bid_id} ${docid} | |
744 | - ${uploaded_file} = Create Dictionary filepath=${path} upload_response=${response} | |
758 | + ${tender}= set_access_key ${tender} ${USERS.users['${username}']['access_token']} | |
759 | + ${bid}= openprocurement_client.Отримати пропозицію ${username} ${tender_uaid} | |
760 | + ${bid_doc}= get_document_by_id ${bid.data} ${doc_id} | |
761 | + ${response}= Call Method ${USERS.users['${username}'].client} update_bid_document ${path} ${tender} ${bid_id} ${bid_doc['id']} | |
762 | + ${uploaded_file} = Create Dictionary | |
763 | + ... filepath=${path} | |
764 | + ... upload_response=${response} | |
745 | 765 | Log object data ${uploaded_file} |
746 | 766 | [return] ${uploaded_file} |
747 | 767 | |
748 | 768 | |
749 | 769 | Змінити документацію в ставці |
750 | - [Arguments] ${username} ${tender_uaid} ${doc_data} ${docid} | |
751 | - ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['resp'].data.id} | |
770 | + [Arguments] ${username} ${tender_uaid} ${doc_data} ${doc_id} | |
771 | + ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['bid'].data.id} | |
752 | 772 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
753 | - ${tender}= set_access_key ${tender} ${USERS.users['${username}'].bidresponses['resp'].access.token} | |
754 | - ${reply}= Call Method ${USERS.users['${username}'].client} patch_bid_document ${tender} ${doc_data} ${bid_id} ${docid} | |
755 | - [return] ${reply} | |
773 | + ${tender}= set_access_key ${tender} ${USERS.users['${username}']['access_token']} | |
774 | + ${bid}= openprocurement_client.Отримати пропозицію ${username} ${tender_uaid} | |
775 | + ${bid_doc}= get_document_by_id ${bid.data} ${doc_id} | |
776 | + ${reply}= Call Method ${USERS.users['${username}'].client} patch_bid_document ${tender} ${doc_data} ${bid_id} ${bid_doc['id']} | |
756 | 777 | |
757 | 778 | |
758 | 779 | Отримати пропозицію |
759 | 780 | [Arguments] ${username} ${tender_uaid} |
760 | 781 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
761 | - ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['resp'].data.id} | |
762 | - ${token}= Get Variable Value ${USERS.users['${username}'].bidresponses['resp'].access.token} | |
782 | + ${bid_id}= Get Variable Value ${USERS.users['${username}'].bidresponses['bid'].data.id} | |
783 | + ${token}= Get Variable Value ${USERS.users['${username}']['access_token']} | |
763 | 784 | ${reply}= Call Method ${USERS.users['${username}'].client} get_bid ${tender} ${bid_id} ${token} |
764 | 785 | ${reply}= munch_dict arg=${reply} |
765 | 786 | [return] ${reply} |
... | ... | @@ -791,7 +812,6 @@ Library openprocurement_client_helper.py |
791 | 812 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
792 | 813 | ${doc}= Call Method ${USERS.users['${username}'].client} upload_award_document ${document} ${tender} ${tender.data.awards[${award_num}].id} |
793 | 814 | Log ${doc} |
794 | - [Return] ${doc} | |
795 | 815 | |
796 | 816 | |
797 | 817 | Підтвердити постачальника |
... | ... | @@ -836,7 +856,6 @@ Library openprocurement_client_helper.py |
836 | 856 | Set To Dictionary ${award.data} id=${tender.data.awards[${award_num}].id} |
837 | 857 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_award ${tender} ${award} |
838 | 858 | Log ${reply} |
839 | - [Return] ${reply} | |
840 | 859 | |
841 | 860 | ############################################################################## |
842 | 861 | # Limited procurement |
... | ... | @@ -920,7 +939,7 @@ Library openprocurement_client_helper.py |
920 | 939 | |
921 | 940 | |
922 | 941 | Отримати інформацію із документа до скасування |
923 | - [Arguments] ${username} ${tender_uaid} ${doc_id} ${field_name} | |
942 | + [Arguments] ${username} ${tender_uaid} ${cancel_id} ${doc_id} ${field_name} | |
924 | 943 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
925 | 944 | ${document}= get_document_by_id ${tender.data} ${doc_id} |
926 | 945 | Log ${document} |
... | ... | @@ -928,7 +947,7 @@ Library openprocurement_client_helper.py |
928 | 947 | |
929 | 948 | |
930 | 949 | Отримати документ до скасування |
931 | - [Arguments] ${username} ${tender_uaid} ${doc_id} | |
950 | + [Arguments] ${username} ${tender_uaid} ${cancel_id} ${doc_id} | |
932 | 951 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
933 | 952 | ${document}= get_document_by_id ${tender.data} ${doc_id} |
934 | 953 | ${filename}= download_file_from_url ${document.url} ${OUTPUT_DIR}${/}${document.title} |
... | ... | @@ -962,7 +981,6 @@ Library openprocurement_client_helper.py |
962 | 981 | Set To Dictionary ${qualification.data} id=${tender.data.qualifications[${qualification_num}].id} eligible=${True} qualified=${True} |
963 | 982 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_qualification ${tender} ${qualification} |
964 | 983 | Log ${reply} |
965 | - [Return] ${reply} | |
966 | 984 | |
967 | 985 | |
968 | 986 | Відхилити кваліфікацію |
... | ... | @@ -976,7 +994,6 @@ Library openprocurement_client_helper.py |
976 | 994 | Set To Dictionary ${qualification.data} id=${tender.data.qualifications[${qualification_num}].id} |
977 | 995 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_qualification ${tender} ${qualification} |
978 | 996 | Log ${reply} |
979 | - [Return] ${reply} | |
980 | 997 | |
981 | 998 | |
982 | 999 | Завантажити документ у кваліфікацію |
... | ... | @@ -988,7 +1005,6 @@ Library openprocurement_client_helper.py |
988 | 1005 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
989 | 1006 | ${doc_reply}= Call Method ${USERS.users['${username}'].client} upload_qualification_document ${document} ${tender} ${tender.data.qualifications[${qualification_num}].id} |
990 | 1007 | Log ${doc_reply} |
991 | - [Return] ${doc_reply} | |
992 | 1008 | |
993 | 1009 | |
994 | 1010 | Скасувати кваліфікацію |
... | ... | @@ -1002,7 +1018,6 @@ Library openprocurement_client_helper.py |
1002 | 1018 | Set To Dictionary ${qualification.data} id=${tender.data.qualifications[${qualification_num}].id} |
1003 | 1019 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_qualification ${tender} ${qualification} |
1004 | 1020 | Log ${reply} |
1005 | - [Return] ${reply} | |
1006 | 1021 | |
1007 | 1022 | |
1008 | 1023 | Затвердити остаточне рішення кваліфікації |
... | ... | @@ -1019,7 +1034,6 @@ Library openprocurement_client_helper.py |
1019 | 1034 | set_to_object ${tender} data.status active.pre-qualification.stand-still |
1020 | 1035 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} |
1021 | 1036 | Log ${reply} |
1022 | - [Return] ${reply} | |
1023 | 1037 | |
1024 | 1038 | |
1025 | 1039 | Перевести тендер на статус очікування обробки мостом |
... | ... | @@ -1036,4 +1050,19 @@ Library openprocurement_client_helper.py |
1036 | 1050 | set_to_object ${tender} data.status active.stage2.waiting |
1037 | 1051 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} |
1038 | 1052 | Log ${reply} |
1039 | - [Return] ${reply} | |
1053 | + | |
1054 | + | |
1055 | +Активувати другий етап | |
1056 | + [Documentation] | |
1057 | + ... [Arguments] Username and tender uaid | |
1058 | + ... | |
1059 | + ... [Description] Find tender using uaid and call patch_tender | |
1060 | + ... | |
1061 | + ... [Return] Reply of API | |
1062 | + [Arguments] ${username} ${tender_uaid} | |
1063 | + ${internal_id}= openprocurement_client.Отримати internal id по UAid ${username} ${tender_uaid} | |
1064 | + ${tender}= create_data_dict data.id ${internal_id} | |
1065 | + ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} | |
1066 | + set_to_object ${tender} data.status active.tendering | |
1067 | + ${reply}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} | |
1068 | + Log ${reply} | ... | ... |
... | ... | @@ -10,7 +10,7 @@ import urllib |
10 | 10 | def retry_if_request_failed(exception): |
11 | 11 | if isinstance(exception, RequestFailed): |
12 | 12 | status_code = getattr(exception, 'status_int', None) |
13 | - if 500 <= status_code < 600 or status_code == 429: | |
13 | + if 500 <= status_code < 600 or status_code in (409, 429): | |
14 | 14 | return True |
15 | 15 | else: |
16 | 16 | return False |
... | ... | @@ -65,6 +65,10 @@ def get_document_by_id(data, doc_id): |
65 | 65 | for document in cancellation.get('documents', []): |
66 | 66 | if doc_id in document.get('title', ''): |
67 | 67 | return document |
68 | + for bid in data.get('bids', []): | |
69 | + for document in bid.get('documents', []): | |
70 | + if doc_id in document.get('title', ''): | |
71 | + return document | |
68 | 72 | raise Exception('Document with id {} not found'.format(doc_id)) |
69 | 73 | |
70 | 74 | ... | ... |
... | ... | @@ -20,6 +20,7 @@ Suite Teardown Test Suite Teardown |
20 | 20 | ############################################################################################## |
21 | 21 | # TENDER CANCELLATION |
22 | 22 | ############################################################################################## |
23 | + | |
23 | 24 | Можливість скасувати тендер |
24 | 25 | [Tags] ${USERS.users['${tender_owner}'].broker}: Скасування тендера |
25 | 26 | ... tender_owner |
... | ... | @@ -46,7 +47,7 @@ Suite Teardown Test Suite Teardown |
46 | 47 | ... ${USERS.users['${viewer}'].broker} |
47 | 48 | ... tender_cancelation |
48 | 49 | Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']} |
49 | - ... ${USERS.users['${tender_owner}']['cancellation_data']['cancellation_reason']} | |
50 | + ... ${USERS.users['${tender_owner}']['tender_cancellation_data']['cancellation_reason']} | |
50 | 51 | ... cancellations[0].reason |
51 | 52 | |
52 | 53 | |
... | ... | @@ -55,7 +56,7 @@ Suite Teardown Test Suite Teardown |
55 | 56 | ... viewer |
56 | 57 | ... ${USERS.users['${viewer}'].broker} |
57 | 58 | ... tender_cancelation |
58 | - Звірити відображення поля description документа до скасування ${USERS.users['${tender_owner}']['cancellation_data']['document']['doc_id']} із ${USERS.users['${tender_owner}']['cancellation_data']['description']} для користувача ${viewer} | |
59 | + Звірити відображення поля description документа ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['tender_cancellation_data']['cancellation_id']} із ${USERS.users['${tender_owner}']['tender_cancellation_data']['description']} для користувача ${viewer} | |
59 | 60 | |
60 | 61 | |
61 | 62 | Відображення заголовку документа до скасування тендера |
... | ... | @@ -63,7 +64,7 @@ Suite Teardown Test Suite Teardown |
63 | 64 | ... viewer |
64 | 65 | ... ${USERS.users['${viewer}'].broker} |
65 | 66 | ... tender_cancelation |
66 | - Звірити відображення поля title документа до скасування ${USERS.users['${tender_owner}']['cancellation_data']['document']['doc_id']} із ${USERS.users['${tender_owner}']['cancellation_data']['document']['doc_name']} для користувача ${viewer} | |
67 | + Звірити відображення поля title документа ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['tender_cancellation_data']['cancellation_id']} із ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_name']} для користувача ${viewer} | |
67 | 68 | |
68 | 69 | |
69 | 70 | Відображення вмісту документа до скасування тендера |
... | ... | @@ -71,7 +72,7 @@ Suite Teardown Test Suite Teardown |
71 | 72 | ... viewer |
72 | 73 | ... ${USERS.users['${viewer}'].broker} |
73 | 74 | ... tender_cancelation |
74 | - Звірити відображення вмісту документа до скасування ${USERS.users['${tender_owner}']['cancellation_data']['document']['doc_id']} з ${USERS.users['${tender_owner}']['cancellation_data']['document']['doc_content']} для користувача ${viewer} | |
75 | + Звірити відображення вмісту документа ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['tender_cancellation_data']['cancellation_id']} з ${USERS.users['${tender_owner}']['tender_cancellation_data']['document']['doc_content']} для користувача ${viewer} | |
75 | 76 | |
76 | 77 | ############################################################################################## |
77 | 78 | # LOT CANCELLATION |
... | ... | @@ -103,7 +104,7 @@ Suite Teardown Test Suite Teardown |
103 | 104 | ... ${USERS.users['${viewer}'].broker} |
104 | 105 | ... lot_cancelation |
105 | 106 | Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']} |
106 | - ... ${USERS.users['${tender_owner}']['cancellation_data']['cancellation_reason']} | |
107 | + ... ${USERS.users['${tender_owner}']['lot_cancellation_data']['cancellation_reason']} | |
107 | 108 | ... cancellations[0].reason |
108 | 109 | |
109 | 110 | |
... | ... | @@ -112,7 +113,7 @@ Suite Teardown Test Suite Teardown |
112 | 113 | ... viewer |
113 | 114 | ... ${USERS.users['${viewer}'].broker} |
114 | 115 | ... lot_cancelation |
115 | - Звірити відображення поля description документа до скасування ${USERS.users['${tender_owner}']['cancellation_data']['document']['doc_id']} із ${USERS.users['${tender_owner}']['cancellation_data']['description']} для користувача ${viewer} | |
116 | + Звірити відображення поля description документа ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['lot_cancellation_data']['cancellation_id']} із ${USERS.users['${tender_owner}']['lot_cancellation_data']['description']} для користувача ${viewer} | |
116 | 117 | |
117 | 118 | |
118 | 119 | Відображення заголовку документа до скасування лота |
... | ... | @@ -120,7 +121,7 @@ Suite Teardown Test Suite Teardown |
120 | 121 | ... viewer |
121 | 122 | ... ${USERS.users['${viewer}'].broker} |
122 | 123 | ... lot_cancelation |
123 | - Звірити відображення поля description документа до скасування ${USERS.users['${tender_owner}']['cancellation_data']['document']['doc_id']} із ${USERS.users['${tender_owner}']['cancellation_data']['document']['doc_name']} для користувача ${viewer} | |
124 | + Звірити відображення поля title документа ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['lot_cancellation_data']['cancellation_id']} із ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_name']} для користувача ${viewer} | |
124 | 125 | |
125 | 126 | |
126 | 127 | Відображення вмісту документа до скасування лота |
... | ... | @@ -128,7 +129,7 @@ Suite Teardown Test Suite Teardown |
128 | 129 | ... viewer |
129 | 130 | ... ${USERS.users['${viewer}'].broker} |
130 | 131 | ... lot_cancelation |
131 | - Звірити відображення вмісту документа до скасування ${USERS.users['${tender_owner}']['cancellation_data']['document']['doc_id']} з ${USERS.users['${tender_owner}']['cancellation_data']['document']['doc_content']} для користувача ${viewer} | |
132 | + Звірити відображення вмісту документа ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_id']} до скасування ${USERS.users['${tender_owner}']['lot_cancellation_data']['cancellation_id']} з ${USERS.users['${tender_owner}']['lot_cancellation_data']['document']['doc_content']} для користувача ${viewer} | |
132 | 133 | |
133 | 134 | ############################################################################################## |
134 | 135 | # DELETING LOT |
... | ... | @@ -145,17 +146,18 @@ Suite Teardown Test Suite Teardown |
145 | 146 | |
146 | 147 | *** Keywords *** |
147 | 148 | Можливість скасувати тендер |
148 | - ${cancellation_data}= Підготувати дані про скасування ${tender_owner} | |
149 | + ${cancellation_data}= Підготувати дані про скасування | |
149 | 150 | Run As ${tender_owner} |
150 | 151 | ... Скасувати закупівлю |
151 | 152 | ... ${TENDER['TENDER_UAID']} |
152 | 153 | ... ${cancellation_data['cancellation_reason']} |
153 | 154 | ... ${cancellation_data['document']['doc_path']} |
154 | 155 | ... ${cancellation_data['description']} |
156 | + Set To Dictionary ${USERS.users['${tender_owner}']} tender_cancellation_data=${cancellation_data} | |
155 | 157 | |
156 | 158 | |
157 | 159 | Можливість скасувати лот |
158 | - ${cancellation_data}= Підготувати дані про скасування ${tender_owner} | |
160 | + ${cancellation_data}= Підготувати дані про скасування | |
159 | 161 | Run As ${tender_owner} |
160 | 162 | ... Скасувати лот |
161 | 163 | ... ${TENDER['TENDER_UAID']} |
... | ... | @@ -163,14 +165,15 @@ Suite Teardown Test Suite Teardown |
163 | 165 | ... ${cancellation_data['cancellation_reason']} |
164 | 166 | ... ${cancellation_data['document']['doc_path']} |
165 | 167 | ... ${cancellation_data['description']} |
168 | + Set To Dictionary ${USERS.users['${tender_owner}']} lot_cancellation_data=${cancellation_data} | |
166 | 169 | |
167 | 170 | |
168 | -Звірити відображення поля ${field} документа до скасування ${doc_id} із ${left} для користувача ${username} | |
169 | - ${right}= Run As ${username} Отримати інформацію із документа ${TENDER['TENDER_UAID']} ${doc_id} ${field} | |
171 | +Звірити відображення поля ${field} документа ${doc_id} до скасування ${cancel_id} із ${left} для користувача ${username} | |
172 | + ${right}= Run As ${username} Отримати інформацію із документа до скасування ${TENDER['TENDER_UAID']} ${cancel_id} ${doc_id} ${field} | |
170 | 173 | Порівняти об'єкти ${left} ${right} |
171 | 174 | |
172 | 175 | |
173 | -Звірити відображення вмісту документа до скасування ${doc_id} з ${left} для користувача ${username} | |
174 | - ${file_name}= Run as ${username} Отримати документ до скасування ${TENDER['TENDER_UAID']} ${doc_id} | |
176 | +Звірити відображення вмісту документа ${doc_id} до скасування ${cancel_id} з ${left} для користувача ${username} | |
177 | + ${file_name}= Run as ${username} Отримати документ до скасування ${TENDER['TENDER_UAID']} ${cancel_id} ${doc_id} | |
175 | 178 | ${right}= Get File ${OUTPUT_DIR}${/}${file_name} |
176 | 179 | Порівняти об'єкти ${left} ${right} | ... | ... |
... | ... | @@ -202,10 +202,10 @@ users: |
202 | 202 | size: [1000, 720] |
203 | 203 | PublicPortal_Viewer: |
204 | 204 | broker: PublicPortal |
205 | - homepage: "http://dev.prozorro.org/" | |
206 | - browser: chrome | |
207 | - position: [0, 0] | |
208 | - size: [640, 480] | |
205 | + homepage: "https://qa23.prozorro.gov.ua/tender/search/" | |
206 | + browser: Chrome | |
207 | + position: [450, 0] | |
208 | + size: [1200, 720] | |
209 | 209 | SmartTender_Viewer: |
210 | 210 | broker: SmartTender |
211 | 211 | homepage: "http://test.smarttender.biz/test-tenders?allcat=1" | ... | ... |
1 | 1 | # -*- coding: utf-8 - |
2 | 2 | from datetime import timedelta |
3 | 3 | from faker import Factory |
4 | +from faker.providers.company.en_US import Provider as CompanyProviderEnUs | |
5 | +from faker.providers.company.ru_RU import Provider as CompanyProviderRuRu | |
4 | 6 | from munch import munchify |
5 | 7 | from uuid import uuid4 |
6 | 8 | from tempfile import NamedTemporaryFile |
... | ... | @@ -10,10 +12,16 @@ import os |
10 | 12 | import random |
11 | 13 | |
12 | 14 | |
13 | -fake = Factory.create('uk_UA') | |
14 | -fake_ru = Factory.create('ru') | |
15 | -fake_en = Factory.create() | |
16 | -fake.add_provider(OP_Provider) | |
15 | +fake_en = Factory.create(locale='en_US') | |
16 | +fake_ru = Factory.create(locale='ru_RU') | |
17 | +fake_uk = Factory.create(locale='uk_UA') | |
18 | +fake_uk.add_provider(OP_Provider) | |
19 | +fake = fake_uk | |
20 | + | |
21 | +# This workaround fixes an error caused by missing "catch_phrase" class method | |
22 | +# for the "ru_RU" locale in Faker >= 0.7.4 | |
23 | +fake_ru.add_provider(CompanyProviderEnUs) | |
24 | +fake_ru.add_provider(CompanyProviderRuRu) | |
17 | 25 | |
18 | 26 | |
19 | 27 | def create_fake_sentence(): |
... | ... | @@ -45,7 +53,7 @@ def create_fake_doc(): |
45 | 53 | tf = NamedTemporaryFile(delete=False, suffix=suffix, prefix=prefix) |
46 | 54 | tf.write(content) |
47 | 55 | tf.close() |
48 | - return tf.name, os.path.basename(tf.name), content | |
56 | + return tf.name.replace('\\', '\\\\'), os.path.basename(tf.name), content | |
49 | 57 | |
50 | 58 | |
51 | 59 | def test_tender_data(params, periods=("enquiry", "tender")): |
... | ... | @@ -127,6 +135,7 @@ def test_tender_data(params, periods=("enquiry", "tender")): |
127 | 135 | data['features'].append(new_feature) |
128 | 136 | if not data['features']: |
129 | 137 | del data['features'] |
138 | + data['status'] = 'draft' | |
130 | 139 | return munchify(data) |
131 | 140 | |
132 | 141 | |
... | ... | @@ -136,6 +145,8 @@ def test_tender_data_limited(params): |
136 | 145 | del data["minimalStep"] |
137 | 146 | del data["enquiryPeriod"] |
138 | 147 | del data["tenderPeriod"] |
148 | + for lot in data.get('lots', []): | |
149 | + lot.pop('minimalStep', None) | |
139 | 150 | data["procuringEntity"]["kind"] = "general" |
140 | 151 | data.update({"procurementMethodType": params['mode'], "procurementMethod": "limited"}) |
141 | 152 | if params['mode'] == "negotiation": |
... | ... | @@ -267,6 +278,7 @@ def test_bid_data(): |
267 | 278 | }) |
268 | 279 | bid.data.tenderers[0].address.countryName_en = translate_country_en(bid.data.tenderers[0].address.countryName) |
269 | 280 | bid.data.tenderers[0].address.countryName_ru = translate_country_ru(bid.data.tenderers[0].address.countryName) |
281 | + bid.data['status'] = 'draft' | |
270 | 282 | return bid |
271 | 283 | |
272 | 284 | |
... | ... | @@ -302,7 +314,10 @@ def test_item_data(cpv=None): |
302 | 314 | data["description_en"] = field_with_id("i", data["description_en"]) |
303 | 315 | data["description_ru"] = field_with_id("i", data["description_ru"]) |
304 | 316 | days = fake.random_int(min=1, max=30) |
305 | - data["deliveryDate"] = {"endDate": (get_now() + timedelta(days=days)).isoformat()} | |
317 | + data["deliveryDate"] = { | |
318 | + "startDate":(get_now() + timedelta(days=days)).isoformat(), | |
319 | + "endDate":(get_now() + timedelta(days=days)).isoformat() | |
320 | + } | |
306 | 321 | data["deliveryAddress"]["countryName_en"] = translate_country_en(data["deliveryAddress"]["countryName"]) |
307 | 322 | data["deliveryAddress"]["countryName_ru"] = translate_country_ru(data["deliveryAddress"]["countryName"]) |
308 | 323 | return munchify(data) | ... | ... |
... | ... | @@ -35,7 +35,7 @@ Set Suite Variable With Default Value |
35 | 35 | |
36 | 36 | |
37 | 37 | Порівняти системний і серверний час |
38 | - ${server_time}= request ${api_host_url} HEAD | |
38 | + ${server_time}= request ${API_HOST_URL} HEAD | |
39 | 39 | ${local_time}= Get current TZdate |
40 | 40 | Log ${server_time.headers['date']} |
41 | 41 | Log ${local_time} |
... | ... | @@ -60,8 +60,8 @@ Set Suite Variable With Default Value |
60 | 60 | |
61 | 61 | |
62 | 62 | Завантажуємо дані про користувачів і майданчики |
63 | - Log ${broker} | |
64 | - Log ${role} | |
63 | + Log ${BROKER} | |
64 | + Log ${ROLE} | |
65 | 65 | # Suite variable; should be present in every test suite |
66 | 66 | # in `*** Variables ***` section |
67 | 67 | Log Many @{USED_ROLES} |
... | ... | @@ -83,13 +83,13 @@ Set Suite Variable With Default Value |
83 | 83 | ${used_users}= Create List |
84 | 84 | |
85 | 85 | # Handle `-v role:something` |
86 | - Run Keyword Unless '${role}' in @{USED_ROLES} | |
86 | + Run Keyword Unless '${ROLE}' in @{USED_ROLES} | |
87 | 87 | ... Log |
88 | - ... Role ${role} is not used in this test suite. | |
88 | + ... Role ${ROLE} is not used in this test suite. | |
89 | 89 | ... WARN |
90 | 90 | Set Suite Variable With Default Value |
91 | - ... ${role} | |
92 | - ... ${BROKERS['${broker}'].roles.${role}} | |
91 | + ... ${ROLE} | |
92 | + ... ${BROKERS['${BROKER}'].roles.${ROLE}} | |
93 | 93 | |
94 | 94 | # Set default value for each role if it is not set yet; |
95 | 95 | # fill `used_users`; |
... | ... | @@ -161,7 +161,7 @@ Get Broker Property By Username |
161 | 161 | |
162 | 162 | Створити артефакт |
163 | 163 | ${artifact}= Create Dictionary |
164 | - ... api_version=${api_version} | |
164 | + ... api_version=${API_VERSION} | |
165 | 165 | ... tender_uaid=${TENDER['TENDER_UAID']} |
166 | 166 | ... last_modification_date=${TENDER['LAST_MODIFICATION_DATE']} |
167 | 167 | ... mode=${MODE} |
... | ... | @@ -183,7 +183,10 @@ Get Broker Property By Username |
183 | 183 | ${file_path}= Get Variable Value ${ARTIFACT_FILE} artifact.yaml |
184 | 184 | ${ARTIFACT}= load_data_from ${file_path} |
185 | 185 | Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${tender_owner}']} access_token=${ARTIFACT.access_token} |
186 | - ${TENDER}= Create Dictionary TENDER_UAID=${ARTIFACT.tender_uaid} LAST_MODIFICATION_DATE=${ARTIFACT.last_modification_date} LOT_ID=${Empty} | |
186 | + ${TENDER}= Create Dictionary | |
187 | + ... TENDER_UAID=${ARTIFACT.tender_uaid} | |
188 | + ... LAST_MODIFICATION_DATE=${ARTIFACT.last_modification_date} | |
189 | + ... LOT_ID=${Empty} | |
187 | 190 | ${lot_index}= Get Variable Value ${lot_index} 0 |
188 | 191 | Run Keyword And Ignore Error Set To Dictionary ${TENDER} LOT_ID=${ARTIFACT.lots[${lot_index}]} |
189 | 192 | ${MODE}= Get Variable Value ${MODE} ${ARTIFACT.mode} |
... | ... | @@ -249,33 +252,45 @@ Get Broker Property By Username |
249 | 252 | |
250 | 253 | |
251 | 254 | Підготувати дані для подання пропозиції |
252 | - [Arguments] ${username} | |
253 | - ${bid}= generate_test_bid_data ${USERS.users['${username}'].tender_data.data} | |
255 | + [Arguments] | |
256 | + ${bid}= generate_test_bid_data ${USERS.users['${tender_owner}'].initial_data.data} | |
257 | + [Return] ${bid} | |
258 | + | |
259 | + | |
260 | +Підготувати дані для подання пропозиції для другого етапу | |
261 | + [Arguments] ${index}=0 | |
262 | + ${bid}= generate_test_bid_data_second_stage ${USERS.users['${tender_owner}'].initialdata.data} ${index} | |
254 | 263 | [Return] ${bid} |
255 | 264 | |
256 | 265 | |
257 | 266 | Підготувати дані про постачальника |
258 | - [Arguments] ${username} | |
267 | + [Arguments] ${username} ${lotIndex}=${-1} | |
268 | + ${lotIndex}= Convert To Integer ${lotIndex} | |
259 | 269 | ${supplier_data}= test_supplier_data |
260 | - Set To Dictionary ${USERS.users['${username}']} supplier_data=${supplier_data} | |
270 | + Run Keyword If ${lotIndex} > -1 Set To Dictionary ${supplier_data.data} lotID=${USERS.users['${tender_owner}'].initial_data.data['lots'][${lotIndex}]['id']} | |
271 | + Set To Dictionary ${USERS.users['${tender_owner}']} supplier_data=${supplier_data} | |
261 | 272 | Log ${supplier_data} |
262 | 273 | [Return] ${supplier_data} |
263 | 274 | |
264 | 275 | |
265 | 276 | Підготувати дані про скасування |
266 | - [Arguments] ${username} | |
267 | 277 | ${cancellation_reason}= create_fake_sentence |
278 | + ${cancellation_reason}= field_with_id c ${cancellation_reason} | |
279 | + ${cancellation_id}= get_id_from_string ${cancellation_reason} | |
268 | 280 | ${file_path} ${file_name} ${file_content}= create_fake_doc |
269 | - ${doc_id}= get_id_from_doc_name ${file_name} | |
281 | + ${doc_id}= get_id_from_string ${file_name} | |
270 | 282 | ${document}= Create Dictionary |
271 | 283 | ... doc_path=${file_path} |
272 | 284 | ... doc_name=${file_name} |
273 | 285 | ... doc_content=${file_content} |
274 | 286 | ... doc_id=${doc_id} |
275 | 287 | ${new_description}= create_fake_sentence |
276 | - ${cancellation_data}= Create Dictionary cancellation_reason=${cancellation_reason} document=${document} description=${new_description} | |
288 | + ${cancellation_data}= Create Dictionary | |
289 | + ... cancellation_reason=${cancellation_reason} | |
290 | + ... cancellation_id=${cancellation_id} | |
291 | + ... document=${document} | |
292 | + ... description=${new_description} | |
277 | 293 | ${cancellation_data}= munchify ${cancellation_data} |
278 | - Set To Dictionary ${USERS.users['${username}']} cancellation_data=${cancellation_data} | |
279 | 294 | [Return] ${cancellation_data} |
280 | 295 | |
281 | 296 | ... | ... |
... | ... | @@ -46,7 +46,7 @@ ${ITEM_MEAT} ${False} |
46 | 46 | ... add_award |
47 | 47 | ... level1 |
48 | 48 | [Teardown] Оновити LAST_MODIFICATION_DATE |
49 | - Можливість зареєструвати, додати документацію і підтвердити постачальника до закупівлі | |
49 | + Можливість зареєструвати, додати документацію і підтвердити першого постачальника до закупівлі | |
50 | 50 | |
51 | 51 | |
52 | 52 | Можливість знайти переговорну процедуру за нагальною потребою по ідентифікатору | ... | ... |
... | ... | @@ -46,7 +46,7 @@ ${ITEM_MEAT} ${False} |
46 | 46 | ... add_award |
47 | 47 | ... level1 |
48 | 48 | [Teardown] Оновити LAST_MODIFICATION_DATE |
49 | - Можливість зареєструвати, додати документацію і підтвердити постачальника до закупівлі | |
49 | + Можливість зареєструвати, додати документацію і підтвердити першого постачальника до закупівлі | |
50 | 50 | |
51 | 51 | |
52 | 52 | Можливість знайти переговорну процедуру по ідентифікатору | ... | ... |
... | ... | @@ -169,8 +169,15 @@ ${ITEM_MEAT} ${True} |
169 | 169 | [Setup] Дочекатись синхронізації з майданчиком ${viewer} |
170 | 170 | Звірити відображення поля description усіх предметів для усіх користувачів |
171 | 171 | |
172 | +Відображення дати початку доставки номенклатур тендера | |
173 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури тендера | |
174 | + ... viewer | |
175 | + ... ${USERS.users['${viewer}'].broker} | |
176 | + ... tender_view level2 | |
177 | + Звірити відображення дати deliveryDate.startDate усіх предметів для користувача ${viewer} | |
172 | 178 | |
173 | -Відображення дати доставки номенклатур тендера | |
179 | + | |
180 | +Відображення дати кінця доставки номенклатур тендера | |
174 | 181 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури тендера |
175 | 182 | ... viewer |
176 | 183 | ... ${USERS.users['${viewer}'].broker} |
... | ... | @@ -1638,7 +1645,7 @@ ${ITEM_MEAT} ${True} |
1638 | 1645 | Звірити статус тендера ${tender_owner} ${TENDER['TENDER_UAID']} active.stage2.pending |
1639 | 1646 | |
1640 | 1647 | |
1641 | -Можливість перевести статус очікування обробки мостом | |
1648 | +Можливість перевести тендер в статус очікування обробки мостом | |
1642 | 1649 | [Tags] ${USERS.users['${tender_owner}'].broker}: Процес переведення статусу у active.stage2.waiting. |
1643 | 1650 | ... tender_owner |
1644 | 1651 | ... ${USERS.users['${tender_owner}'].broker} |
... | ... | @@ -1657,3 +1664,189 @@ ${ITEM_MEAT} ${True} |
1657 | 1664 | Дочекатися створення нового етапу мостом ${tender_owner} ${TENDER['TENDER_UAID']} |
1658 | 1665 | Звірити статус тендера ${tender_owner} ${TENDER['TENDER_UAID']} complete |
1659 | 1666 | |
1667 | + | |
1668 | +Можливість отримати тендер другого етапу | |
1669 | + [Tags] ${USERS.user['${tender_owner}'].broker}: Отримати id нового тендеру | |
1670 | + ... tender_owner | |
1671 | + ... ${USERS.users['${tender_owner}'].broker} | |
1672 | + ... get_second_stage | |
1673 | + Отримати дані із поля stage2TenderID тендера для усіх користувачів | |
1674 | + ${tender_UAID_second_stage}= Catenate SEPARATOR= ${TENDER['TENDER_UAID']} .2 | |
1675 | + Можливість знайти тендер по ідентифікатору ${tender_UAID_second_stage} та зберегти його в second_stage_data для користувача ${tender_owner} | |
1676 | + | |
1677 | + | |
1678 | +Відображення заголовку тендера другого етапу | |
1679 | + [Tags] ${USERS.user['${tender_owner}'].broker}: Відображення основних даних тендера другого етапу | |
1680 | + ... viewer | |
1681 | + ... ${USERS.users['${tender_owner}'].broker} | |
1682 | + ... compare_stages | |
1683 | + Звірити відображення поля title тендера із ${USERS.users['${tender_owner}'].second_stage_data.data.title} для користувача ${viewer} | |
1684 | + | |
1685 | + | |
1686 | +Відображення мінімального кроку закупівлі другого етапу | |
1687 | + [Tags] ${USERS.user['${tender_owner}'].broker}: Відображення основних даних тендера другого етапу | |
1688 | + ... viewer | |
1689 | + ... ${USERS.users['${tender_owner}'].broker} | |
1690 | + ... compare_stages | |
1691 | + Звірити відображення поля minimalStep тендера із ${USERS.users['${tender_owner}'].second_stage_data.data.minimalStep} для користувача ${viewer} | |
1692 | + | |
1693 | + | |
1694 | +Відображення доступного бюджету закупівлі другого етапу | |
1695 | + [Tags] ${USERS.user['${tender_owner}'].broker}: Відображення основних даних тендера другого етапу | |
1696 | + ... viewer | |
1697 | + ... ${USERS.users['${tender_owner}'].broker} | |
1698 | + ... compare_stages | |
1699 | + Звірити відображення поля value тендера із ${USERS.users['${tender_owner}'].second_stage_data.data.value} для користувача ${viewer} | |
1700 | + | |
1701 | + | |
1702 | +Відображення опису закупівлі другого етапу | |
1703 | + [Tags] ${USERS.user['${tender_owner}'].broker}: Відображення основних даних тендера другого етапу | |
1704 | + ... viewer | |
1705 | + ... ${USERS.users['${tender_owner}'].broker} | |
1706 | + ... compare_stages | |
1707 | + Звірити відображення поля description тендера із ${USERS.users['${tender_owner}'].second_stage_data.data.description} для користувача ${viewer} | |
1708 | + | |
1709 | + | |
1710 | +Відображення імені замовника тендера для другого етапу | |
1711 | + [Tags] ${USERS.user['${tender_owner}'].broker}: Відображення основних даних тендера другого етапу | |
1712 | + ... viewer | |
1713 | + ... ${USERS.users['${tender_owner}'].broker} | |
1714 | + ... compare_stages | |
1715 | + Звірити відображення поля procuringEntity.name тендера із ${USERS.users['${tender_owner}'].second_stage_data.data.procuringEntity.name} для користувача ${viewer} | |
1716 | + | |
1717 | +############################################################################################## | |
1718 | +# Відображення основних даних лоту для другого етапу | |
1719 | +############################################################################################## | |
1720 | + | |
1721 | +Відображення лоту тендера другого етапу | |
1722 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення лоту тендера другого етапу | |
1723 | + ... viewer tender_owner provider provider1 | |
1724 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} | |
1725 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
1726 | + ... compare_stages | |
1727 | + Звірити відображення поля title усіх лотів другого етапу для усіх користувачів | |
1728 | + | |
1729 | + | |
1730 | +Відображення опису лотів для тендера другого етапу | |
1731 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення лоту тендера другого етапу | |
1732 | + ... viewer | |
1733 | + ... ${USERS.users['${viewer}'].broker} | |
1734 | + ... compare_stages | |
1735 | + Звірити відображення поля description усіх лотів другого етапу для користувача ${viewer} | |
1736 | + | |
1737 | + | |
1738 | +Відображення бюджету лотів для тендера другого етапу | |
1739 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення лоту тендера другого етапу | |
1740 | + ... viewer tender_owner provider provider1 | |
1741 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} | |
1742 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
1743 | + ... compare_stages | |
1744 | + Звірити відображення поля value.amount усіх лотів другого етапу для усіх користувачів | |
1745 | + | |
1746 | + | |
1747 | +Відображення валюти лотів для тендера другого етапу | |
1748 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення лоту тендера другого етапу | |
1749 | + ... viewer | |
1750 | + ... ${USERS.users['${viewer}'].broker} | |
1751 | + ... compare_stages | |
1752 | + Звірити відображення поля value.currency усіх лотів другого етапу для користувача ${viewer} | |
1753 | + | |
1754 | + | |
1755 | +Відображення ПДВ в бюджеті лотів для тендера другого етапу | |
1756 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення лоту тендера другого етапу | |
1757 | + ... viewer | |
1758 | + ... ${USERS.users['${viewer}'].broker} | |
1759 | + ... compare_stages | |
1760 | + Звірити відображення поля value.valueAddedTaxIncluded усіх лотів другого етапу для користувача ${viewer} | |
1761 | + | |
1762 | + | |
1763 | +Відображення мінімального кроку лотів для тендера другого етапу | |
1764 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення лоту тендера другого етапу | |
1765 | + ... viewer tender_owner provider provider1 | |
1766 | + ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} | |
1767 | + ... ${USERS.users['${provider}'].broker} ${USERS.users['${provider1}'].broker} | |
1768 | + ... compare_stages | |
1769 | + Звірити відображення поля minimalStep.amount усіх лотів другого етапу для усіх користувачів | |
1770 | + | |
1771 | + | |
1772 | +Відображення валюти мінімального кроку лотів для тендера другого етапу | |
1773 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення лоту тендера другого етапу | |
1774 | + ... viewer | |
1775 | + ... ${USERS.users['${viewer}'].broker} | |
1776 | + ... compare_stages | |
1777 | + Звірити відображення поля minimalStep.currency усіх лотів другого етапу для користувача ${viewer} | |
1778 | + | |
1779 | + | |
1780 | +Відображення ПДВ в мінімальному кроці лотів для тендера другого етапу | |
1781 | + [Tags] ${USERS.users['${viewer}'].broker}: Відображення лоту тендера другого етапу | |
1782 | + ... viewer | |
1783 | + ... ${USERS.users['${viewer}'].broker} | |
1784 | + ... compare_stages | |
1785 | + Звірити відображення поля minimalStep.valueAddedTaxIncluded усіх лотів другого етапу для користувача ${viewer} | |
1786 | + | |
1787 | +############################################################################################## | |
1788 | +# END | |
1789 | +############################################################################################## | |
1790 | + | |
1791 | +Можливість отримати доступ до тендера другого етапу | |
1792 | + [Tags] ${USERS.user['${tender_owner}'].broker}: Отримати токен для другог етапу | |
1793 | + ... tender_owner | |
1794 | + ... ${USERS.users['${tender_owner}'].broker} | |
1795 | + ... save_tender_second_stage | |
1796 | + Отримати доступ до тендера другого етапу та зберегти його | |
1797 | + | |
1798 | + | |
1799 | +Можливість активувати тендер другого етапу | |
1800 | + [Tags] ${USERS.users['${viewer}'].broker}: Активувати тендер другого етапу | |
1801 | + ... tender_owner | |
1802 | + ... ${USERS.users['${tender_owner}'].broker} | |
1803 | + ... activate_second_stage | |
1804 | + Активувати тендер другого етапу | |
1805 | + | |
1806 | + | |
1807 | +Можливість подати пропозицію першим учасником на другому етапі | |
1808 | + [Tags] ${USERS.users['${provider}'].broker}: Подання пропозиції | |
1809 | + ... provider | |
1810 | + ... ${USERS.users['${provider}'].broker} | |
1811 | + ... make_bid_by_provider_second_stage | |
1812 | + [Setup] Дочекатись дати початку прийому пропозицій ${provider} ${TENDER['TENDER_UAID']} | |
1813 | + [Teardown] Оновити LAST_MODIFICATION_DATE | |
1814 | + Можливість подати цінову пропозицію на другий етап 1 користувачем ${provider} | |
1815 | + | |
1816 | + | |
1817 | +Можливість подати пропозицію другим учасником на другому етапі | |
1818 | + [Tags] ${USERS.users['${provider1}'].broker}: Подання пропозиції на другий етап | |
1819 | + ... provider1 | |
1820 | + ... ${USERS.users['${provider1}'].broker} | |
1821 | + ... make_bid_by_provider1_second_stage | |
1822 | + [Teardown] Оновити LAST_MODIFICATION_DATE | |
1823 | + Можливість подати цінову пропозицію на другий етап 2 користувачем ${provider1} | |
1824 | + | |
1825 | + | |
1826 | +Можливість підтвердити першу пропозицію кваліфікації на другому етапі | |
1827 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Кваліфікація на другому етапі | |
1828 | + ... tender_owner | |
1829 | + ... ${USERS.users['${tender_owner}'].broker} | |
1830 | + ... pre-qualification_approve_first_bid_second_stage | |
1831 | + [Setup] Дочекатись дати початку періоду прекваліфікації ${tender_owner} ${TENDER['TENDER_UAID']} | |
1832 | + [Teardown] Оновити LAST_MODIFICATION_DATE | |
1833 | + Можливість підтвердити 0 пропозицію кваліфікації | |
1834 | + | |
1835 | + | |
1836 | +Можливість підтвердити другу пропозицію кваліфікації на другогму етапі | |
1837 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Кваліфікація на другому етапі | |
1838 | + ... tender_owner | |
1839 | + ... ${USERS.users['${tender_owner}'].broker} | |
1840 | + ... pre-qualification_approve_second_bid_second_stage | |
1841 | + [Teardown] Оновити LAST_MODIFICATION_DATE | |
1842 | + Можливість підтвердити -1 пропозицію кваліфікації | |
1843 | + | |
1844 | + | |
1845 | +Можливість затвердити остаточне рішення кваліфікації на другому етапі | |
1846 | + [Tags] ${USERS.users['${tender_owner}'].broker}: Кваліфікація на другому етапі | |
1847 | + ... tender_owner | |
1848 | + ... ${USERS.users['${tender_owner}'].broker} | |
1849 | + ... pre-qualification_approve_qualifications_second_stage | |
1850 | + [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | |
1851 | + [Teardown] Оновити LAST_MODIFICATION_DATE | |
1852 | + Можливість затвердити остаточне рішення кваліфікації | |
\ No newline at end of file | ... | ... |
... | ... | @@ -46,7 +46,7 @@ ${ITEM_MEAT} ${False} |
46 | 46 | ... add_award |
47 | 47 | ... level1 |
48 | 48 | [Teardown] Оновити LAST_MODIFICATION_DATE |
49 | - Можливість зареєструвати, додати документацію і підтвердити постачальника до закупівлі | |
49 | + Можливість зареєструвати, додати документацію і підтвердити першого постачальника до закупівлі | |
50 | 50 | |
51 | 51 | |
52 | 52 | Можливість укласти угоду для звіту про укладений договір | ... | ... |
... | ... | @@ -21,6 +21,7 @@ from .initial_data import ( |
21 | 21 | create_fake_doc, |
22 | 22 | create_fake_sentence, |
23 | 23 | fake, |
24 | + field_with_id, | |
24 | 25 | test_bid_data, |
25 | 26 | test_bid_value, |
26 | 27 | test_claim_answer_data, |
... | ... | @@ -328,7 +329,7 @@ def get_from_object(obj, attribute): |
328 | 329 | def set_to_object(obj, attribute, value): |
329 | 330 | # Search the list index in path to value |
330 | 331 | list_index = re.search('\d+', attribute) |
331 | - if list_index: | |
332 | + if list_index and attribute != 'stage2TenderID': | |
332 | 333 | list_index = list_index.group(0) |
333 | 334 | parent, child = attribute.split('[' + list_index + '].')[:2] |
334 | 335 | # Split attribute to path to lits (parent) and path to value in list element (child) |
... | ... | @@ -409,8 +410,8 @@ def get_id_from_object(obj): |
409 | 410 | return obj_id.group(1) |
410 | 411 | |
411 | 412 | |
412 | -def get_id_from_doc_name(name): | |
413 | - return re.match(r'd\-[0-9a-fA-F]{8}', name).group(0) | |
413 | +def get_id_from_string(string): | |
414 | + return re.match(r'[dc]\-[0-9a-fA-F]{8}', string).group(0) | |
414 | 415 | |
415 | 416 | |
416 | 417 | def get_object_type_by_id(object_id): |
... | ... | @@ -443,7 +444,7 @@ def get_complaint_index_by_complaintID(data, complaintID): |
443 | 444 | |
444 | 445 | def generate_test_bid_data(tender_data): |
445 | 446 | bid = test_bid_data() |
446 | - if 'aboveThreshold' in tender_data.get('procurementMethodType', '') or 'competitiveDialogue' in tender_data.get('procurementMethodType', ''): | |
447 | + if tender_data.get('procurementMethodType', '')[:-2] in ('aboveThreshold', 'competitiveDialogue'): | |
447 | 448 | bid.data.selfEligible = True |
448 | 449 | bid.data.selfQualified = True |
449 | 450 | if 'lots' in tender_data: |
... | ... | @@ -466,27 +467,30 @@ def mult_and_round(*args, **kwargs): |
466 | 467 | return round(reduce(operator.mul, args), kwargs.get('precision', 2)) |
467 | 468 | |
468 | 469 | |
469 | -# GUI Frontends common | |
470 | -def add_data_for_gui_frontends(tender_data): | |
471 | - now = get_now() | |
472 | - # tender_data.data.enquiryPeriod['startDate'] = (now + timedelta(minutes=2)).isoformat() | |
473 | - tender_data.data.enquiryPeriod['endDate'] = (now + timedelta(minutes=6)).isoformat() | |
474 | - tender_data.data.tenderPeriod['startDate'] = (now + timedelta(minutes=7)).isoformat() | |
475 | - tender_data.data.tenderPeriod['endDate'] = (now + timedelta(minutes=11)).isoformat() | |
476 | - return tender_data | |
477 | - | |
478 | - | |
479 | -def convert_date_to_slash_format(isodate): | |
480 | - iso_dt = parse_date(isodate) | |
481 | - date_string = iso_dt.strftime("%d/%m/%Y") | |
482 | - return date_string | |
483 | - | |
484 | - | |
485 | -def convert_datetime_to_dot_format(isodate): | |
486 | - iso_dt = parse_date(isodate) | |
487 | - day_string = iso_dt.strftime("%d.%m.%Y %H:%M") | |
488 | - return day_string | |
489 | - | |
470 | +def generate_test_bid_data_second_stage(tender_data, index='0'): | |
471 | + bid = test_bid_data() | |
472 | + if index.isdigit(): | |
473 | + index = int(index) | |
474 | + else: | |
475 | + index = 0 | |
476 | + bid['data']['tenderers'][0]['identifier']['id'] = tender_data['shortlistedFirms'][index]['identifier']['id'] | |
477 | + bid['data']['tenderers'][0]['identifier']['scheme'] = tender_data['shortlistedFirms'][index]['identifier']['scheme'] | |
478 | + bid['data']['tenderers'][0]['identifier']['legalName'] = tender_data['shortlistedFirms'][index]['identifier']['legalName'] | |
490 | 479 | |
491 | -def local_path_to_file(file_name): | |
492 | - return os.path.join(os.path.dirname(__file__), 'documents', file_name) | |
480 | + if tender_data.get('procurementMethodType', '')[:-2] in ('aboveThreshold', 'competitiveDialogue'): | |
481 | + bid.data.selfEligible = True | |
482 | + bid.data.selfQualified = True | |
483 | + if 'lots' in tender_data: | |
484 | + bid.data.lotValues = [] | |
485 | + for lot in tender_data['lots']: | |
486 | + value = test_bid_value(lot['value']['amount']) | |
487 | + value['relatedLot'] = lot.get('id', '') | |
488 | + bid.data.lotValues.append(value) | |
489 | + else: | |
490 | + bid.data.update(test_bid_value(tender_data['value']['amount'])) | |
491 | + if 'features' in tender_data: | |
492 | + bid.data.parameters = [] | |
493 | + for feature in tender_data['features']: | |
494 | + parameter = {"value": fake.random_element(elements=(0.05, 0.01, 0)), "code": feature.get('code', '')} | |
495 | + bid.data.parameters.append(parameter) | |
496 | + return bid | ... | ... |
1 | - -s openProcedure | |
1 | +-s openProcedure | |
2 | 2 | |
3 | 3 | -v MODE:open_competitive_dialogue |
4 | 4 | |
5 | --v api_version:2.3 | |
6 | --v api_host_url:http://localhost:6543/ | |
7 | - | |
8 | 5 | |
9 | 6 | -v NUMBER_OF_ITEMS:1 |
10 | 7 | -v NUMBER_OF_LOTS:1 |
... | ... | @@ -33,3 +30,25 @@ |
33 | 30 | -i stage2_pending_status_view |
34 | 31 | |
35 | 32 | -i wait_bridge_for_work |
33 | + | |
34 | +-i get_second_stage | |
35 | + | |
36 | +-i compare_stages | |
37 | + | |
38 | +-i save_tender_second_stage | |
39 | + | |
40 | +-i activate_second_stage | |
41 | + | |
42 | +-i make_bid_by_provider_second_stage | |
43 | +-i make_bid_by_provider1_second_stage | |
44 | + | |
45 | +-i pre-qualification_approve_first_bid_second_stage | |
46 | +-i pre-qualification_approve_second_bid_second_stage | |
47 | + | |
48 | +-i pre-qualification_approve_qualifications_second_stage | |
49 | + | |
50 | +-i auction | |
51 | + | |
52 | +-i qualification_approve_first_award | |
53 | + | |
54 | +-i contract_sign | |
\ No newline at end of file | ... | ... |
... | ... | @@ -18,29 +18,26 @@ setup(name='op_robot_tests', |
18 | 18 | zip_safe=False, |
19 | 19 | install_requires=[ |
20 | 20 | # -*- Extra requirements: -*- |
21 | - 'robotframework', | |
22 | - 'robotframework-selenium2library', | |
23 | - 'robotframework-debuglibrary', | |
24 | - 'robotframework-selenium2screenshots', | |
21 | + 'Faker', | |
25 | 22 | 'Pillow', |
26 | - 'iso8601', | |
27 | 23 | 'PyYAML', |
28 | - 'munch', | |
29 | - 'fake-factory', | |
24 | + 'barbecue', | |
25 | + 'chromedriver', | |
26 | + 'dateutils', | |
30 | 27 | 'dpath', |
28 | + 'haversine', | |
29 | + 'iso8601', | |
31 | 30 | 'jsonpath-rw', |
32 | - 'dateutils', | |
33 | - 'pytz', | |
31 | + 'munch', | |
34 | 32 | 'parse', |
35 | - 'chromedriver', | |
36 | - 'barbecue', | |
37 | - 'haversine' | |
33 | + 'pytz', | |
34 | + 'robotframework', | |
35 | + 'robotframework-selenium2library', | |
36 | + 'selenium < 3.0.dev0', | |
38 | 37 | ], |
39 | 38 | entry_points={ |
40 | 39 | 'console_scripts': [ |
41 | - 'openprocurement_tests = op_robot_tests.runner:runner', | |
42 | 40 | 'op_tests = op_robot_tests.runner:runner', |
43 | - 'rebot = op_robot_tests.rebot:rebot' | |
44 | 41 | ], |
45 | 42 | } |
46 | 43 | ) | ... | ... |
Please
register
or
login
to post a comment