Skip to content

Commit

Permalink
Merge pull request #5 from VolVoz/master
Browse files Browse the repository at this point in the history
Update contract view and test
  • Loading branch information
vmaksymiv committed Feb 5, 2016
2 parents 51016ac + 9a90ee8 commit 53292e9
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 42 deletions.
44 changes: 43 additions & 1 deletion openprocurement/tender/limited/tests/contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,11 @@ def test_create_tender_contract(self):
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['data']["status"], "terminated")

response = self.app.patch_json('/tenders/{}/contracts/{}'.format(self.tender_id, contract['id']), {"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 contract status")

self.set_status('unsuccessful')

response = self.app.post_json('/tenders/{}/contracts'.format(
Expand All @@ -113,6 +118,19 @@ def test_create_tender_contract(self):
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't update contract in current (unsuccessful) tender status")

self.set_status('complete')

response = self.app.post_json('/tenders/{}/contracts'.format(
self.tender_id), {'data': {'title': 'contract title', 'description': 'contract description', 'awardID': self.award_id}}, status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't add contract in current (complete) tender status")

response = self.app.patch_json('/tenders/{}/contracts/{}'.format(self.tender_id, contract['id']), {"data": {"status": "active"}}, 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 contract in current (complete) tender status")

def test_patch_tender_contract(self):
response = self.app.post_json('/tenders/{}/contracts'.format(
self.tender_id), {'data': {'title': 'contract title', 'description': 'contract description', 'awardID': self.award_id}})
Expand Down Expand Up @@ -140,7 +158,7 @@ def test_patch_tender_contract(self):
{"data": {"status": "active"}}, 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 contract status")
self.assertEqual(response.json['errors'][0]["description"], "Can't update contract in current (complete) tender status")

response = self.app.patch_json('/tenders/{}/contracts/some_id'.format(self.tender_id),
{"data": {"status": "active"}}, status=404)
Expand Down Expand Up @@ -405,6 +423,15 @@ def test_create_tender_contract_document(self):
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't add document in current (unsuccessful) tender status")

self.set_status('complete')

response = self.app.post('/tenders/{}/contracts/{}/documents'.format(
self.tender_id, self.contract_id), upload_files=[('file', 'name.doc', 'content')], status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't add document in current (complete) tender status")


def test_put_tender_contract_document(self):
response = self.app.post('/tenders/{}/contracts/{}/documents'.format(
self.tender_id, self.contract_id), upload_files=[('file', 'name.doc', 'content')])
Expand Down Expand Up @@ -476,6 +503,14 @@ def test_put_tender_contract_document(self):
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't update document in current (unsuccessful) tender status")

self.set_status('complete')

response = self.app.put('/tenders/{}/contracts/{}/documents/{}'.format(
self.tender_id, self.contract_id, doc_id), upload_files=[('file', 'name.doc', 'content3')], 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 document in current (complete) tender status")

def test_patch_tender_contract_document(self):
response = self.app.post('/tenders/{}/contracts/{}/documents'.format(
self.tender_id, self.contract_id), upload_files=[('file', 'name.doc', 'content')])
Expand Down Expand Up @@ -511,6 +546,13 @@ def test_patch_tender_contract_document(self):
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't update document in current (unsuccessful) tender status")

self.set_status('complete')

response = self.app.patch_json('/tenders/{}/contracts/{}/documents/{}'.format(self.tender_id, self.contract_id, doc_id), {"data": {"description": "document description"}}, 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 document in current (complete) tender status")


def suite():
suite = unittest.TestSuite()
Expand Down
23 changes: 4 additions & 19 deletions openprocurement/tender/limited/views/contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
validate_contract_data,
validate_patch_contract_data,
)
from openprocurement.api.views.contract import TenderAwardContractResource as BaseTenderAwardContractResource


LOGGER = getLogger(__name__)
Expand All @@ -28,18 +29,14 @@ def check_tender_status(request):
procurementMethodType='reporting',
path='/tenders/{tender_id}/contracts/{contract_id}',
description="Tender contracts")
class TenderAwardContractResource(object):

def __init__(self, request, context):
self.request = request
self.db = request.registry.db
class TenderAwardContractResource(BaseTenderAwardContractResource):

@json_view(content_type="application/json", permission='create_contract', validators=(validate_contract_data,))
def collection_post(self):
"""Post a contract for award
"""
tender = self.request.validated['tender']
if tender.status not in ['active', 'complete']:
if tender.status not in ['active']:
self.request.errors.add('body', 'data', 'Can\'t add contract in current ({}) tender status'.format(tender.status))
self.request.errors.status = 403
return
Expand All @@ -52,23 +49,11 @@ def collection_post(self):
self.request.response.headers['Location'] = self.request.route_url('Tender Contracts', tender_id=tender.id, contract_id=contract['id'])
return {'data': contract.serialize()}

@json_view(permission='view_tender')
def collection_get(self):
"""List contracts for award
"""
return {'data': [i.serialize() for i in self.request.context.contracts]}

@json_view(permission='view_tender')
def get(self):
"""Retrieving the contract for award
"""
return {'data': self.request.validated['contract'].serialize()}

@json_view(content_type="application/json", permission='edit_tender', validators=(validate_patch_contract_data,))
def patch(self):
"""Update of contract
"""
if self.request.validated['tender_status'] not in ['active', 'complete']:
if self.request.validated['tender_status'] not in ['active']:
self.request.errors.add('body', 'data', 'Can\'t update contract in current ({}) tender status'.format(self.request.validated['tender_status']))
self.request.errors.status = 403
return
Expand Down
27 changes: 5 additions & 22 deletions openprocurement/tender/limited/views/contract_document.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
validate_file_upload,
validate_patch_document_data,
)
from openprocurement.api.views.contract_document import TenderAwardContractDocumentResource as BaseTenderAwardContractDocumentResource


LOGGER = getLogger(__name__)
Expand All @@ -25,11 +26,7 @@
path='/tenders/{tender_id}/contracts/{contract_id}/documents/{document_id}',
procurementMethodType='reporting',
description="Tender contract documents")
class TenderAwardContractDocumentResource(object):

def __init__(self, request, context):
self.request = request
self.db = request.registry.db
class TenderAwardContractDocumentResource(BaseTenderAwardContractDocumentResource):

@json_view(permission='view_tender')
def collection_get(self):
Expand All @@ -48,7 +45,7 @@ def collection_get(self):
def collection_post(self):
"""Tender Contract Document Upload
"""
if self.request.validated['tender_status'] not in ['active', 'complete']:
if self.request.validated['tender_status'] not in ['active']:
self.request.errors.add('body', 'data', 'Can\'t add document in current ({}) tender status'.format(self.request.validated['tender_status']))
self.request.errors.status = 403
return
Expand All @@ -67,24 +64,10 @@ def collection_post(self):
self.request.response.headers['Location'] = self.request.current_route_url(_route_name=document_route, document_id=document.id, _query={})
return {'data': document.serialize("view")}

@json_view(permission='view_tender')
def get(self):
"""Tender Contract Document Read"""
if self.request.params.get('download'):
return get_file(self.request)
document = self.request.validated['document']
document_data = document.serialize("view")
document_data['previousVersions'] = [
i.serialize("view")
for i in self.request.validated['documents']
if i.url != document.url
]
return {'data': document_data}

@json_view(validators=(validate_file_update,), permission='edit_tender')
def put(self):
"""Tender Contract Document Update"""
if self.request.validated['tender_status'] not in ['active', 'complete']:
if self.request.validated['tender_status'] not in ['active']:
self.request.errors.add('body', 'data', 'Can\'t update document in current ({}) tender status'.format(self.request.validated['tender_status']))
self.request.errors.status = 403
return
Expand All @@ -103,7 +86,7 @@ def put(self):
@json_view(content_type="application/json", validators=(validate_patch_document_data,), permission='edit_tender')
def patch(self):
"""Tender Contract Document Update"""
if self.request.validated['tender_status'] not in ['active', 'complete']:
if self.request.validated['tender_status'] not in ['active']:
self.request.errors.add('body', 'data', 'Can\'t update document in current ({}) tender status'.format(self.request.validated['tender_status']))
self.request.errors.status = 403
return
Expand Down

0 comments on commit 53292e9

Please sign in to comment.