Added dealing with /wg/foo/email-aliases, /wg/email-aliases, and similar for /rg. Added an initial test suite for all invocations of the email_alias views. Commit ready for merge.

- Legacy-Id: 9083
This commit is contained in:
Robert Sparks 2015-02-13 04:18:47 +00:00
parent 79dda88337
commit a208803e82
4 changed files with 94 additions and 3 deletions

View file

@ -1,3 +1,4 @@
import os
import datetime
import sys
if sys.version_info[0] == 2 and sys.version_info[1] < 7:
@ -5,8 +6,10 @@ if sys.version_info[0] == 2 and sys.version_info[1] < 7:
else:
import unittest
from pyquery import PyQuery
from tempfile import NamedTemporaryFile
from django.core.urlresolvers import reverse as urlreverse
from django.conf import settings
from ietf.doc.models import ( Document, DocAlias, DocRelationshipName, RelatedDocument, State,
DocEvent, BallotPositionDocEvent, LastCallDocEvent, WriteupDocEvent, save_document_in_history )
@ -472,3 +475,46 @@ class ReferencesTest(TestCase):
self.assertEquals(r.status_code, 200)
self.assertTrue(doc1.name in r.content)
class EmailAliasesTests(TestCase):
def setUp(self):
make_test_data()
self.doc_alias_file = NamedTemporaryFile(delete=False)
self.doc_alias_file.write("""# Generated by hand at 2015-02-12_16:26:45
virtual.ietf.org anything
draft-ietf-mars-test@ietf.org xfilter-draft-ietf-mars-test
expand-draft-ietf-mars-test@virtual.ietf.org mars-author@example.com, mars-collaborator@example.com
draft-ietf-mars-test.authors@ietf.org xfilter-draft-ietf-mars-test.authors
expand-draft-ietf-mars-test.authors@virtual.ietf.org mars-author@example.mars, mars-collaborator@example.mars
draft-ietf-mars-test.chairs@ietf.org xfilter-draft-ietf-mars-test.chairs
expand-draft-ietf-mars-test.chairs@virtual.ietf.org mars-chair@example.mars
draft-ietf-mars-test.all@ietf.org xfilter-draft-ietf-mars-test.all
expand-draft-ietf-mars-test.all@virtual.ietf.org mars-author@example.mars, mars-collaborator@example.mars, mars-chair@example.mars
draft-ietf-ames-test@ietf.org xfilter-draft-ietf-ames-test
expand-draft-ietf-ames-test@virtual.ietf.org ames-author@example.com, ames-collaborator@example.com
draft-ietf-ames-test.authors@ietf.org xfilter-draft-ietf-ames-test.authors
expand-draft-ietf-ames-test.authors@virtual.ietf.org ames-author@example.ames, ames-collaborator@example.ames
draft-ietf-ames-test.chairs@ietf.org xfilter-draft-ietf-ames-test.chairs
expand-draft-ietf-ames-test.chairs@virtual.ietf.org ames-chair@example.ames
draft-ietf-ames-test.all@ietf.org xfilter-draft-ietf-ames-test.all
expand-draft-ietf-ames-test.all@virtual.ietf.org ames-author@example.ames, ames-collaborator@example.ames, ames-chair@example.ames
""")
self.doc_alias_file.close()
settings.DRAFT_VIRTUAL_PATH = self.doc_alias_file.name
def tearDown(self):
os.unlink(self.doc_alias_file.name)
def testAliases(self):
url = urlreverse('ietf.doc.views_doc.email_aliases', kwargs=dict())
r = self.client.get(url)
self.assertTrue(all([x in r.content for x in ['mars-test@','mars-test.authors@','mars-test.chairs@']]))
self.assertTrue(all([x in r.content for x in ['ames-test@','ames-test.authors@','ames-test.chairs@']]))
url = urlreverse('ietf.doc.views_doc.email_aliases', kwargs=dict(name="draft-ietf-mars-test"))
r = self.client.get(url)
self.assertTrue(all([x in r.content for x in ['mars-test@','mars-test.authors@','mars-test.chairs@']]))
self.assertFalse(any([x in r.content for x in ['ames-test@','ames-test.authors@','ames-test.chairs@']]))

View file

@ -624,8 +624,8 @@ def dependencies_pdf(request, acronym, group_type=None):
return HttpResponse(pdf, content_type='application/pdf')
def email_aliases(request, acronym=None):
group = get_group_or_404(acronym,None) if acronym else None
def email_aliases(request, acronym=None, group_type=None):
group = get_group_or_404(acronym,group_type) if acronym else None
if acronym:
pattern = re.compile('expand-(%s)(-\w+)@.*? +(.*)$'%acronym)
@ -637,7 +637,8 @@ def email_aliases(request, acronym=None):
for line in virtual_file.readlines():
m = pattern.match(line)
if m:
aliases.append({'acronym':m.group(1),'alias_type':m.group(2),'expansion':m.group(3)})
if acronym or not group_type or Group.objects.filter(acronym=m.group(1),type__slug=group_type):
aliases.append({'acronym':m.group(1),'alias_type':m.group(2),'expansion':m.group(3)})
return render(request,'group/email_aliases.html',{'aliases':aliases,'ietf_domain':settings.IETF_DOMAIN,'group':group})

View file

@ -5,6 +5,7 @@ import json
import datetime
from pyquery import PyQuery
from tempfile import NamedTemporaryFile
import debug # pyflakes:ignore
from django.conf import settings
@ -951,3 +952,44 @@ class CustomizeWorkflowTests(TestCase):
self.assertEqual(len(q('form').find('input[name=tag][value="%s"]' % tag.pk).parents("form").find("input[name=active]")), 1)
group = Group.objects.get(acronym=group.acronym)
self.assertTrue(tag in group.unused_tags.all())
class EmailAliasesTests(TestCase):
def setUp(self):
make_test_data()
self.group_alias_file = NamedTemporaryFile(delete=False)
self.group_alias_file.write("""# Generated by hand at 2015-02-12_16:30:52
virtual.ietf.org anything
mars-ads@ietf.org xfilter-mars-ads
expand-mars-ads@virtual.ietf.org aread@ietf.org
mars-chairs@ietf.org xfilter-mars-chairs
expand-mars-chairs@virtual.ietf.org mars_chair@ietf.org
ames-ads@ietf.org xfilter-mars-ads
expand-ames-ads@virtual.ietf.org aread@ietf.org
ames-chairs@ietf.org xfilter-mars-chairs
expand-ames-chairs@virtual.ietf.org mars_chair@ietf.org
""")
self.group_alias_file.close()
settings.GROUP_VIRTUAL_PATH = self.group_alias_file.name
def tearDown(self):
os.unlink(self.group_alias_file.name)
def testNothing(self):
url = urlreverse('ietf.group.info.email_aliases', kwargs=dict())
r = self.client.get(url)
self.assertTrue(all([x in r.content for x in ['mars-ads@','mars-chairs@','ames-ads@','ames-chairs@']]))
url = urlreverse('ietf.group.info.email_aliases', kwargs=dict(acronym="mars"))
r = self.client.get(url)
self.assertTrue(all([x in r.content for x in ['mars-ads@','mars-chairs@']]))
self.assertFalse(any([x in r.content for x in ['ames-ads@','ames-chairs@']]))
url = urlreverse('ietf.group.info.email_aliases', kwargs=dict(group_type="wg"))
r = self.client.get(url)
self.assertTrue('mars-ads@' in r.content)
url = urlreverse('ietf.group.info.email_aliases', kwargs=dict(group_type="rg"))
r = self.client.get(url)
self.assertFalse('mars-ads@' in r.content)

View file

@ -17,6 +17,7 @@ urlpatterns = patterns('',
(r'^chartering/$', RedirectView.as_view(url='/group/chartering/')),
(r'^chartering/create/$', RedirectView.as_view(url='/group/chartering/create/%(group_type)s/')),
(r'^bofs/$', info.bofs),
(r'^email-aliases/$', 'ietf.group.info.email_aliases'),
(r'^bofs/create/$', edit.edit, {'action': "create"}, "bof_create"),
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/documents/txt/$', info.group_documents_txt),
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/$', info.group_home, None, "group_home"),
@ -33,4 +34,5 @@ urlpatterns = patterns('',
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/milestones/charter/reset/$', milestones.reset_charter_milestones, None, "group_reset_charter_milestones"),
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/ajax/searchdocs/$', milestones.ajax_search_docs, None, "group_ajax_search_docs"),
(r'^(?P<acronym>[a-zA-Z0-9-._]+)/workflow/$', edit.customize_workflow),
(r'^(?P<acronym>[A-Za-z0-9._+-]+)/email-aliases/$', 'ietf.group.info.email_aliases'),
)