Skip to content

Commit

Permalink
Merge pull request #36 from gorserg/add_tests_lot_stage2_ua
Browse files Browse the repository at this point in the history
Add tests lot stage2 ua
  • Loading branch information
kroman0 committed Jul 27, 2016
2 parents ef66217 + c8c59b8 commit e5bcfed
Show file tree
Hide file tree
Showing 3 changed files with 1,978 additions and 8 deletions.
24 changes: 17 additions & 7 deletions openprocurement/tender/competitivedialogue/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
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)
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,
auction_post_role, QUESTIONS_STAND_STILL, ENQUIRY_STAND_STILL_TIME,
PeriodStartEndRequired, EnquiryPeriod, Lot as BaseLot,
PeriodStartEndRequired, EnquiryPeriod, Lot as BaseLotEU,
validate_lots_uniq, embedded_lot_role, default_lot_role,
TENDERING_DURATION as TENDERING_DURATION_EU)
from openprocurement.api.models import (
Expand Down Expand Up @@ -126,7 +126,7 @@ class Options:
}


class Lot(BaseLot):
class Lot(BaseLotEU):

minimalStep = ModelType(Value, required=False)

Expand Down Expand Up @@ -250,15 +250,25 @@ class Tender(CompetitiveDialogEU):
}


class Lot(BaseLot):
class Lot(BaseLotEU):

minimalStep = ModelType(Value, required=True, default=Value({"amount": 0}))

class Options:
roles = stage_2_lot_roles.copy()


LotStage2 = Lot
LotStage2EU = Lot


class Lot(BaseLotUa):

minimalStep = ModelType(Value, required=True, default=Value({"amount": 0}))

class Options:
roles = stage_2_lot_roles.copy()

LotStage2UA = Lot

hide_dialogue_token = blacklist('dialogue_token')
close_edit_technical_fields = blacklist('dialogue_token', 'shortlistedFirms', 'dialogueID', 'value', 'features')
Expand Down Expand Up @@ -342,7 +352,7 @@ class Tender(BaseTenderEU):
tenderPeriod = ModelType(PeriodStartEndRequired, required=False,
default=init_PeriodStartEndRequired(TENDERING_DURATION_EU))
minimalStep = ModelType(Value, required=True, default=Value({'amount': 0}))
lots = ListType(ModelType(LotStage2), default=list(), validators=[validate_lots_uniq])
lots = ListType(ModelType(LotStage2EU), default=list(), validators=[validate_lots_uniq])
status = StringType(
choices=['draft', 'active.tendering', 'active.pre-qualification', 'active.pre-qualification.stand-still',
'active.auction', 'active.qualification', 'active.awarded', 'complete', 'cancelled',
Expand Down Expand Up @@ -372,7 +382,7 @@ class Tender(BaseTenderUA):
tenderPeriod = ModelType(PeriodStartEndRequired, required=False,
default=init_PeriodStartEndRequired(TENDERING_DURATION_UA))
minimalStep = ModelType(Value, required=True, default=Value({'amount': 0}))
lots = ListType(ModelType(LotStage2), default=list(), validators=[validate_lots_uniq])
lots = ListType(ModelType(LotStage2UA), default=list(), validators=[validate_lots_uniq])
status = StringType(
choices=['draft', 'active.tendering', 'active.pre-qualification', 'active.pre-qualification.stand-still',
'active.auction', 'active.qualification', 'active.awarded', 'complete', 'cancelled',
Expand Down
232 changes: 232 additions & 0 deletions openprocurement/tender/competitivedialogue/tests/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -552,5 +552,237 @@ def create_tender(self):
# self.set_status(self.initial_status)
self.app.authorization = auth


class BaseCompetitiveDialogUAStage2ContentWebTest(BaseCompetitiveDialogUAWebTest):
initial_data = test_tender_stage2_data_ua
initial_status = None
initial_bids = None
initial_lots = None
initial_features = None

def create_tenderers(self, count=1):
tenderers = []
for i in xrange(count):
tenderer = deepcopy(test_bids[0]["tenderers"])
tenderer[0]['identifier']['id'] = self.initial_data['shortlistedFirms'][i if i < 3 else 3]['identifier'][
'id']
tenderer[0]['identifier']['scheme'] = \
self.initial_data['shortlistedFirms'][i if i < 3 else 3]['identifier']['scheme']
tenderers.append(tenderer)
return tenderers

def setUp(self):
self.app.authorization = ('Basic', ('broker', ''))
super(BaseCompetitiveDialogUAStage2ContentWebTest, self).setUp()
self.create_tender()

def create_tender(self):
auth = self.app.authorization
self.app.authorization = ('Basic', ('competitive_dialogue', ''))
data = deepcopy(self.initial_data)
if self.initial_lots:
lots = []
for i in self.initial_lots:
lot = deepcopy(i)
lot['id'] = uuid4().hex
lots.append(lot)
data['lots'] = self.initial_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 feature['featureOf'] == 'lot':
feature['relatedItem'] = data['lots'][0]['id']
if feature['featureOf'] == 'item':
feature['relatedItem'] = data['items'][0]['id']
data['features'] = self.initial_features
response = self.app.post_json('/tenders', {'data': data})
tender = response.json['data']
self.tender = tender
self.tender_token = response.json['access']['token']
self.tender_id = tender['id']
self.app.authorization = ('Basic', ('competitive_dialogue', ''))
self.app.patch_json('/tenders/{id}?acc_token={token}'.format(id=self.tender_id,
token=self.tender_token),
{'data': {'status': 'draft.stage2'}})

self.app.authorization = ('Basic', ('broker', ''))
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):
data = {'status': status}
if status == 'active.tendering':
data.update({
"enquiryPeriod": {
"startDate": (now).isoformat(),
"endDate": (now + timedelta(days=13)).isoformat()
},
"tenderPeriod": {
"startDate": (now).isoformat(),
"endDate": (now + timedelta(days=16)).isoformat()
}
})
elif status == 'active.auction':
data.update({
"enquiryPeriod": {
"startDate": (now - timedelta(days=16)).isoformat(),
"endDate": (now - timedelta(days=3)).isoformat()
},
"tenderPeriod": {
"startDate": (now - timedelta(days=16)).isoformat(),
"endDate": (now).isoformat()
},
"auctionPeriod": {
"startDate": (now).isoformat()
}
})
if self.initial_lots:
data.update({
'lots': [
{
"auctionPeriod": {
"startDate": (now).isoformat()
}
}
for i in self.initial_lots
]
})
elif status == 'active.qualification':
data.update({
"enquiryPeriod": {
"startDate": (now - timedelta(days=17)).isoformat(),
"endDate": (now - timedelta(days=4)).isoformat()
},
"tenderPeriod": {
"startDate": (now - timedelta(days=17)).isoformat(),
"endDate": (now - timedelta(days=1)).isoformat()
},
"auctionPeriod": {
"startDate": (now - timedelta(days=1)).isoformat(),
"endDate": (now).isoformat()
},
"awardPeriod": {
"startDate": (now).isoformat()
}
})
if self.initial_lots:
data.update({
'lots': [
{
"auctionPeriod": {
"startDate": (now - timedelta(days=1)).isoformat(),
"endDate": (now).isoformat()
}
}
for i in self.initial_lots
]
})
elif status == 'active.awarded':
data.update({
"enquiryPeriod": {
"startDate": (now - timedelta(days=17)).isoformat(),
"endDate": (now - timedelta(days=4)).isoformat()
},
"tenderPeriod": {
"startDate": (now - timedelta(days=17)).isoformat(),
"endDate": (now - timedelta(days=1)).isoformat()
},
"auctionPeriod": {
"startDate": (now - timedelta(days=1)).isoformat(),
"endDate": (now).isoformat()
},
"awardPeriod": {
"startDate": (now).isoformat(),
"endDate": (now).isoformat()
}
})
if self.initial_lots:
data.update({
'lots': [
{
"auctionPeriod": {
"startDate": (now - timedelta(days=1)).isoformat(),
"endDate": (now).isoformat()
}
}
for i in self.initial_lots
]
})
elif status == 'complete':
data.update({
"enquiryPeriod": {
"startDate": (now - timedelta(days=25)).isoformat(),
"endDate": (now - timedelta(days=11)).isoformat()
},
"tenderPeriod": {
"startDate": (now - timedelta(days=25)).isoformat(),
"endDate": (now - timedelta(days=8)).isoformat()
},
"auctionPeriod": {
"startDate": (now - timedelta(days=8)).isoformat(),
"endDate": (now - timedelta(days=7)).isoformat()
},
"awardPeriod": {
"startDate": (now - timedelta(days=7)).isoformat(),
"endDate": (now - timedelta(days=7)).isoformat()
}
})
if self.initial_lots:
data.update({
'lots': [
{
"auctionPeriod": {
"startDate": (now - timedelta(days=8)).isoformat(),
"endDate": (now - timedelta(days=7)).isoformat()
}
}
for i in self.initial_lots
]
})
if extra:
data.update(extra)

tender = self.db.get(self.tender_id)
tender.update(apply_data_patch(tender, data))
self.db.save(tender)

authorization = self.app.authorization
self.app.authorization = ('Basic', ('chronograph', ''))
response = self.app.get('/tenders/{}'.format(self.tender_id))
self.app.authorization = authorization
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
return response

test_features_tender_eu_data = test_features_tender_data.copy()
test_features_tender_eu_data['procurementMethodType'] = CD_EU_TYPE

0 comments on commit e5bcfed

Please sign in to comment.