def create_complaint_post_tender_owner(self): # make complaint status pending with change_auth(self.app, ("Basic", ("bot", ""))): response = self.patch_complaint({"status": "pending"}, self.complaint_owner_token) self.assertEqual(response.status, "200 OK") self.assertEqual(response.json["data"]["status"], "pending") # create post by reviewer with change_auth(self.app, ("Basic", ("reviewer", ""))): response = self.post_post({ "title": "Lorem ipsum", "description": "Lorem ipsum dolor sit amet", "recipient": "tender_owner", }) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["author"], "aboveThresholdReviewers") post = response.json["data"] # create answer by complaint owner response = self.post_post( { "title": "Lorem ipsum", "description": "Lorem ipsum dolor sit amet", "recipient": "aboveThresholdReviewers", "relatedPost": post["id"], }, acc_token=self.tender_token) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["author"], "tender_owner")
def create_tender_qualification_complaint(self): response = self.app.post_json( "/tenders/{}/qualifications/{}/complaints?acc_token={}".format( self.tender_id, self.qualification_id, self.initial_bids_tokens.values()[0] ), { "data": test_complaint }, ) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") complaint = response.json["data"] complaint_token = response.json["access"]["token"] self.assertIn("id", complaint) self.assertIn(complaint["id"], response.headers["Location"]) if RELEASE_2020_04_19 > get_now(): self.assertEqual(complaint["author"]["name"], self.author_data["name"]) if RELEASE_2020_04_19 < get_now(): self.assertEqual(response.json["data"]["status"], "draft") with change_auth(self.app, ("Basic", ("bot", ""))): response = self.app.patch_json( "/tenders/{}/qualifications/{}/complaints/{}".format( self.tender_id, self.qualification_id, complaint["id"]), {"data": {"status": "pending"}}, ) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["status"], "pending") # set complaint status to invalid to be able to cancel the tender with change_auth(self.app, ("Basic", ("reviewer", ""))): response = self.app.patch_json( "/tenders/{}/qualifications/{}/complaints/{}?acc_token={}".format( self.tender_id, self.qualification_id, complaint["id"], complaint_token ), {"data": { "status": "invalid", "rejectReason": "buyerViolationsCorrected" }}, ) self.assertEqual(response.status, "200 OK") if RELEASE_2020_04_19 > get_now(): # Test for old rules # In new rules there will be 403 error self.cancel_tender() response = self.app.post_json( "/tenders/{}/qualifications/{}/complaints?acc_token={}".format( self.tender_id, self.qualification_id, self.initial_bids_tokens.values()[0] ), {"data": test_draft_claim}, 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 complaint in current (cancelled) tender status" )
def patch_complaint_post(self): # make complaint status pending with change_auth(self.app, ("Basic", ("bot", ""))): response = self.patch_complaint({"status": "pending"}, self.complaint_owner_token) self.assertEqual(response.status, "200 OK") self.assertEqual(response.json["data"]["status"], "pending") # create post by reviewer with change_auth(self.app, ("Basic", ("reviewer", ""))): response = self.post_post({ "title": "Lorem ipsum", "description": "Lorem ipsum dolor sit amet", "recipient": "complaint_owner", }) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") post = response.json["data"] self.post_id = post["id"] # try patch post by reviewer with change_auth(self.app, ("Basic", ("reviewer", ""))): response = self.patch_post({"title": "Test"}, status=405) self.assertEqual(response.status, "405 Method Not Allowed") self.assertEqual(response.content_type, "text/plain")
def test_owner_accreditation_level(self): # try to use transfer with owner without appropriate accreditation level with change_auth(self.app, ("Basic", (self.second_owner, ""))): response = self.app.post_json("/transfers", {"data": {}}) self.assertEqual(response.status, "201 Created") transfer = response.json["data"] transfer_tokens = response.json["access"] with change_auth(self.app, ("Basic", (self.second_owner, ""))): response = self.app.post_json( "/tenders/{}/ownership".format(self.tender_id), { "data": { "id": transfer["id"], "transfer": self.tender_transfer } }, status=403, ) self.assertEqual(response.status, "403 Forbidden") self.assertEqual( response.json["errors"], [{ u"description": u"Owner Accreditation level does not permit ownership change", u"location": u"ownership", u"name": u"accreditation", }], )
def get_complaint_posts(self): # make complaint status pending with change_auth(self.app, ("Basic", ("bot", ""))): response = self.patch_complaint({"status": "pending"}, self.complaint_owner_token) self.assertEqual(response.status, "200 OK") self.assertEqual(response.json["data"]["status"], "pending") # create post by reviewer with change_auth(self.app, ("Basic", ("reviewer", ""))): response = self.post_post({ "title": "Lorem ipsum", "description": "Lorem ipsum dolor sit amet", "recipient": "complaint_owner", }) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") post = response.json["data"] response = self.get_posts() self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual( set(response.json["data"][0]), set([ "id", "title", "description", "author", "recipient", "datePublished" ]))
def create_complaint_post_review_date_forbidden(self): # make complaint status pending with change_auth(self.app, ("Basic", ("bot", ""))): response = self.patch_complaint({"status": "pending"}, self.complaint_owner_token) self.assertEqual(response.status, "200 OK") self.assertEqual(response.json["data"]["status"], "pending") # make complaint status accepted with change_auth(self.app, ("Basic", ("reviewer", ""))): response = self.patch_complaint( { "status": "accepted", "reviewDate": get_now().isoformat(), "reviewPlace": "some", }, self.complaint_owner_token) self.assertEqual(response.status, "200 OK") self.assertEqual(response.json["data"]["status"], "accepted") # create post by reviewer with change_auth(self.app, ("Basic", ("reviewer", ""))): response = self.post_post( { "title": "Lorem ipsum", "description": "Lorem ipsum dolor sit amet", "recipient": "complaint_owner", }, status=403) self.assertEqual(response.status, "403 Forbidden") self.assertEqual(response.content_type, "application/json") self.assertEqual( response.json["errors"][0]["description"], "Can submit or edit post not later than 3 working days before reviewDate" )
def test_owner_deleted(self): # try to use transfer with owner without appropriate accreditation level with change_auth(self.app, ("Basic", (self.second_owner, ""))): response = self.app.post_json("/transfers", {"data": {}}) self.assertEqual(response.status, "201 Created") transfer = response.json["data"] transfer_tokens = response.json["access"] tender_doc = self.db.get(self.tender_id) tender_doc["owner"] = "deleted_broker" self.db.save(tender_doc) with change_auth(self.app, ("Basic", (self.second_owner, ""))): response = self.app.post_json( "/tenders/{}/ownership".format(self.tender_id), { "data": { "id": transfer["id"], "transfer": self.tender_transfer } }, ) self.assertEqual(response.status, "200 OK") self.assertNotIn("transfer", response.json["data"]) self.assertNotIn("transfer_token", response.json["data"]) self.assertEqual(self.second_owner, response.json["data"]["owner"])
def add_tender_complaints(self, statuses): # ['satisfied', 'stopped', 'declined', 'mistaken', 'invalid'] for status in statuses: self.app.authorization = ("Basic", ("broker", "")) response = self.app.post_json( "/tenders/{}/complaints".format(self.tender_id), {"data": test_complaint}, ) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") complaint = response.json["data"] owner_token = response.json["access"]["token"] url_patch_complaint = "/tenders/{}/complaints/{}".format( self.tender_id, complaint["id"]) if RELEASE_2020_04_19 < get_now(): with change_auth(self.app, ("Basic", ("bot", ""))): response = self.app.patch_json( url_patch_complaint, {"data": { "status": "pending" }}, ) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["status"], "pending") if RELEASE_2020_04_19 > get_now(): response = self.app.patch_json( "{}?acc_token={}".format(url_patch_complaint, owner_token), { "data": { "status": "stopping", "cancellationReason": "reason" } }, ) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["status"], "stopping") self.assertEqual(response.json["data"]["cancellationReason"], "reason") with change_auth(self.app, ("Basic", ("reviewer", ""))): now = get_now() data = {"decision": "decision", "status": status} if RELEASE_2020_04_19 < now: if status in ["invalid", "stopped"]: data.update({ "rejectReason": "tenderCancelled", "rejectReasonDescription": "reject reason description" }) response = self.app.patch_json(url_patch_complaint, {"data": data}) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["status"], status) self.assertEqual(response.json["data"]["decision"], "decision")
def test_accreditation_level_central(self): # test level permits to change ownership for 'central' kind tenders # first try on non 5th level broker tender = self.db.get(self.tender_id) tender["procuringEntity"]["kind"] = "central" tender["buyers"]= [{ "name": tender["procuringEntity"]["name"], "identifier": tender["procuringEntity"]["identifier"] }] self.db.save(tender) # create Transfer with second owner with change_auth(self.app, ("Basic", (self.second_owner, ""))): response = self.app.post_json("/transfers", {"data": {}}) self.assertEqual(response.status, "201 Created") transfer = response.json["data"] transfer_tokens = response.json["access"] # try to change ownership with change_auth(self.app, ("Basic", (self.second_owner, ""))): response = self.app.post_json( "/tenders/{}/ownership".format(self.tender_id), {"data": {"id": transfer["id"], "transfer": self.tender_transfer}}, status=403, ) self.assertEqual(response.status, "403 Forbidden") self.assertEqual( response.json["errors"], [ { "description": "Broker Accreditation level does not permit ownership change", "location": "url", "name": "accreditation", } ], ) # create Transfer with central owner with change_auth(self.app, ("Basic", (self.central_owner, ""))): response = self.app.post_json("/transfers", {"data": {}}) self.assertEqual(response.status, "201 Created") transfer = response.json["data"] transfer_tokens = response.json["access"] # try to change ownership with 5th level with change_auth(self.app, ("Basic", (self.central_owner, ""))): response = self.app.post_json( "/tenders/{}/ownership".format(self.tender_id), {"data": {"id": transfer["id"], "transfer": self.tender_transfer}}, ) self.assertEqual(response.status, "200 OK") self.assertIn("owner", response.json["data"]) self.assertEqual(response.json["data"]["owner"], self.central_owner)
def create_complaint_post_validate_recipient(self): # make complaint type complaint response = self.patch_complaint({ "type": "complaint", "status": "pending" }, self.complaint_owner_token) self.assertEqual(response.status, "200 OK") self.assertEqual(response.json["data"]["status"], "pending") # create post by reviewer with invalid recipient with change_auth(self.app, ("Basic", ("reviewer", ""))): response = self.post_post( { "title": "Lorem ipsum", "description": "Lorem ipsum dolor sit amet", "recipient": "aboveThresholdReviewers", }, status=422) self.assertEqual(response.status, "422 Unprocessable Entity") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["status"], "error") self.assertIn("Value must be one of ['complaint_owner', 'tender_owner'].", str(response.json["errors"])) # create post by reviewer with change_auth(self.app, ("Basic", ("reviewer", ""))): response = self.post_post({ "title": "Lorem ipsum", "description": "Lorem ipsum dolor sit amet", "recipient": "complaint_owner", }) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["author"], "aboveThresholdReviewers") post = response.json["data"] # create answer by complaint owner invalid recipient response = self.post_post( { "title": "Lorem ipsum", "description": "Lorem ipsum dolor sit amet", "recipient": "complaint_owner", "relatedPost": post["id"] }, acc_token=self.complaint_owner_token, status=422) self.assertEqual(response.status, "422 Unprocessable Entity") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["status"], "error") self.assertIn("Value must be one of ['aboveThresholdReviewers'].", str(response.json["errors"]))
def create_tender_complaint_post_by_tender_owner_document_json(self): # make complaint status pending with change_auth(self.app, ("Basic", ("bot", ""))): response = self.patch_complaint({"status": "pending"}, self.complaint_owner_token) self.assertEqual(response.status, "200 OK") self.assertEqual(response.json["data"]["status"], "pending") # create post by reviewer with change_auth(self.app, ("Basic", ("reviewer", ""))): response = self.post_post({ "title": "Lorem ipsum", "description": "Lorem ipsum dolor sit amet", "recipient": "tender_owner", }) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") post = response.json["data"] self.post_id = post["id"] # create post by tender_owner response = self.post_post( { "title": "Lorem ipsum", "description": "Lorem ipsum dolor sit amet", "recipient": "aboveThresholdReviewers", "relatedPost": post["id"], }, acc_token=self.tender_token) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") post = response.json["data"] self.post_id = post["id"] # create document by tender_owner response = self.post_post_document( { "title": u"укр.doc", "url": self.generate_docservice_url(), "hash": "md5:" + "0" * 32, "format": "application/msword", }, acc_token=self.tender_token) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json")
def setUp(self): super(TenderAwardComplaintSwitchResourceTest, self).setUp() # Create award with change_auth(self.app, ("Basic", ("token", ""))): response = self.app.post_json( "/tenders/{}/awards".format(self.tender_id), { "data": { "suppliers": [test_organization], "status": "pending", "bid_id": self.initial_bids[0]["id"], "lotID": self.initial_bids[0]["lotValues"][0]["relatedLot"], } }, ) award = response.json["data"] self.award_id = award["id"] response = self.app.patch_json( "/tenders/{}/awards/{}?acc_token={}".format( self.tender_id, self.award_id, self.tender_token), {"data": { "status": "active" }}, ) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["status"], "active")
def bot_patch_tender_complaint_mistaken(self): complaint_data = deepcopy(test_draft_complaint) complaint_data["author"] = getattr(self, "test_author", test_author) response = self.app.post_json( "/tenders/{}/complaints".format(self.tender_id), {"data": complaint_data}, ) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") complaint = response.json["data"] owner_token = response.json["access"]["token"] with change_auth(self.app, ("Basic", ("bot", ""))): response = self.app.patch_json( "/tenders/{}/complaints/{}?acc_token={}".format( self.tender_id, complaint["id"], owner_token), {"data": { "status": "mistaken" }}, ) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["status"], "mistaken") self.assertEqual(response.json["data"]["rejectReason"], "incorrectPayment")
def bot_patch_tender_complaint_forbidden(self): complaint_data = deepcopy(test_draft_complaint) complaint_data["author"] = getattr(self, "test_author", test_author) response = self.app.post_json( "/tenders/{}/complaints".format(self.tender_id), {"data": complaint_data}, ) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") complaint = response.json["data"] owner_token = response.json["access"]["token"] with change_auth(self.app, ("Basic", ("bot", ""))): response = self.app.patch_json( "/tenders/{}/complaints/{}?acc_token={}".format( self.tender_id, complaint["id"], owner_token), {"data": { "status": "pending" }}, 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 complaint from draft to pending status")
def patch_agreement_features_invalid(self): data = deepcopy(self.initial_data) item = data["items"][0].copy() item["id"] = "1" data["items"] = [item] data["features"] = self.features with change_auth(self.app, ("Basic", ("agreements", ""))) as app: response = self.app.post_json("/agreements", {"data": data}) self.assertEqual((response.status, response.content_type), ("201 Created", "application/json")) agreement = response.json["data"] self.assertEqual(agreement["features"], data["features"]) agreement = response.json["data"] token = response.json["access"]["token"] new_features = deepcopy(data["features"]) new_features[0]["code"] = "OCDS-NEW-CODE" response = self.app.patch_json("/agreements/{}?acc_token={}".format( agreement["id"], token), {"data": { "features": new_features }}, status=403) self.assertEqual((response.status, response.content_type), ("403 Forbidden", "application/json")) self.assertEqual(response.json["errors"][0]["description"], "Can't change features")
def cancellation_tender_active_qualification_stand_still(self): now = get_now() statuses = ["invalid", "stopped", "mistaken"] if RELEASE_2020_04_19 > now else ["invalid"] add_tender_complaints(self, statuses) self.set_status("active.qualification.stand-still") response = self.get_tender(role="broker") self.assertEqual(response.json["data"]["status"], "active.qualification.stand-still") award_id = response.json["data"]["awards"][0]["id"] owner_token = self.initial_bids_tokens[response.json["data"]["bids"][0]["id"]] response = self.app.post_json( "/tenders/{0}/awards/{1}/complaints?acc_token={2}".format(self.tender_id, award_id, owner_token), { "data": test_complaint }, ) self.assertEqual(response.status, "201 Created") complaint = response.json["data"] complaint_token = response.json["access"]["token"] if RELEASE_2020_04_19 < get_now(): with change_auth(self.app, ("Basic", ("bot", ""))): response = self.app.patch_json( "/tenders/{}/awards/{}/complaints/{}".format( self.tender_id, award_id, complaint["id"]), {"data": {"status": "pending"}}, ) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["status"], "pending") # set complaint status stopping to be able to cancel the lot response = self.app.patch_json( "/tenders/{}/awards/{}/complaints/{}?acc_token={}".format( self.tender_id, award_id, complaint["id"], complaint_token ), {"data": { "status": "stopping", "cancellationReason": "want this test to pass", }}, ) assert response.status_code == 200 self.set_status("active.qualification.stand-still", "end") self.check_chronograph() response = self.get_tender(role="broker") self.assertEqual(response.json["data"]["status"], "active.qualification.stand-still") self.cancel_tender() assert_statuses( self, rules={ "data.status": "cancelled", "data.lots[*].status": ["active"], "data.bids[*].status": ["active", "active", "active"], "data.qualifications[*].status": ["active", "active", "active"], "data.awards[*].status": ["active", "active", "active"], "data.agreements[*].status": None, "data.complaints[*].status": statuses, }, )
def setUp(self): super(TenderAwardActiveResourceTestCase, self).setUp() with change_auth(self.app, ("Basic", ("token", ""))): self.app.patch_json( "/tenders/{}/awards/{}".format(self.tender_id, self.award_id), {"data": {"status": "active", "qualified": True, "eligible": True}}, ) self.bid_token = self.initial_bids_tokens[self.initial_bids[0]["id"]]
def skip_address_validation(self): data = deepcopy(self.initial_data) data["contracts"][1]["suppliers"][0]["address"]["countryName"] = "any country" data["contracts"][1]["suppliers"][0]["address"]["region"] = "any region" data["id"] = uuid.uuid4().hex with change_auth(self.app, ("Basic", ("agreements", ""))) as app: response = self.app.post_json("/agreements", {"data": data}) self.assertEqual(response.status, "201 Created")
def setUp(self): super(TenderAwardComplaintSwitchResourceTest, self).setUp() # Create award with change_auth(self.app, ("Basic", ("token", ""))): response = self.app.post_json( "/tenders/{}/awards".format(self.tender_id), {"data": {"suppliers": [test_organization], "status": "pending", "bid_id": self.initial_bids[0]["id"]}}, ) award = response.json["data"] self.award_id = award["id"]
def create_tender_award(self): with change_auth(self.app, ("Basic", ("token", ""))): request_path = "/tenders/{}/awards".format(self.tender_id) response = self.app.post_json( request_path, { "data": { "suppliers": [test_organization], "status": "pending", "bid_id": self.initial_bids[0]["id"] } }, ) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") award = response.json["data"] self.assertEqual(award["suppliers"][0]["name"], test_organization["name"]) self.assertIn("id", award) self.assertIn(award["id"], response.headers["Location"]) response = self.app.get(request_path) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"][-1], award) award_request_path = "/tenders/{}/awards/{}?acc_token={}".format( self.tender_id, award["id"], self.tender_token) response = self.app.patch_json(award_request_path, {"data": { "status": "active" }}, status=403) self.assertEqual(response.status, "403 Forbidden") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json['status'], "error") self.assertEqual(response.json['errors'], [{ 'description': "Can't change award status to active from pending", 'location': 'body', 'name': 'data' }]) response = self.app.patch_json(award_request_path, {"data": { "status": "unsuccessful" }}) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["status"], "unsuccessful") response = self.app.get("/tenders/{}".format(self.tender_id)) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["status"], "unsuccessful")
def search_complaint(app, query=None, auth=("Basic", ("bot", "bot")), status=200): url = "/complaints/search" if query: url = "{}?{}".format(url, query) with change_auth(app, auth): response = app.get(url, status=status) assert response.status_code == status return response
def setUp(self): super(TenderCompetitiveDialogUAStage2AwardComplaintPostResourceTest, self).setUp() # Create award with change_auth(self.app, ("Basic", ("token", ""))): response = self.app.post_json( "/tenders/{}/awards".format(self.tender_id), { "data": { "suppliers": [test_tenderer], "status": "pending", "bid_id": self.initial_bids[0]["id"] } }) award = response.json["data"] self.award_id = award["id"] with change_auth(self.app, ("Basic", ("token", ""))): response = self.app.patch_json( "/tenders/{}/awards/{}".format(self.tender_id, self.award_id), { "data": { "status": "active", "qualified": True, "eligible": True } }) # Create complaint for award complaint_data = deepcopy(test_draft_complaint) complaint_data["author"] = test_author response = self.app.post_json( "/tenders/{}/awards/{}/complaints?acc_token={}".format( self.tender_id, self.award_id, self.initial_bids_tokens[self.initial_bids[0]["id"]]), {"data": complaint_data}, ) self.complaint_id = response.json["data"]["id"] self.complaint_owner_token = response.json["access"]["token"] self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json")
def get_complaint_post(self): # make complaint type complaint response = self.patch_complaint({ "type": "complaint", "status": "pending" }, self.complaint_owner_token) self.assertEqual(response.status, "200 OK") self.assertEqual(response.json["data"]["status"], "pending") # create post by reviewer with change_auth(self.app, ("Basic", ("reviewer", ""))): response = self.post_post({ "title": "Lorem ipsum", "description": "Lorem ipsum dolor sit amet", "recipient": "complaint_owner", "documents": [{ "title": "lorem.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") post = response.json["data"] self.post_id = post["id"] response = self.get_post() self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual( set(response.json["data"]), set([ "id", "title", "description", "author", "recipient", "datePublished", "documents" ])) self.post_id = "some_id" response = self.get_post(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"], [{ "description": "Not Found", "location": "url", "name": "post_id" }])
def switch_to_unsuccessful_lot_new(self): self.set_status("active.auction", {"status": self.initial_status}) response = self.check_chronograph() with change_auth(self.app, ("Basic", ("auction", ""))): response = self.app.get("/tenders/{}/auction".format(self.tender_id)) auction_bids_data = response.json["data"]["bids"] for lot in response.json["data"]["lots"]: response = self.app.post_json( "/tenders/{}/auction/{}".format(self.tender_id, lot["id"]), {"data": { "bids": auction_bids_data }}) self.assertEqual(response.status, "200 OK") self.assertEqual(response.json["data"]["status"], "active.qualification") with change_auth(self.app, ("Basic", ("token", ""))): response = self.app.get("/tenders/{}/awards".format(self.tender_id)) while any([i["status"] == "pending" for i in response.json["data"]]): award_id = [ i["id"] for i in response.json["data"] if i["status"] == "pending" ][0] self.app.patch_json( "/tenders/{}/awards/{}".format(self.tender_id, award_id), {"data": { "status": "unsuccessful" }}) response = self.app.get("/tenders/{}/awards".format( self.tender_id)) tender = self.db.get(self.tender_id) for i in tender.get("awards", []): if i.get("complaintPeriod", None): i["complaintPeriod"]["endDate"] = i["complaintPeriod"]["startDate"] self.db.save(tender) response = self.app.get("/tenders/{}".format(self.tender_id)) self.assertEqual(response.json["data"]["status"], "unsuccessful")
def create_agreement(self): data = self.initial_data data["id"] = uuid.uuid4().hex with change_auth(self.app, ("Basic", ("agreements", ""))) as app: response = self.app.post_json("/agreements", {"data": data}) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["agreementID"], data["agreementID"]) response = self.app.get("/agreements/{}".format(data["id"])) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["id"], data["id"])
def create_complaint_post_release_forbidden(self): # try in draft with change_auth(self.app, ("Basic", ("reviewer", ""))): response = self.post_post( { "title": "Lorem ipsum", "description": "Lorem ipsum dolor sit amet", "recipient": "complaint_owner", }, status=403) self.assertEqual(response.status, "403 Forbidden") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["errors"][0]["description"], "Forbidden")
def create_agreement(self): data = deepcopy(self.initial_data) data["owner"] = self.first_owner with change_auth(self.app, ("Basic", ("agreements", ""))): response = self.app.post_json("/agreements", {"data": data}) self.agreement = response.json["data"] self.agreement_id = self.agreement["id"] response = self.app.patch_json( "/agreements/{}/credentials?acc_token={}".format( self.agreement_id, self.tender_token), {"data": ""}) self.assertEqual(response.status, "200 OK") self.agreement_token = response.json["access"]["token"] self.agreement_transfer = response.json["access"]["transfer"]
def setUp(self): super(TenderAwardPendingResourceTestCase, self).setUp() # Create award with change_auth(self.app, ("Basic", ("token", ""))): response = self.app.post_json( "/tenders/{}/awards".format(self.tender_id), {"data": { "suppliers": [test_organization], "status": "pending", "bid_id": self.initial_bids[0]["id"], "lotID": self.initial_bids[0]["lotValues"][0]["relatedLot"] if self.initial_lots else None, }}, ) award = response.json["data"] self.award_id = award["id"]
def create_agreement_with_two_active_contracts(self): data = self.initial_data data["id"] = uuid.uuid4().hex data["contracts"][0]["status"] = "unsuccessful" with change_auth(self.app, ("Basic", ("agreements", ""))) as app: response = self.app.post_json("/agreements", {"data": data}) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["agreementID"], data["agreementID"]) response = self.app.get("/agreements/{}".format(data["id"])) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["data"]["id"], data["id"]) self.assertEqual( response.json["data"]["numberOfContracts"], len([c["id"] for c in data["contracts"] if c["status"] == "active"]))
def create_agreement_with_features(self): data = deepcopy(self.initial_data) item = data["items"][0].copy() item["id"] = "1" data["items"] = [item] data["features"] = self.features parameters = {"parameters": [{"code": i["code"], "value": i["enum"][0]["value"]} for i in data["features"]]} for contract in data["contracts"]: contract.update(parameters) with change_auth(self.app, ("Basic", ("agreements", ""))) as app: response = self.app.post_json("/agreements", {"data": data}) self.assertEqual((response.status, response.content_type), ("201 Created", "application/json")) agreement = response.json["data"] self.assertEqual(agreement["features"], data["features"]) for contract in agreement["contracts"]: self.assertEqual(contract["parameters"], parameters["parameters"])