Skip to content

Commit

Permalink
Add tests for award value editing
Browse files Browse the repository at this point in the history
  • Loading branch information
annawzz committed Oct 3, 2017
1 parent f76c232 commit cd9a672
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 97 deletions.
29 changes: 17 additions & 12 deletions openprocurement/tender/esco/tests/award.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from copy import deepcopy

from esculator import npv, escp
from openprocurement.api.utils import get_now
from openprocurement.api.tests.base import snitch
from openprocurement.tender.esco.adapters import TenderESCOConfigurator
from openprocurement.tender.belowthreshold.tests.base import test_organization
Expand Down Expand Up @@ -44,15 +45,19 @@
patch_tender_lot_award
)

# award_amountPerformance = npv(NBU_DISCOUNT_RATE,
# test_bids[0]['value']['annualCostsReduction'],
# test_bids[0]['value']['yearlyPaymentsPercentage'],
# test_bids[0]['value']['contractDuration'])

# award_amount = escp(NBU_DISCOUNT_RATE,
# test_bids[0]['value']['annualCostsReduction'],
# test_bids[0]['value']['yearlyPaymentsPercentage'],
# test_bids[0]['value']['contractDuration'])
award_amountPerformance = round(npv(test_bids[0]['value']['contractDuration']['years'],
test_bids[0]['value']['contractDuration']['days'],
test_bids[0]['value']['yearlyPaymentsPercentage'],
test_bids[0]['value']['annualCostsReduction'],
get_now(),
NBU_DISCOUNT_RATE), 2)

award_amount = round(escp(test_bids[0]['value']['contractDuration']['years'],
test_bids[0]['value']['contractDuration']['days'],
test_bids[0]['value']['yearlyPaymentsPercentage'],
test_bids[0]['value']['annualCostsReduction'],
get_now()), 2)


class TenderAwardResourceTest(BaseESCOContentWebTest,
Expand All @@ -61,8 +66,8 @@ class TenderAwardResourceTest(BaseESCOContentWebTest,
initial_bids = test_bids
initial_lots = test_lots
initial_auth = ('Basic', ('broker', ''))
# expected_award_amountPerformance = award_amountPerformance
# expected_award_amount = award_amount
expected_award_amountPerformance = award_amountPerformance
expected_award_amount = award_amount

def setUp(self):
super(TenderAwardResourceTest, self).setUp()
Expand Down Expand Up @@ -117,8 +122,8 @@ class TenderLotAwardResourceTest(BaseESCOContentWebTest,
initial_bids = test_bids
initial_lots = test_lots
initial_auth = ('Basic', ('broker', ''))
# expected_award_amountPerformance = award_amountPerformance
# expected_award_amount = award_amount
expected_award_amountPerformance = award_amountPerformance
expected_award_amount = award_amount

def setUp(self):
super(TenderLotAwardResourceTest, self).setUp()
Expand Down
191 changes: 106 additions & 85 deletions openprocurement/tender/esco/tests/award_blanks.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,29 @@ def patch_tender_award(self):
u'url', u'name': u'tender_id'}
])

response = self.app.patch_json(
'/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, self.award_id, self.tender_token),
{"data": {"value": {"amount": 500}}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.body, 'null')

response = self.app.patch_json(
'/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, self.award_id, self.tender_token),
{"data": {"value": {"amountPerformance": 500}}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.body, 'null')

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, self.award_id, self.tender_token),
{"data": {
"value": {
"annualCostsReduction": [300.6] * 21,
"yearlyPaymentsPercentage": 0.9,
"contractDuration": {'years': 5, 'days': 100}
}
}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.body, 'null')

response = self.app.patch_json(
'/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, self.award_id, self.tender_token),
{"data": {"awardStatus": "unsuccessful"}}, status=422)
Expand Down Expand Up @@ -77,15 +100,14 @@ def patch_tender_award(self):

self.set_status('complete')

# response = self.app.get('/tenders/{}/awards/{}'.format(self.tender_id, self.award_id))
# self.assertEqual(response.status, '200 OK')
# self.assertEqual(response.content_type, 'application/json')
response = self.app.get('/tenders/{}/awards/{}'.format(self.tender_id, self.award_id))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
# self.assertEqual(response.json['data']["value"]["amountPerformance"], self.expected_award_amountPerformance)

# response = self.app.get('/tenders/{}/awards/{}'.format(self.tender_id, self.award_id))
# self.assertEqual(response.status, '200 OK')
# self.assertEqual(response.content_type, 'application/json')
# self.assertEqual(response.json['data']["value"]["amount"], self.expected_award_amount)
# should be equal without round
self.assertEqual(round(response.json['data']["value"]["amountPerformance"], 2), self.expected_award_amountPerformance)
self.assertEqual(round(response.json['data']["value"]["amount"], 2), self.expected_award_amount)

response = self.app.patch_json(
'/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, self.award_id, self.tender_token),
Expand All @@ -97,81 +119,80 @@ def patch_tender_award(self):


def patch_tender_lot_award(self):
response = self.app.patch_json('/tenders/{}/awards/some_id'.format(self.tender_id), {"data": {"status": "unsuccessful"}}, status=404)
self.assertEqual(response.status, '404 Not Found')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['status'], 'error')
self.assertEqual(response.json['errors'], [
{u'description': u'Not Found', u'location':
u'url', u'name': u'award_id'}
])

response = self.app.patch_json('/tenders/some_id/awards/some_id', {"data": {"status": "unsuccessful"}}, status=404)
self.assertEqual(response.status, '404 Not Found')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['status'], 'error')
self.assertEqual(response.json['errors'], [
{u'description': u'Not Found', u'location':
u'url', u'name': u'tender_id'}
])

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, self.award_id, self.tender_token), {"data": {"awardStatus": "unsuccessful"}}, status=422)
self.assertEqual(response.status, '422 Unprocessable Entity')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'], [
{"location": "body", "name": "awardStatus", "description": "Rogue field"}
])

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, self.award_id, self.tender_token), {"data": {"status": "unsuccessful"}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertIn('Location', response.headers)
new_award_location = response.headers['Location']

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, self.award_id, self.tender_token), {"data": {"status": "pending"}}, status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't update award in current (unsuccessful) status")

response = self.app.get('/tenders/{}/awards'.format(self.tender_id))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(len(response.json['data']), 2)
self.assertIn(response.json['data'][-1]['id'], new_award_location)
new_award = response.json['data'][-1]

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, new_award['id'], self.tender_token), {"data": {"status": "active", "eligible": True}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')

response = self.app.get('/tenders/{}/awards'.format(self.tender_id))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(len(response.json['data']), 2)

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, new_award['id'], self.tender_token), {"data": {"status": "cancelled"}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertIn('Location', response.headers)

response = self.app.get('/tenders/{}/awards'.format(self.tender_id))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(len(response.json['data']), 3)

self.set_status('complete')

# response = self.app.get('/tenders/{}/awards/{}'.format(self.tender_id, self.award_id))
# self.assertEqual(response.status, '200 OK')
# self.assertEqual(response.content_type, 'application/json')
# self.assertEqual(response.json['data']["value"]["amountPerformance"], self.expected_award_amountPerformance)

# response = self.app.get('/tenders/{}/awards/{}'.format(self.tender_id, self.award_id))
# self.assertEqual(response.status, '200 OK')
# self.assertEqual(response.content_type, 'application/json')
# self.assertEqual(response.json['data']["value"]["amount"], self.expected_award_amount)

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, self.award_id, self.tender_token), {"data": {"status": "unsuccessful"}}, status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't update award in current (complete) tender status")
response = self.app.patch_json('/tenders/{}/awards/some_id'.format(self.tender_id), {"data": {"status": "unsuccessful"}}, status=404)
self.assertEqual(response.status, '404 Not Found')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['status'], 'error')
self.assertEqual(response.json['errors'], [
{u'description': u'Not Found', u'location':
u'url', u'name': u'award_id'}
])

response = self.app.patch_json('/tenders/some_id/awards/some_id', {"data": {"status": "unsuccessful"}}, status=404)
self.assertEqual(response.status, '404 Not Found')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['status'], 'error')
self.assertEqual(response.json['errors'], [
{u'description': u'Not Found', u'location':
u'url', u'name': u'tender_id'}
])

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, self.award_id, self.tender_token), {"data": {"awardStatus": "unsuccessful"}}, status=422)
self.assertEqual(response.status, '422 Unprocessable Entity')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'], [
{"location": "body", "name": "awardStatus", "description": "Rogue field"}
])

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, self.award_id, self.tender_token), {"data": {"status": "unsuccessful"}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertIn('Location', response.headers)
new_award_location = response.headers['Location']

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, self.award_id, self.tender_token), {"data": {"status": "pending"}}, status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't update award in current (unsuccessful) status")

response = self.app.get('/tenders/{}/awards'.format(self.tender_id))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(len(response.json['data']), 2)
self.assertIn(response.json['data'][-1]['id'], new_award_location)
new_award = response.json['data'][-1]

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, new_award['id'], self.tender_token), {"data": {"status": "active", "eligible": True}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')

response = self.app.get('/tenders/{}/awards'.format(self.tender_id))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(len(response.json['data']), 2)

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, new_award['id'], self.tender_token), {"data": {"status": "cancelled"}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertIn('Location', response.headers)

response = self.app.get('/tenders/{}/awards'.format(self.tender_id))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(len(response.json['data']), 3)

self.set_status('complete')

response = self.app.get('/tenders/{}/awards/{}'.format(self.tender_id, self.award_id))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
# self.assertEqual(response.json['data']["value"]["amountPerformance"], self.expected_award_amountPerformance)
# self.assertEqual(response.json['data']["value"]["amount"], self.expected_award_amount)
# should be equal without round
self.assertEqual(round(response.json['data']["value"]["amountPerformance"], 2), self.expected_award_amountPerformance)
self.assertEqual(round(response.json['data']["value"]["amount"], 2), self.expected_award_amount)

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, self.award_id, self.tender_token), {"data": {"status": "unsuccessful"}}, status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't update award in current (complete) tender status")

0 comments on commit cd9a672

Please sign in to comment.