Skip to content

Commit

Permalink
Merge pull request #19 from VolVoz/limit_awards
Browse files Browse the repository at this point in the history
limit awards plus tests
  • Loading branch information
vmaksymiv committed Feb 24, 2016
2 parents 793769d + d91b1da commit 1d1e5ee
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 4 deletions.
32 changes: 28 additions & 4 deletions openprocurement/tender/limited/tests/award.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,12 +152,22 @@ def test_canceling_created_award_and_create_new_one(self):
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['data'][-1], award)

response = self.app.post_json('/tenders/{}/awards?acc_token={}'.format(
self.tender_id, self.tender_token), {'data': {'suppliers':[test_tender_data["procuringEntity"]], 'status': 'pending'}}, status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.json['errors'][0]["description"], "Can't create new award while any (pending) award exists")

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

response = self.app.post_json('/tenders/{}/awards?acc_token={}'.format(
self.tender_id, self.tender_token), {'data': {'suppliers':[test_tender_data["procuringEntity"]], 'status': 'pending'}}, status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.json['errors'][0]["description"], "Can't create new award while any (active) award exists")

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(
self.tender_id, award['id'], self.tender_token), {"data": {"status": "cancelled"}})
self.assertEqual(response.status, '200 OK')
Expand Down Expand Up @@ -264,7 +274,11 @@ def test_patch_tender_award(self):
{"data": {"title": 'award title'}}, status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.json['errors'][0]["description"], "Can't update award in current (active) status")
active_award = award

# patch status for create new award
response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, award['id'], self.tender_token),
{"data": {"status": 'cancelled'}})
self.assertEqual(response.status, '200 OK')

# create new award and test other states
response = self.app.post_json(request_path, {'data': {'suppliers': [test_tender_data["procuringEntity"]],
Expand All @@ -284,10 +298,20 @@ def test_patch_tender_award(self):
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.post_json(request_path, {'data': {'suppliers': [test_tender_data["procuringEntity"]],
'status': u'pending', "value": {"amount": 500}}})
self.assertEqual(response.status, '201 Created')
self.assertEqual(response.content_type, 'application/json')
award = response.json['data']
response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(self.tender_id, award['id'], self.tender_token),
{"data": {"status": "active"}})
self.assertEqual(response.status, '200 OK')
active_award = award

response = self.app.get(request_path)
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(len(response.json['data']), 2)
self.assertEqual(len(response.json['data']), 3)

# sign contract to complete tender
tender = self.db.get(self.tender_id)
Expand All @@ -296,8 +320,8 @@ def test_patch_tender_award(self):
self.db.save(tender)
response = self.app.get('/tenders/{}/contracts'.format(self.tender_id))
self.assertEqual(response.status, '200 OK')
self.assertEqual(len(response.json['data']), 1)
contract = response.json['data'][0]
self.assertEqual(len(response.json['data']), 2)
contract = response.json['data'][1]
self.assertEqual(contract['awardID'], active_award['id'])
response = self.app.patch_json('/tenders/{}/contracts/{}?acc_token={}'.format(self.tender_id, contract['id'], self.tender_token),
{"data": {"status": "active"}})
Expand Down
16 changes: 16 additions & 0 deletions openprocurement/tender/limited/tests/tender.py
Original file line number Diff line number Diff line change
Expand Up @@ -794,10 +794,26 @@ def test_multiple_awards_tender(self):
{'data': {'suppliers': [test_tender_data["procuringEntity"]],
"value": {"amount": 500}}}, status=403)
self.assertEqual(response.status, '403 Forbidden')

response = self.app.post_json('/tenders/{}/awards?acc_token={}'.format(tender_id, owner_token),
{'data': {'suppliers': [test_tender_data["procuringEntity"]],
"value": {"amount": 500}}})
self.assertEqual(response.status, '201 Created')
award = response.json['data']

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(tender_id, award['id'], owner_token),
{"data": {"status": "active"}})
self.assertEqual(response.status, '200 OK')

response = self.app.post_json('/tenders/{}/awards?acc_token={}'.format(tender_id, owner_token),
{'data': {'suppliers': [test_tender_data["procuringEntity"]],
'value': {"amount": 501}}}, status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.json['errors'][0]["description"], "Can't create new award while any (active) award exists")

response = self.app.patch_json('/tenders/{}/awards/{}?acc_token={}'.format(tender_id, award['id'], owner_token),
{"data": {"status": "cancelled"}})

response = self.app.post_json('/tenders/{}/awards?acc_token={}'.format(tender_id, owner_token),
{'data': {'suppliers': [test_tender_data["procuringEntity"]],
"value": {"amount": 505}}})
Expand Down
4 changes: 4 additions & 0 deletions openprocurement/tender/limited/views/award.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,10 @@ def collection_post(self):
self.request.errors.add('body', 'data', 'Can\'t create award in current ({}) tender status'.format(tender.status))
self.request.errors.status = 403
return
if tender.awards and tender.awards[-1].status in ['pending', 'active']:
self.request.errors.add('body', 'data', 'Can\'t create new award while any ({}) award exists'.format(tender.awards[-1].status))
self.request.errors.status = 403
return
award = self.request.validated['award']
award.complaintPeriod = {'startDate': get_now().isoformat()}
tender.awards.append(award)
Expand Down

0 comments on commit 1d1e5ee

Please sign in to comment.