예제 #1
0
    def test_filtering_by_type(self):
        temp_redirect = Redirect.add_redirect("/from", "/to", False)
        perm_redirect = Redirect.add_redirect("/cat", "/dog", True)

        response = self.get(params={"is_permanent": "True"})

        self.assertContains(response, perm_redirect.old_path)
        self.assertNotContains(response, temp_redirect.old_path)
예제 #2
0
    def test_filtering_by_site(self):
        site = Site.objects.first()
        site_redirect = Redirect.add_redirect("/cat", "/dog")
        site_redirect.site = site
        site_redirect.save()
        nosite_redirect = Redirect.add_redirect("/from", "/to")

        response = self.get(params={"site": site.pk})

        self.assertContains(response, site_redirect.old_path)
        self.assertNotContains(response, nosite_redirect.old_path)
예제 #3
0
    def test_xlsx_export(self):
        Redirect.add_redirect("/from", "/to", True)

        response = self.get(params={"export": "xlsx"})
        self.assertEqual(response.status_code, 200)

        workbook_data = response.getvalue()
        worksheet = load_workbook(filename=BytesIO(workbook_data))["Sheet1"]
        cell_array = [[cell.value for cell in row] for row in worksheet.rows]

        self.assertEqual(cell_array[0], ["From", "Site", "To", "Type"])
        self.assertEqual(len(cell_array), 2)
        self.assertEqual(cell_array[1], ["/from", "None", "/to", "permanent"])
예제 #4
0
    def test_csv_export(self):
        Redirect.add_redirect("/from", "/to", False)

        response = self.get(params={"export": "csv"})
        self.assertEqual(response.status_code, 200)
        csv_data = response.getvalue().decode().split("\n")
        csv_header = csv_data[0]
        csv_entries = csv_data[1:]
        csv_entries = csv_entries[:-1]  # Drop empty last line

        self.assertEqual(csv_header, "From,Site,To,Type\r")
        self.assertEqual(len(csv_entries), 1)
        self.assertEqual(csv_entries[0], "/from,None,/to,temporary\r")
    def test_redirect_is_detected(self):
        redirect = Redirect.add_redirect("/random/", "https://wagtail.io")
        response = self.client.get(reverse("nextjs:redirect_by_path:detail"),
                                   {"html_path": "/random/"})

        self.assertEqual(response.status_code, 200)
        data = response.json()
        self.assertEqual(data["destination"], "https://wagtail.io")
def run(*args):
    if not args:
        logger.error("error. Use --script-args [PATH] to specify the " +
                     "location of the redirects csv.")
    else:
        redirects_file = args[0]

        dupes = []
        successes = 0
        deletes = 0

        with open(redirects_file, "r") as csv_file:
            redirect_list = csv.reader(csv_file, delimiter=',')
            for [from_url, to_id] in redirect_list:
                with transaction.atomic():
                    # If conflicting redirects exist for this from_url,
                    # delete them
                    existing_redirects = Redirect.objects.filter(
                        old_path__iexact=Redirect.normalise_path(from_url))
                    if len(existing_redirects) > 0:
                        dupes.append(from_url)
                        num, _ = existing_redirects.delete()
                        deletes += num
                        logger.debug(f"Removed duplicate redirect: {from_url}")

                    # Add the desired redirect
                    page = Page.objects.get(id=to_id)
                    Redirect.add_redirect(from_url,
                                          redirect_to=page,
                                          is_permanent=True)
                    logger.info(f"Added redirect: {from_url} -> {page.title}")
                    successes += 1

        logger.info(f"Done! Added {successes} redirects")
        if len(dupes) > 0:
            logger.debug(f"Redirects already existed for these urls: {dupes}")
            logger.info(f"Replaced {deletes} redirects with updated ones")
예제 #7
0
    def test_listing_contains_redirect(self):
        redirect = Redirect.add_redirect("/from", "/to", False)
        response = self.get()

        self.assertEqual(response.status_code, 200)
        self.assertContains(response, redirect.old_path)