def create_qualification_document_forbidden(self): response = self.app.post("/qualifications/{}/documents".format( self.qualification_id), upload_files=[("file", "укр.doc", b"content")], status=403) self.assertEqual(response.status, "403 Forbidden") self.assertEqual( response.json["errors"], [{ 'description': 'Forbidden', 'location': 'url', 'name': 'permission' }], ) with change_auth(self.app, ("Basic", ("broker1", ""))): response = self.app.post( "/qualifications/{}/documents".format(self.qualification_id), upload_files=[("file", "укр.doc", b"content")], status=403, ) self.assertEqual(response.status, "403 Forbidden") self.assertEqual( response.json["errors"], [{ 'description': 'Forbidden', 'location': 'url', 'name': 'permission' }], )
def get_agreement(self, role): with change_auth(self.app, ("Basic", (role, ""))): url = "/agreements/{}".format(self.agreement_id) response = self.app.get(url) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") return response
def create_milestone_document_forbidden(self): # without acc_token response = self.app.post( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}/milestones/{self.milestone_id}/documents", upload_files=[("file", "укр.doc", b"content")], status=403) self.assertEqual(response.status, "403 Forbidden") self.assertEqual( response.json["errors"], [{ "description": "Forbidden", "location": "url", "name": "permission" }], ) with change_auth(self.app, ("Basic", ("broker1", ""))): response = self.app.post( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}/milestones/{self.milestone_id}" f"/documents?acc_token={self.framework_token}", upload_files=[("file", "укр.doc", b"content")], status=403) self.assertEqual(response.status, "403 Forbidden") self.assertEqual( response.json["errors"], [{ "description": "Forbidden", "location": "url", "name": "permission" }], )
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 create_qualification_document_forbidden(self): with change_auth(self.app, ("Basic", ("broker1", ""))): response = self.app.post( "/qualifications/{}/documents".format(self.qualification_id), upload_files=[("file", u"укр.doc", "content")], status=403) self.assertEqual(response.status, "403 Forbidden")
def post_milestone_invalid(self): milestone_data = deepcopy(ban_milestone_data) response = self.app.post_json( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}/milestones?acc_token={'0' * 32}", {"data": milestone_data}, status=403, ) self.assertEqual(response.status, "403 Forbidden") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["errors"], [{ "location": "url", "name": "permission", "description": "Forbidden" }]) with change_auth(self.app, ("Basic", ("broker1", ""))): response = self.app.post_json( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}/milestones?acc_token={self.framework_token}", {"data": milestone_data}, status=403, ) self.assertEqual(response.status, "403 Forbidden") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["errors"], [{ "location": "url", "name": "permission", "description": "Forbidden" }]) milestone_data = {"type": "other_type"} response = self.app.post_json( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}/milestones?acc_token={self.framework_token}", {"data": milestone_data}, status=422, ) self.assertEqual(response.status, "422 Unprocessable Entity") self.assertEqual(response.content_type, "application/json") self.assertEqual( response.json["errors"], [{ "location": "body", "name": "type", "description": ["Value must be one of ['activation', 'ban']."] }]) milestone_data = {"type": "activation"} response = self.app.post_json( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}/milestones?acc_token={self.framework_token}", {"data": milestone_data}, status=403, ) self.assertEqual(response.status, "403 Forbidden") self.assertEqual(response.content_type, "application/json") self.assertEqual( response.json["errors"], [{ "location": "body", "name": "data", "description": "Can't add object for 'activation' milestone" }])
def check_chronograph(self, data=None): with change_auth(self.app, ("Basic", ("chronograph", ""))): url = "/agreements/{}".format(self.agreement_id) data = data or {"data": {"id": self.agreement_id}} response = self.app.patch_json(url, data) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") return response
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 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_framework_document(self): response = self.app.post( "/frameworks/{}/documents?acc_token={}".format(self.framework_id, self.framework_token), upload_files=[("file", "укр.doc", b"content")], ) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") with change_auth(self.app, ("Basic", ("token", ""))): response = self.app.post( "/frameworks/{}/documents?acc_token={}".format(self.framework_id, self.framework_token), upload_files=[("file", "укр.doc", b"content")], ) self.assertEqual(response.status, "201 Created")
def create_milestone_documents(self): response = self.app.post( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}/milestones/{self.milestone_id}" f"/documents?acc_token={self.framework_token}", upload_files=[("file", "укр.doc", b"content")], ) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") with change_auth(self.app, ("Basic", ("token", ""))): response = self.app.post( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}/milestones/{self.milestone_id}" f"/documents?acc_token={self.framework_token}", upload_files=[("file", "укр.doc", b"content")], ) self.assertEqual(response.status, "201 Created")
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"])
def create_agreement_with_documents(self): data = deepcopy(self.initial_data) data["id"] = uuid.uuid4().hex data["documents"] = TEST_DOCUMENTS 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"]) response = self.app.get("/agreements/{}/documents".format(data["id"])) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(len(response.json["data"]), len(TEST_DOCUMENTS))
def patch_contract_suppliers(self): response = self.app.patch_json( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}?acc_token={'0' * 32}", {"data": {}}, status=403, ) self.assertEqual(response.status, "403 Forbidden") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["errors"], [{ "location": "url", "name": "permission", "description": "Forbidden" }]) with change_auth(self.app, ("Basic", ("broker1", ""))): response = self.app.patch_json( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}?acc_token={self.framework_token}", {"data": {}}, status=403, ) self.assertEqual(response.status, "403 Forbidden") self.assertEqual(response.content_type, "application/json") self.assertEqual(response.json["errors"], [{ "location": "url", "name": "permission", "description": "Forbidden" }]) response = self.app.patch_json( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}?acc_token={self.framework_token}", {"data": { "suppliers": self.initial_submission_data["tenderers"] * 2 }}, status=422, ) self.assertEqual(response.status, "422 Unprocessable Entity") self.assertEqual(response.content_type, "application/json") self.assertEqual( response.json["errors"], [{ "location": "body", "name": "suppliers", "description": ["Contract must have only one supplier"] }]) contract_ignore_patch_fields = { "id": f"{'0' * 32}", "qualificationID": "", "status": "terminated", "submissionID": "", "milestones": [{ "type": "ban" }], "date": "2020-03-10T01:00:20.514000+02:00", "suppliers": [{ "scale": "large", "name": "new_name", "name_en": "new_name", "name_ru": "new_name", "identifier": { "scheme": "UA-EDR", "id": "00000001", "legalName": "new_legalName" }, }] } contract_data = self.app.get( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}" ).json["data"] response = self.app.patch_json( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}?acc_token={self.framework_token}", {"data": contract_ignore_patch_fields}, ) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") for field in contract_ignore_patch_fields: self.assertEqual(response.json["data"].get(field), contract_data.get(field)) contract_patch_fields = { "suppliers": [{ "address": { "countryName": "Україна", "postalCode": "01221", "region": "Київська область", "locality": "Київська область", "streetAddress": "вул. Банкова, 11, корпус 2" }, "contactPoint": { "name": "Найновіше державне управління справами", "name_en": "New state administration", "telephone": "+0440000001", "email": "*****@*****.**", }, }] } response = self.app.patch_json( f"/agreements/{self.agreement_id}/contracts/{self.contract_id}?acc_token={self.framework_token}", {"data": contract_patch_fields}, ) self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertTrue(len(response.json["data"]["suppliers"]), 1) for field in contract_patch_fields["suppliers"][0]: self.assertEqual(response.json["data"]["suppliers"][0].get(field), contract_patch_fields["suppliers"][0].get(field))
def listing(self): response = self.app.get("/agreements") self.assertEqual(response.status, "200 OK") self.assertEqual(len(response.json["data"]), 0) agreements = [] for i in range(3): data = deepcopy(self.initial_data) data["id"] = uuid.uuid4().hex offset = get_now().isoformat() 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") agreements.append(response.json["data"]) ids = ",".join([i["id"] for i in agreements]) while True: response = self.app.get("/agreements") self.assertEqual(response.status, "200 OK") 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(",".join([i["id"] for i in response.json["data"]]), ids) self.assertEqual(set(response.json["data"][0]), set(["id", "dateModified"])) self.assertEqual(set([i["id"] for i in response.json["data"]]), set([i["id"] for i in agreements])) self.assertEqual( set([i["dateModified"] for i in response.json["data"]]), set([i["dateModified"] for i in agreements]) ) self.assertEqual( [i["dateModified"] for i in response.json["data"]], sorted([i["dateModified"] for i in agreements]) ) response = self.app.get("/agreements?offset={}".format(offset)) self.assertEqual(response.status, "200 OK") self.assertEqual(len(response.json["data"]), 1) response = self.app.get("/agreements?limit=2") self.assertEqual(response.status, "200 OK") self.assertNotIn("prev_page", response.json) self.assertEqual(len(response.json["data"]), 2) response = self.app.get(response.json["next_page"]["path"].replace(ROUTE_PREFIX, "")) self.assertEqual(response.status, "200 OK") self.assertIn("descending=1", response.json["prev_page"]["uri"]) self.assertEqual(len(response.json["data"]), 1) response = self.app.get(response.json["next_page"]["path"].replace(ROUTE_PREFIX, "")) self.assertEqual(response.status, "200 OK") self.assertIn("descending=1", response.json["prev_page"]["uri"]) self.assertEqual(len(response.json["data"]), 0) response = self.app.get("/agreements", params=[("opt_fields", "agreementID")]) self.assertEqual(response.status, "200 OK") self.assertEqual(len(response.json["data"]), 3) self.assertEqual(set(response.json["data"][0]), set(["id", "dateModified", "agreementID"])) self.assertIn("opt_fields=agreementID", response.json["next_page"]["uri"]) response = self.app.get("/agreements?descending=1") self.assertEqual(response.status, "200 OK") self.assertEqual(response.content_type, "application/json") self.assertEqual(len(response.json["data"]), 3) self.assertEqual(set(response.json["data"][0]), set(["id", "dateModified"])) self.assertEqual(set([i["id"] for i in response.json["data"]]), set([i["id"] for i in agreements])) self.assertEqual( [i["dateModified"] for i in response.json["data"]], sorted([i["dateModified"] for i in agreements], reverse=True), ) response = self.app.get("/agreements?descending=1&limit=2") self.assertEqual(response.status, "200 OK") self.assertNotIn("descending=1", response.json["prev_page"]["uri"]) self.assertEqual(len(response.json["data"]), 2) response = self.app.get(response.json["next_page"]["path"].replace(ROUTE_PREFIX, "")) self.assertEqual(response.status, "200 OK") self.assertNotIn("descending=1", response.json["prev_page"]["uri"]) self.assertEqual(len(response.json["data"]), 1) response = self.app.get(response.json["next_page"]["path"].replace(ROUTE_PREFIX, "")) self.assertEqual(response.status, "200 OK") self.assertNotIn("descending=1", response.json["prev_page"]["uri"]) self.assertEqual(len(response.json["data"]), 0) test_agreement_data2 = deepcopy(self.initial_data) test_agreement_data2["mode"] = "test" with change_auth(self.app, ("Basic", ("agreements", ""))) as app: response = self.app.post_json("/agreements", {"data": test_agreement_data2}) self.assertEqual(response.status, "201 Created") self.assertEqual(response.content_type, "application/json") while True: response = self.app.get("/agreements?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("/agreements?mode=_all_") self.assertEqual(response.status, "200 OK") self.assertEqual(len(response.json["data"]), 4) response = self.app.get("/agreements?mode=_all_&opt_fields=status") self.assertEqual(response.status, "200 OK") self.assertEqual(len(response.json["data"]), 4)