Skip to content

Commit

Permalink
Merge pull request #41 from gorserg/fix_lot_test
Browse files Browse the repository at this point in the history
Close lots on stage2
  • Loading branch information
kroman0 committed Jul 28, 2016
2 parents af93ab8 + 303e140 commit 7b9870f
Show file tree
Hide file tree
Showing 6 changed files with 496 additions and 612 deletions.
41 changes: 36 additions & 5 deletions openprocurement/tender/competitivedialogue/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from openprocurement.api.models import ITender, Identifier, Model, Value, get_tender
from openprocurement.api.utils import calculate_business_date, get_now
from openprocurement.tender.openua.models import (SifterListType, Item as BaseItem, Tender as BaseTenderUA,
TENDER_PERIOD as TENDERING_DURATION_UA, Lot as BaseLotUa)
TENDER_PERIOD as TENDERING_DURATION_UA, Lot as BaseLotUA)
from openprocurement.tender.openeu.models import (Tender as BaseTenderEU, Administrator_bid_role, view_bid_role,
pre_qualifications_role, Bid as BidEU, ConfidentialDocument,
edit_role_eu, auction_patch_role, auction_view_role,
Expand Down Expand Up @@ -220,10 +220,10 @@ class Tender(CompetitiveDialogEU):
stage_2_roles = {
'plain': plain_role,
'create': (blacklist('owner_token', 'tenderPeriod', '_attachments', 'revisions', 'dateModified', 'doc_id', 'tenderID', 'bids', 'documents', 'awards', 'questions', 'complaints', 'auctionUrl', 'status', 'auctionPeriod', 'awardPeriod', 'awardCriteria', 'submissionMethod', 'cancellations') + schematics_embedded_role),
'edit': edit_role_eu + close_edit_technical_fields,
'edit_draft': edit_role_eu + close_edit_technical_fields,
'edit_'+STAGE2_STATUS: edit_role_eu + close_edit_technical_fields,
'edit_active.tendering': edit_role_eu + close_edit_technical_fields,
'edit': whitelist('tenderPeriod'),
'edit_draft': whitelist('status'), # only bridge must change only status
'edit_'+STAGE2_STATUS: whitelist('tenderPeriod', 'status'),
'edit_active.tendering': whitelist('tenderPeriod'),
'edit_active.pre-qualification': whitelist('status'),
'edit_active.pre-qualification.stand-still': whitelist(),
'edit_active.auction': whitelist(),
Expand Down Expand Up @@ -286,6 +286,35 @@ def stage2__acl__(obj):
return acl


lot_stage2_roles = {
'create': whitelist('id', 'title', 'title_en', 'title_ru', 'description', 'description_en', 'description_ru', 'value', 'guarantee', 'minimalStep'),
'edit': whitelist(),
'embedded': embedded_lot_role,
'view': default_lot_role,
'default': default_lot_role,
'auction_view': default_lot_role,
'auction_patch': whitelist('id', 'auctionUrl'),
'chronograph': whitelist('id', 'auctionPeriod'),
'chronograph_view': whitelist('id', 'auctionPeriod', 'numberOfBids', 'status'),
}


class Lot(BaseLotUA):

class Options:
roles = lot_stage2_roles

LotStage2UA = Lot


class Lot(BaseLotEU):

class Options:
roles = lot_stage2_roles

LotStage2EU = Lot


@implementer(ITender)
class Tender(BaseTenderEU):
procurementMethodType = StringType(default=STAGE_2_EU_TYPE)
Expand All @@ -299,6 +328,7 @@ class Tender(BaseTenderEU):
'active.auction', 'active.qualification', 'active.awarded', 'complete', 'cancelled',
'unsuccessful', STAGE2_STATUS],
default='active.tendering')
lots = ListType(ModelType(LotStage2EU), default=list(), validators=[validate_lots_uniq])

create_accreditation = 'c'

Expand Down Expand Up @@ -327,6 +357,7 @@ class Tender(BaseTenderUA):
'active.auction', 'active.qualification', 'active.awarded', 'complete', 'cancelled',
'unsuccessful', STAGE2_STATUS],
default='active.tendering')
lots = ListType(ModelType(LotStage2UA), default=list(), validators=[validate_lots_uniq])

create_accreditation = 'c'

Expand Down
97 changes: 31 additions & 66 deletions openprocurement/tender/competitivedialogue/tests/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -488,29 +488,37 @@ def setUp(self):
super(BaseCompetitiveDialogEUStage2ContentWebTest, self).setUp()
self.create_tender()

def create_tender(self):
def create_tender(self, initial_lots=None, initial_data=None, features=None):
if initial_lots is None:
initial_lots = self.initial_lots
if initial_data is None:
initial_data = self.initial_data
auth = self.app.authorization
self.app.authorization = ('Basic', ('competitive_dialogue', ''))
data = deepcopy(self.initial_data)
if self.initial_lots:
data = deepcopy(initial_data)
if initial_lots:
lots = []
for i in self.initial_lots:
for i in initial_lots:
lot = deepcopy(i)
lot['id'] = uuid4().hex
if 'id' not in lot:
lot['id'] = uuid4().hex
lots.append(lot)
data['lots'] = self.initial_lots = lots
data['lots'] = self.lots = lots
for i, item in enumerate(data['items']):
item['relatedLot'] = lots[i % len(lots)]['id']
for firm in data['shortlistedFirms']:
firm['lots'] = [dict(id=lot['id']) for lot in lots]
self.lots_id = [lot['id'] for lot in lots]
if self.initial_features:
for feature in self.initial_features:
if features:
for feature in features:
if feature['featureOf'] == 'lot':
feature['relatedItem'] = data['lots'][0]['id']
if feature['featureOf'] == 'item':
feature['relatedItem'] = data['items'][0]['id']
data['features'] = self.initial_features
data['features'] = self.features = features
import json
with open('t.json', 'wt') as f:
json.dump(data, f, indent=4)
response = self.app.post_json('/tenders', {'data': data})
tender = response.json['data']
self.tender = tender
Expand All @@ -525,30 +533,6 @@ def create_tender(self):
self.app.patch_json('/tenders/{id}?acc_token={token}'.format(id=self.tender_id,
token=self.tender_token),
{'data': {'status': 'active.tendering'}})
# status = tender['status']
# if self.initial_bids:
# self.initial_bids_tokens = {}
# response = self.set_status('active.tendering')
# status = response.json['data']['status']
# bids = []
# for i in self.initial_bids:
# if self.initial_lots:
# i = i.copy()
# value = i.pop('value')
# i['lotValues'] = [
# {
# 'value': value,
# 'relatedLot': l['id'],
# }
# for l in self.initial_lots
# ]
# response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id), {'data': i})
# self.assertEqual(response.status, '201 Created')
# bids.append(response.json['data'])
# self.initial_bids_tokens[response.json['data']['id']] = response.json['access']['token']
# self.initial_bids = bids
# if self.initial_status != status:
# self.set_status(self.initial_status)
self.app.authorization = auth


Expand All @@ -575,29 +559,34 @@ def setUp(self):
super(BaseCompetitiveDialogUAStage2ContentWebTest, self).setUp()
self.create_tender()

def create_tender(self):
def create_tender(self, initial_lots=None, initial_data=None, features=None):
if initial_lots is None:
initial_lots = self.initial_lots
if initial_data is None:
initial_data = self.initial_data
auth = self.app.authorization
self.app.authorization = ('Basic', ('competitive_dialogue', ''))
data = deepcopy(self.initial_data)
if self.initial_lots:
data = deepcopy(initial_data)
if initial_lots:
lots = []
for i in self.initial_lots:
for i in initial_lots:
lot = deepcopy(i)
lot['id'] = uuid4().hex
if 'id' not in lot:
lot['id'] = uuid4().hex
lots.append(lot)
data['lots'] = self.initial_lots = lots
data['lots'] = self.lots = lots
for i, item in enumerate(data['items']):
item['relatedLot'] = lots[i % len(lots)]['id']
for firm in data['shortlistedFirms']:
firm['lots'] = [dict(id=lot['id']) for lot in lots]
self.lots_id = [lot['id'] for lot in lots]
if self.initial_features:
for feature in self.initial_features:
if features:
for feature in features:
if feature['featureOf'] == 'lot':
feature['relatedItem'] = data['lots'][0]['id']
if feature['featureOf'] == 'item':
feature['relatedItem'] = data['items'][0]['id']
data['features'] = self.initial_features
data['features'] = self.features = features
response = self.app.post_json('/tenders', {'data': data})
tender = response.json['data']
self.tender = tender
Expand All @@ -612,30 +601,6 @@ def create_tender(self):
self.app.patch_json('/tenders/{id}?acc_token={token}'.format(id=self.tender_id,
token=self.tender_token),
{'data': {'status': 'active.tendering'}})
# status = tender['status']
# if self.initial_bids:
# self.initial_bids_tokens = {}
# response = self.set_status('active.tendering')
# status = response.json['data']['status']
# bids = []
# for i in self.initial_bids:
# if self.initial_lots:
# i = i.copy()
# value = i.pop('value')
# i['lotValues'] = [
# {
# 'value': value,
# 'relatedLot': l['id'],
# }
# for l in self.initial_lots
# ]
# response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id), {'data': i})
# self.assertEqual(response.status, '201 Created')
# bids.append(response.json['data'])
# self.initial_bids_tokens[response.json['data']['id']] = response.json['access']['token']
# self.initial_bids = bids
# if self.initial_status != status:
# self.set_status(self.initial_status)
self.app.authorization = auth

def set_status(self, status, extra=None):
Expand Down

0 comments on commit 7b9870f

Please sign in to comment.