datatracker/ietf/wgchairs/tests.py
Ole Laursen 7e3b621a05 Port shepherd management, adding tests
- Legacy-Id: 3401
2011-08-30 11:33:47 +00:00

188 lines
7.4 KiB
Python

import datetime, os, shutil
from django.conf import settings
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse as urlreverse
import django.test
from StringIO import StringIO
from pyquery import PyQuery
from ietf.utils.test_utils import login_testing_unauthorized
from ietf.utils.test_runner import mail_outbox
from ietf.utils.test_data import make_test_data
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
from redesign.person.models import Person, Email
from redesign.group.models import Group, Role
from redesign.doc.models import Document
class ManageDelegatesTestCase(django.test.TestCase):
fixtures = ['names']
def test_delete_delegate(self):
make_test_data()
url = urlreverse('manage_delegates', kwargs=dict(acronym="mars"))
login_testing_unauthorized(self, "secretary", url)
delegates = Role.objects.filter(name="delegate", group__acronym="mars")
self.assertTrue(len(delegates) > 0)
# get
r = self.client.get(url)
self.assertEquals(r.status_code, 200)
q = PyQuery(r.content)
self.assertEquals(len(q('form input[name=delete]')), len(delegates))
# delete
r = self.client.post(url,
dict(remove="1",
delete=[d.pk for d in delegates]))
self.assertEquals(r.status_code, 200)
q = PyQuery(r.content)
self.assertEquals(len(q('form input[name=delete]')), 0)
self.assertEquals(Role.objects.filter(name="delegate", group__acronym="mars").count(), 0)
def test_add_not_existing_delegate(self):
make_test_data()
url = urlreverse('manage_delegates', kwargs=dict(acronym="mars"))
login_testing_unauthorized(self, "secretary", url)
# get
r = self.client.get(url)
self.assertEquals(r.status_code, 200)
q = PyQuery(r.content)
self.assertEquals(len(q('form input[name=email]')), 1)
# add non-existing
r = self.client.post(url,
dict(email="unknown@example.com",
form_type="single"))
self.assertEquals(r.status_code, 200)
self.assertTrue("unknown@example.com" in r.content)
q = PyQuery(r.content)
self.assertEquals(len(q('form input[type=submit][value*="Send email"]')), 1)
# we get back a warning and offer to send email, do that
mailbox_before = len(mail_outbox)
r = self.client.post(url,
dict(email="unknown@example.com",
form_type="notexist"))
self.assertEquals(r.status_code, 200)
self.assertTrue("Email sent" in r.content)
self.assertEquals(len(mail_outbox), mailbox_before + 3)
def test_add_delegate(self):
make_test_data()
url = urlreverse('manage_delegates', kwargs=dict(acronym="mars"))
login_testing_unauthorized(self, "secretary", url)
# get
r = self.client.get(url)
self.assertEquals(r.status_code, 200)
q = PyQuery(r.content)
self.assertEquals(len(q('form input[name=email]')), 1)
# add existing person
r = self.client.post(url,
dict(email="plain@example.com",
form_type="single"))
self.assertEquals(r.status_code, 200)
q = PyQuery(r.content)
self.assertTrue("new delegate" in r.content)
self.assertTrue(Email.objects.get(address="plain@example.com").person.name in r.content)
class ManageShepherdsTestCase(django.test.TestCase):
fixtures = ['names']
def test_manage_shepherds(self):
make_test_data()
url = urlreverse('manage_shepherds', kwargs=dict(acronym="mars"))
login_testing_unauthorized(self, "secretary", url)
# setup test documents
group = Group.objects.get(acronym="mars")
from redesign.doc.models import Document
common = dict(group=group,
state_id="active",
ad=Person.objects.get(user__username="ad"),
type_id="draft")
Document.objects.create(name="test-no-shepherd",
title="No shepherd",
shepherd=None,
**common)
Document.objects.create(name="test-shepherd-me",
title="Shepherd me",
shepherd=Person.objects.get(user__username="secretary"),
**common)
Document.objects.create(name="test-shepherd-other", title="Shepherd other",
shepherd=Person.objects.get(user__username="plain"),
**common)
# get and make sure they are divided correctly
r = self.client.get(url)
self.assertEquals(r.status_code, 200)
q = PyQuery(r.content)
self.assertEquals(len(q('div#noshepherd a:contains("No shepherd")')), 1)
self.assertEquals(len(q('div#mydocs a:contains("Shepherd me")')), 1)
self.assertEquals(len(q('div#othershepherds a:contains("Shepherd other")')), 1)
def test_set_shepherd(self):
draft = make_test_data()
url = urlreverse('doc_managing_shepherd', kwargs=dict(acronym="mars", name=draft.name))
login_testing_unauthorized(self, "secretary", url)
# get
r = self.client.get(url)
self.assertEquals(r.status_code, 200)
q = PyQuery(r.content)
self.assertEquals(len(q('input[type=submit][name=setme]')), 1)
# set me
events_before = draft.docevent_set.count()
r = self.client.post(url,
dict(setme="1"))
self.assertEquals(r.status_code, 200)
draft = Document.objects.get(name=draft.name)
self.assertTrue(draft.shepherd)
self.assertEquals(draft.shepherd.user.username, "secretary")
self.assertEquals(draft.docevent_set.count(), events_before + 1)
# get
r = self.client.get(url)
self.assertEquals(r.status_code, 200)
self.assertTrue(Person.objects.get(user__username="secretary").name in r.content)
q = PyQuery(r.content)
self.assertEquals(len(q('input[type=submit][name=remove_shepherd]')), 1)
# unassign
events_before = draft.docevent_set.count()
r = self.client.post(url,
dict(remove_shepherd="1"))
self.assertEquals(r.status_code, 200)
draft = Document.objects.get(name=draft.name)
self.assertTrue(not draft.shepherd)
self.assertEquals(draft.docevent_set.count(), events_before + 1)
# change to existing person
events_before = draft.docevent_set.count()
r = self.client.post(url,
dict(email="plain@example.com",
form_type="single"))
self.assertEquals(r.status_code, 200)
q = PyQuery(r.content)
self.assertTrue("Shepherd assigned" in r.content)
self.assertTrue(Email.objects.get(address="plain@example.com").person.name in r.content)
self.assertEquals(draft.docevent_set.count(), events_before + 1)
if not settings.USE_DB_REDESIGN_PROXY_CLASSES:
# the above tests only work with the new schema
del ManageDelegatesTestCase
del ManageShepherdsTestCase