Skip to content

Commit

Permalink
Added invalidationDate
Browse files Browse the repository at this point in the history
  • Loading branch information
kroman0 committed Apr 25, 2016
1 parent ce4942a commit be6670c
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 16 deletions.
8 changes: 8 additions & 0 deletions openprocurement/tender/openua/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,17 +152,22 @@ def shouldStartAfter(self):
decision_dates.append(tender.tenderPeriod.endDate)
return max(decision_dates).isoformat()


class PeriodEndRequired(Model):

startDate = IsoDateTimeType() # The state date for the period.
endDate = IsoDateTimeType(required=True) # The end date for the period.


class PeriodStartEndRequired(Period):
startDate = IsoDateTimeType(required=True, default=get_now) # The state date for the period.
endDate = IsoDateTimeType(required=True, default=get_now) # The end date for the period.


class EnquiryPeriod(Period):
clarificationsUntil = IsoDateTimeType()
invalidationDate = IsoDateTimeType()


class Address(BaseAddress):

Expand Down Expand Up @@ -462,13 +467,15 @@ def initialize(self):
endDate = calculate_business_date(self.tenderPeriod.endDate, -ENQUIRY_PERIOD_TIME, self)
self.enquiryPeriod = EnquiryPeriod(dict(startDate=self.tenderPeriod.startDate,
endDate=endDate,
invalidationDate=self.enquiryPeriod and self.enquiryPeriod.invalidationDate,
clarificationsUntil=calculate_business_date(endDate, ENQUIRY_STAND_STILL_TIME, self, True)))

@serializable(serialized_name="enquiryPeriod", type=ModelType(EnquiryPeriod))
def tender_enquiryPeriod(self):
endDate = calculate_business_date(self.tenderPeriod.endDate, -ENQUIRY_PERIOD_TIME, self)
return EnquiryPeriod(dict(startDate=self.tenderPeriod.startDate,
endDate=endDate,
invalidationDate=self.enquiryPeriod and self.enquiryPeriod.invalidationDate,
clarificationsUntil=calculate_business_date(endDate, ENQUIRY_STAND_STILL_TIME, self, True)))

@serializable(type=ModelType(Period))
Expand Down Expand Up @@ -532,6 +539,7 @@ def next_check(self):
return min(checks).isoformat() if checks else None

def invalidate_bids_data(self):
self.enquiryPeriod.invalidationDate = get_now()
for bid in self.bids:
if bid.status != "deleted":
bid.status = "invalid"
2 changes: 1 addition & 1 deletion openprocurement/tender/openua/tests/bid.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ def test_delete_tender_bidder(self):

revisions = self.db.get(self.tender_id).get('revisions')
self.assertTrue(any([i for i in revisions[-2][u'changes'] if i['op'] == u'remove' and i['path'] == u'/bids']))
self.assertTrue(any([i for i in revisions[-1][u'changes'] if i['op'] == u'replace' and i['path'] == u'/bids/0']))
self.assertTrue(any([i for i in revisions[-1][u'changes'] if i['op'] == u'replace' and i['path'] == u'/bids/0/status']))

response = self.app.delete('/tenders/{}/bids/some_id'.format(self.tender_id), status=404)
self.assertEqual(response.status, '404 Not Found')
Expand Down
2 changes: 1 addition & 1 deletion openprocurement/tender/openua/tests/lot.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ def test_patch_tender_lot(self):

response = self.app.patch_json('/tenders/{}/lots/{}?acc_token={}'.format(self.tender_id, lot['id'], self.tender_token), {"data": {"guarantee": {"currency": "USD"}}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.body, 'null')
self.assertEqual(response.json['data']['guarantee']['currency'], 'UAH')

response = self.app.patch_json('/tenders/{}/lots/some_id'.format(self.tender_id), {"data": {"title": "other title"}}, status=404)
self.assertEqual(response.status, '404 Not Found')
Expand Down
54 changes: 40 additions & 14 deletions openprocurement/tender/openua/tests/tender.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,16 +109,25 @@ def test_listing(self):
self.assertEqual(response.content_type, 'application/json')
tenders.append(response.json['data'])

response = self.app.get('/tenders')
self.assertEqual(response.status, '200 OK')
ids = ','.join([i['id'] for i in tenders])

while True:
response = self.app.get('/tenders')
self.assertTrue(ids.startswith(','.join([i['id'] for i in response.json['data']])))
if len(response.json['data']) == 3:
break

self.assertEqual(len(response.json['data']), 3)
self.assertEqual(set(response.json['data'][0]), set([u'id', u'dateModified']))
self.assertEqual(set([i['id'] for i in response.json['data']]), set([i['id'] for i in tenders]))
self.assertEqual(set([i['dateModified'] for i in response.json['data']]), set([i['dateModified'] for i in tenders]))
self.assertEqual([i['dateModified'] for i in response.json['data']], sorted([i['dateModified'] for i in tenders]))

response = self.app.get('/tenders?offset={}'.format(offset))
self.assertEqual(response.status, '200 OK')
while True:
response = self.app.get('/tenders?offset={}'.format(offset))
self.assertEqual(response.status, '200 OK')
if len(response.json['data']) == 1:
break
self.assertEqual(len(response.json['data']), 1)

response = self.app.get('/tenders?limit=2')
Expand Down Expand Up @@ -177,7 +186,11 @@ def test_listing(self):
self.assertEqual(response.status, '201 Created')
self.assertEqual(response.content_type, 'application/json')

response = self.app.get('/tenders?mode=test')
while True:
response = self.app.get('/tenders?mode=test')
self.assertEqual(response.status, '200 OK')
if len(response.json['data']) == 1:
break
self.assertEqual(response.status, '200 OK')
self.assertEqual(len(response.json['data']), 1)

Expand All @@ -198,8 +211,14 @@ def test_listing_changes(self):
self.assertEqual(response.content_type, 'application/json')
tenders.append(response.json['data'])

response = self.app.get('/tenders?feed=changes')
self.assertEqual(response.status, '200 OK')
ids = ','.join([i['id'] for i in tenders])

while True:
response = self.app.get('/tenders?feed=changes')
self.assertTrue(ids.startswith(','.join([i['id'] for i in response.json['data']])))
if len(response.json['data']) == 3:
break

self.assertEqual(len(response.json['data']), 3)
self.assertEqual(set(response.json['data'][0]), set([u'id', u'dateModified']))
self.assertEqual(set([i['id'] for i in response.json['data']]), set([i['id'] for i in tenders]))
Expand Down Expand Up @@ -262,8 +281,11 @@ def test_listing_changes(self):
self.assertEqual(response.status, '201 Created')
self.assertEqual(response.content_type, 'application/json')

response = self.app.get('/tenders?feed=changes&mode=test')
self.assertEqual(response.status, '200 OK')
while True:
response = self.app.get('/tenders?feed=changes&mode=test')
self.assertEqual(response.status, '200 OK')
if len(response.json['data']) == 1:
break
self.assertEqual(len(response.json['data']), 1)

response = self.app.get('/tenders?feed=changes&mode=_all_')
Expand Down Expand Up @@ -806,24 +828,28 @@ def test_patch_tender_aaa(self):
tender['id'], owner_token), {'data': {'procurementMethodRationale': 'Open'}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertIn('invalidationDate', response.json['data']['enquiryPeriod'])
new_tender = response.json['data']
new_enquiryPeriod = new_tender.pop('enquiryPeriod')
new_dateModified = new_tender.pop('dateModified')
tender.pop('enquiryPeriod')
tender['procurementMethodRationale'] = 'Open'
self.assertEqual(tender, new_tender)
self.assertNotEqual(dateModified, new_dateModified)

revisions = self.db.get(tender['id']).get('revisions')
self.assertTrue(any([i for i in revisions[-1][u'changes'] if i['op'] == u'remove' and i['path'] == u'/procurementMethodRationale']))

response = self.app.patch_json('/tenders/{}?acc_token={}'.format(
tender['id'], owner_token), {'data': {'dateModified': new_dateModified}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
new_tender2 = response.json['data']
new_enquiryPeriod2 = new_tender2.pop('enquiryPeriod')
new_dateModified2 = new_tender2.pop('dateModified')
self.assertEqual(new_tender, new_tender2)
self.assertEqual(new_dateModified, new_dateModified2)

revisions = self.db.get(tender['id']).get('revisions')
self.assertEqual(revisions[-1][u'changes'][0]['op'], u'remove')
self.assertEqual(revisions[-1][u'changes'][0]['path'], u'/procurementMethodRationale')
self.assertNotEqual(new_enquiryPeriod, new_enquiryPeriod2)
self.assertNotEqual(new_dateModified, new_dateModified2)

response = self.app.patch_json('/tenders/{}?acc_token={}'.format(
tender['id'], owner_token), {'data': {'items': [test_tender_data['items'][0]]}})
Expand Down

0 comments on commit be6670c

Please sign in to comment.