Exemple #1
0
    def test_deny_cancel_other_affiliation_request(self):
        """
        users should never be allowed to cancel other user's affiliation requests
        """

        request = self.factory.post("/affiliate-to-org", data={"org": "AFFILORG"})
        request.user = self.user_b
        request._dont_enforce_csrf_checks = True
        response = pdbviews.view_affiliate_to_org(request)

        assert response.status_code == 200

        affiliation_request = self.user_b.pending_affiliation_requests.first()

        assert affiliation_request

        request = self.factory.post(
            f"/cancel-affiliation-request/{affiliation_request.id}/"
        )
        request.user = self.user_a
        request._dont_enforce_csrf_checks = True
        response = pdbviews.cancel_affiliation_request(request, affiliation_request.id)

        assert response.status_code == 404
        assert self.user_b.pending_affiliation_requests.count() == 1
Exemple #2
0
    def test_affiliate_limit(self):
        """
        test affiliation request limit (fail when there is n pending
        affiliations for a user)
        """

        for i in range(0, settings.MAX_USER_AFFILIATION_REQUESTS + 1):

            # For this test we need the orgs to actually exist

            models.Organization.objects.create(name=f"AFFILORG{i}",
                                               status="ok")
            request = self.factory.post("/affiliate-to-org",
                                        data={"org": f"AFFILORG{i}"})
            request.user = self.user_b
            request._dont_enforce_csrf_checks = True
            print("\n")
            print(i)
            response = pdbviews.view_affiliate_to_org(request)

            print(response.content)
            if i < settings.MAX_USER_AFFILIATION_REQUESTS:
                assert response.status_code == 200
            else:
                assert response.status_code == 400
Exemple #3
0
    def test_cancel_affiliation_request(self):
        """
        tests user canceling a pending affiliation request
        """

        request = self.factory.post("/affiliate-to-org", data={"org": "AFFILORG"})
        request.user = self.user_b
        request._dont_enforce_csrf_checks = True
        response = pdbviews.view_affiliate_to_org(request)

        assert response.status_code == 200

        affiliation_request = self.user_b.pending_affiliation_requests.first()

        assert affiliation_request

        request = self.factory.post(
            f"/cancel-affiliation-request/{affiliation_request.id}/"
        )
        request.user = self.user_b
        request._dont_enforce_csrf_checks = True
        response = pdbviews.cancel_affiliation_request(request, affiliation_request.id)

        assert response.status_code == 302
        assert self.user_b.pending_affiliation_requests.count() == 0
    def test_affil_already_affiliated(self):
        """
        When a user needs pdb admin approval of an affiliation an deskpro
        ticket is created.

        When the user is already affiliated to another organization, there is
        extra information appended to that ticket, such as what organizations
        the user is already affiliated to.
        """

        org_1 = models.Organization.objects.create(name="Org with admin user",
                                                   status="ok")
        org_2 = models.Organization.objects.create(name="Org with normal user",
                                                   status="ok")
        org_1.admin_usergroup.user_set.add(self.user_b)
        org_2.usergroup.user_set.add(self.user_b)

        request = self.factory.post("/affiliate-to-org", data={"asn": 9000002})
        request.user = self.user_b
        request._dont_enforce_csrf_checks = True
        resp = json.loads(pdbviews.view_affiliate_to_org(request).content)
        self.assertEqual(resp.get("status"), "ok")

        ticket = models.DeskProTicket.objects.get(
            subject=
            "[test]User user_b wishes to request ownership of ORG AS9000002")

        self.assertEqual(
            ticket.body, self.
            ticket["asnauto-9000002-affiliated-user-requested-ownership.txt"])
Exemple #5
0
    def test_affiliate_to_bogon_asn(self):
        """
        tests affiliation with non-existant asn
        """
        asns = []
        for a, b in pdbinet.BOGON_ASN_RANGES:
            asns.extend([a, b])

        for asn in asns:
            request = self.factory.post("/affiliate-to-org", data={"asn": asn})

            request.user = self.user_a
            request._dont_enforce_csrf_checks = True
            resp = json.loads(pdbviews.view_affiliate_to_org(request).content)
            self.assertEqual(resp.get("asn"), ERR_BOGON_ASN)
    def test_affiliate_to_bogon_asn(self):
        """
        tests affiliation with non-existant asn
        """
        asns = []
        for a,b in pdbinet.BOGON_ASN_RANGES:
            asns.extend([a,b])

        for asn in asns:
            request = self.factory.post("/affiliate-to-org", data={
                "asn": asn})

            request.user = self.user_a
            request._dont_enforce_csrf_checks = True
            resp = json.loads(pdbviews.view_affiliate_to_org(request).content)
            self.assertEqual(resp.get("asn"), ERR_BOGON_ASN)
    def test_affiliate_limit(self):
        """
        test affiliation request limit (fail when there is n pending
        affiliations for a user)
        """

        for i in range(0, settings.MAX_USER_AFFILIATION_REQUESTS + 1):

            request = self.factory.post("/affiliate-to-org",
                                        data={"org": "AFFILORG{}".format(i)})
            request.user = self.user_b
            request._dont_enforce_csrf_checks = True
            response = pdbviews.view_affiliate_to_org(request)

            if i < settings.MAX_USER_AFFILIATION_REQUESTS:
                assert response.status_code == 200
            else:
                assert response.status_code == 400
    def test_affiliate_to_bogon_asn(self):
        """
        tests affiliation with non-existant bogon asn
        with tutorial mode enabled those should be allowed
        """
        user = get_user_model().objects.create_user("user_a", "user_a@localhost", "user_a")
        asns = []
        for a,b in pdbinet.TUTORIAL_ASN_RANGES:
            asns.extend([a,b])

        for asn in asns:
            request = self.factory.post("/affiliate-to-org", data={
                "asn": asn})

            request.user = user
            request._dont_enforce_csrf_checks = True
            resp = json.loads(pdbviews.view_affiliate_to_org(request).content)
            self.assertEqual(resp.get("status"), "ok")
Exemple #9
0
    def test_affiliate_to_bogon_asn(self):
        """
        tests affiliation with non-existant bogon asn
        with tutorial mode enabled those should be allowed
        """
        user = get_user_model().objects.create_user(
            "user_a", "user_a@localhost", "user_a"
        )
        asns = []
        for a, b in pdbinet.TUTORIAL_ASN_RANGES:
            asns.extend([a, b])

        for asn in asns:
            request = self.factory.post("/affiliate-to-org", data={"asn": asn})

            request.user = user
            request._dont_enforce_csrf_checks = True
            resp = json.loads(pdbviews.view_affiliate_to_org(request).content)
            self.assertEqual(resp.get("status"), "ok")
Exemple #10
0
    def test_reevaluate(self):
        """
        tests re-check of affiliation requests
        """
        asn_ok = 9000001

        reset_group_ids()

        # test 1: test affiliation to asn that has RiR entry and user relationship
        # cannot be verified (ASN 9000002)
        request = self.factory.post("/affiliate-to-org", data={"asn": asn_ok})
        request.user = self.user_b
        request._dont_enforce_csrf_checks = True
        resp = json.loads(pdbviews.view_affiliate_to_org(request).content)
        self.assertEqual(resp.get("status"), "ok")

        net = models.Network.objects.get(asn=asn_ok)

        assert not net.org.admin_usergroup.user_set.filter(
            id=self.user_b.id).exists()

        # simulate email change
        old_email = self.user_b.email
        self.user_b.email = self.user_a.email
        self.user_b.save()

        self.user_b.recheck_affiliation_requests()

        ticket = models.DeskProTicket.objects.get(
            subject=
            f"[{settings.RELEASE_ENV}] [ASNAUTO] Ownership claim granted to Org 'ORG AS{asn_ok}' for user 'user_b'"
        )

        assert net.org.admin_usergroup.user_set.filter(
            id=self.user_b.id).exists()

        self.user_b.email = old_email
        self.user_b.save()
Exemple #11
0
    def test_affiliate(self):
        """
        tests affiliation with non-existant asn
        """
        asn_ok = 9000001
        asn_ok_b = 9000002
        asn_fail = 890000

        reset_group_ids()

        # test 1: test affiliation to asn that has no RiR entry
        request = self.factory.post("/affiliate-to-org", data={"asn": asn_fail})
        request.user = self.user_a
        request._dont_enforce_csrf_checks = True
        resp = json.loads(pdbviews.view_affiliate_to_org(request).content)
        self.assertEqual(resp.get("asn"), ERR_COULD_NOT_GET_RIR_ENTRY)

        # test 2: test affiliation to asn that has RiR entry and user relationship
        # can be validated (ASN 9000001)
        request = self.factory.post("/affiliate-to-org", data={"asn": asn_ok})
        request.user = self.user_a
        request._dont_enforce_csrf_checks = True
        resp = json.loads(pdbviews.view_affiliate_to_org(request).content)
        self.assertEqual(resp.get("status"), "ok")

        org = models.Organization.objects.get(name="ORG AS9000001")

        # check that support tickets were created
        ticket = models.DeskProTicket.objects.get(
            subject=f"[{settings.RELEASE_ENV}] [ASNAUTO] Organization 'ORG AS9000001', Network 'AS9000001' created"
        )
        self.assertEqual(
            ticket.body,
            self.ticket["asnauto-9000001-org-net-created.txt"].format(
                org_id=org.id, net_id=org.net_set.first().id
            ),
        )

        ticket = models.DeskProTicket.objects.get(
            subject=f"[{settings.RELEASE_ENV}] [ASNAUTO] Ownership claim granted to Org 'ORG AS9000001' for user 'user_a'"
        )
        self.assertEqual(
            ticket.body,
            self.ticket["asnauto-9000001-user-granted-ownership.txt"].format(
                org_id=org.id, net_id=org.net_set.first().id
            ),
        )

        net = models.Network.objects.get(asn=asn_ok)
        self.assertEqual(net.name, "AS%d" % asn_ok)
        self.assertEqual(net.org.name, "ORG AS%d" % asn_ok)
        self.assertEqual(
            self.user_a.groups.filter(name=net.org.admin_usergroup.name).exists(), True
        )
        self.assertEqual(net.status, "ok")
        self.assertEqual(net.org.status, "ok")

        # test 3: test affiliation to asn that hsa RiR entry and user relationship
        # cannot be verified (ASN 9000002)
        request = self.factory.post("/affiliate-to-org", data={"asn": asn_ok_b})
        request.user = self.user_b
        request._dont_enforce_csrf_checks = True
        resp = json.loads(pdbviews.view_affiliate_to_org(request).content)
        self.assertEqual(resp.get("status"), "ok")

        # check that support tickets were created
        ticket = models.DeskProTicket.objects.get(
            subject=f"[{settings.RELEASE_ENV}] User user_b wishes to request ownership of ORG AS9000002"
        )
        self.assertEqual(
            ticket.body,
            self.ticket["asnauto-9000002-user-requested-ownership.txt"].format(
                user_id=self.user_b.id,
                affil_id=self.user_b.affiliation_requests.last().id,
            ),
        )

        net = models.Network.objects.get(asn=asn_ok_b)
        self.assertEqual(net.name, "AS%d" % asn_ok_b)
        self.assertEqual(net.org.name, "ORG AS%d" % asn_ok_b)
        self.assertEqual(
            self.user_b.groups.filter(name=net.org.admin_usergroup.name).exists(), False
        )
        self.assertEqual(net.status, "ok")
        self.assertEqual(net.org.status, "ok")
    def test_affiliate(self):
        """
        tests affiliation with non-existant asn
        """
        asn_ok = 9000001
        asn_ok_b = 9000002
        asn_fail = 890000

        # test 1: test affiliation to asn that has no RiR entry
        request = self.factory.post("/affiliate-to-org", data={
            "asn": asn_fail
        })
        request.user = self.user_a
        request._dont_enforce_csrf_checks = True
        resp = json.loads(pdbviews.view_affiliate_to_org(request).content)
        self.assertEqual(resp.get("asn"), ERR_COULD_NOT_GET_RIR_ENTRY)

        # test 2: test affiliation to asn that has RiR entry and user relationship
        # can be validated (ASN 9000001)
        request = self.factory.post("/affiliate-to-org", data={"asn": asn_ok})
        request.user = self.user_a
        request._dont_enforce_csrf_checks = True
        resp = json.loads(pdbviews.view_affiliate_to_org(request).content)
        self.assertEqual(resp.get("status"), "ok")

        # check that support tickets were created
        ticket = models.DeskProTicket.objects.get(
            subject=
            "[test][ASNAUTO] Organization 'ORG AS9000001', Network 'AS9000001' created"
        )
        self.assertEqual(ticket.body,
                         self.ticket["asnauto-9000001-org-net-created.txt"])

        ticket = models.DeskProTicket.objects.get(
            subject=
            "[test][ASNAUTO] Ownership claim granted to Org 'ORG AS9000001' for user 'user_a'"
        )
        self.assertEqual(
            ticket.body,
            self.ticket["asnauto-9000001-user-granted-ownership.txt"])

        net = models.Network.objects.get(asn=asn_ok)
        self.assertEqual(net.name, "AS%d" % asn_ok)
        self.assertEqual(net.org.name, "ORG AS%d" % asn_ok)
        self.assertEqual(
            self.user_a.groups.filter(
                name=net.org.admin_usergroup.name).exists(), True)
        self.assertEqual(net.status, "ok")
        self.assertEqual(net.org.status, "ok")

        # test 3: test affiliation to asn that hsa RiR entry and user relationship
        # cannot be verifiedi (ASN 9000002)
        request = self.factory.post("/affiliate-to-org", data={
            "asn": asn_ok_b
        })
        request.user = self.user_b
        request._dont_enforce_csrf_checks = True
        resp = json.loads(pdbviews.view_affiliate_to_org(request).content)
        self.assertEqual(resp.get("status"), "ok")

        # check that support tickets were created
        ticket = models.DeskProTicket.objects.get(
            subject=
            "[test]User user_b wishes to request ownership of ORG AS9000002")
        self.assertEqual(
            ticket.body,
            self.ticket["asnauto-9000002-user-requested-ownership.txt"])

        net = models.Network.objects.get(asn=asn_ok_b)
        self.assertEqual(net.name, "AS%d" % asn_ok_b)
        self.assertEqual(net.org.name, "ORG AS%d" % asn_ok_b)
        self.assertEqual(
            self.user_b.groups.filter(
                name=net.org.admin_usergroup.name).exists(), False)
        self.assertEqual(net.status, "ok")
        self.assertEqual(net.org.status, "ok")