Showing
20 changed files
with
674 additions
and
229 deletions
| @@ -14,6 +14,7 @@ recipe = zc.recipe.egg | @@ -14,6 +14,7 @@ recipe = zc.recipe.egg | ||
| 14 | eggs = | 14 | eggs = |
| 15 | op_robot_tests | 15 | op_robot_tests |
| 16 | openprocurement_client | 16 | openprocurement_client |
| 17 | + robotframework | ||
| 17 | robotframework-lint | 18 | robotframework-lint |
| 18 | robotframework-debuglibrary | 19 | robotframework-debuglibrary |
| 19 | robot_tests.broker.dzo | 20 | robot_tests.broker.dzo |
| @@ -70,8 +71,14 @@ robot_tests.broker.uub = git ${remotes:gh}openprocurement/robot_tests.b | @@ -70,8 +71,14 @@ robot_tests.broker.uub = git ${remotes:gh}openprocurement/robot_tests.b | ||
| 70 | robot_tests.broker.aps = git ${remotes:gh}openprocurement/robot_tests.broker.aps.git | 71 | robot_tests.broker.aps = git ${remotes:gh}openprocurement/robot_tests.broker.aps.git |
| 71 | 72 | ||
| 72 | [versions] | 73 | [versions] |
| 73 | -fake-factory = 0.5.3 | 74 | +Faker = 0.7.7 |
| 75 | +mr.developer = 1.34 | ||
| 74 | restkit = 4.2.2.op1 | 76 | restkit = 4.2.2.op1 |
| 75 | rfc6266 = 0.0.6.op1 | 77 | rfc6266 = 0.0.6.op1 |
| 76 | robotframework = 3.0.0 | 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,6 +3,8 @@ | ||
| 3 | """ | 3 | """ |
| 4 | Setuptools bootstrapping installer. | 4 | Setuptools bootstrapping installer. |
| 5 | 5 | ||
| 6 | +Maintained at https://github.com/pypa/setuptools/tree/bootstrap. | ||
| 7 | + | ||
| 6 | Run this script to install or upgrade setuptools. | 8 | Run this script to install or upgrade setuptools. |
| 7 | """ | 9 | """ |
| 8 | 10 | ||
| @@ -16,24 +18,30 @@ import subprocess | @@ -16,24 +18,30 @@ import subprocess | ||
| 16 | import platform | 18 | import platform |
| 17 | import textwrap | 19 | import textwrap |
| 18 | import contextlib | 20 | import contextlib |
| 19 | -import warnings | 21 | +import json |
| 22 | +import codecs | ||
| 20 | 23 | ||
| 21 | from distutils import log | 24 | from distutils import log |
| 22 | 25 | ||
| 23 | try: | 26 | try: |
| 24 | from urllib.request import urlopen | 27 | from urllib.request import urlopen |
| 28 | + from urllib.parse import urljoin | ||
| 25 | except ImportError: | 29 | except ImportError: |
| 26 | from urllib2 import urlopen | 30 | from urllib2 import urlopen |
| 31 | + from urlparse import urljoin | ||
| 27 | 32 | ||
| 28 | try: | 33 | try: |
| 29 | from site import USER_SITE | 34 | from site import USER_SITE |
| 30 | except ImportError: | 35 | except ImportError: |
| 31 | USER_SITE = None | 36 | USER_SITE = None |
| 32 | 37 | ||
| 38 | +LATEST = object() | ||
| 33 | DEFAULT_VERSION = "18.3.2" | 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 | DEFAULT_SAVE_DIR = os.curdir | 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 | def _python_cmd(*args): | 46 | def _python_cmd(*args): |
| 39 | """ | 47 | """ |
| @@ -98,8 +106,16 @@ def archive_context(filename): | @@ -98,8 +106,16 @@ def archive_context(filename): | ||
| 98 | old_wd = os.getcwd() | 106 | old_wd = os.getcwd() |
| 99 | try: | 107 | try: |
| 100 | os.chdir(tmpdir) | 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 | # going in the directory | 120 | # going in the directory |
| 105 | subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) | 121 | subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) |
| @@ -114,18 +130,19 @@ def archive_context(filename): | @@ -114,18 +130,19 @@ def archive_context(filename): | ||
| 114 | 130 | ||
| 115 | def _do_download(version, download_base, to_dir, download_delay): | 131 | def _do_download(version, download_base, to_dir, download_delay): |
| 116 | """Download Setuptools.""" | 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 | if not os.path.exists(egg): | 136 | if not os.path.exists(egg): |
| 120 | archive = download_setuptools(version, download_base, | 137 | archive = download_setuptools(version, download_base, |
| 121 | - to_dir, download_delay) | 138 | + to_dir, download_delay) |
| 122 | _build_egg(egg, archive, to_dir) | 139 | _build_egg(egg, archive, to_dir) |
| 123 | sys.path.insert(0, egg) | 140 | sys.path.insert(0, egg) |
| 124 | 141 | ||
| 125 | # Remove previously-imported pkg_resources if present (see | 142 | # Remove previously-imported pkg_resources if present (see |
| 126 | # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details). | 143 | # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details). |
| 127 | if 'pkg_resources' in sys.modules: | 144 | if 'pkg_resources' in sys.modules: |
| 128 | - del sys.modules['pkg_resources'] | 145 | + _unload_pkg_resources() |
| 129 | 146 | ||
| 130 | import setuptools | 147 | import setuptools |
| 131 | setuptools.bootstrap_install_from = egg | 148 | setuptools.bootstrap_install_from = egg |
| @@ -140,6 +157,7 @@ def use_setuptools( | @@ -140,6 +157,7 @@ def use_setuptools( | ||
| 140 | Return None. Raise SystemExit if the requested version | 157 | Return None. Raise SystemExit if the requested version |
| 141 | or later cannot be installed. | 158 | or later cannot be installed. |
| 142 | """ | 159 | """ |
| 160 | + version = _resolve_version(version) | ||
| 143 | to_dir = os.path.abspath(to_dir) | 161 | to_dir = os.path.abspath(to_dir) |
| 144 | 162 | ||
| 145 | # prior to importing, capture the module state for | 163 | # prior to importing, capture the module state for |
| @@ -189,6 +207,11 @@ def _conflict_bail(VC_err, version): | @@ -189,6 +207,11 @@ def _conflict_bail(VC_err, version): | ||
| 189 | 207 | ||
| 190 | 208 | ||
| 191 | def _unload_pkg_resources(): | 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 | del_modules = [ | 215 | del_modules = [ |
| 193 | name for name in sys.modules | 216 | name for name in sys.modules |
| 194 | if name.startswith('pkg_resources') | 217 | if name.startswith('pkg_resources') |
| @@ -222,8 +245,8 @@ def download_file_powershell(url, target): | @@ -222,8 +245,8 @@ def download_file_powershell(url, target): | ||
| 222 | ps_cmd = ( | 245 | ps_cmd = ( |
| 223 | "[System.Net.WebRequest]::DefaultWebProxy.Credentials = " | 246 | "[System.Net.WebRequest]::DefaultWebProxy.Credentials = " |
| 224 | "[System.Net.CredentialCache]::DefaultCredentials; " | 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 | cmd = [ | 251 | cmd = [ |
| 229 | 'powershell', | 252 | 'powershell', |
| @@ -248,7 +271,7 @@ download_file_powershell.viable = has_powershell | @@ -248,7 +271,7 @@ download_file_powershell.viable = has_powershell | ||
| 248 | 271 | ||
| 249 | 272 | ||
| 250 | def download_file_curl(url, target): | 273 | def download_file_curl(url, target): |
| 251 | - cmd = ['curl', url, '--silent', '--output', target] | 274 | + cmd = ['curl', url, '--location', '--silent', '--output', target] |
| 252 | _clean_check(cmd, target) | 275 | _clean_check(cmd, target) |
| 253 | 276 | ||
| 254 | 277 | ||
| @@ -321,6 +344,7 @@ def download_setuptools( | @@ -321,6 +344,7 @@ def download_setuptools( | ||
| 321 | ``downloader_factory`` should be a function taking no arguments and | 344 | ``downloader_factory`` should be a function taking no arguments and |
| 322 | returning a function for downloading a URL to a target. | 345 | returning a function for downloading a URL to a target. |
| 323 | """ | 346 | """ |
| 347 | + version = _resolve_version(version) | ||
| 324 | # making sure we use the absolute path | 348 | # making sure we use the absolute path |
| 325 | to_dir = os.path.abspath(to_dir) | 349 | to_dir = os.path.abspath(to_dir) |
| 326 | zip_name = "setuptools-%s.zip" % version | 350 | zip_name = "setuptools-%s.zip" % version |
| @@ -333,6 +357,27 @@ def download_setuptools( | @@ -333,6 +357,27 @@ def download_setuptools( | ||
| 333 | return os.path.realpath(saveto) | 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 | def _build_install_args(options): | 381 | def _build_install_args(options): |
| 337 | """ | 382 | """ |
| 338 | Build the arguments to 'python setup.py install' on the setuptools package. | 383 | Build the arguments to 'python setup.py install' on the setuptools package. |
| @@ -347,7 +392,7 @@ def _parse_args(): | @@ -347,7 +392,7 @@ def _parse_args(): | ||
| 347 | parser = optparse.OptionParser() | 392 | parser = optparse.OptionParser() |
| 348 | parser.add_option( | 393 | parser.add_option( |
| 349 | '--user', dest='user_install', action='store_true', default=False, | 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 | parser.add_option( | 396 | parser.add_option( |
| 352 | '--download-base', dest='download_base', metavar="URL", | 397 | '--download-base', dest='download_base', metavar="URL", |
| 353 | default=DEFAULT_URL, | 398 | default=DEFAULT_URL, |
| @@ -362,9 +407,9 @@ def _parse_args(): | @@ -362,9 +407,9 @@ def _parse_args(): | ||
| 362 | default=DEFAULT_VERSION, | 407 | default=DEFAULT_VERSION, |
| 363 | ) | 408 | ) |
| 364 | parser.add_option( | 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 | options, args = parser.parse_args() | 414 | options, args = parser.parse_args() |
| 370 | # positional arguments are ignored | 415 | # positional arguments are ignored |
| @@ -372,13 +417,13 @@ def _parse_args(): | @@ -372,13 +417,13 @@ def _parse_args(): | ||
| 372 | 417 | ||
| 373 | 418 | ||
| 374 | def _download_args(options): | 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 | def main(): | 429 | def main(): |
op_robot_tests/rebot.py
deleted
100644 → 0
| @@ -32,9 +32,7 @@ Resource base_keywords.robot | @@ -32,9 +32,7 @@ Resource base_keywords.robot | ||
| 32 | Можливість підтвердити цінову пропозицію учасником ${username} | 32 | Можливість підтвердити цінову пропозицію учасником ${username} |
| 33 | ${status}= Run Keyword IF '${MODE}'=='openeu' Set Variable pending | 33 | ${status}= Run Keyword IF '${MODE}'=='openeu' Set Variable pending |
| 34 | ... ELSE IF '${MODE}'=='openua' Set Variable active | 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 | # OPENEU Bid documentation | 38 | # OPENEU Bid documentation |
| @@ -44,9 +42,7 @@ Resource base_keywords.robot | @@ -44,9 +42,7 @@ Resource base_keywords.robot | ||
| 44 | ${confidentialityRationale}= create_fake_sentence | 42 | ${confidentialityRationale}= create_fake_sentence |
| 45 | ${privat_doc}= create_data_dict data.confidentialityRationale ${confidentialityRationale} | 43 | ${privat_doc}= create_data_dict data.confidentialityRationale ${confidentialityRationale} |
| 46 | Set To Dictionary ${privat_doc.data} confidentiality=buyerOnly | 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 | Можливість завантажити ${doc_type} документ до пропозиції учасником ${username} | 48 | Можливість завантажити ${doc_type} документ до пропозиції учасником ${username} |
| @@ -82,4 +78,8 @@ Resource base_keywords.robot | @@ -82,4 +78,8 @@ Resource base_keywords.robot | ||
| 82 | 78 | ||
| 83 | 79 | ||
| 84 | Можливість перевести тендер на статус очікування обробки мостом | 80 | Можливість перевести тендер на статус очікування обробки мостом |
| 85 | - Run As ${tender_owner} Перевести тендер на статус очікування обробки мостом ${TENDER['TENDER_UAID']} | ||
| 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,6 +35,11 @@ Resource resource.robot | ||
| 35 | Run as ${username} Пошук тендера по ідентифікатору ${TENDER['TENDER_UAID']} | 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 | Можливість змінити поле ${field_name} тендера на ${field_value} | 43 | Можливість змінити поле ${field_name} тендера на ${field_value} |
| 39 | Run As ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} ${field_name} ${field_value} | 44 | Run As ${tender_owner} Внести зміни в тендер ${TENDER['TENDER_UAID']} ${field_name} ${field_value} |
| 40 | 45 | ||
| @@ -42,8 +47,11 @@ Resource resource.robot | @@ -42,8 +47,11 @@ Resource resource.robot | ||
| 42 | Можливість додати документацію до тендера | 47 | Можливість додати документацію до тендера |
| 43 | ${file_path} ${file_name} ${file_content}= create_fake_doc | 48 | ${file_path} ${file_name} ${file_content}= create_fake_doc |
| 44 | Run As ${tender_owner} Завантажити документ ${file_path} ${TENDER['TENDER_UAID']} | 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 | Set To Dictionary ${USERS.users['${tender_owner}']} tender_document=${tender_document} | 55 | Set To Dictionary ${USERS.users['${tender_owner}']} tender_document=${tender_document} |
| 48 | Remove File ${file_path} | 56 | Remove File ${file_path} |
| 49 | 57 | ||
| @@ -52,7 +60,9 @@ Resource resource.robot | @@ -52,7 +60,9 @@ Resource resource.robot | ||
| 52 | ${item}= Підготувати дані для створення предмету закупівлі ${USERS.users['${tender_owner}'].initial_data.data['items'][0]['classification']['id']} | 60 | ${item}= Підготувати дані для створення предмету закупівлі ${USERS.users['${tender_owner}'].initial_data.data['items'][0]['classification']['id']} |
| 53 | Run As ${tender_owner} Додати предмет закупівлі ${TENDER['TENDER_UAID']} ${item} | 61 | Run As ${tender_owner} Додати предмет закупівлі ${TENDER['TENDER_UAID']} ${item} |
| 54 | ${item_id}= get_id_from_object ${item} | 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 | ${item_data}= munch_dict arg=${item_data} | 66 | ${item_data}= munch_dict arg=${item_data} |
| 57 | Set To Dictionary ${USERS.users['${tender_owner}']} item_data=${item_data} | 67 | Set To Dictionary ${USERS.users['${tender_owner}']} item_data=${item_data} |
| 58 | 68 | ||
| @@ -79,6 +89,14 @@ Resource resource.robot | @@ -79,6 +89,14 @@ Resource resource.robot | ||
| 79 | Звірити поле тендера ${username} ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].initial_data} ${field} | 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 | Звірити відображення вмісту документа ${doc_id} із ${left} для користувача ${username} | 100 | Звірити відображення вмісту документа ${doc_id} із ${left} для користувача ${username} |
| 83 | ${file_name}= Run as ${username} Отримати документ ${TENDER['TENDER_UAID']} ${doc_id} | 101 | ${file_name}= Run as ${username} Отримати документ ${TENDER['TENDER_UAID']} ${doc_id} |
| 84 | ${right}= Get File ${OUTPUT_DIR}${/}${file_name} | 102 | ${right}= Get File ${OUTPUT_DIR}${/}${file_name} |
| @@ -157,8 +175,11 @@ Resource resource.robot | @@ -157,8 +175,11 @@ Resource resource.robot | ||
| 157 | ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data.lots[${lot_index}]} | 175 | ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data.lots[${lot_index}]} |
| 158 | ${file_path} ${file_name} ${file_content}= create_fake_doc | 176 | ${file_path} ${file_name} ${file_content}= create_fake_doc |
| 159 | Run As ${tender_owner} Завантажити документ в лот ${file_path} ${TENDER['TENDER_UAID']} ${lot_id} | 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 | ${empty_list}= Create List | 183 | ${empty_list}= Create List |
| 163 | ${lots_documents}= Get variable value ${USERS.users['${tender_owner}'].lots_documents} ${empty_list} | 184 | ${lots_documents}= Get variable value ${USERS.users['${tender_owner}'].lots_documents} ${empty_list} |
| 164 | Append to list ${lots_documents} ${data} | 185 | Append to list ${lots_documents} ${data} |
| @@ -177,7 +198,9 @@ Resource resource.robot | @@ -177,7 +198,9 @@ Resource resource.robot | ||
| 177 | ${item}= Підготувати дані для створення предмету закупівлі ${USERS.users['${tender_owner}'].initial_data.data['items'][0]['classification']['id']} | 198 | ${item}= Підготувати дані для створення предмету закупівлі ${USERS.users['${tender_owner}'].initial_data.data['items'][0]['classification']['id']} |
| 178 | Run As ${tender_owner} Додати предмет закупівлі в лот ${TENDER['TENDER_UAID']} ${lot_id} ${item} | 199 | Run As ${tender_owner} Додати предмет закупівлі в лот ${TENDER['TENDER_UAID']} ${lot_id} ${item} |
| 179 | ${item_id}= get_id_from_object ${item} | 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 | ${item_data}= munch_dict arg=${item_data} | 204 | ${item_data}= munch_dict arg=${item_data} |
| 182 | Set To Dictionary ${USERS.users['${tender_owner}']} item_data=${item_data} | 205 | Set To Dictionary ${USERS.users['${tender_owner}']} item_data=${item_data} |
| 183 | 206 | ||
| @@ -212,12 +235,16 @@ Resource resource.robot | @@ -212,12 +235,16 @@ Resource resource.robot | ||
| 212 | Можливість створення лоту із прив’язаним предметом закупівлі | 235 | Можливість створення лоту із прив’язаним предметом закупівлі |
| 213 | ${lot}= Підготувати дані для створення лоту ${USERS.users['${tender_owner}'].tender_data.data.value.amount} | 236 | ${lot}= Підготувати дані для створення лоту ${USERS.users['${tender_owner}'].tender_data.data.value.amount} |
| 214 | ${item}= Підготувати дані для створення предмету закупівлі ${USERS.users['${tender_owner}'].initial_data.data['items'][0]['classification']['id']} | 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 | ${item_id}= get_id_from_object ${item} | 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 | ${item_data}= munch_dict arg=${item_data} | 243 | ${item_data}= munch_dict arg=${item_data} |
| 219 | ${lot_id}= get_id_from_object ${lot.data} | 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 | ${lot_data}= munch_dict arg=${lot_data} | 248 | ${lot_data}= munch_dict arg=${lot_data} |
| 222 | Set To Dictionary ${USERS.users['${tender_owner}']} item_data=${item_data} lot_data=${lot_data} | 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,11 +261,21 @@ Resource resource.robot | ||
| 234 | \ Звірити відображення поля ${field} усіх лотів для користувача ${username} | 261 | \ Звірити відображення поля ${field} усіх лотів для користувача ${username} |
| 235 | 262 | ||
| 236 | 263 | ||
| 264 | +Звірити відображення поля ${field} усіх лотів другого етапу для усіх користувачів | ||
| 265 | + :FOR ${username} IN ${viewer} ${tender_owner} ${provider} ${provider1} | ||
| 266 | + \ Звірити відображення поля ${field} усіх лотів другого етапу для користувача ${username} | ||
| 267 | + | ||
| 268 | + | ||
| 237 | Звірити відображення поля ${field} усіх лотів для користувача ${username} | 269 | Звірити відображення поля ${field} усіх лотів для користувача ${username} |
| 238 | :FOR ${lot_index} IN RANGE ${NUMBER_OF_LOTS} | 270 | :FOR ${lot_index} IN RANGE ${NUMBER_OF_LOTS} |
| 239 | \ Звірити відображення поля ${field} ${lot_index} лоту для користувача ${username} | 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 | Звірити відображення поля ${field} ${lot_index} лоту для користувача ${username} | 279 | Звірити відображення поля ${field} ${lot_index} лоту для користувача ${username} |
| 243 | Дочекатись синхронізації з майданчиком ${username} | 280 | Дочекатись синхронізації з майданчиком ${username} |
| 244 | ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data.lots[${lot_index}]} | 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,6 +283,13 @@ Resource resource.robot | ||
| 246 | ... ${USERS.users['${tender_owner}'].initial_data.data.lots[${lot_index}].${field}} ${field} | 283 | ... ${USERS.users['${tender_owner}'].initial_data.data.lots[${lot_index}].${field}} ${field} |
| 247 | ... object_id=${lot_id} | 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 | Звірити відображення поля ${field} ${lot_index} лоту з ${data} для користувача ${username} | 294 | Звірити відображення поля ${field} ${lot_index} лоту з ${data} для користувача ${username} |
| 251 | ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data.lots[${lot_index}]} | 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,7 +330,9 @@ Resource resource.robot | ||
| 286 | Set To Dictionary ${feature} featureOf=tenderer | 330 | Set To Dictionary ${feature} featureOf=tenderer |
| 287 | Run As ${tender_owner} Додати неціновий показник на тендер ${TENDER['TENDER_UAID']} ${feature} | 331 | Run As ${tender_owner} Додати неціновий показник на тендер ${TENDER['TENDER_UAID']} ${feature} |
| 288 | ${feature_id}= get_id_from_object ${feature} | 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 | ${feature_data}= munch_dict arg=${feature_data} | 336 | ${feature_data}= munch_dict arg=${feature_data} |
| 291 | Set To Dictionary ${USERS.users['${tender_owner}']} feature_data=${feature_data} | 337 | Set To Dictionary ${USERS.users['${tender_owner}']} feature_data=${feature_data} |
| 292 | 338 | ||
| @@ -297,7 +343,9 @@ Resource resource.robot | @@ -297,7 +343,9 @@ Resource resource.robot | ||
| 297 | ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data.lots[${lot_index}]} | 343 | ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data.lots[${lot_index}]} |
| 298 | Run As ${tender_owner} Додати неціновий показник на лот ${TENDER['TENDER_UAID']} ${feature} ${lot_id} | 344 | Run As ${tender_owner} Додати неціновий показник на лот ${TENDER['TENDER_UAID']} ${feature} ${lot_id} |
| 299 | ${feature_id}= get_id_from_object ${feature} | 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 | ${feature_data}= munch_dict arg=${feature_data} | 349 | ${feature_data}= munch_dict arg=${feature_data} |
| 302 | Set To Dictionary ${USERS.users['${tender_owner}']} feature_data=${feature_data} | 350 | Set To Dictionary ${USERS.users['${tender_owner}']} feature_data=${feature_data} |
| 303 | 351 | ||
| @@ -308,7 +356,9 @@ Resource resource.robot | @@ -308,7 +356,9 @@ Resource resource.robot | ||
| 308 | ${item_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data['items'][${item_index}]} | 356 | ${item_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data['items'][${item_index}]} |
| 309 | Run As ${tender_owner} Додати неціновий показник на предмет ${TENDER['TENDER_UAID']} ${feature} ${item_id} | 357 | Run As ${tender_owner} Додати неціновий показник на предмет ${TENDER['TENDER_UAID']} ${feature} ${item_id} |
| 310 | ${feature_id}= get_id_from_object ${feature} | 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 | ${feature_data}= munch_dict arg=${feature_data} | 362 | ${feature_data}= munch_dict arg=${feature_data} |
| 313 | Set To Dictionary ${USERS.users['${tender_owner}']} feature_data=${feature_data} | 363 | Set To Dictionary ${USERS.users['${tender_owner}']} feature_data=${feature_data} |
| 314 | 364 | ||
| @@ -357,11 +407,13 @@ Resource resource.robot | @@ -357,11 +407,13 @@ Resource resource.robot | ||
| 357 | 407 | ||
| 358 | Можливість задати запитання на тендер користувачем ${username} | 408 | Можливість задати запитання на тендер користувачем ${username} |
| 359 | ${question}= Підготувати дані для запитання | 409 | ${question}= Підготувати дані для запитання |
| 360 | - ${question_resp}= Run As ${username} Задати запитання на тендер ${TENDER['TENDER_UAID']} ${question} | 410 | + Run As ${username} Задати запитання на тендер ${TENDER['TENDER_UAID']} ${question} |
| 361 | ${now}= Get Current TZdate | 411 | ${now}= Get Current TZdate |
| 362 | ${question.data.date}= Set variable ${now} | 412 | ${question.data.date}= Set variable ${now} |
| 363 | ${question_id}= get_id_from_object ${question.data} | 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 | ${question_data}= munch_dict arg=${question_data} | 417 | ${question_data}= munch_dict arg=${question_data} |
| 366 | Set To Dictionary ${USERS.users['${username}']} tender_question_data=${question_data} | 418 | Set To Dictionary ${USERS.users['${username}']} tender_question_data=${question_data} |
| 367 | 419 | ||
| @@ -369,11 +421,13 @@ Resource resource.robot | @@ -369,11 +421,13 @@ Resource resource.robot | ||
| 369 | Можливість задати запитання на ${lot_index} лот користувачем ${username} | 421 | Можливість задати запитання на ${lot_index} лот користувачем ${username} |
| 370 | ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data.lots[${lot_index}]} | 422 | ${lot_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data.lots[${lot_index}]} |
| 371 | ${question}= Підготувати дані для запитання | 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 | ${now}= Get Current TZdate | 425 | ${now}= Get Current TZdate |
| 374 | ${question.data.date}= Set variable ${now} | 426 | ${question.data.date}= Set variable ${now} |
| 375 | ${question_id}= get_id_from_object ${question.data} | 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 | ${question_data}= munch_dict arg=${question_data} | 431 | ${question_data}= munch_dict arg=${question_data} |
| 378 | Set To Dictionary ${USERS.users['${username}']} lots_${lot_index}_question_data=${question_data} | 432 | Set To Dictionary ${USERS.users['${username}']} lots_${lot_index}_question_data=${question_data} |
| 379 | 433 | ||
| @@ -381,11 +435,13 @@ Resource resource.robot | @@ -381,11 +435,13 @@ Resource resource.robot | ||
| 381 | Можливість задати запитання на ${item_index} предмет користувачем ${username} | 435 | Можливість задати запитання на ${item_index} предмет користувачем ${username} |
| 382 | ${item_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data['items'][${item_index}]} | 436 | ${item_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data['items'][${item_index}]} |
| 383 | ${question}= Підготувати дані для запитання | 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 | ${now}= Get Current TZdate | 439 | ${now}= Get Current TZdate |
| 386 | ${question.data.date}= Set variable ${now} | 440 | ${question.data.date}= Set variable ${now} |
| 387 | ${question_id}= get_id_from_object ${question.data} | 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 | ${question_data}= munch_dict arg=${question_data} | 445 | ${question_data}= munch_dict arg=${question_data} |
| 390 | Set To Dictionary ${USERS.users['${username}']} items_${item_index}_question_data=${question_data} | 446 | Set To Dictionary ${USERS.users['${username}']} items_${item_index}_question_data=${question_data} |
| 391 | 447 | ||
| @@ -454,7 +510,9 @@ Resource resource.robot | @@ -454,7 +510,9 @@ Resource resource.robot | ||
| 454 | ... Створити чернетку вимоги про виправлення умов закупівлі | 510 | ... Створити чернетку вимоги про виправлення умов закупівлі |
| 455 | ... ${TENDER['TENDER_UAID']} | 511 | ... ${TENDER['TENDER_UAID']} |
| 456 | ... ${claim} | 512 | ... ${claim} |
| 457 | - ${claim_data}= Create Dictionary claim=${claim} complaintID=${complaintID} | 513 | + ${claim_data}= Create Dictionary |
| 514 | + ... claim=${claim} | ||
| 515 | + ... complaintID=${complaintID} | ||
| 458 | ${claim_data}= munch_dict arg=${claim_data} | 516 | ${claim_data}= munch_dict arg=${claim_data} |
| 459 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} | 517 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} |
| 460 | 518 | ||
| @@ -467,7 +525,9 @@ Resource resource.robot | @@ -467,7 +525,9 @@ Resource resource.robot | ||
| 467 | ... ${TENDER['TENDER_UAID']} | 525 | ... ${TENDER['TENDER_UAID']} |
| 468 | ... ${claim} | 526 | ... ${claim} |
| 469 | ... ${lot_id} | 527 | ... ${lot_id} |
| 470 | - ${claim_data}= Create Dictionary claim=${claim} complaintID=${complaintID} | 528 | + ${claim_data}= Create Dictionary |
| 529 | + ... claim=${claim} | ||
| 530 | + ... complaintID=${complaintID} | ||
| 471 | ${claim_data}= munch_dict arg=${claim_data} | 531 | ${claim_data}= munch_dict arg=${claim_data} |
| 472 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} | 532 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} |
| 473 | 533 | ||
| @@ -479,7 +539,9 @@ Resource resource.robot | @@ -479,7 +539,9 @@ Resource resource.robot | ||
| 479 | ... ${TENDER['TENDER_UAID']} | 539 | ... ${TENDER['TENDER_UAID']} |
| 480 | ... ${claim} | 540 | ... ${claim} |
| 481 | ... ${award_index} | 541 | ... ${award_index} |
| 482 | - ${claim_data}= Create Dictionary claim=${claim} complaintID=${complaintID} | 542 | + ${claim_data}= Create Dictionary |
| 543 | + ... claim=${claim} | ||
| 544 | + ... complaintID=${complaintID} | ||
| 483 | ${claim_data}= munch_dict arg=${claim_data} | 545 | ${claim_data}= munch_dict arg=${claim_data} |
| 484 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} | 546 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} |
| 485 | 547 | ||
| @@ -492,8 +554,13 @@ Resource resource.robot | @@ -492,8 +554,13 @@ Resource resource.robot | ||
| 492 | ... ${TENDER['TENDER_UAID']} | 554 | ... ${TENDER['TENDER_UAID']} |
| 493 | ... ${claim} | 555 | ... ${claim} |
| 494 | ... ${file_path} | 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 | ${claim_data}= munch_dict arg=${claim_data} | 564 | ${claim_data}= munch_dict arg=${claim_data} |
| 498 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} | 565 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} |
| 499 | Remove File ${file_path} | 566 | Remove File ${file_path} |
| @@ -509,8 +576,13 @@ Resource resource.robot | @@ -509,8 +576,13 @@ Resource resource.robot | ||
| 509 | ... ${claim} | 576 | ... ${claim} |
| 510 | ... ${lot_id} | 577 | ... ${lot_id} |
| 511 | ... ${file_path} | 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 | ${claim_data}= munch_dict arg=${claim_data} | 586 | ${claim_data}= munch_dict arg=${claim_data} |
| 515 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} | 587 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} |
| 516 | Remove File ${file_path} | 588 | Remove File ${file_path} |
| @@ -525,8 +597,13 @@ Resource resource.robot | @@ -525,8 +597,13 @@ Resource resource.robot | ||
| 525 | ... ${claim} | 597 | ... ${claim} |
| 526 | ... ${award_index} | 598 | ... ${award_index} |
| 527 | ... ${file_path} | 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 | ${claim_data}= munch_dict arg=${claim_data} | 607 | ${claim_data}= munch_dict arg=${claim_data} |
| 531 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} | 608 | Set To Dictionary ${USERS.users['${provider}']} claim_data ${claim_data} |
| 532 | Remove File ${file_path} | 609 | Remove File ${file_path} |
| @@ -534,7 +611,9 @@ Resource resource.robot | @@ -534,7 +611,9 @@ Resource resource.robot | ||
| 534 | 611 | ||
| 535 | Можливість скасувати вимогу про виправлення умов закупівлі | 612 | Можливість скасувати вимогу про виправлення умов закупівлі |
| 536 | ${cancellation_reason}= create_fake_sentence | 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 | ${cancellation_data}= Create Dictionary data=${data} | 617 | ${cancellation_data}= Create Dictionary data=${data} |
| 539 | ${cancellation_data}= munch_dict arg=${cancellation_data} | 618 | ${cancellation_data}= munch_dict arg=${cancellation_data} |
| 540 | Run As ${provider} | 619 | Run As ${provider} |
| @@ -555,7 +634,9 @@ Resource resource.robot | @@ -555,7 +634,9 @@ Resource resource.robot | ||
| 555 | 634 | ||
| 556 | Можливість скасувати вимогу про виправлення умов лоту | 635 | Можливість скасувати вимогу про виправлення умов лоту |
| 557 | ${cancellation_reason}= create_fake_sentence | 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 | ${cancellation_data}= Create Dictionary data=${data} | 640 | ${cancellation_data}= Create Dictionary data=${data} |
| 560 | ${cancellation_data}= munch_dict arg=${cancellation_data} | 641 | ${cancellation_data}= munch_dict arg=${cancellation_data} |
| 561 | Run As ${provider} | 642 | Run As ${provider} |
| @@ -577,7 +658,9 @@ Resource resource.robot | @@ -577,7 +658,9 @@ Resource resource.robot | ||
| 577 | Можливість скасувати вимогу про виправлення визначення ${award_index} переможця | 658 | Можливість скасувати вимогу про виправлення визначення ${award_index} переможця |
| 578 | ${cancellation_reason}= create_fake_sentence | 659 | ${cancellation_reason}= create_fake_sentence |
| 579 | ${status}= Set variable if 'open' in '${MODE}' stopping cancelled | 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 | ${cancellation_data}= Create Dictionary data=${data} | 664 | ${cancellation_data}= Create Dictionary data=${data} |
| 582 | ${cancellation_data}= munch_dict arg=${cancellation_data} | 665 | ${cancellation_data}= munch_dict arg=${cancellation_data} |
| 583 | Run As ${provider} | 666 | Run As ${provider} |
| @@ -600,7 +683,9 @@ Resource resource.robot | @@ -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 | ${escalation_data}= Create Dictionary data=${data} | 689 | ${escalation_data}= Create Dictionary data=${data} |
| 605 | ${escalation_data}= munch_dict arg=${escalation_data} | 690 | ${escalation_data}= munch_dict arg=${escalation_data} |
| 606 | Run As ${provider} | 691 | Run As ${provider} |
| @@ -620,7 +705,9 @@ Resource resource.robot | @@ -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 | ${escalation_data}= Create Dictionary data=${data} | 711 | ${escalation_data}= Create Dictionary data=${data} |
| 625 | ${escalation_data}= munch_dict arg=${escalation_data} | 712 | ${escalation_data}= munch_dict arg=${escalation_data} |
| 626 | Run As ${provider} | 713 | Run As ${provider} |
| @@ -640,7 +727,9 @@ Resource resource.robot | @@ -640,7 +727,9 @@ Resource resource.robot | ||
| 640 | 727 | ||
| 641 | 728 | ||
| 642 | Можливість перетворити вимогу про виправлення визначення ${award_index} переможця в скаргу | 729 | Можливість перетворити вимогу про виправлення визначення ${award_index} переможця в скаргу |
| 643 | - ${data}= Create Dictionary status=pending satisfied=${False} | 730 | + ${data}= Create Dictionary |
| 731 | + ... status=pending | ||
| 732 | + ... satisfied=${False} | ||
| 644 | ${escalation_data}= Create Dictionary data=${data} | 733 | ${escalation_data}= Create Dictionary data=${data} |
| 645 | ${escalation_data}= munch_dict arg=${escalation_data} | 734 | ${escalation_data}= munch_dict arg=${escalation_data} |
| 646 | Run As ${provider} | 735 | Run As ${provider} |
| @@ -746,7 +835,9 @@ Resource resource.robot | @@ -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 | ${confirmation_data}= Create Dictionary data=${data} | 841 | ${confirmation_data}= Create Dictionary data=${data} |
| 751 | ${confirmation_data}= munch_dict arg=${confirmation_data} | 842 | ${confirmation_data}= munch_dict arg=${confirmation_data} |
| 752 | Run As ${provider} | 843 | Run As ${provider} |
| @@ -766,7 +857,9 @@ Resource resource.robot | @@ -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 | ${confirmation_data}= Create Dictionary data=${data} | 863 | ${confirmation_data}= Create Dictionary data=${data} |
| 771 | ${confirmation_data}= munch_dict arg=${confirmation_data} | 864 | ${confirmation_data}= munch_dict arg=${confirmation_data} |
| 772 | Run As ${provider} | 865 | Run As ${provider} |
| @@ -786,7 +879,9 @@ Resource resource.robot | @@ -786,7 +879,9 @@ Resource resource.robot | ||
| 786 | 879 | ||
| 787 | 880 | ||
| 788 | Можливість підтвердити задоволення вимоги про виправлення визначення ${award_index} переможця | 881 | Можливість підтвердити задоволення вимоги про виправлення визначення ${award_index} переможця |
| 789 | - ${data}= Create Dictionary status=resolved satisfied=${True} | 882 | + ${data}= Create Dictionary |
| 883 | + ... status=resolved | ||
| 884 | + ... satisfied=${True} | ||
| 790 | ${confirmation_data}= Create Dictionary data=${data} | 885 | ${confirmation_data}= Create Dictionary data=${data} |
| 791 | ${confirmation_data}= munch_dict arg=${confirmation_data} | 886 | ${confirmation_data}= munch_dict arg=${confirmation_data} |
| 792 | Run As ${provider} | 887 | Run As ${provider} |
| @@ -822,7 +917,22 @@ Resource resource.robot | @@ -822,7 +917,22 @@ Resource resource.robot | ||
| 822 | ############################################################################################## | 917 | ############################################################################################## |
| 823 | 918 | ||
| 824 | Можливість подати цінову пропозицію користувачем ${username} | 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 | ${bidresponses}= Create Dictionary bid=${bid} | 936 | ${bidresponses}= Create Dictionary bid=${bid} |
| 827 | Set To Dictionary ${USERS.users['${username}']} bidresponses=${bidresponses} | 937 | Set To Dictionary ${USERS.users['${username}']} bidresponses=${bidresponses} |
| 828 | ${lots}= Get Variable Value ${USERS.users['${username}'].tender_data.data.lots} ${None} | 938 | ${lots}= Get Variable Value ${USERS.users['${username}'].tender_data.data.lots} ${None} |
| @@ -833,12 +943,10 @@ Resource resource.robot | @@ -833,12 +943,10 @@ Resource resource.robot | ||
| 833 | ${features_ids}= Run Keyword IF ${features} | 943 | ${features_ids}= Run Keyword IF ${features} |
| 834 | ... Отримати ідентифікатори об’єктів ${username} features | 944 | ... Отримати ідентифікатори об’єктів ${username} features |
| 835 | ... ELSE Set Variable ${None} | 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 | Неможливість подати цінову пропозицію без прив’язки до лоту користувачем ${username} | 948 | Неможливість подати цінову пропозицію без прив’язки до лоту користувачем ${username} |
| 841 | - ${bid}= Підготувати дані для подання пропозиції ${username} | 949 | + ${bid}= Підготувати дані для подання пропозиції |
| 842 | ${values}= Get Variable Value ${bid.data.lotValues[0]} | 950 | ${values}= Get Variable Value ${bid.data.lotValues[0]} |
| 843 | Remove From Dictionary ${bid.data} lotValues | 951 | Remove From Dictionary ${bid.data} lotValues |
| 844 | Set_To_Object ${bid} data ${values} | 952 | Set_To_Object ${bid} data ${values} |
| @@ -846,7 +954,7 @@ Resource resource.robot | @@ -846,7 +954,7 @@ Resource resource.robot | ||
| 846 | 954 | ||
| 847 | 955 | ||
| 848 | Неможливість подати цінову пропозицію без нецінових показників користувачем ${username} | 956 | Неможливість подати цінову пропозицію без нецінових показників користувачем ${username} |
| 849 | - ${bid}= Підготувати дані для подання пропозиції ${username} | 957 | + ${bid}= Підготувати дані для подання пропозиції |
| 850 | Remove From Dictionary ${bid.data} parameters | 958 | Remove From Dictionary ${bid.data} parameters |
| 851 | Require Failure ${username} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} | 959 | Require Failure ${username} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid} |
| 852 | 960 | ||
| @@ -862,16 +970,25 @@ Resource resource.robot | @@ -862,16 +970,25 @@ Resource resource.robot | ||
| 862 | 970 | ||
| 863 | Можливість завантажити документ в пропозицію користувачем ${username} | 971 | Можливість завантажити документ в пропозицію користувачем ${username} |
| 864 | ${file_path} ${file_name} ${file_content}= create_fake_doc | 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 | Remove File ${file_path} | 980 | Remove File ${file_path} |
| 868 | 981 | ||
| 869 | 982 | ||
| 870 | Можливість змінити документацію цінової пропозиції користувачем ${username} | 983 | Можливість змінити документацію цінової пропозиції користувачем ${username} |
| 871 | ${file_path} ${file_name} ${file_content}= create_fake_doc | 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 | Remove File ${file_path} | 992 | Remove File ${file_path} |
| 876 | 993 | ||
| 877 | ############################################################################################## | 994 | ############################################################################################## |
| @@ -885,15 +1002,16 @@ Resource resource.robot | @@ -885,15 +1002,16 @@ Resource resource.robot | ||
| 885 | # Awarding | 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 | ${file_path} ${file_name} ${file_content}= create_fake_doc | 1008 | ${file_path} ${file_name} ${file_content}= create_fake_doc |
| 891 | Run as ${tender_owner} | 1009 | Run as ${tender_owner} |
| 892 | ... Створити постачальника, додати документацію і підтвердити його | 1010 | ... Створити постачальника, додати документацію і підтвердити його |
| 893 | ... ${TENDER['TENDER_UAID']} | 1011 | ... ${TENDER['TENDER_UAID']} |
| 894 | ... ${supplier_data} | 1012 | ... ${supplier_data} |
| 895 | ... ${file_path} | 1013 | ... ${file_path} |
| 896 | - ${doc_id}= get_id_from_doc_name ${file_name} | 1014 | + ${doc_id}= get_id_from_string ${file_name} |
| 897 | Set to dictionary ${USERS.users['${tender_owner}']} award_doc_name=${file_name} award_doc_id=${doc_id} award_doc_content=${file_content} | 1015 | Set to dictionary ${USERS.users['${tender_owner}']} award_doc_name=${file_name} award_doc_id=${doc_id} award_doc_content=${file_content} |
| 898 | Remove File ${file_path} | 1016 | Remove File ${file_path} |
| 899 | 1017 | ||
| @@ -903,4 +1021,4 @@ Resource resource.robot | @@ -903,4 +1021,4 @@ Resource resource.robot | ||
| 903 | ... Підтвердити підписання контракту | 1021 | ... Підтвердити підписання контракту |
| 904 | ... ${TENDER['TENDER_UAID']} | 1022 | ... ${TENDER['TENDER_UAID']} |
| 905 | ... ${0} | 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,9 +19,9 @@ Library openprocurement_client_helper.py | ||
| 19 | Підготувати клієнт для користувача | 19 | Підготувати клієнт для користувача |
| 20 | [Arguments] ${username} | 20 | [Arguments] ${username} |
| 21 | [Documentation] Відкрити браузер, створити об’єкт api wrapper, тощо | 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 | Set To Dictionary ${USERS.users['${username}']} client=${api_wrapper} | 25 | Set To Dictionary ${USERS.users['${username}']} client=${api_wrapper} |
| 26 | Set To Dictionary ${USERS.users['${username}']} access_token=${EMPTY} | 26 | Set To Dictionary ${USERS.users['${username}']} access_token=${EMPTY} |
| 27 | ${id_map}= Create Dictionary | 27 | ${id_map}= Create Dictionary |
| @@ -38,6 +38,7 @@ Library openprocurement_client_helper.py | @@ -38,6 +38,7 @@ Library openprocurement_client_helper.py | ||
| 38 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} | 38 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} |
| 39 | ${reply}= Call Method ${USERS.users['${username}'].client} upload_document ${filepath} ${tender} | 39 | ${reply}= Call Method ${USERS.users['${username}'].client} upload_document ${filepath} ${tender} |
| 40 | Log object data ${reply} reply | 40 | Log object data ${reply} reply |
| 41 | + #return here is needed to have uploaded doc data in `Завантажити документ в лот` keyword | ||
| 41 | [return] ${reply} | 42 | [return] ${reply} |
| 42 | 43 | ||
| 43 | 44 | ||
| @@ -77,8 +78,15 @@ Library openprocurement_client_helper.py | @@ -77,8 +78,15 @@ Library openprocurement_client_helper.py | ||
| 77 | Створити тендер | 78 | Створити тендер |
| 78 | [Arguments] ${username} ${tender_data} | 79 | [Arguments] ${username} ${tender_data} |
| 79 | ${tender}= Call Method ${USERS.users['${username}'].client} create_tender ${tender_data} | 80 | ${tender}= Call Method ${USERS.users['${username}'].client} create_tender ${tender_data} |
| 80 | - Log object data ${tender} created_tender | 81 | + Log ${tender} |
| 81 | ${access_token}= Get Variable Value ${tender.access.token} | 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 | Set To Dictionary ${USERS.users['${username}']} access_token=${access_token} | 90 | Set To Dictionary ${USERS.users['${username}']} access_token=${access_token} |
| 83 | Set To Dictionary ${USERS.users['${username}']} tender_data=${tender} | 91 | Set To Dictionary ${USERS.users['${username}']} tender_data=${tender} |
| 84 | Log ${USERS.users['${username}'].tender_data} | 92 | Log ${USERS.users['${username}'].tender_data} |
| @@ -86,16 +94,25 @@ Library openprocurement_client_helper.py | @@ -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 | ${internalid}= openprocurement_client.Отримати internal id по UAid ${username} ${tender_uaid} | 98 | ${internalid}= openprocurement_client.Отримати internal id по UAid ${username} ${tender_uaid} |
| 91 | ${tender}= Call Method ${USERS.users['${username}'].client} get_tender ${internalid} | 99 | ${tender}= Call Method ${USERS.users['${username}'].client} get_tender ${internalid} |
| 92 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} | 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 | ${tender}= munch_dict arg=${tender} | 102 | ${tender}= munch_dict arg=${tender} |
| 95 | Log ${tender} | 103 | Log ${tender} |
| 96 | [return] ${tender} | 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 | [Arguments] ${username} ${tender_uaid} | 117 | [Arguments] ${username} ${tender_uaid} |
| 101 | openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 118 | openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
| @@ -159,6 +176,7 @@ Library openprocurement_client_helper.py | @@ -159,6 +176,7 @@ Library openprocurement_client_helper.py | ||
| 159 | [Arguments] ${username} ${tender_uaid} ${lot} | 176 | [Arguments] ${username} ${tender_uaid} ${lot} |
| 160 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 177 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
| 161 | ${reply}= Call Method ${USERS.users['${username}'].client} create_lot ${tender} ${lot} | 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 | [return] ${reply} | 180 | [return] ${reply} |
| 163 | 181 | ||
| 164 | 182 | ||
| @@ -167,7 +185,6 @@ Library openprocurement_client_helper.py | @@ -167,7 +185,6 @@ Library openprocurement_client_helper.py | ||
| 167 | ${reply}= openprocurement_client.Створити лот ${username} ${tender_uaid} ${lot} | 185 | ${reply}= openprocurement_client.Створити лот ${username} ${tender_uaid} ${lot} |
| 168 | ${lot_id}= get_id_from_object ${lot.data} | 186 | ${lot_id}= get_id_from_object ${lot.data} |
| 169 | openprocurement_client.Додати предмет закупівлі в лот ${username} ${tender_uaid} ${lot_id} ${item} | 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,7 +200,6 @@ Library openprocurement_client_helper.py | ||
| 183 | ${lot}= Create Dictionary data=${tender.data.lots[${lot_index}]} | 200 | ${lot}= Create Dictionary data=${tender.data.lots[${lot_index}]} |
| 184 | Set_To_Object ${lot.data} ${fieldname} ${fieldvalue} | 201 | Set_To_Object ${lot.data} ${fieldname} ${fieldvalue} |
| 185 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_lot ${tender} ${lot} | 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,7 +220,6 @@ Library openprocurement_client_helper.py | ||
| 204 | ${doc}= openprocurement_client.Завантажити документ ${username} ${filepath} ${tender_uaid} | 220 | ${doc}= openprocurement_client.Завантажити документ ${username} ${filepath} ${tender_uaid} |
| 205 | ${lot_doc}= test_lot_document_data ${doc} ${lot_id} | 221 | ${lot_doc}= test_lot_document_data ${doc} ${lot_id} |
| 206 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_document ${tender} ${lot_doc} | 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,14 +232,16 @@ Library openprocurement_client_helper.py | ||
| 217 | \ Run Keyword If '${item.relatedLot}'=='${lot.data.id}' | 232 | \ Run Keyword If '${item.relatedLot}'=='${lot.data.id}' |
| 218 | \ ... openprocurement_client.Видалити предмет закупівлі ${username} ${tender_uaid} ${item_id} | 233 | \ ... openprocurement_client.Видалити предмет закупівлі ${username} ${tender_uaid} ${item_id} |
| 219 | ${reply}= Call Method ${USERS.users['${username}'].client} delete_lot ${tender} ${lot} | 234 | ${reply}= Call Method ${USERS.users['${username}'].client} delete_lot ${tender} ${lot} |
| 220 | - [return] ${reply} | ||
| 221 | 235 | ||
| 222 | 236 | ||
| 223 | Скасувати лот | 237 | Скасувати лот |
| 224 | [Arguments] ${username} ${tender_uaid} ${lot_id} ${cancellation_reason} ${document} ${new_description} | 238 | [Arguments] ${username} ${tender_uaid} ${lot_id} ${cancellation_reason} ${document} ${new_description} |
| 225 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 239 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
| 226 | ${lot_id}= Get Variable Value ${tender.data.lots[${lot_index}].id} | 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 | ${cancellation_data}= Create dictionary data=${data} | 245 | ${cancellation_data}= Create dictionary data=${data} |
| 229 | ${cancellation_data}= munch_dict arg=${cancellation_data} | 246 | ${cancellation_data}= munch_dict arg=${cancellation_data} |
| 230 | ${cancel_reply}= Call Method ${USERS.users['${username}'].client} create_cancellation ${tender} ${cancellation_data} | 247 | ${cancel_reply}= Call Method ${USERS.users['${username}'].client} create_cancellation ${tender} ${cancellation_data} |
| @@ -302,7 +319,6 @@ Library openprocurement_client_helper.py | @@ -302,7 +319,6 @@ Library openprocurement_client_helper.py | ||
| 302 | ${item_id}= Get Variable Value ${tender.data['items'][${item_index}].id} | 319 | ${item_id}= Get Variable Value ${tender.data['items'][${item_index}].id} |
| 303 | ${question}= test_related_question ${question} item ${item_id} | 320 | ${question}= test_related_question ${question} item ${item_id} |
| 304 | ${reply}= Call Method ${USERS.users['${username}'].client} create_question ${tender} ${question} | 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,14 +328,12 @@ Library openprocurement_client_helper.py | ||
| 312 | ${lot_id}= Get Variable Value ${tender.data.lots[${lot_index}].id} | 328 | ${lot_id}= Get Variable Value ${tender.data.lots[${lot_index}].id} |
| 313 | ${question}= test_related_question ${question} lot ${lot_id} | 329 | ${question}= test_related_question ${question} lot ${lot_id} |
| 314 | ${reply}= Call Method ${USERS.users['${username}'].client} create_question ${tender} ${question} | 330 | ${reply}= Call Method ${USERS.users['${username}'].client} create_question ${tender} ${question} |
| 315 | - [return] ${reply} | ||
| 316 | 331 | ||
| 317 | 332 | ||
| 318 | Задати запитання на тендер | 333 | Задати запитання на тендер |
| 319 | [Arguments] ${username} ${tender_uaid} ${question} | 334 | [Arguments] ${username} ${tender_uaid} ${question} |
| 320 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 335 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
| 321 | ${reply}= Call Method ${USERS.users['${username}'].client} create_question ${tender} ${question} | 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,7 +348,6 @@ Library openprocurement_client_helper.py | ||
| 334 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} | 348 | ${tender}= set_access_key ${tender} ${USERS.users['${username}'].access_token} |
| 335 | ${answer_data.data.id}= openprocurement_client.Отримати інформацію із запитання ${username} ${tender_uaid} ${question_id} id | 349 | ${answer_data.data.id}= openprocurement_client.Отримати інформацію із запитання ${username} ${tender_uaid} ${question_id} id |
| 336 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_question ${tender} ${answer_data} | 350 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_question ${tender} ${answer_data} |
| 337 | - [return] ${reply} | ||
| 338 | 351 | ||
| 339 | ############################################################################## | 352 | ############################################################################## |
| 340 | # Claims | 353 | # Claims |
| @@ -698,10 +711,13 @@ Library openprocurement_client_helper.py | @@ -698,10 +711,13 @@ Library openprocurement_client_helper.py | ||
| 698 | \ ${code}= Get Variable Value ${tender.data.features[${feature_index}].code} | 711 | \ ${code}= Get Variable Value ${tender.data.features[${feature_index}].code} |
| 699 | \ Set To Dictionary ${bid.data.parameters[${index}]} code=${code} | 712 | \ Set To Dictionary ${bid.data.parameters[${index}]} code=${code} |
| 700 | ${reply}= Call Method ${USERS.users['${username}'].client} create_bid ${tender} ${bid} | 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 | Set To Dictionary ${USERS.users['${username}']} access_token=${reply['access']['token']} | 718 | Set To Dictionary ${USERS.users['${username}']} access_token=${reply['access']['token']} |
| 702 | Set To Dictionary ${USERS.users['${username}'].bidresponses['bid'].data} id=${reply['data']['id']} | 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,57 +725,62 @@ Library openprocurement_client_helper.py | ||
| 709 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 725 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
| 710 | ${bid}= openprocurement_client.Отримати пропозицію ${username} ${tender_uaid} | 726 | ${bid}= openprocurement_client.Отримати пропозицію ${username} ${tender_uaid} |
| 711 | Set_To_Object ${bid.data} ${fieldname} ${fieldvalue} | 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 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_bid ${tender} ${bid} | 729 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_bid ${tender} ${bid} |
| 714 | Log ${reply} | 730 | Log ${reply} |
| 715 | - [return] ${reply} | ||
| 716 | 731 | ||
| 717 | 732 | ||
| 718 | Скасувати цінову пропозицію | 733 | Скасувати цінову пропозицію |
| 719 | [Arguments] ${username} ${tender_uaid} | 734 | [Arguments] ${username} ${tender_uaid} |
| 720 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 735 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
| 721 | ${bid_id}= openprocurement_client.Отримати інформацію із пропозиції ${username} ${tender_uaid} id | 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 | Log ${reply} | 738 | Log ${reply} |
| 724 | - [return] ${reply} | ||
| 725 | 739 | ||
| 726 | 740 | ||
| 727 | Завантажити документ в ставку | 741 | Завантажити документ в ставку |
| 728 | [Arguments] ${username} ${path} ${tender_uaid} ${doc_type}=documents | 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 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 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 | ${response}= Call Method ${USERS.users['${username}'].client} upload_bid_document ${path} ${tender} ${bid_id} ${doc_type} | 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 | Log object data ${uploaded_file} | 750 | Log object data ${uploaded_file} |
| 735 | [return] ${uploaded_file} | 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 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 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 | Log object data ${uploaded_file} | 765 | Log object data ${uploaded_file} |
| 746 | [return] ${uploaded_file} | 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 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 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 | [Arguments] ${username} ${tender_uaid} | 780 | [Arguments] ${username} ${tender_uaid} |
| 760 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 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 | ${reply}= Call Method ${USERS.users['${username}'].client} get_bid ${tender} ${bid_id} ${token} | 784 | ${reply}= Call Method ${USERS.users['${username}'].client} get_bid ${tender} ${bid_id} ${token} |
| 764 | ${reply}= munch_dict arg=${reply} | 785 | ${reply}= munch_dict arg=${reply} |
| 765 | [return] ${reply} | 786 | [return] ${reply} |
| @@ -791,7 +812,6 @@ Library openprocurement_client_helper.py | @@ -791,7 +812,6 @@ Library openprocurement_client_helper.py | ||
| 791 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 812 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
| 792 | ${doc}= Call Method ${USERS.users['${username}'].client} upload_award_document ${document} ${tender} ${tender.data.awards[${award_num}].id} | 813 | ${doc}= Call Method ${USERS.users['${username}'].client} upload_award_document ${document} ${tender} ${tender.data.awards[${award_num}].id} |
| 793 | Log ${doc} | 814 | Log ${doc} |
| 794 | - [Return] ${doc} | ||
| 795 | 815 | ||
| 796 | 816 | ||
| 797 | Підтвердити постачальника | 817 | Підтвердити постачальника |
| @@ -836,7 +856,6 @@ Library openprocurement_client_helper.py | @@ -836,7 +856,6 @@ Library openprocurement_client_helper.py | ||
| 836 | Set To Dictionary ${award.data} id=${tender.data.awards[${award_num}].id} | 856 | Set To Dictionary ${award.data} id=${tender.data.awards[${award_num}].id} |
| 837 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_award ${tender} ${award} | 857 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_award ${tender} ${award} |
| 838 | Log ${reply} | 858 | Log ${reply} |
| 839 | - [Return] ${reply} | ||
| 840 | 859 | ||
| 841 | ############################################################################## | 860 | ############################################################################## |
| 842 | # Limited procurement | 861 | # Limited procurement |
| @@ -920,7 +939,7 @@ Library openprocurement_client_helper.py | @@ -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 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 943 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
| 925 | ${document}= get_document_by_id ${tender.data} ${doc_id} | 944 | ${document}= get_document_by_id ${tender.data} ${doc_id} |
| 926 | Log ${document} | 945 | Log ${document} |
| @@ -928,7 +947,7 @@ Library openprocurement_client_helper.py | @@ -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 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 951 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
| 933 | ${document}= get_document_by_id ${tender.data} ${doc_id} | 952 | ${document}= get_document_by_id ${tender.data} ${doc_id} |
| 934 | ${filename}= download_file_from_url ${document.url} ${OUTPUT_DIR}${/}${document.title} | 953 | ${filename}= download_file_from_url ${document.url} ${OUTPUT_DIR}${/}${document.title} |
| @@ -962,7 +981,6 @@ Library openprocurement_client_helper.py | @@ -962,7 +981,6 @@ Library openprocurement_client_helper.py | ||
| 962 | Set To Dictionary ${qualification.data} id=${tender.data.qualifications[${qualification_num}].id} eligible=${True} qualified=${True} | 981 | Set To Dictionary ${qualification.data} id=${tender.data.qualifications[${qualification_num}].id} eligible=${True} qualified=${True} |
| 963 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_qualification ${tender} ${qualification} | 982 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_qualification ${tender} ${qualification} |
| 964 | Log ${reply} | 983 | Log ${reply} |
| 965 | - [Return] ${reply} | ||
| 966 | 984 | ||
| 967 | 985 | ||
| 968 | Відхилити кваліфікацію | 986 | Відхилити кваліфікацію |
| @@ -976,7 +994,6 @@ Library openprocurement_client_helper.py | @@ -976,7 +994,6 @@ Library openprocurement_client_helper.py | ||
| 976 | Set To Dictionary ${qualification.data} id=${tender.data.qualifications[${qualification_num}].id} | 994 | Set To Dictionary ${qualification.data} id=${tender.data.qualifications[${qualification_num}].id} |
| 977 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_qualification ${tender} ${qualification} | 995 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_qualification ${tender} ${qualification} |
| 978 | Log ${reply} | 996 | Log ${reply} |
| 979 | - [Return] ${reply} | ||
| 980 | 997 | ||
| 981 | 998 | ||
| 982 | Завантажити документ у кваліфікацію | 999 | Завантажити документ у кваліфікацію |
| @@ -988,7 +1005,6 @@ Library openprocurement_client_helper.py | @@ -988,7 +1005,6 @@ Library openprocurement_client_helper.py | ||
| 988 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | 1005 | ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} |
| 989 | ${doc_reply}= Call Method ${USERS.users['${username}'].client} upload_qualification_document ${document} ${tender} ${tender.data.qualifications[${qualification_num}].id} | 1006 | ${doc_reply}= Call Method ${USERS.users['${username}'].client} upload_qualification_document ${document} ${tender} ${tender.data.qualifications[${qualification_num}].id} |
| 990 | Log ${doc_reply} | 1007 | Log ${doc_reply} |
| 991 | - [Return] ${doc_reply} | ||
| 992 | 1008 | ||
| 993 | 1009 | ||
| 994 | Скасувати кваліфікацію | 1010 | Скасувати кваліфікацію |
| @@ -1002,7 +1018,6 @@ Library openprocurement_client_helper.py | @@ -1002,7 +1018,6 @@ Library openprocurement_client_helper.py | ||
| 1002 | Set To Dictionary ${qualification.data} id=${tender.data.qualifications[${qualification_num}].id} | 1018 | Set To Dictionary ${qualification.data} id=${tender.data.qualifications[${qualification_num}].id} |
| 1003 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_qualification ${tender} ${qualification} | 1019 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_qualification ${tender} ${qualification} |
| 1004 | Log ${reply} | 1020 | Log ${reply} |
| 1005 | - [Return] ${reply} | ||
| 1006 | 1021 | ||
| 1007 | 1022 | ||
| 1008 | Затвердити остаточне рішення кваліфікації | 1023 | Затвердити остаточне рішення кваліфікації |
| @@ -1019,7 +1034,6 @@ Library openprocurement_client_helper.py | @@ -1019,7 +1034,6 @@ Library openprocurement_client_helper.py | ||
| 1019 | set_to_object ${tender} data.status active.pre-qualification.stand-still | 1034 | set_to_object ${tender} data.status active.pre-qualification.stand-still |
| 1020 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} | 1035 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} |
| 1021 | Log ${reply} | 1036 | Log ${reply} |
| 1022 | - [Return] ${reply} | ||
| 1023 | 1037 | ||
| 1024 | 1038 | ||
| 1025 | Перевести тендер на статус очікування обробки мостом | 1039 | Перевести тендер на статус очікування обробки мостом |
| @@ -1036,4 +1050,19 @@ Library openprocurement_client_helper.py | @@ -1036,4 +1050,19 @@ Library openprocurement_client_helper.py | ||
| 1036 | set_to_object ${tender} data.status active.stage2.waiting | 1050 | set_to_object ${tender} data.status active.stage2.waiting |
| 1037 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} | 1051 | ${reply}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} |
| 1038 | Log ${reply} | 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,7 +10,7 @@ import urllib | ||
| 10 | def retry_if_request_failed(exception): | 10 | def retry_if_request_failed(exception): |
| 11 | if isinstance(exception, RequestFailed): | 11 | if isinstance(exception, RequestFailed): |
| 12 | status_code = getattr(exception, 'status_int', None) | 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 | return True | 14 | return True |
| 15 | else: | 15 | else: |
| 16 | return False | 16 | return False |
| @@ -65,6 +65,10 @@ def get_document_by_id(data, doc_id): | @@ -65,6 +65,10 @@ def get_document_by_id(data, doc_id): | ||
| 65 | for document in cancellation.get('documents', []): | 65 | for document in cancellation.get('documents', []): |
| 66 | if doc_id in document.get('title', ''): | 66 | if doc_id in document.get('title', ''): |
| 67 | return document | 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 | raise Exception('Document with id {} not found'.format(doc_id)) | 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,6 +20,7 @@ Suite Teardown Test Suite Teardown | ||
| 20 | ############################################################################################## | 20 | ############################################################################################## |
| 21 | # TENDER CANCELLATION | 21 | # TENDER CANCELLATION |
| 22 | ############################################################################################## | 22 | ############################################################################################## |
| 23 | + | ||
| 23 | Можливість скасувати тендер | 24 | Можливість скасувати тендер |
| 24 | [Tags] ${USERS.users['${tender_owner}'].broker}: Скасування тендера | 25 | [Tags] ${USERS.users['${tender_owner}'].broker}: Скасування тендера |
| 25 | ... tender_owner | 26 | ... tender_owner |
| @@ -46,7 +47,7 @@ Suite Teardown Test Suite Teardown | @@ -46,7 +47,7 @@ Suite Teardown Test Suite Teardown | ||
| 46 | ... ${USERS.users['${viewer}'].broker} | 47 | ... ${USERS.users['${viewer}'].broker} |
| 47 | ... tender_cancelation | 48 | ... tender_cancelation |
| 48 | Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']} | 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 | ... cancellations[0].reason | 51 | ... cancellations[0].reason |
| 51 | 52 | ||
| 52 | 53 | ||
| @@ -55,7 +56,7 @@ Suite Teardown Test Suite Teardown | @@ -55,7 +56,7 @@ Suite Teardown Test Suite Teardown | ||
| 55 | ... viewer | 56 | ... viewer |
| 56 | ... ${USERS.users['${viewer}'].broker} | 57 | ... ${USERS.users['${viewer}'].broker} |
| 57 | ... tender_cancelation | 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,7 +64,7 @@ Suite Teardown Test Suite Teardown | ||
| 63 | ... viewer | 64 | ... viewer |
| 64 | ... ${USERS.users['${viewer}'].broker} | 65 | ... ${USERS.users['${viewer}'].broker} |
| 65 | ... tender_cancelation | 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,7 +72,7 @@ Suite Teardown Test Suite Teardown | ||
| 71 | ... viewer | 72 | ... viewer |
| 72 | ... ${USERS.users['${viewer}'].broker} | 73 | ... ${USERS.users['${viewer}'].broker} |
| 73 | ... tender_cancelation | 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 | # LOT CANCELLATION | 78 | # LOT CANCELLATION |
| @@ -103,7 +104,7 @@ Suite Teardown Test Suite Teardown | @@ -103,7 +104,7 @@ Suite Teardown Test Suite Teardown | ||
| 103 | ... ${USERS.users['${viewer}'].broker} | 104 | ... ${USERS.users['${viewer}'].broker} |
| 104 | ... lot_cancelation | 105 | ... lot_cancelation |
| 105 | Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']} | 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 | ... cancellations[0].reason | 108 | ... cancellations[0].reason |
| 108 | 109 | ||
| 109 | 110 | ||
| @@ -112,7 +113,7 @@ Suite Teardown Test Suite Teardown | @@ -112,7 +113,7 @@ Suite Teardown Test Suite Teardown | ||
| 112 | ... viewer | 113 | ... viewer |
| 113 | ... ${USERS.users['${viewer}'].broker} | 114 | ... ${USERS.users['${viewer}'].broker} |
| 114 | ... lot_cancelation | 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,7 +121,7 @@ Suite Teardown Test Suite Teardown | ||
| 120 | ... viewer | 121 | ... viewer |
| 121 | ... ${USERS.users['${viewer}'].broker} | 122 | ... ${USERS.users['${viewer}'].broker} |
| 122 | ... lot_cancelation | 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,7 +129,7 @@ Suite Teardown Test Suite Teardown | ||
| 128 | ... viewer | 129 | ... viewer |
| 129 | ... ${USERS.users['${viewer}'].broker} | 130 | ... ${USERS.users['${viewer}'].broker} |
| 130 | ... lot_cancelation | 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 | # DELETING LOT | 135 | # DELETING LOT |
| @@ -145,17 +146,18 @@ Suite Teardown Test Suite Teardown | @@ -145,17 +146,18 @@ Suite Teardown Test Suite Teardown | ||
| 145 | 146 | ||
| 146 | *** Keywords *** | 147 | *** Keywords *** |
| 147 | Можливість скасувати тендер | 148 | Можливість скасувати тендер |
| 148 | - ${cancellation_data}= Підготувати дані про скасування ${tender_owner} | 149 | + ${cancellation_data}= Підготувати дані про скасування |
| 149 | Run As ${tender_owner} | 150 | Run As ${tender_owner} |
| 150 | ... Скасувати закупівлю | 151 | ... Скасувати закупівлю |
| 151 | ... ${TENDER['TENDER_UAID']} | 152 | ... ${TENDER['TENDER_UAID']} |
| 152 | ... ${cancellation_data['cancellation_reason']} | 153 | ... ${cancellation_data['cancellation_reason']} |
| 153 | ... ${cancellation_data['document']['doc_path']} | 154 | ... ${cancellation_data['document']['doc_path']} |
| 154 | ... ${cancellation_data['description']} | 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 | Run As ${tender_owner} | 161 | Run As ${tender_owner} |
| 160 | ... Скасувати лот | 162 | ... Скасувати лот |
| 161 | ... ${TENDER['TENDER_UAID']} | 163 | ... ${TENDER['TENDER_UAID']} |
| @@ -163,14 +165,15 @@ Suite Teardown Test Suite Teardown | @@ -163,14 +165,15 @@ Suite Teardown Test Suite Teardown | ||
| 163 | ... ${cancellation_data['cancellation_reason']} | 165 | ... ${cancellation_data['cancellation_reason']} |
| 164 | ... ${cancellation_data['document']['doc_path']} | 166 | ... ${cancellation_data['document']['doc_path']} |
| 165 | ... ${cancellation_data['description']} | 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 | Порівняти об'єкти ${left} ${right} | 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 | ${right}= Get File ${OUTPUT_DIR}${/}${file_name} | 178 | ${right}= Get File ${OUTPUT_DIR}${/}${file_name} |
| 176 | Порівняти об'єкти ${left} ${right} | 179 | Порівняти об'єкти ${left} ${right} |
| @@ -145,6 +145,7 @@ PublicPortal: | @@ -145,6 +145,7 @@ PublicPortal: | ||
| 145 | keywords_file: publicportal | 145 | keywords_file: publicportal |
| 146 | roles: | 146 | roles: |
| 147 | viewer: PublicPortal_Viewer | 147 | viewer: PublicPortal_Viewer |
| 148 | + timeout_on_wait: 300 | ||
| 148 | SmartTender: | 149 | SmartTender: |
| 149 | intervals: | 150 | intervals: |
| 150 | default: | 151 | default: |
| @@ -202,10 +202,10 @@ users: | @@ -202,10 +202,10 @@ users: | ||
| 202 | size: [1000, 720] | 202 | size: [1000, 720] |
| 203 | PublicPortal_Viewer: | 203 | PublicPortal_Viewer: |
| 204 | broker: PublicPortal | 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 | SmartTender_Viewer: | 209 | SmartTender_Viewer: |
| 210 | broker: SmartTender | 210 | broker: SmartTender |
| 211 | homepage: "http://test.smarttender.biz/test-tenders?allcat=1" | 211 | homepage: "http://test.smarttender.biz/test-tenders?allcat=1" |
| 1 | # -*- coding: utf-8 - | 1 | # -*- coding: utf-8 - |
| 2 | from datetime import timedelta | 2 | from datetime import timedelta |
| 3 | from faker import Factory | 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 | from munch import munchify | 6 | from munch import munchify |
| 5 | from uuid import uuid4 | 7 | from uuid import uuid4 |
| 6 | from tempfile import NamedTemporaryFile | 8 | from tempfile import NamedTemporaryFile |
| @@ -10,10 +12,16 @@ import os | @@ -10,10 +12,16 @@ import os | ||
| 10 | import random | 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 | def create_fake_sentence(): | 27 | def create_fake_sentence(): |
| @@ -45,7 +53,7 @@ def create_fake_doc(): | @@ -45,7 +53,7 @@ def create_fake_doc(): | ||
| 45 | tf = NamedTemporaryFile(delete=False, suffix=suffix, prefix=prefix) | 53 | tf = NamedTemporaryFile(delete=False, suffix=suffix, prefix=prefix) |
| 46 | tf.write(content) | 54 | tf.write(content) |
| 47 | tf.close() | 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 | def test_tender_data(params, periods=("enquiry", "tender")): | 59 | def test_tender_data(params, periods=("enquiry", "tender")): |
| @@ -127,6 +135,7 @@ def test_tender_data(params, periods=("enquiry", "tender")): | @@ -127,6 +135,7 @@ def test_tender_data(params, periods=("enquiry", "tender")): | ||
| 127 | data['features'].append(new_feature) | 135 | data['features'].append(new_feature) |
| 128 | if not data['features']: | 136 | if not data['features']: |
| 129 | del data['features'] | 137 | del data['features'] |
| 138 | + data['status'] = 'draft' | ||
| 130 | return munchify(data) | 139 | return munchify(data) |
| 131 | 140 | ||
| 132 | 141 | ||
| @@ -136,6 +145,8 @@ def test_tender_data_limited(params): | @@ -136,6 +145,8 @@ def test_tender_data_limited(params): | ||
| 136 | del data["minimalStep"] | 145 | del data["minimalStep"] |
| 137 | del data["enquiryPeriod"] | 146 | del data["enquiryPeriod"] |
| 138 | del data["tenderPeriod"] | 147 | del data["tenderPeriod"] |
| 148 | + for lot in data.get('lots', []): | ||
| 149 | + lot.pop('minimalStep', None) | ||
| 139 | data["procuringEntity"]["kind"] = "general" | 150 | data["procuringEntity"]["kind"] = "general" |
| 140 | data.update({"procurementMethodType": params['mode'], "procurementMethod": "limited"}) | 151 | data.update({"procurementMethodType": params['mode'], "procurementMethod": "limited"}) |
| 141 | if params['mode'] == "negotiation": | 152 | if params['mode'] == "negotiation": |
| @@ -267,6 +278,7 @@ def test_bid_data(): | @@ -267,6 +278,7 @@ def test_bid_data(): | ||
| 267 | }) | 278 | }) |
| 268 | bid.data.tenderers[0].address.countryName_en = translate_country_en(bid.data.tenderers[0].address.countryName) | 279 | bid.data.tenderers[0].address.countryName_en = translate_country_en(bid.data.tenderers[0].address.countryName) |
| 269 | bid.data.tenderers[0].address.countryName_ru = translate_country_ru(bid.data.tenderers[0].address.countryName) | 280 | bid.data.tenderers[0].address.countryName_ru = translate_country_ru(bid.data.tenderers[0].address.countryName) |
| 281 | + bid.data['status'] = 'draft' | ||
| 270 | return bid | 282 | return bid |
| 271 | 283 | ||
| 272 | 284 | ||
| @@ -302,7 +314,10 @@ def test_item_data(cpv=None): | @@ -302,7 +314,10 @@ def test_item_data(cpv=None): | ||
| 302 | data["description_en"] = field_with_id("i", data["description_en"]) | 314 | data["description_en"] = field_with_id("i", data["description_en"]) |
| 303 | data["description_ru"] = field_with_id("i", data["description_ru"]) | 315 | data["description_ru"] = field_with_id("i", data["description_ru"]) |
| 304 | days = fake.random_int(min=1, max=30) | 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 | data["deliveryAddress"]["countryName_en"] = translate_country_en(data["deliveryAddress"]["countryName"]) | 321 | data["deliveryAddress"]["countryName_en"] = translate_country_en(data["deliveryAddress"]["countryName"]) |
| 307 | data["deliveryAddress"]["countryName_ru"] = translate_country_ru(data["deliveryAddress"]["countryName"]) | 322 | data["deliveryAddress"]["countryName_ru"] = translate_country_ru(data["deliveryAddress"]["countryName"]) |
| 308 | return munchify(data) | 323 | return munchify(data) |
| @@ -35,7 +35,7 @@ Set Suite Variable With Default Value | @@ -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 | ${local_time}= Get current TZdate | 39 | ${local_time}= Get current TZdate |
| 40 | Log ${server_time.headers['date']} | 40 | Log ${server_time.headers['date']} |
| 41 | Log ${local_time} | 41 | Log ${local_time} |
| @@ -60,8 +60,8 @@ Set Suite Variable With Default Value | @@ -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 | # Suite variable; should be present in every test suite | 65 | # Suite variable; should be present in every test suite |
| 66 | # in `*** Variables ***` section | 66 | # in `*** Variables ***` section |
| 67 | Log Many @{USED_ROLES} | 67 | Log Many @{USED_ROLES} |
| @@ -83,13 +83,13 @@ Set Suite Variable With Default Value | @@ -83,13 +83,13 @@ Set Suite Variable With Default Value | ||
| 83 | ${used_users}= Create List | 83 | ${used_users}= Create List |
| 84 | 84 | ||
| 85 | # Handle `-v role:something` | 85 | # Handle `-v role:something` |
| 86 | - Run Keyword Unless '${role}' in @{USED_ROLES} | 86 | + Run Keyword Unless '${ROLE}' in @{USED_ROLES} |
| 87 | ... Log | 87 | ... Log |
| 88 | - ... Role ${role} is not used in this test suite. | 88 | + ... Role ${ROLE} is not used in this test suite. |
| 89 | ... WARN | 89 | ... WARN |
| 90 | Set Suite Variable With Default Value | 90 | Set Suite Variable With Default Value |
| 91 | - ... ${role} | ||
| 92 | - ... ${BROKERS['${broker}'].roles.${role}} | 91 | + ... ${ROLE} |
| 92 | + ... ${BROKERS['${BROKER}'].roles.${ROLE}} | ||
| 93 | 93 | ||
| 94 | # Set default value for each role if it is not set yet; | 94 | # Set default value for each role if it is not set yet; |
| 95 | # fill `used_users`; | 95 | # fill `used_users`; |
| @@ -161,7 +161,7 @@ Get Broker Property By Username | @@ -161,7 +161,7 @@ Get Broker Property By Username | ||
| 161 | 161 | ||
| 162 | Створити артефакт | 162 | Створити артефакт |
| 163 | ${artifact}= Create Dictionary | 163 | ${artifact}= Create Dictionary |
| 164 | - ... api_version=${api_version} | 164 | + ... api_version=${API_VERSION} |
| 165 | ... tender_uaid=${TENDER['TENDER_UAID']} | 165 | ... tender_uaid=${TENDER['TENDER_UAID']} |
| 166 | ... last_modification_date=${TENDER['LAST_MODIFICATION_DATE']} | 166 | ... last_modification_date=${TENDER['LAST_MODIFICATION_DATE']} |
| 167 | ... mode=${MODE} | 167 | ... mode=${MODE} |
| @@ -183,7 +183,10 @@ Get Broker Property By Username | @@ -183,7 +183,10 @@ Get Broker Property By Username | ||
| 183 | ${file_path}= Get Variable Value ${ARTIFACT_FILE} artifact.yaml | 183 | ${file_path}= Get Variable Value ${ARTIFACT_FILE} artifact.yaml |
| 184 | ${ARTIFACT}= load_data_from ${file_path} | 184 | ${ARTIFACT}= load_data_from ${file_path} |
| 185 | Run Keyword And Ignore Error Set To Dictionary ${USERS.users['${tender_owner}']} access_token=${ARTIFACT.access_token} | 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 | ${lot_index}= Get Variable Value ${lot_index} 0 | 190 | ${lot_index}= Get Variable Value ${lot_index} 0 |
| 188 | Run Keyword And Ignore Error Set To Dictionary ${TENDER} LOT_ID=${ARTIFACT.lots[${lot_index}]} | 191 | Run Keyword And Ignore Error Set To Dictionary ${TENDER} LOT_ID=${ARTIFACT.lots[${lot_index}]} |
| 189 | ${MODE}= Get Variable Value ${MODE} ${ARTIFACT.mode} | 192 | ${MODE}= Get Variable Value ${MODE} ${ARTIFACT.mode} |
| @@ -249,33 +252,45 @@ Get Broker Property By Username | @@ -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 | [Return] ${bid} | 263 | [Return] ${bid} |
| 255 | 264 | ||
| 256 | 265 | ||
| 257 | Підготувати дані про постачальника | 266 | Підготувати дані про постачальника |
| 258 | - [Arguments] ${username} | 267 | + [Arguments] ${username} ${lotIndex}=${-1} |
| 268 | + ${lotIndex}= Convert To Integer ${lotIndex} | ||
| 259 | ${supplier_data}= test_supplier_data | 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 | Log ${supplier_data} | 272 | Log ${supplier_data} |
| 262 | [Return] ${supplier_data} | 273 | [Return] ${supplier_data} |
| 263 | 274 | ||
| 264 | 275 | ||
| 265 | Підготувати дані про скасування | 276 | Підготувати дані про скасування |
| 266 | - [Arguments] ${username} | ||
| 267 | ${cancellation_reason}= create_fake_sentence | 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 | ${file_path} ${file_name} ${file_content}= create_fake_doc | 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 | ${document}= Create Dictionary | 282 | ${document}= Create Dictionary |
| 271 | ... doc_path=${file_path} | 283 | ... doc_path=${file_path} |
| 272 | ... doc_name=${file_name} | 284 | ... doc_name=${file_name} |
| 273 | ... doc_content=${file_content} | 285 | ... doc_content=${file_content} |
| 274 | ... doc_id=${doc_id} | 286 | ... doc_id=${doc_id} |
| 275 | ${new_description}= create_fake_sentence | 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 | ${cancellation_data}= munchify ${cancellation_data} | 293 | ${cancellation_data}= munchify ${cancellation_data} |
| 278 | - Set To Dictionary ${USERS.users['${username}']} cancellation_data=${cancellation_data} | ||
| 279 | [Return] ${cancellation_data} | 294 | [Return] ${cancellation_data} |
| 280 | 295 | ||
| 281 | 296 |
| @@ -46,7 +46,7 @@ ${ITEM_MEAT} ${False} | @@ -46,7 +46,7 @@ ${ITEM_MEAT} ${False} | ||
| 46 | ... add_award | 46 | ... add_award |
| 47 | ... level1 | 47 | ... level1 |
| 48 | [Teardown] Оновити LAST_MODIFICATION_DATE | 48 | [Teardown] Оновити LAST_MODIFICATION_DATE |
| 49 | - Можливість зареєструвати, додати документацію і підтвердити постачальника до закупівлі | 49 | + Можливість зареєструвати, додати документацію і підтвердити першого постачальника до закупівлі |
| 50 | 50 | ||
| 51 | 51 | ||
| 52 | Можливість знайти переговорну процедуру за нагальною потребою по ідентифікатору | 52 | Можливість знайти переговорну процедуру за нагальною потребою по ідентифікатору |
| @@ -46,7 +46,7 @@ ${ITEM_MEAT} ${False} | @@ -46,7 +46,7 @@ ${ITEM_MEAT} ${False} | ||
| 46 | ... add_award | 46 | ... add_award |
| 47 | ... level1 | 47 | ... level1 |
| 48 | [Teardown] Оновити LAST_MODIFICATION_DATE | 48 | [Teardown] Оновити LAST_MODIFICATION_DATE |
| 49 | - Можливість зареєструвати, додати документацію і підтвердити постачальника до закупівлі | 49 | + Можливість зареєструвати, додати документацію і підтвердити першого постачальника до закупівлі |
| 50 | 50 | ||
| 51 | 51 | ||
| 52 | Можливість знайти переговорну процедуру по ідентифікатору | 52 | Можливість знайти переговорну процедуру по ідентифікатору |
| @@ -169,8 +169,15 @@ ${ITEM_MEAT} ${True} | @@ -169,8 +169,15 @@ ${ITEM_MEAT} ${True} | ||
| 169 | [Setup] Дочекатись синхронізації з майданчиком ${viewer} | 169 | [Setup] Дочекатись синхронізації з майданчиком ${viewer} |
| 170 | Звірити відображення поля description усіх предметів для усіх користувачів | 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 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури тендера | 181 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення номенклатури тендера |
| 175 | ... viewer | 182 | ... viewer |
| 176 | ... ${USERS.users['${viewer}'].broker} | 183 | ... ${USERS.users['${viewer}'].broker} |
| @@ -1638,7 +1645,7 @@ ${ITEM_MEAT} ${True} | @@ -1638,7 +1645,7 @@ ${ITEM_MEAT} ${True} | ||
| 1638 | Звірити статус тендера ${tender_owner} ${TENDER['TENDER_UAID']} active.stage2.pending | 1645 | Звірити статус тендера ${tender_owner} ${TENDER['TENDER_UAID']} active.stage2.pending |
| 1639 | 1646 | ||
| 1640 | 1647 | ||
| 1641 | -Можливість перевести статус очікування обробки мостом | 1648 | +Можливість перевести тендер в статус очікування обробки мостом |
| 1642 | [Tags] ${USERS.users['${tender_owner}'].broker}: Процес переведення статусу у active.stage2.waiting. | 1649 | [Tags] ${USERS.users['${tender_owner}'].broker}: Процес переведення статусу у active.stage2.waiting. |
| 1643 | ... tender_owner | 1650 | ... tender_owner |
| 1644 | ... ${USERS.users['${tender_owner}'].broker} | 1651 | ... ${USERS.users['${tender_owner}'].broker} |
| @@ -1657,3 +1664,189 @@ ${ITEM_MEAT} ${True} | @@ -1657,3 +1664,189 @@ ${ITEM_MEAT} ${True} | ||
| 1657 | Дочекатися створення нового етапу мостом ${tender_owner} ${TENDER['TENDER_UAID']} | 1664 | Дочекатися створення нового етапу мостом ${tender_owner} ${TENDER['TENDER_UAID']} |
| 1658 | Звірити статус тендера ${tender_owner} ${TENDER['TENDER_UAID']} complete | 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 | + Можливість затвердити остаточне рішення кваліфікації |
| @@ -46,7 +46,7 @@ ${ITEM_MEAT} ${False} | @@ -46,7 +46,7 @@ ${ITEM_MEAT} ${False} | ||
| 46 | ... add_award | 46 | ... add_award |
| 47 | ... level1 | 47 | ... level1 |
| 48 | [Teardown] Оновити LAST_MODIFICATION_DATE | 48 | [Teardown] Оновити LAST_MODIFICATION_DATE |
| 49 | - Можливість зареєструвати, додати документацію і підтвердити постачальника до закупівлі | 49 | + Можливість зареєструвати, додати документацію і підтвердити першого постачальника до закупівлі |
| 50 | 50 | ||
| 51 | 51 | ||
| 52 | Можливість укласти угоду для звіту про укладений договір | 52 | Можливість укласти угоду для звіту про укладений договір |
| @@ -21,6 +21,7 @@ from .initial_data import ( | @@ -21,6 +21,7 @@ from .initial_data import ( | ||
| 21 | create_fake_doc, | 21 | create_fake_doc, |
| 22 | create_fake_sentence, | 22 | create_fake_sentence, |
| 23 | fake, | 23 | fake, |
| 24 | + field_with_id, | ||
| 24 | test_bid_data, | 25 | test_bid_data, |
| 25 | test_bid_value, | 26 | test_bid_value, |
| 26 | test_claim_answer_data, | 27 | test_claim_answer_data, |
| @@ -328,7 +329,7 @@ def get_from_object(obj, attribute): | @@ -328,7 +329,7 @@ def get_from_object(obj, attribute): | ||
| 328 | def set_to_object(obj, attribute, value): | 329 | def set_to_object(obj, attribute, value): |
| 329 | # Search the list index in path to value | 330 | # Search the list index in path to value |
| 330 | list_index = re.search('\d+', attribute) | 331 | list_index = re.search('\d+', attribute) |
| 331 | - if list_index: | 332 | + if list_index and attribute != 'stage2TenderID': |
| 332 | list_index = list_index.group(0) | 333 | list_index = list_index.group(0) |
| 333 | parent, child = attribute.split('[' + list_index + '].')[:2] | 334 | parent, child = attribute.split('[' + list_index + '].')[:2] |
| 334 | # Split attribute to path to lits (parent) and path to value in list element (child) | 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,8 +410,8 @@ def get_id_from_object(obj): | ||
| 409 | return obj_id.group(1) | 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 | def get_object_type_by_id(object_id): | 417 | def get_object_type_by_id(object_id): |
| @@ -443,7 +444,7 @@ def get_complaint_index_by_complaintID(data, complaintID): | @@ -443,7 +444,7 @@ def get_complaint_index_by_complaintID(data, complaintID): | ||
| 443 | 444 | ||
| 444 | def generate_test_bid_data(tender_data): | 445 | def generate_test_bid_data(tender_data): |
| 445 | bid = test_bid_data() | 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 | bid.data.selfEligible = True | 448 | bid.data.selfEligible = True |
| 448 | bid.data.selfQualified = True | 449 | bid.data.selfQualified = True |
| 449 | if 'lots' in tender_data: | 450 | if 'lots' in tender_data: |
| @@ -466,27 +467,30 @@ def mult_and_round(*args, **kwargs): | @@ -466,27 +467,30 @@ def mult_and_round(*args, **kwargs): | ||
| 466 | return round(reduce(operator.mul, args), kwargs.get('precision', 2)) | 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 | -v MODE:open_competitive_dialogue | 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 | -v NUMBER_OF_ITEMS:1 | 6 | -v NUMBER_OF_ITEMS:1 |
| 10 | -v NUMBER_OF_LOTS:1 | 7 | -v NUMBER_OF_LOTS:1 |
| @@ -33,3 +30,25 @@ | @@ -33,3 +30,25 @@ | ||
| 33 | -i stage2_pending_status_view | 30 | -i stage2_pending_status_view |
| 34 | 31 | ||
| 35 | -i wait_bridge_for_work | 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 |
| @@ -18,29 +18,26 @@ setup(name='op_robot_tests', | @@ -18,29 +18,26 @@ setup(name='op_robot_tests', | ||
| 18 | zip_safe=False, | 18 | zip_safe=False, |
| 19 | install_requires=[ | 19 | install_requires=[ |
| 20 | # -*- Extra requirements: -*- | 20 | # -*- Extra requirements: -*- |
| 21 | - 'robotframework', | ||
| 22 | - 'robotframework-selenium2library', | ||
| 23 | - 'robotframework-debuglibrary', | ||
| 24 | - 'robotframework-selenium2screenshots', | 21 | + 'Faker', |
| 25 | 'Pillow', | 22 | 'Pillow', |
| 26 | - 'iso8601', | ||
| 27 | 'PyYAML', | 23 | 'PyYAML', |
| 28 | - 'munch', | ||
| 29 | - 'fake-factory', | 24 | + 'barbecue', |
| 25 | + 'chromedriver', | ||
| 26 | + 'dateutils', | ||
| 30 | 'dpath', | 27 | 'dpath', |
| 28 | + 'haversine', | ||
| 29 | + 'iso8601', | ||
| 31 | 'jsonpath-rw', | 30 | 'jsonpath-rw', |
| 32 | - 'dateutils', | ||
| 33 | - 'pytz', | 31 | + 'munch', |
| 34 | 'parse', | 32 | 'parse', |
| 35 | - 'chromedriver', | ||
| 36 | - 'barbecue', | ||
| 37 | - 'haversine' | 33 | + 'pytz', |
| 34 | + 'robotframework', | ||
| 35 | + 'robotframework-selenium2library', | ||
| 36 | + 'selenium < 3.0.dev0', | ||
| 38 | ], | 37 | ], |
| 39 | entry_points={ | 38 | entry_points={ |
| 40 | 'console_scripts': [ | 39 | 'console_scripts': [ |
| 41 | - 'openprocurement_tests = op_robot_tests.runner:runner', | ||
| 42 | 'op_tests = op_robot_tests.runner:runner', | 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