Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/document_service'
Browse files Browse the repository at this point in the history
  • Loading branch information
kroman0 committed Oct 6, 2016
2 parents 75560ed + 45b811d commit a786713
Show file tree
Hide file tree
Showing 4 changed files with 570 additions and 56 deletions.
6 changes: 5 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
language: python
sudo: false
sudo: required
before_script:
- sudo add-apt-repository ppa:chris-lea/libsodium -y
- sudo apt-get -qq update
- sudo apt-get install libsodium13 -y
python:
- "2.7"
services:
Expand Down
8 changes: 8 additions & 0 deletions openprocurement/tender/openua/tests/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,15 @@ def go_to_enquiryPeriod_end(self):
def setUp(self):
super(BaseTenderWebTest, self).setUp()
self.app.authorization = ('Basic', ('broker', ''))
self.couchdb_server = self.app.app.registry.couchdb_server
self.db = self.app.app.registry.db
if self.docservice:
self.setUpDS()

def tearDown(self):
if self.docservice:
self.tearDownDS()
del self.couchdb_server[self.db.name]

def set_status(self, status, extra=None):
data = {'status': status}
Expand Down
257 changes: 234 additions & 23 deletions openprocurement/tender/openua/tests/bid.py
Original file line number Diff line number Diff line change
Expand Up @@ -859,7 +859,7 @@ def test_create_tender_bidder_document(self):
doc_id = response.json["data"]['id']
self.assertIn(doc_id, response.headers['Location'])
self.assertEqual('name.doc', response.json["data"]["title"])
key = response.json["data"]["url"].split('?')[-1]
key = response.json["data"]["url"].split('?')[-1].split('=')[-1]

response = self.app.get('/tenders/{}/bids/{}/documents'.format(self.tender_id, self.bid_id), status=403)
self.assertEqual(response.status, '403 Forbidden')
Expand Down Expand Up @@ -893,12 +893,21 @@ def test_create_tender_bidder_document(self):
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't view bid document in current (active.tendering) tender status")

response = self.app.get('/tenders/{}/bids/{}/documents/{}?{}&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, key, self.bid_token))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/msword')
self.assertEqual(response.content_length, 7)
self.assertEqual(response.body, 'content')
if self.docservice:
response = self.app.get('/tenders/{}/bids/{}/documents/{}?download={}&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, key, self.bid_token))
self.assertEqual(response.status, '302 Moved Temporarily')
self.assertIn('http://localhost/get/', response.location)
self.assertIn('Signature=', response.location)
self.assertIn('KeyID=', response.location)
self.assertIn('Expires=', response.location)
else:
response = self.app.get('/tenders/{}/bids/{}/documents/{}?download={}&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, key, self.bid_token))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/msword')
self.assertEqual(response.content_length, 7)
self.assertEqual(response.body, 'content')

response = self.app.get('/tenders/{}/bids/{}/documents/{}'.format(
self.tender_id, self.bid_id, doc_id), status=403)
Expand Down Expand Up @@ -945,14 +954,23 @@ def test_put_tender_bidder_document(self):
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(doc_id, response.json["data"]["id"])
key = response.json["data"]["url"].split('?')[-1]

response = self.app.get('/tenders/{}/bids/{}/documents/{}?{}&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, key, self.bid_token))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/msword')
self.assertEqual(response.content_length, 8)
self.assertEqual(response.body, 'content2')
key = response.json["data"]["url"].split('?')[-1].split('=')[-1]

if self.docservice:
response = self.app.get('/tenders/{}/bids/{}/documents/{}?download={}&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, key, self.bid_token))
self.assertEqual(response.status, '302 Moved Temporarily')
self.assertIn('http://localhost/get/', response.location)
self.assertIn('Signature=', response.location)
self.assertIn('KeyID=', response.location)
self.assertIn('Expires=', response.location)
else:
response = self.app.get('/tenders/{}/bids/{}/documents/{}?download={}&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, key, self.bid_token))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/msword')
self.assertEqual(response.content_length, 8)
self.assertEqual(response.body, 'content2')

response = self.app.get('/tenders/{}/bids/{}/documents/{}?acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, self.bid_token))
Expand All @@ -966,14 +984,23 @@ def test_put_tender_bidder_document(self):
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(doc_id, response.json["data"]["id"])
key = response.json["data"]["url"].split('?')[-1]

response = self.app.get('/tenders/{}/bids/{}/documents/{}?{}&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, key, self.bid_token))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/msword')
self.assertEqual(response.content_length, 8)
self.assertEqual(response.body, 'content3')
key = response.json["data"]["url"].split('?')[-1].split('=')[-1]

if self.docservice:
response = self.app.get('/tenders/{}/bids/{}/documents/{}?download={}&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, key, self.bid_token))
self.assertEqual(response.status, '302 Moved Temporarily')
self.assertIn('http://localhost/get/', response.location)
self.assertIn('Signature=', response.location)
self.assertIn('KeyID=', response.location)
self.assertIn('Expires=', response.location)
else:
response = self.app.get('/tenders/{}/bids/{}/documents/{}?download={}&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, key, self.bid_token))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/msword')
self.assertEqual(response.content_length, 8)
self.assertEqual(response.body, 'content3')

self.set_status('active.awarded')

Expand Down Expand Up @@ -1068,9 +1095,193 @@ def test_create_tender_bidder_document_nopending(self):
self.assertEqual(response.json['errors'][0]["description"], "Can't add document because award of bid is not in pending or active state")


class TenderBidDocumentWithDSResourceTest(TenderBidDocumentResourceTest):
docservice = True

def test_create_tender_bidder_document_json(self):
response = self.app.post_json('/tenders/{}/bids/{}/documents?acc_token={}'.format(self.tender_id, self.bid_id, self.bid_token),
{'data': {
'title': 'name.doc',
'url': self.generate_docservice_url(),
'hash': 'md5:' + '0' * 32,
'format': 'application/msword',
}})
self.assertEqual(response.status, '201 Created')
self.assertEqual(response.content_type, 'application/json')
doc_id = response.json["data"]['id']
self.assertIn(doc_id, response.headers['Location'])
self.assertEqual('name.doc', response.json["data"]["title"])
key = response.json["data"]["url"].split('?')[-1].split('=')[-1]

response = self.app.get('/tenders/{}/bids/{}/documents'.format(self.tender_id, self.bid_id), status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't view bid documents in current (active.tendering) tender status")

response = self.app.get('/tenders/{}/bids/{}/documents?acc_token={}'.format(self.tender_id, self.bid_id, self.bid_token))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(doc_id, response.json["data"][0]["id"])
self.assertEqual('name.doc', response.json["data"][0]["title"])

response = self.app.get('/tenders/{}/bids/{}/documents?all=true&acc_token={}'.format(self.tender_id, self.bid_id, self.bid_token))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(doc_id, response.json["data"][0]["id"])
self.assertEqual('name.doc', response.json["data"][0]["title"])

response = self.app.get('/tenders/{}/bids/{}/documents/{}?download=some_id&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, self.bid_token), status=404)
self.assertEqual(response.status, '404 Not Found')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['status'], 'error')
self.assertEqual(response.json['errors'], [
{u'description': u'Not Found', u'location': u'url', u'name': u'download'}
])

response = self.app.get('/tenders/{}/bids/{}/documents/{}?download={}'.format(
self.tender_id, self.bid_id, doc_id, key), status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't view bid document in current (active.tendering) tender status")

response = self.app.get('/tenders/{}/bids/{}/documents/{}?download={}&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, key, self.bid_token))
self.assertEqual(response.status, '302 Moved Temporarily')
self.assertIn('http://localhost/get/', response.location)
self.assertIn('Signature=', response.location)
self.assertIn('KeyID=', response.location)
self.assertIn('Expires=', response.location)

response = self.app.get('/tenders/{}/bids/{}/documents/{}'.format(
self.tender_id, self.bid_id, doc_id), status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't view bid document in current (active.tendering) tender status")

response = self.app.get('/tenders/{}/bids/{}/documents/{}?acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, self.bid_token))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(doc_id, response.json["data"]["id"])
self.assertEqual('name.doc', response.json["data"]["title"])

response = self.app.post_json('/tenders/{}/bids/{}/documents?acc_token={}'.format(self.tender_id, self.bid_id, self.bid_token),
{'data': {
'title': 'name.doc',
'url': self.generate_docservice_url(),
'hash': 'md5:' + '0' * 32,
'format': 'application/msword',
}})
self.assertEqual(response.status, '201 Created')
self.assertEqual(response.content_type, 'application/json')
self.assertIn(response.json["data"]['id'], response.headers['Location'])
self.assertEqual('name.doc', response.json["data"]["title"])

self.set_status('active.awarded')

response = self.app.post_json('/tenders/{}/bids/{}/documents?acc_token={}'.format(self.tender_id, self.bid_id, self.bid_token),
{'data': {
'title': 'name.doc',
'url': self.generate_docservice_url(),
'hash': 'md5:' + '0' * 32,
'format': 'application/msword',
}}, status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't add document because award of bid is not in pending or active state")

response = self.app.get('/tenders/{}/bids/{}/documents/{}'.format(self.tender_id, self.bid_id, doc_id))
self.assertEqual(response.status, '200 OK')
self.assertIn('http://localhost/get/', response.json['data']['url'])
self.assertIn('Signature=', response.json['data']['url'])
self.assertIn('KeyID=', response.json['data']['url'])
self.assertNotIn('Expires=', response.json['data']['url'])

response = self.app.get('/tenders/{}/bids/{}/documents/{}?download={}&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, key, self.bid_token))
self.assertIn('http://localhost/get/', response.location)
self.assertIn('Signature=', response.location)
self.assertIn('KeyID=', response.location)
self.assertIn('Expires=', response.location)

def test_put_tender_bidder_document_json(self):
response = self.app.post_json('/tenders/{}/bids/{}/documents?acc_token={}'.format(self.tender_id, self.bid_id, self.bid_token),
{'data': {
'title': 'name.doc',
'url': self.generate_docservice_url(),
'hash': 'md5:' + '0' * 32,
'format': 'application/msword',
}})
self.assertEqual(response.status, '201 Created')
self.assertEqual(response.content_type, 'application/json')
doc_id = response.json["data"]['id']
self.assertIn(doc_id, response.headers['Location'])

response = self.app.put_json('/tenders/{}/bids/{}/documents/{}?acc_token={}'.format(self.tender_id, self.bid_id, doc_id, self.bid_token),
{'data': {
'title': 'name.doc',
'url': self.generate_docservice_url(),
'hash': 'md5:' + '0' * 32,
'format': 'application/msword',
}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(doc_id, response.json["data"]["id"])
key = response.json["data"]["url"].split('?')[-1]

response = self.app.get('/tenders/{}/bids/{}/documents/{}?{}&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, key, self.bid_token))
self.assertEqual(response.status, '302 Moved Temporarily')
self.assertIn('http://localhost/get/', response.location)
self.assertIn('Signature=', response.location)
self.assertIn('KeyID=', response.location)
self.assertIn('Expires=', response.location)

response = self.app.get('/tenders/{}/bids/{}/documents/{}?acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, self.bid_token))
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(doc_id, response.json["data"]["id"])
self.assertEqual('name.doc', response.json["data"]["title"])

response = self.app.put_json('/tenders/{}/bids/{}/documents/{}?acc_token={}'.format(self.tender_id, self.bid_id, doc_id, self.bid_token),
{'data': {
'title': 'name.doc',
'url': self.generate_docservice_url(),
'hash': 'md5:' + '0' * 32,
'format': 'application/msword',
}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(doc_id, response.json["data"]["id"])
key = response.json["data"]["url"].split('?')[-1]

response = self.app.get('/tenders/{}/bids/{}/documents/{}?{}&acc_token={}'.format(
self.tender_id, self.bid_id, doc_id, key, self.bid_token))
self.assertEqual(response.status, '302 Moved Temporarily')
self.assertIn('http://localhost/get/', response.location)
self.assertIn('Signature=', response.location)
self.assertIn('KeyID=', response.location)
self.assertIn('Expires=', response.location)

self.set_status('active.awarded')

response = self.app.put_json('/tenders/{}/bids/{}/documents/{}?acc_token={}'.format(self.tender_id, self.bid_id, doc_id, self.bid_token),
{'data': {
'title': 'name.doc',
'url': self.generate_docservice_url(),
'hash': 'md5:' + '0' * 32,
'format': 'application/msword',
}}, status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't update document because award of bid is not in pending or active state")

def suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TenderBidDocumentResourceTest))
suite.addTest(unittest.makeSuite(TenderBidDocumentWithDSResourceTest))
suite.addTest(unittest.makeSuite(TenderBidFeaturesResourceTest))
suite.addTest(unittest.makeSuite(TenderBidResourceTest))
return suite
Expand Down

0 comments on commit a786713

Please sign in to comment.