Skip to content

Commit

Permalink
Merge pull request #62 from gorserg/check_bids_on_uniqueness
Browse files Browse the repository at this point in the history
add validation for unique bids identifier, fix tests
  • Loading branch information
kroman0 committed Aug 19, 2016
2 parents 814343a + bb02d8e commit 8259118
Show file tree
Hide file tree
Showing 4 changed files with 140 additions and 53 deletions.
65 changes: 47 additions & 18 deletions openprocurement/tender/competitivedialogue/tests/stage1/bid.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
import unittest
from copy import deepcopy

from openprocurement.tender.competitivedialogue.tests.base import (
BaseCompetitiveDialogEUContentWebTest,
Expand Down Expand Up @@ -180,13 +181,20 @@ def test_status_jumping(self):
self.assertEqual(response.content_type, 'application/json')
bid = response.json['data']
bid_token = response.json['access']['token']
bidder_data = deepcopy(test_bids[0]['tenderers'][0])
bidder_data['identifier']['id'] = u"00037256"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id),
{'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': test_bids[1]['tenderers'], "value": {"amount": 499}}})
'tenderers': [bidder_data], "value": {"amount": 499}}})

bidder_data['identifier']['id'] = u"00037257"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id),
{'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': test_bids[1]['tenderers'], "value": {"amount": 499}}})
'tenderers': [bidder_data], "value": {"amount": 499}}})
bidder_data['identifier']['id'] = u"00037258"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id),
{'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': [bidder_data], "value": {"amount": 499}}})

response = self.app.get('/tenders/{}/bids/{}'.format(self.tender_id, bid['id']), status=403)
self.assertEqual(response.status, '403 Forbidden')
Expand Down Expand Up @@ -419,24 +427,28 @@ def test_get_tender_bidder(self):
Try get bidder on different tender status
"""
# Create bidder, and save
bidder_data = deepcopy(test_bids[0]['tenderers'][0])
bidder_data['identifier']['id'] = u"00037256"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id),
{'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': test_bids[0]['tenderers'], "value": {"amount": 500}}
'tenderers': [bidder_data], "value": {"amount": 500}}
})
self.assertEqual(response.status, '201 Created')
self.assertEqual(response.content_type, 'application/json')
bid = response.json['data']
bid_token = response.json['access']['token']

# Create another bidder
bidder_data['identifier']['id'] = u"00037257"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id),
{'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': test_bids[0]['tenderers'], "value": {"amount": 499}}})
'tenderers': [bidder_data], "value": {"amount": 499}}})

# Create another 2 bidder
bidder_data['identifier']['id'] = u"00037258"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id),
{'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': test_bids[0]['tenderers'], "value": {"amount": 499}}})
'tenderers': [bidder_data], "value": {"amount": 499}}})

# Try get bidder when dialog status active.tendering
response = self.app.get('/tenders/{}/bids/{}'.format(self.tender_id, bid['id']), status=403)
Expand Down Expand Up @@ -542,10 +554,12 @@ def test_deleted_bid_is_not_restorable(self):
def test_deleted_bid_do_not_locks_tender_in_state(self):
bids = []
bids_tokens = []
bidder_data = deepcopy(test_bids[0]['tenderers'][0])
for bid_amount in (400, 405): # Create two bids
bidder_data['identifier']['id'] = str(00037256 + bid_amount)
response = self.app.post_json('/tenders/{}/bids'.format(
self.tender_id), {'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': test_bids[0]['tenderers'], "value": {"amount": bid_amount}}})
'tenderers': [bidder_data], "value": {"amount": bid_amount}}})
self.assertEqual(response.status, '201 Created')
self.assertEqual(response.content_type, 'application/json')
bids.append(response.json['data'])
Expand All @@ -559,13 +573,15 @@ def test_deleted_bid_do_not_locks_tender_in_state(self):
self.assertEqual(response.json['data']['status'], 'deleted')

# Create new bid
bidder_data['identifier']['id'] = u"00037258"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id),
{'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': test_bids[1]['tenderers'], "value": {"amount": 101}}})
'tenderers': [bidder_data], "value": {"amount": 101}}})
# Create new bid
bidder_data['identifier']['id'] = u"00037259"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id),
{'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': test_bids[1]['tenderers'], "value": {"amount": 101}}})
'tenderers': [bidder_data], "value": {"amount": 101}}})

# switch to active.pre-qualification
self.set_status('active.pre-qualification', {"id": self.tender_id, 'status': 'active.tendering'})
Expand Down Expand Up @@ -614,9 +630,11 @@ def test_deleted_bid_do_not_locks_tender_in_state(self):

def test_get_tender_tenderers(self):
# Create bid
bidder_data = deepcopy(test_bids[0]['tenderers'][0])
bidder_data['identifier']['id'] = u"00037256"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id),
{'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': test_bids[0]['tenderers'], "value": {"amount": 500}}})
'tenderers': [bidder_data], "value": {"amount": 500}}})
self.assertEqual(response.status, '201 Created')
self.assertEqual(response.content_type, 'application/json')
bid = response.json['data'] # Save bid
Expand All @@ -629,13 +647,15 @@ def test_get_tender_tenderers(self):
"Can't view bids in current (active.tendering) tender status")

# Create bid
bidder_data['identifier']['id'] = u"00037257"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id),
{'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': test_bids[1]['tenderers'], "value": {"amount": 101}}})
'tenderers': [bidder_data], "value": {"amount": 101}}})
# Create another bid
bidder_data['identifier']['id'] = u"00037258"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id),
{'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': test_bids[2]['tenderers'], "value": {"amount": 111}}})
'tenderers': [bidder_data], "value": {"amount": 111}}})

# switch to active.pre-qualification
self.set_status('active.pre-qualification', {"id": self.tender_id, 'status': 'active.tendering'})
Expand Down Expand Up @@ -730,19 +750,23 @@ def test_bids_invalidation_on_tender_change(self):
u'name': u'value'}
])
# and submit valid bid
data = test_bids[0]
data = deepcopy(test_bids[0])
data['value']['amount'] = 299
data['tenderers'][0]['identifier']['id'] = u"00037256"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id), {'data': data})
self.assertEqual(response.status, '201 Created')
valid_bid_id = response.json['data']['id']
bidder_data = deepcopy(test_bids[0]['tenderers'][0])
bidder_data['identifier']['id'] = u"00037257"

self.app.post_json('/tenders/{}/bids'.format(self.tender_id),
{'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': test_bids[1]['tenderers'], "value": {"amount": 101}}})
'tenderers': [bidder_data], "value": {"amount": 101}}})

bidder_data['identifier']['id'] = u"00037258"
self.app.post_json('/tenders/{}/bids'.format(self.tender_id),
{'data': {'selfEligible': True, 'selfQualified': True,
'tenderers': test_bids[2]['tenderers'], "value": {"amount": 101}}})
'tenderers': [bidder_data], "value": {"amount": 101}}})

# switch to active.pre-qualification
self.set_status('active.pre-qualification', {"id": self.tender_id, 'status': 'active.tendering'})
Expand Down Expand Up @@ -967,17 +991,22 @@ class CompetitiveDialogEUBidDocumentResourceTest(BaseCompetitiveDialogEUContentW
def setUp(self):
super(CompetitiveDialogEUBidDocumentResourceTest, self).setUp()
# Create bid
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id), {'data': test_bids[0]})
bidder_data = deepcopy(test_bids[0])
bidder_data['tenderers'][0]['identifier']['id'] = u"00037256"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id), {'data': bidder_data})
bid = response.json['data']
self.bid_id = bid['id']
self.bid_token = response.json['access']['token']
# create second bid
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id), {'data': test_bids[1]})
bidder_data = deepcopy(test_bids[1])
bidder_data['tenderers'][0]['identifier']['id'] = u"00037257"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id), {'data': bidder_data})
bid2 = response.json['data']
self.bid2_id = bid2['id']
self.bid2_token = response.json['access']['token']

response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id), {'data': test_bids[1]})
bidder_data = deepcopy(test_bids[1])
bidder_data['tenderers'][0]['identifier']['id'] = u"00037258"
response = self.app.post_json('/tenders/{}/bids'.format(self.tender_id), {'data': bidder_data})
bid3 = response.json['data']
self.bid3_id = bid3['id']
self.bid3_token = response.json['access']['token']
Expand Down

0 comments on commit 8259118

Please sign in to comment.