Пример #1
0
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'
            }],
        )
Пример #2
0
 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"
            }],
        )
Пример #4
0
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"
        }])
Пример #7
0
 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
Пример #8
0
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")
Пример #9
0
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")
Пример #12
0
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"])
    )
Пример #13
0
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"])
Пример #14
0
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))
Пример #16
0
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)