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)
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)
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"])
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")
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)