Exemple #1
0
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"
        )
Exemple #3
0
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",
         }],
     )
Exemple #5
0
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"
        ]))
Exemple #6
0
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")
Exemple #9
0
    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"]))
Exemple #11
0
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")
Exemple #12
0
    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")
Exemple #13
0
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")
Exemple #14
0
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")
Exemple #16
0
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,
        },
    )
Exemple #17
0
 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"]]
Exemple #18
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")
Exemple #19
0
 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"]
Exemple #20
0
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")
Exemple #21
0
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
Exemple #22
0
    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"])
Exemple #26
0
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")
Exemple #27
0
 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"]
Exemple #28
0
 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"]))
Exemple #30
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"])