Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/a168176911242184_bug_relatedLot'…
Browse files Browse the repository at this point in the history
… into dev
  • Loading branch information
vmaksymiv committed Nov 14, 2016
2 parents 976abad + 49163f6 commit 1c86f46
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
9 changes: 8 additions & 1 deletion openprocurement/tender/limited/models.py
Expand Up @@ -23,10 +23,15 @@
from openprocurement.api.models import Contract as BaseContract
from openprocurement.api.models import ProcuringEntity as BaseProcuringEntity
from openprocurement.tender.openua.models import Complaint as BaseComplaint
from openprocurement.tender.openua.models import Item
from openprocurement.tender.openua.models import Item as BaseItem
from openprocurement.tender.openua.models import Tender as OpenUATender


class Item(BaseItem):
def validate_relatedLot(self, data, relatedLot):
if relatedLot and isinstance(data['__parent__'], Model):
raise ValidationError(u"This option is not available")

class Complaint(BaseComplaint):
class Options:
roles = {
Expand Down Expand Up @@ -233,6 +238,7 @@ def import_data(self, raw_data, **kw):

ReportingTender = Tender

Item = BaseItem

class Award(ReportingAward):

Expand Down Expand Up @@ -292,6 +298,7 @@ class Contract(BaseContract):
@implementer(ITender)
class Tender(ReportingTender):
""" Negotiation """
items = ListType(ModelType(Item), required=True, min_size=1, validators=[validate_cpv_group, validate_items_uniq])
awards = ListType(ModelType(Award), default=list())
contracts = ListType(ModelType(Contract), default=list())
cause = StringType(choices=['artContestIP', 'noCompetition', 'twiceUnsuccessful',
Expand Down
40 changes: 40 additions & 0 deletions openprocurement/tender/limited/tests/tender.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import unittest
from copy import deepcopy
from uuid import uuid4

from openprocurement.api import ROUTE_PREFIX
from openprocurement.api.models import get_now
Expand Down Expand Up @@ -254,6 +255,22 @@ def test_listing(self):
self.assertEqual(response.status, '200 OK')
self.assertEqual(len(response.json['data']), 4)

def test_tender_award_create(self):
data = test_tender_data.copy()
award_id = "1234"*8
data['awards'] = [{'suppliers': [test_organization],
'subcontractingDetails': 'Details',
'status': 'pending',
'qualified': True,
'id': award_id}
]

data['contracts'] = [{'title': 'contract title', 'description': 'contract description', 'awardID' : award_id}]
response = self.app.post_json('/tenders', {'data': data})
self.assertEqual(response.status, '201 Created')
self.assertNotIn('contracts', response.json['data'])
self.assertNotIn('awards', response.json['data'])

def test_listing_changes(self):
response = self.app.get('/tenders?feed=changes')
self.assertEqual(response.status, '200 OK')
Expand Down Expand Up @@ -515,6 +532,17 @@ def test_create_tender_invalid(self):
{u'description': [{u'deliveryDate': [u'This field is required.'], u'deliveryAddress': {u'postalCode': [u'This field is required.'], u'locality': [u'This field is required.']}}], u'location': u'body', u'name': u'items'}
])

def test_field_relatedLot(self):
request_path = '/tenders'
data = deepcopy(self.initial_data)
data['items'][0]['relatedLot'] = uuid4().hex
response = self.app.post_json(request_path, {'data':data}, status=422)
self.assertEqual(response.status, '422 Unprocessable Entity')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['status'], 'error')
self.assertEqual(response.json['errors'], [
{u'description': [{u'relatedLot': [u'This option is not available']}], u'location': u'body', u'name': u'items'}])

def test_create_tender_generated(self):
data = self.initial_data.copy()
data.update({'id': 'hash', 'doc_id': 'hash2', 'tenderID': 'hash3'})
Expand Down Expand Up @@ -826,6 +854,18 @@ def test_tender_Administrator_change(self):
class TenderNegotiationResourceTest(TenderResourceTest):
initial_data = test_tender_negotiation_data

def test_field_relatedLot(self):
request_path = '/tenders'
data = deepcopy(self.initial_data)
data['items'][0]['relatedLot'] = uuid4().hex
response = self.app.post_json(request_path, {'data':data}, status=422)
print response
self.assertEqual(response.status, '422 Unprocessable Entity')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['status'], 'error')
self.assertEqual(response.json['errors'], [
{u'description': [{u'relatedLot': [u'relatedLot should be one of lots']}], u'location': u'body', u'name': u'items'}])

class TenderNegotiationQuickResourceTest(TenderNegotiationResourceTest):
initial_data = test_tender_negotiation_quick_data

Expand Down

0 comments on commit 1c86f46

Please sign in to comment.