Skip to content

Commit 3064313

Browse files
committed
Added a couple of meeting material crawls to check that internal material links aren't broken.
- Legacy-Id: 14861
1 parent 7f0de26 commit 3064313

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

ietf/meeting/tests_views.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from mock import patch
1717
from pyquery import PyQuery
1818
from StringIO import StringIO
19+
from bs4 import BeautifulSoup
1920

2021
from ietf.doc.models import Document
2122
from ietf.group.models import Group, Role
@@ -1613,6 +1614,23 @@ def tearDown(self):
16131614
settings.AGENDA_PATH = self.saved_agenda_path
16141615
shutil.rmtree(self.materials_dir)
16151616

1617+
def crawl_materials(self, url, top):
1618+
seen = set()
1619+
def follow(url):
1620+
seen.add(url)
1621+
r = self.client.get(url)
1622+
self.assertEqual(r.status_code, 200)
1623+
if not ('.' in url and url.rsplit('.', 1)[1] in ['tgz', 'pdf', ]):
1624+
if r.content:
1625+
page = unicontent(r)
1626+
soup = BeautifulSoup(page, 'html.parser')
1627+
for a in soup('a'):
1628+
href = a.get('href')
1629+
path = urlparse.urlparse(href).path
1630+
if (path and path not in seen and path.startswith(top)):
1631+
follow(path)
1632+
follow(url)
1633+
16161634
def test_upload_bluesheets(self):
16171635
session = SessionFactory(meeting__type_id='ietf')
16181636
url = urlreverse('ietf.meeting.views.upload_session_bluesheets',kwargs={'num':session.meeting.number,'session_id':session.id})
@@ -1757,6 +1775,11 @@ def test_upload_minutes_agenda(self):
17571775
r = self.client.post(url,dict(file=test_file))
17581776
self.assertContains(r, 'Could not identify the file encoding')
17591777

1778+
# Verify that we don't have dead links
1779+
url = url=urlreverse('ietf.meeting.views.session_details', kwargs={'num':session.meeting.number, 'acronym': session.group.acronym})
1780+
top = '/meeting/%s/' % session.meeting.number
1781+
self.crawl_materials(url=url, top=top)
1782+
17601783
def test_upload_minutes_agenda_unscheduled(self):
17611784
for doctype in ('minutes','agenda'):
17621785
session = SessionFactory(meeting__type_id='ietf', add_to_schedule=False)
@@ -1799,6 +1822,11 @@ def test_upload_minutes_agenda_interim(self):
17991822
doc = session.sessionpresentation_set.filter(document__type_id=doctype).first().document
18001823
self.assertEqual(doc.rev,'00')
18011824

1825+
# Verify that we don't have dead links
1826+
url = url=urlreverse('ietf.meeting.views.session_details', kwargs={'num':session.meeting.number, 'acronym': session.group.acronym})
1827+
top = '/meeting/%s/' % session.meeting.number
1828+
self.crawl_materials(url=url, top=top)
1829+
18021830
def test_upload_slides(self):
18031831

18041832
session1 = SessionFactory(meeting__type_id='ietf')

0 commit comments

Comments
 (0)