Commit c2663893d1438bc2493fdb1a4edf4c94bed2b9ec

Authored by Taras Kozlovskyi
1 parent dc04f61b

Added test for tender workwlow

  1 +from robot import run_cli
  2 +import os
  3 +import sys
  4 +
  5 +
  6 +def runner():
  7 + args = sys.argv[1:]
  8 + args.append(os.path.join(os.path.dirname(__file__), 'tests_files'))
  9 + return run_cli(args)
... ...
  1 +# -*- coding: utf-8 -
  2 +
  3 +from munch import munchify, Munch
  4 +from .initial_data import (
  5 + test_tender_data, test_question_data, test_question_answer_data,
  6 + test_bid_data
  7 +)
  8 +from openprocurement_client.client import Client
  9 +from datetime import datetime, timedelta
  10 +from StringIO import StringIO
  11 +from robot.output import LOGGER
  12 +from robot.output.loggerhelper import Message
  13 +
  14 +
  15 +def prepare_api(key=''):
  16 + return Client(key)
  17 +
  18 +
  19 +def prepare_test_tender_data():
  20 + tender = munchify({'data': test_tender_data})
  21 + return tender
  22 +
  23 +
  24 +def log_object_data(data):
  25 + if not isinstance(data, Munch):
  26 + data = munchify(data)
  27 + LOGGER.log_message(
  28 + Message(data.toYAML(allow_unicode=True, default_flow_style=False), "INFO")
  29 + )
  30 +
  31 +
  32 +def set_tender_periods(tender):
  33 + now = datetime.now()
  34 + tender.data.enquiryPeriod.endDate = (now + timedelta(minutes=2)).isoformat()
  35 + tender.data.tenderPeriod.startDate = (now + timedelta(minutes=2)).isoformat()
  36 + tender.data.tenderPeriod.endDate = (now + timedelta(minutes=4)).isoformat()
  37 + return tender
  38 +
  39 +
  40 +def set_access_key(tender, access_token):
  41 + tender.access = munchify({"token": access_token})
  42 + return tender
  43 +
  44 +
  45 +def upload_tender_document(api, tender):
  46 + file = StringIO()
  47 + file.name = 'test_file.txt'
  48 + file.write("test text data")
  49 + file.seek(0)
  50 + return api.upload_document(tender, file)
  51 +
  52 +
  53 +def patch_tender_document(api, tender, doc_id):
  54 + file = StringIO()
  55 + file.name = 'test_file1.txt'
  56 + file.write("test text data 11111")
  57 + file.seek(0)
  58 + return api.update_document(tender, doc_id, file)
  59 +
  60 +
  61 +def let_active_award(api, tender):
  62 + awards = api.get_awards(tender)
  63 + print "----_____ WE GOT AN AWARDS _____----"
  64 + award_id = [i['id'] for i in awards.data if i['status'] == 'pending'][0]
  65 + active_award = munchify({"data": {"status": "active", "id": award_id}})
  66 + award = api.patch_award(tender, active_award)
... ...
  1 +*** Setting ***
  2 +Resource keywords.robot
  3 +Resource resource.robot
  4 +
  5 +
  6 +*** Test Cases ***
  7 +Tender process
  8 + Create api wrapper
  9 + Create tender
  10 + Change tender title
  11 + Upload tender documentation
  12 + Change tender periods
  13 + Create question
  14 + Write answer on first question
  15 + Wait to TenderPeriod
  16 + Submit bids
  17 + Review tender
  18 + Wait to start of auction's worker
  19 + Get particular urls for bids
  20 + Review tender
  21 + Wait to end of auction
  22 + Review tender
  23 + Activate award
  24 +
... ...
  1 +# -*- coding: utf-8 -
  2 +from datetime import datetime, timedelta
  3 +now = datetime.now()
  4 +from munch import munchify
  5 +from faker import Factory
  6 +fake = Factory.create('uk_UA')
  7 +
  8 +test_tender_data = {
  9 + "title": fake.catch_phrase(),
  10 + "mode": "test",
  11 + "submissionMethodDetails": "quick",
  12 + "procuringEntity": {
  13 + "name": fake.company(),
  14 + "identifier": {
  15 + "scheme": u"UA-EDR",
  16 + "id": u"0000{}".format(fake.pyint()),
  17 + "uri": fake.image_url(width=None, height=None)
  18 + },
  19 + "address": {
  20 + "countryName": u"Україна",
  21 + "postalCode": fake.postalcode(),
  22 + "region": u"м. Київ",
  23 + "locality": u"м. Київ",
  24 + "streetAddress": fake.street_address()
  25 + },
  26 + "contactPoint": {
  27 + "name": fake.name(),
  28 + "telephone": fake.phone_number()
  29 + }
  30 + },
  31 + "value": {
  32 + "amount": 500,
  33 + "currency": u"UAH"
  34 + },
  35 + "minimalStep": {
  36 + "amount": 1,
  37 + "currency": u"UAH"
  38 + },
  39 + "items": [
  40 + {
  41 + "description": fake.catch_phrase(),
  42 + "classification": {
  43 + "scheme": u"CPV",
  44 + "id": u"44617100-9",
  45 + "description": u"Cartons"
  46 + },
  47 + "additionalClassifications": [
  48 + {
  49 + "scheme": u"ДКПП",
  50 + "id": u"17.21.1",
  51 + "description": u"папір і картон гофровані, паперова й картонна тара"
  52 + }
  53 + ],
  54 + "unit": {
  55 + "name": u"item",
  56 + "code": u"44617100-9"
  57 + },
  58 + "quantity": fake.pyint()
  59 + }
  60 + ],
  61 + "enquiryPeriod": {
  62 + "endDate": (now + timedelta(days=1)).isoformat()
  63 + },
  64 + "tenderPeriod": {
  65 + "endDate": (now + timedelta(days=2)).isoformat()
  66 + }
  67 +}
  68 +
  69 +
  70 +def test_question_data():
  71 + return {
  72 + "data": {
  73 + "author": {
  74 + "address": {
  75 + "countryName": "Україна",
  76 + "locality": "м. Вінниця",
  77 + "postalCode": "21100",
  78 + "region": "м. Вінниця",
  79 + "streetAddress": fake.street_address()
  80 + },
  81 + "contactPoint": {
  82 + "name": fake.name(),
  83 + "telephone": fake.phone_number()
  84 + },
  85 + "identifier": {
  86 + "scheme": u"UA-EDR",
  87 + "id": u"0000{}".format(fake.pyint()),
  88 + "uri": fake.image_url(width=None, height=None)
  89 + },
  90 + "name": fake.company()
  91 + },
  92 + "description": fake.sentence(nb_words=10, variable_nb_words=True),
  93 + "title": fake.sentence(nb_words=6, variable_nb_words=True)
  94 + }
  95 + }
  96 +
  97 +
  98 +def test_question_answer_data():
  99 + return {
  100 + "data": {
  101 + "answer": fake.sentence(nb_words=40, variable_nb_words=True)
  102 + }
  103 + }
  104 +
  105 +
  106 +def test_bid_data():
  107 + return munchify({
  108 + "data": {
  109 + "tenderers": [
  110 + {
  111 + "address": {
  112 + "countryName": "Україна",
  113 + "locality": "м. Вінниця",
  114 + "postalCode": "21100",
  115 + "region": "м. Вінниця",
  116 + "streetAddress": fake.street_address()
  117 + },
  118 + "contactPoint": {
  119 + "name": fake.name(),
  120 + "telephone": fake.phone_number()
  121 + },
  122 + "identifier": {
  123 + "scheme": u"UA-EDR",
  124 + "id": u"0000{}".format(fake.pyint()),
  125 + },
  126 + "name": fake.company()
  127 + }
  128 + ],
  129 + "value": {
  130 + "amount": 500
  131 + }
  132 + }
  133 + })
... ...
  1 +*** Setting ***
  2 +Library op_robot_tests.tests_files.ApiCommands
  3 +Library String
  4 +LIbrary Collections
  5 +
  6 +
  7 +*** Keywords ***
  8 +Create api wrapper
  9 + ${API}= prepare_api ${api_key}
  10 + Set Global Variable ${API}
  11 + LOG ${API}
  12 + Log Variables
  13 +
  14 +Set access key on tender
  15 + ${tender}= set_access_key ${tender} ${access_token}
  16 + Set Global Variable ${tender}
  17 +
  18 +Create tender
  19 + ${init_tender_data}= prepare_test_tender_data
  20 + Log object data ${init_tender_data}
  21 + ${tender}= Call Method ${API} create_tender ${init_tender_data}
  22 + Log object data ${tender}
  23 + ${access_token}= Get Variable Value ${tender.access.token}
  24 + Set Global Variable ${access_token}
  25 + ${tender_id}= Get Variable Value ${tender.data.id}
  26 + Set Global Variable ${tender_id}
  27 + Log access_key: ${access_token}
  28 + Log tender_id: ${tender_id}
  29 + Log Variables
  30 + Set Global Variable ${tender}
  31 + [return] ${tender}
  32 +
  33 +Change tender title
  34 + ${new_tender_sufix}= Generate Random String 3 [NUMBERS]
  35 + ${new_tender_title}= Set Variable 1-QUINTA-KT-${new_tender_sufix}
  36 + Log new title: ${new_tender_title}
  37 + Log object data ${tender}
  38 + ${tender.data.title}= Set Variable ${new_tender_title}
  39 + ${tender.data.title_en}= Set Variable ${new_tender_title}
  40 + ${tender.data.title_ru}= Set Variable ${new_tender_title}
  41 + Log object data ${tender}
  42 + ${tender}= Call Method ${API} patch_tender ${tender}
  43 + Set Global Variable ${tender}
  44 + Log object data ${tender}
  45 + Set access key on tender
  46 +
  47 +Change tender periods
  48 + Log object data ${tender}
  49 + ${tender}= set_tender_periods ${tender}
  50 + Log object data ${tender}
  51 + ${tender}= Call Method ${API} patch_tender ${tender}
  52 + Set Global Variable ${tender}
  53 + Log object data ${tender}
  54 + Set access key on tender
  55 +
  56 +Upload tender documentation
  57 + ${file}= upload tender document ${API} ${tender}
  58 + patch tender document ${API} ${tender} ${file.data.id}
  59 +
  60 +Create question
  61 + ${question}= test question data
  62 + Log object data ${question}
  63 + ${question}= Call Method ${API} create_question ${tender} ${question}
  64 + Log object data ${question}
  65 + [return] ${question}
  66 +
  67 +
  68 +Write answer on first question
  69 + ${questions}= Call Method ${API} get_questions ${tender}
  70 + Log object data ${questions}
  71 + ${question}= Set Variable ${questions.data[0]}
  72 + Log object data ${question}
  73 +
  74 + ${question}= Call Method ${API} get_question ${tender} ${questions.data[0].id}
  75 + Log object data ${question}
  76 + ${question}= set_access_key ${question} ${access_token}
  77 + Log object data ${question}
  78 +
  79 + ${answer}= test_question_answer_data
  80 + Log object data ${answer}
  81 + ${question.data.answer}= Set Variable ${answer['data']['answer']}
  82 + Log object data ${question}
  83 + ${question}= Call Method ${API} patch_question ${tender} ${question}
  84 + Log object data ${question}
  85 + [return] ${question}
  86 +
  87 +Review tender
  88 + ${tender}= Call Method ${API} get_tender ${tender_id}
  89 + Set Global Variable ${tender}
  90 + Log object data ${tender}
  91 + Set access key on tender
  92 +
  93 +Wait to TenderPeriod
  94 + Sleep 2 minutes 10 seconds Wait on TenderPeriod status
  95 +
  96 +Wait to start of auction's worker
  97 + Sleep 4 minutes
  98 +
  99 +Submit bids
  100 + ${bids} = Create Dictionary
  101 + Log object data ${bids}
  102 + :FOR ${index} IN RANGE 2
  103 + \ ${bid}= test bid data
  104 + \ Log object data ${bid}
  105 + \ ${temp_amount}= Evaluate ${bid['data']['value']['amount']} - ${index}
  106 + \ Log ${temp_amount}
  107 + \ ${bid.data.value.amount}= Get Variable Value ${temp_amount}
  108 + \ ${bids_data}= Submit bid with data ${bid}
  109 + \ Set To Dictionary ${bids} ${index} ${bids_data}
  110 + Set Global Variable ${bids}
  111 + Log object data ${bids}
  112 +
  113 +
  114 +
  115 +Submit bid with data
  116 + [Arguments] ${bid}
  117 + ${bid_data}= Call Method ${API} create_bid ${tender} ${bid}
  118 + Log object data ${bid_data}
  119 + [return] ${bid_data}
  120 +
  121 +
  122 +Get particular urls for bids
  123 + ${bids_items}= Get Dictionary Items ${bids}
  124 + :FOR ${index} ${bid} IN @{bids_items}
  125 + \ ${approved_bid}= Call Method ${API} get_bid ${tender} ${bid.data.id} ${bid.access.token}
  126 + \ Log object data ${approved_bid}
  127 + \ Log ${approved_bid.data.participationUrl}
  128 +
  129 +
  130 +Wait to end of auction
  131 + Sleep 45 minutes Wait to end of auction
  132 +
  133 +
  134 +Activate award
  135 + ${awards}= Call Method ${API} get_awards ${tender}
  136 + Log object data ${awards}
  137 + # :FOR ${award} IN @{awards.data}
  138 + # \
  139 + # award_id = [i['id'] for i in awards.data if i['status'] == 'pending'][0]
  140 + # active_award = munchify({"data": {"status": "active", "id": award_id}})
  141 + # award = api.patch_award(tender, active_award)
  142 + # write_yaml('award_active.yaml', award)
\ No newline at end of file
... ...
  1 +*** Variables ***
  2 +${api_key} e9c3ccb8e8124f26941d5f9639a4ebc3
... ...
... ... @@ -19,8 +19,11 @@ setup(name='op_robot_tests',
19 19 zip_safe=False,
20 20 install_requires=[
21 21 # -*- Extra requirements: -*-
  22 + 'robotframework'
22 23 ],
23   - entry_points="""
24   - # -*- Entry points: -*-
25   - """,
  24 + entry_points={
  25 + 'console_scripts': [
  26 + 'openprocurement_tests = op_robot_tests.runner:runner',
  27 + ],
  28 + }
26 29 )
... ...
Please register or login to post a comment