Merged in [15596] from rjsparks@nostrum.com:

improved coverage for several tests.
 - Legacy-Id: 15600
Note: SVN reference [15596] has been migrated to Git commit 6f18ae882532433ba86322b33c34f5f1b0350cb9
This commit is contained in:
Henrik Levkowetz 2018-10-19 14:27:13 +00:00
commit 3508f59f52
12 changed files with 195 additions and 158 deletions

View file

@ -4,7 +4,7 @@ import datetime
from django.conf import settings
from ietf.doc.models import Document, DocEvent, NewRevisionDocEvent, DocAlias, State, DocumentAuthor
from ietf.doc.models import Document, DocEvent, NewRevisionDocEvent, DocAlias, State, DocumentAuthor, StateDocEvent
from ietf.group.models import Group
def draft_name_generator(type_id,group,n):
@ -210,3 +210,20 @@ class NewRevisionDocEventFactory(DocEventFactory):
def desc(self):
return 'New version available %s-%s'%(self.doc.name,self.rev)
class StateDocEventFactory(DocEventFactory):
class Meta:
model = StateDocEvent
type = 'changed_state'
state_type_id = 'draft-iesg'
@factory.post_generation
def state(obj, create, extracted, **kwargs):
if not create:
return
if extracted:
(state_type_id, state_slug) = extracted
obj.state = State.objects.get(type_id=state_type_id,slug=state_slug)
else:
obj.state = State.objects.get(type_id='draft-iesg',slug='ad-eval')
obj.save()

View file

@ -22,7 +22,7 @@ import debug # pyflakes:ignore
from ietf.doc.models import ( Document, DocAlias, DocRelationshipName, RelatedDocument, State,
DocEvent, BallotPositionDocEvent, LastCallDocEvent, WriteupDocEvent, NewRevisionDocEvent )
from ietf.doc.factories import DocumentFactory, DocEventFactory, CharterFactory, ConflictReviewFactory, WgDraftFactory, IndividualDraftFactory, WgRfcFactory, IndividualRfcFactory
from ietf.doc.factories import DocumentFactory, DocEventFactory, CharterFactory, ConflictReviewFactory, WgDraftFactory, IndividualDraftFactory, WgRfcFactory, IndividualRfcFactory, StateDocEventFactory
from ietf.doc.utils import create_ballot_if_not_open
from ietf.group.models import Group
from ietf.group.factories import GroupFactory
@ -289,7 +289,25 @@ class SearchTests(TestCase):
self.assertEqual(r.status_code, 200)
data = json.loads(r.content)
self.assertEqual(data[0]["id"], doc_alias.pk)
def test_recent_drafts(self):
# Three drafts to show with various warnings
drafts = WgDraftFactory.create_batch(3,states=[('draft','active'),('draft-iesg','ad-eval')])
for index, draft in enumerate(drafts):
StateDocEventFactory(doc=draft, state=('draft-iesg','ad-eval'), time=datetime.datetime.now()-datetime.timedelta(days=[1,15,29][index]))
# And one draft that should not show (with the default of 7 days to view)
old = WgDraftFactory()
old.docevent_set.filter(newrevisiondocevent__isnull=False).update(time=datetime.datetime.now()-datetime.timedelta(days=8))
StateDocEventFactory(doc=old, time=datetime.datetime.now()-datetime.timedelta(days=8))
url = urlreverse('ietf.doc.views_search.recent_drafts')
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
self.assertEqual(len(q('td.doc')),3)
self.assertEqual(q('td.status span.label-warning').text(),"for 15 days")
self.assertEqual(q('td.status span.label-danger').text(),"for 29 days")
class DocDraftTestCase(TestCase):
draft_text = """

View file

@ -4,7 +4,7 @@ import datetime
from django.core.files.base import ContentFile
from ietf.meeting.models import Meeting, Session, Schedule, TimeSlot, SessionPresentation, FloorPlan
from ietf.meeting.models import Meeting, Session, Schedule, TimeSlot, SessionPresentation, FloorPlan, Room
from ietf.group.factories import GroupFactory
from ietf.person.factories import PersonFactory
@ -100,12 +100,29 @@ class ScheduleFactory(factory.DjangoModelFactory):
name = factory.Sequence(lambda n: 'schedule_%d'%n)
owner = factory.SubFactory(PersonFactory)
class RoomFactory(factory.DjangoModelFactory):
class Meta:
model = Room
meeting = factory.SubFactory(MeetingFactory)
name = factory.Faker('name')
class TimeSlotFactory(factory.DjangoModelFactory):
class Meta:
model = TimeSlot
meeting = factory.SubFactory(MeetingFactory)
type_id = 'session'
@factory.post_generation
def location(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument
if create:
if extracted:
obj.location = extracted
else:
obj.location = RoomFactory(meeting=obj.meeting)
obj.save()
@factory.lazy_attribute
def time(self):
@ -140,4 +157,3 @@ class FloorPlanFactory(factory.DjangoModelFactory):
), 'floorplan.jpg'
)
)

View file

@ -2,6 +2,8 @@ import datetime
import glob
import os
import debug # pyflakes:ignore
from django.conf import settings
from django.template.loader import render_to_string

View file

@ -11,15 +11,15 @@ from pyquery import PyQuery
import debug # pyflakes:ignore
from ietf.doc.expire import expire_draft
from ietf.doc.factories import DocumentFactory
from ietf.doc.factories import WgDraftFactory
from ietf.doc.models import Document
from ietf.group.factories import RoleFactory
from ietf.meeting.factories import MeetingFactory
from ietf.person.factories import PersonFactory
from ietf.person.factories import PersonFactory, EmailFactory
from ietf.person.models import Person
from ietf.submit.models import Preapproval
from ietf.utils.mail import outbox
from ietf.utils.test_utils import TestCase, login_testing_unauthorized
from ietf.utils.test_data import make_test_data
from ietf.secr.drafts.email import get_email_initial
@ -48,14 +48,13 @@ class SecrDraftsTestCase(TestCase):
settings.IDSUBMIT_MANUAL_STAGING_DIR = self.saved_idsubmit_manual_staging_dir
def test_abstract(self):
draft = make_test_data()
draft = WgDraftFactory()
url = urlreverse('ietf.secr.drafts.views.abstract', kwargs={'id':draft.name})
self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
def test_approvals(self):
make_test_data()
Preapproval.objects.create(name='draft-dummy',
by=Person.objects.get(name="(System)"))
url = urlreverse('ietf.secr.drafts.views.approvals')
@ -65,7 +64,7 @@ class SecrDraftsTestCase(TestCase):
self.assertTrue('draft-dummy' in response.content)
def test_edit(self):
draft = make_test_data()
draft = WgDraftFactory(states=[('draft','active'),('draft-stream-ietf','wg-doc'),('draft-iesg','ad-eval')], shepherd=EmailFactory())
url = urlreverse('ietf.secr.drafts.views.edit', kwargs={'id':draft.name})
self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url)
@ -83,20 +82,23 @@ class SecrDraftsTestCase(TestCase):
def test_get_email_initial(self):
# Makes sure that a manual posting by the Secretariat of an I-D that is
# in the RFC Editor Queue will result in notification of the RFC Editor
draft = make_test_data()
draft = WgDraftFactory(authors=PersonFactory.create_batch(1),shepherd=EmailFactory())
RoleFactory(group=draft.group, name_id='chair')
data = get_email_initial(draft,action='extend',input={'expiration_date': '2050-01-01'})
self.assertTrue('Extension of Expiration Date' in data['subject'])
def test_makerfc(self):
draft = make_test_data()
draft = WgDraftFactory(intended_std_level_id='ps')
url = urlreverse('ietf.secr.drafts.views.edit', kwargs={'id':draft.name})
self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
# It's not clear what this is testing. Was there supposed to be a POST here?
self.assertTrue(draft.intended_std_level)
def test_search(self):
draft = make_test_data()
WgDraftFactory() # Test exercises branch that requires >1 doc found
draft = WgDraftFactory()
url = urlreverse('ietf.secr.drafts.views.search')
self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url)
@ -108,14 +110,14 @@ class SecrDraftsTestCase(TestCase):
self.assertTrue(draft.name in response.content)
def test_view(self):
draft = make_test_data()
draft = WgDraftFactory()
url = urlreverse('ietf.secr.drafts.views.view', kwargs={'id':draft.name})
self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
def test_author_delete(self):
draft = make_test_data()
draft = WgDraftFactory(authors=PersonFactory.create_batch(2))
author = draft.documentauthor_set.first()
id = author.id
url = urlreverse('ietf.secr.drafts.views.author_delete', kwargs={'id':draft.name, 'oid':id})
@ -128,7 +130,7 @@ class SecrDraftsTestCase(TestCase):
self.assertFalse(draft.documentauthor_set.filter(id=id))
def test_resurrect(self):
draft = make_test_data()
draft = WgDraftFactory()
path = os.path.join(self.repository_dir, draft.filename_with_rev())
with open(path, 'w') as file:
file.write('test')
@ -164,7 +166,7 @@ class SecrDraftsTestCase(TestCase):
self.assertEqual(recv['Subject'], subject)
def test_extend(self):
draft = make_test_data()
draft = WgDraftFactory()
url = urlreverse('ietf.secr.drafts.views.extend', kwargs={'id':draft.name})
email_url = urlreverse('ietf.secr.drafts.views.email', kwargs={'id':draft.name})
confirm_url = urlreverse('ietf.secr.drafts.views.confirm', kwargs={'id':draft.name})
@ -203,7 +205,7 @@ class SecrDraftsTestCase(TestCase):
self.assertEqual(recv['Subject'], subject)
def test_withdraw(self):
draft = make_test_data()
draft = WgDraftFactory()
url = urlreverse('ietf.secr.drafts.views.withdraw', kwargs={'id':draft.name})
email_url = urlreverse('ietf.secr.drafts.views.email', kwargs={'id':draft.name})
confirm_url = urlreverse('ietf.secr.drafts.views.confirm', kwargs={'id':draft.name})
@ -237,7 +239,7 @@ class SecrDraftsTestCase(TestCase):
self.assertEqual(recv['Subject'], subject)
def test_authors(self):
draft = DocumentFactory()
draft = WgDraftFactory()
person = PersonFactory()
url = urlreverse('ietf.secr.drafts.views.authors',kwargs={'id':draft.name})
login_testing_unauthorized(self, "secretary", url)

View file

@ -3,23 +3,25 @@ from django.urls import reverse
from ietf.utils.test_utils import TestCase
from ietf.group.models import Group
from ietf.secr.groups.forms import get_parent_group_choices
from ietf.group.factories import GroupFactory
from ietf.group.factories import GroupFactory, RoleFactory
from ietf.meeting.factories import MeetingFactory
from ietf.person.factories import PersonFactory
from ietf.person.models import Person
from ietf.utils.test_data import make_test_data
import debug # pyflakes:ignore
class GroupsTest(TestCase):
def test_get_parent_group_choices(self):
make_test_data()
GroupFactory(type_id='area')
choices = get_parent_group_choices()
area = Group.objects.filter(type='area',state='active').first()
# This is opaque. Can it be rewritten to be more self-documenting?
self.assertEqual(choices[0][1][0][0],area.id)
# ------- Test Search -------- #
def test_search(self):
"Test Search"
make_test_data()
group = Group.objects.all()[0]
MeetingFactory(type_id='ietf')
group = GroupFactory()
url = reverse('ietf.secr.groups.views.search')
post_data = {'group_acronym':group.acronym,'submit':'Search'}
self.client.login(username="secretary", password="secretary+password")
@ -50,9 +52,8 @@ class GroupsTest(TestCase):
self.assertTrue('This field is required' in response.content)
def test_add_group_dupe(self):
make_test_data()
group = Group.objects.all()[0]
area = Group.objects.filter(type='area')[0]
group = GroupFactory()
area = GroupFactory(type_id='area')
url = reverse('ietf.secr.groups.views.add')
post_data = {'acronym':group.acronym,
'name':'Test Group',
@ -69,8 +70,7 @@ class GroupsTest(TestCase):
self.assertTrue('Group with this Acronym already exists' in response.content)
def test_add_group_success(self):
make_test_data()
area = Group.objects.filter(type='area')[0]
area = GroupFactory(type_id='area')
url = reverse('ietf.secr.groups.views.add')
post_data = {'acronym':'test',
'name':'Test Group',
@ -86,8 +86,8 @@ class GroupsTest(TestCase):
# ------- Test View -------- #
def test_view(self):
make_test_data()
group = Group.objects.all()[0]
MeetingFactory(type_id='ietf')
group = GroupFactory()
url = reverse('ietf.secr.groups.views.view', kwargs={'acronym':group.acronym})
self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url)
@ -95,10 +95,10 @@ class GroupsTest(TestCase):
# ------- Test Edit -------- #
def test_edit_valid(self):
make_test_data()
group = Group.objects.filter(acronym='mars')[0]
area = Group.objects.filter(acronym='farfut')[0]
ad = Person.objects.get(name='Areað Irector')
group = GroupFactory()
area = GroupFactory(type_id='area')
ad = Person.objects.get(name='Areað Irector')
MeetingFactory(type_id='ietf')
url = reverse('ietf.secr.groups.views.edit', kwargs={'acronym':group.acronym})
target = reverse('ietf.secr.groups.views.view', kwargs={'acronym':group.acronym})
post_data = {'acronym':group.acronym,
@ -116,9 +116,9 @@ class GroupsTest(TestCase):
self.assertTrue('changed successfully' in response.content)
def test_edit_non_wg_group(self):
make_test_data()
parent_sdo = GroupFactory.create(type_id='sdo',state_id='active')
child_sdo = GroupFactory.create(type_id='sdo',state_id='active',parent=parent_sdo)
MeetingFactory(type_id='ietf')
url = reverse('ietf.secr.groups.views.edit', kwargs={'acronym':child_sdo.acronym})
target = reverse('ietf.secr.groups.views.view', kwargs={'acronym':child_sdo.acronym})
post_data = {'acronym':child_sdo.acronym,
@ -137,9 +137,8 @@ class GroupsTest(TestCase):
# ------- Test People -------- #
def test_people_delete(self):
make_test_data()
group = Group.objects.filter(acronym='mars')[0]
role = group.role_set.all()[0]
role = RoleFactory(name_id='member')
group = role.group
id = role.id
url = reverse('ietf.secr.groups.views.delete_role', kwargs={'acronym':group.acronym,'id':role.id})
target = reverse('ietf.secr.groups.views.people', kwargs={'acronym':group.acronym})
@ -151,9 +150,8 @@ class GroupsTest(TestCase):
self.assertFalse(group.role_set.filter(id=id))
def test_people_add(self):
make_test_data()
person = Person.objects.get(name='Areað Irector')
group = Group.objects.filter(acronym='mars')[0]
person = PersonFactory()
group = GroupFactory()
url = reverse('ietf.secr.groups.views.people', kwargs={'acronym':group.acronym})
post_data = {'group_acronym':group.acronym,
'name':'chair',

View file

@ -7,11 +7,10 @@ from django.conf import settings
from django.urls import reverse
from ietf.doc.models import Document
from ietf.group.models import Group
from ietf.meeting.models import Session, TimeSlot, SchedTimeSessAssignment
from ietf.meeting.test_data import make_meeting_test_data
from ietf.group.factories import RoleFactory
from ietf.meeting.models import SchedTimeSessAssignment
from ietf.meeting.factories import MeetingFactory, SessionFactory
from ietf.name.models import SessionStatusName
from ietf.utils.test_data import make_test_data
from ietf.utils.test_utils import TestCase
from ietf.utils.mail import outbox
@ -26,7 +25,8 @@ SECR_USER='secretary'
class ProceedingsTestCase(TestCase):
def test_main(self):
"Main Test"
make_test_data()
MeetingFactory(type_id='ietf')
RoleFactory(name_id='chair',person__user__username='marschairman')
url = reverse('ietf.secr.proceedings.views.main')
self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url)
@ -41,8 +41,8 @@ class ProceedingsTestCase(TestCase):
class VideoRecordingTestCase(TestCase):
def test_get_session(self):
meeting = make_meeting_test_data()
session = Session.objects.filter(meeting=meeting, group__acronym='mars').first()
session = SessionFactory()
meeting = session.meeting
number = meeting.number
name = session.group.acronym
date = session.official_timeslotassignment().timeslot.time.strftime('%Y%m%d')
@ -69,20 +69,16 @@ class RecordingTestCase(TestCase):
settings.MEETING_RECORDINGS_DIR = self.saved_meeting_recordings_dir
def test_page(self):
meeting = make_meeting_test_data()
meeting = MeetingFactory(type_id='ietf')
url = reverse('ietf.secr.proceedings.views.recording', kwargs={'meeting_num':meeting.number})
self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
def test_post(self):
meeting = make_meeting_test_data()
group = Group.objects.get(acronym='mars')
session = Session.objects.filter(meeting=meeting,group=group).first()
# explicitly set to scheduled for this test
status = SessionStatusName.objects.get(slug='sched')
session.status = status
session.save()
session = SessionFactory(status_id='sched',meeting__type_id='ietf')
meeting = session.meeting
group = session.group
url = reverse('ietf.secr.proceedings.views.recording', kwargs={'meeting_num':meeting.number})
data = dict(group=group.acronym,external_url='http://youtube.com/xyz',session=session.pk)
self.client.login(username="secretary", password="secretary+password")
@ -99,12 +95,8 @@ class RecordingTestCase(TestCase):
self.assertTrue(external_url in response.content)
def test_import_audio_files(self):
meeting = make_meeting_test_data()
group = Group.objects.get(acronym='mars')
session = Session.objects.filter(meeting=meeting,group=group).first()
status = SessionStatusName.objects.get(slug='sched')
session.status = status
session.save()
session = SessionFactory(status_id='sched',meeting__type_id='ietf')
meeting = session.meeting
timeslot = session.official_timeslotassignment().timeslot
self.create_audio_file_for_timeslot(timeslot)
import_audio_files(meeting)
@ -126,9 +118,9 @@ class RecordingTestCase(TestCase):
date=timeslot.time.strftime('%Y%m%d-%H%M'))
def test_import_audio_files_shared_timeslot(self):
meeting = make_meeting_test_data()
mars_session = Session.objects.filter(meeting=meeting,group__acronym='mars').first()
ames_session = Session.objects.filter(meeting=meeting,group__acronym='ames').first()
meeting = MeetingFactory(type_id='ietf',number='42')
mars_session = SessionFactory(meeting=meeting,status_id='sched',group__acronym='mars')
ames_session = SessionFactory(meeting=meeting,status_id='sched',group__acronym='ames')
scheduled = SessionStatusName.objects.get(slug='sched')
mars_session.status = scheduled
mars_session.save()
@ -148,15 +140,13 @@ class RecordingTestCase(TestCase):
self.assertEqual(normalize_room_name('Rome/Venice'), 'rome_venice')
def test_get_timeslot_for_filename(self):
meeting = make_meeting_test_data()
timeslot = TimeSlot.objects.filter(meeting=meeting,type='session').first()
session = SessionFactory(meeting__type_id='ietf')
timeslot = session.timeslotassignments.first().timeslot
name = self.get_filename_for_timeslot(timeslot)
self.assertEqual(get_timeslot_for_filename(name),timeslot)
def test_get_or_create_recording_document(self):
meeting = make_meeting_test_data()
group = Group.objects.get(acronym='mars')
session = Session.objects.filter(meeting=meeting,group=group).first()
session = SessionFactory(meeting__type_id='ietf', meeting__number=42, group__acronym='mars')
# test create
filename = 'ietf42-testroom-20000101-0800.mp3'
@ -174,20 +164,19 @@ class RecordingTestCase(TestCase):
self.assertEqual(doc,doc2)
def test_create_recording(self):
meeting = make_meeting_test_data()
group = Group.objects.get(acronym='mars')
session = Session.objects.filter(meeting=meeting,group=group).first()
session = SessionFactory(meeting__type_id='ietf', meeting__number=42, group__acronym='mars')
filename = 'ietf42-testroomt-20000101-0800.mp3'
url = settings.IETF_AUDIO_URL + 'ietf{}/{}'.format(meeting.number, filename)
url = settings.IETF_AUDIO_URL + 'ietf{}/{}'.format(session.meeting.number, filename)
doc = create_recording(session, url)
self.assertEqual(doc.name,'recording-42-mars-1')
self.assertEqual(doc.group,group)
self.assertEqual(doc.group,session.group)
self.assertEqual(doc.external_url,url)
self.assertTrue(doc in session.materials.all())
def test_get_next_sequence(self):
meeting = make_meeting_test_data()
group = Group.objects.get(acronym='mars')
session = SessionFactory(meeting__type_id='ietf', meeting__number=42, group__acronym='mars')
meeting = session.meeting
group = session.group
sequence = get_next_sequence(group,meeting,'recording')
self.assertEqual(sequence,1)

View file

@ -2,32 +2,28 @@
from django.urls import reverse
from ietf.utils.test_utils import TestCase
from ietf.group.models import Group
from ietf.group.factories import GroupFactory, RoleFactory
from ietf.person.models import Person
from ietf.utils.test_data import make_test_data
import debug # pyflakes:ignore
SECR_USER='secretary'
def augment_data():
# need this for the RoleForm intialization
Group.objects.create(acronym='dummy',name='Dummy Group',type_id='sdo')
class SecrRolesMainTestCase(TestCase):
def setUp(self):
GroupFactory(type_id='sdo') # need this for the RoleForm initialization
def test_main(self):
"Main Test"
augment_data()
url = reverse('ietf.secr.roles.views.main')
self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
def test_roles_delete(self):
make_test_data()
augment_data()
group = Group.objects.filter(acronym='mars')[0]
role = group.role_set.all()[0]
role = RoleFactory(name_id='chair',group__acronym='mars')
group = role.group
id = role.id
url = reverse('ietf.secr.roles.views.delete_role', kwargs={'acronym':group.acronym,'id':role.id})
target = reverse('ietf.secr.roles.views.main')
@ -39,10 +35,8 @@ class SecrRolesMainTestCase(TestCase):
self.assertFalse(group.role_set.filter(id=id))
def test_roles_add(self):
make_test_data()
augment_data()
person = Person.objects.get(name='Areað Irector')
group = Group.objects.filter(acronym='mars')[0]
group = GroupFactory()
url = reverse('ietf.secr.roles.views.main')
target = reverse('ietf.secr.roles.views.main') + '?group=%s' % group.acronym
post_data = {'group_acronym':group.acronym,
@ -56,8 +50,6 @@ class SecrRolesMainTestCase(TestCase):
self.assertTrue('added successfully' in response.content)
def test_roles_add_no_group(self):
make_test_data()
augment_data()
person = Person.objects.get(name='Areað Irector')
url = reverse('ietf.secr.roles.views.main')
post_data = {'group_acronym':'',

View file

@ -5,8 +5,6 @@ import debug # pyflakes:ignore
from ietf.utils.test_utils import TestCase
from ietf.person.factories import PersonFactory, UserFactory
from ietf.person.models import Person, User
from ietf.utils.test_data import make_test_data
SECR_USER='secretary'
@ -20,15 +18,13 @@ class RolodexTestCase(TestCase):
def test_view(self):
"View Test"
make_test_data()
person = Person.objects.all()[0]
person = PersonFactory()
url = reverse('ietf.secr.rolodex.views.view', kwargs={'id':person.id})
self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
def test_add(self):
make_test_data()
url = reverse('ietf.secr.rolodex.views.add')
add_proceed_url = reverse('ietf.secr.rolodex.views.add_proceed') + '?name=Joe+Smith'
self.client.login(username="secretary", password="secretary+password")
@ -41,7 +37,7 @@ class RolodexTestCase(TestCase):
'ascii': 'Joe Smith',
'ascii_short': 'Joe S',
'affiliation': 'IETF',
'email': 'joes@exanple.com',
'email': 'joes@example.com',
'submit': 'Submit',
}
response = self.client.post(add_proceed_url, post_data)

View file

@ -1,15 +1,14 @@
from django.urls import reverse
import datetime
import debug # pyflakes:ignore
from ietf.utils.test_utils import TestCase, unicontent
from ietf.group.models import Group
from ietf.meeting.helpers import get_meeting
from ietf.meeting.models import Meeting, Session, ResourceAssociation
from ietf.meeting.test_data import make_meeting_test_data
from ietf.meeting.factories import SessionFactory
from ietf.group.factories import GroupFactory, RoleFactory
from ietf.meeting.models import Session, ResourceAssociation
from ietf.meeting.factories import MeetingFactory, SessionFactory
from ietf.person.models import Person
from ietf.utils.mail import outbox, empty_outbox
from ietf.utils.test_data import make_test_data
from pyquery import PyQuery
@ -17,7 +16,7 @@ SECR_USER='secretary'
class SreqUrlTests(TestCase):
def test_urls(self):
make_meeting_test_data()
MeetingFactory(type_id='ietf',date=datetime.date.today())
self.client.login(username="secretary", password="secretary+password")
@ -27,13 +26,16 @@ class SreqUrlTests(TestCase):
r = self.client.get("/secr/sreq/")
self.assertEqual(r.status_code, 200)
testgroup=Group.objects.filter(type_id='wg').first()
testgroup=GroupFactory()
r = self.client.get("/secr/sreq/%s/new/" % testgroup.acronym)
self.assertEqual(r.status_code, 200)
class SessionRequestTestCase(TestCase):
def test_main(self):
make_meeting_test_data()
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today())
SessionFactory.create_batch(2, meeting=meeting, status_id='sched')
SessionFactory.create_batch(2, meeting=meeting, status_id='unsched')
# An additional unscheduled group comes from make_immutable_base_data
url = reverse('ietf.secr.sreq.views.main')
self.client.login(username="secretary", password="secretary+password")
r = self.client.get(url)
@ -44,8 +46,10 @@ class SessionRequestTestCase(TestCase):
self.assertEqual(len(sched),2)
def test_approve(self):
meeting = make_meeting_test_data()
mars = Group.objects.get(acronym='mars')
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today())
ad = Person.objects.get(user__username='ad')
area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group
mars = GroupFactory(parent=area, acronym='mars')
# create session waiting for approval
session = SessionFactory(meeting=meeting, group=mars, status_id='apprw')
url = reverse('ietf.secr.sreq.views.approve', kwargs={'acronym':'mars'})
@ -56,8 +60,10 @@ class SessionRequestTestCase(TestCase):
self.assertEqual(session.status_id,'appr')
def test_cancel(self):
meeting = make_meeting_test_data()
mars = Group.objects.get(acronym='mars')
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today())
ad = Person.objects.get(user__username='ad')
area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group
mars = SessionFactory(meeting=meeting, group__parent=area, group__acronym='mars', status_id='sched').group
url = reverse('ietf.secr.sreq.views.cancel', kwargs={'acronym':'mars'})
self.client.login(username="ad", password="ad+password")
r = self.client.get(url)
@ -66,7 +72,10 @@ class SessionRequestTestCase(TestCase):
self.assertEqual(sessions[0].status_id,'deleted')
def test_edit(self):
make_meeting_test_data()
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today())
mars = RoleFactory(name_id='chair', person__user__username='marschairman', group__acronym='mars').group
SessionFactory(meeting=meeting,group=mars,status_id='sched',scheduled=datetime.datetime.now())
url = reverse('ietf.secr.sreq.views.edit', kwargs={'acronym':'mars'})
self.client.login(username="marschairman", password="marschairman+password")
r = self.client.get(url)
@ -82,7 +91,7 @@ class SessionRequestTestCase(TestCase):
self.assertRedirects(r,reverse('ietf.secr.sreq.views.view', kwargs={'acronym':'mars'}))
def test_tool_status(self):
make_meeting_test_data()
MeetingFactory(type_id='ietf', date=datetime.date.today())
url = reverse('ietf.secr.sreq.views.tool_status')
self.client.login(username="secretary", password="secretary+password")
r = self.client.get(url)
@ -92,9 +101,10 @@ class SessionRequestTestCase(TestCase):
class SubmitRequestCase(TestCase):
def test_submit_request(self):
make_test_data()
meeting = get_meeting()
group = Group.objects.get(acronym='mars')
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today())
ad = Person.objects.get(user__username='ad')
area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group
group = GroupFactory(parent=area)
session_count_before = Session.objects.filter(meeting=meeting, group=group).count()
url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':group.acronym})
confirm_url = reverse('ietf.secr.sreq.views.confirm',kwargs={'acronym':group.acronym})
@ -121,8 +131,10 @@ class SubmitRequestCase(TestCase):
self.assertTrue(session_count_after == session_count_before + 1)
def test_submit_request_invalid(self):
make_test_data()
group = Group.objects.get(acronym='mars')
MeetingFactory(type_id='ietf', date=datetime.date.today())
ad = Person.objects.get(user__username='ad')
area = RoleFactory(name_id='ad', person=ad, group__type_id='area').group
group = GroupFactory(parent=area)
url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':group.acronym})
post_data = {'num_session':'2',
'length_session1':'3600',
@ -137,14 +149,17 @@ class SubmitRequestCase(TestCase):
self.assertTrue('You must enter a length for all sessions' in unicontent(r))
def test_request_notification(self):
make_test_data()
meeting = Meeting.objects.filter(type='ietf').first()
group = Group.objects.get(acronym='ames')
ad = group.parent.role_set.filter(name='ad').first().person
resource = ResourceAssociation.objects.first()
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today())
ad = Person.objects.get(user__username='ad')
area = GroupFactory(type_id='area')
RoleFactory(name_id='ad', person=ad, group=area)
group = GroupFactory(acronym='ames', parent=area)
RoleFactory(name_id='chair', group=group, person__user__username='ameschairman')
resource = ResourceAssociation.objects.create(name_id='project')
# Bit of a test data hack - the fixture now has no used resources to pick from
resource.name.used=True
resource.name.save()
url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':group.acronym})
confirm_url = reverse('ietf.secr.sreq.views.confirm',kwargs={'acronym':group.acronym})
len_before = len(outbox)
@ -177,12 +192,14 @@ class SubmitRequestCase(TestCase):
self.assertTrue(ad.ascii_name() in notification_payload)
class LockAppTestCase(TestCase):
def setUp(self):
self.meeting = MeetingFactory(type_id='ietf', date=datetime.date.today(),session_request_lock_message='locked')
self.group = GroupFactory(acronym='mars')
RoleFactory(name_id='chair', group=self.group, person__user__username='marschairman')
SessionFactory(group=self.group,meeting=self.meeting)
def test_edit_request(self):
meeting = make_meeting_test_data()
meeting.session_request_lock_message='locked'
meeting.save()
group = Group.objects.get(acronym='mars')
url = reverse('ietf.secr.sreq.views.edit',kwargs={'acronym':group.acronym})
url = reverse('ietf.secr.sreq.views.edit',kwargs={'acronym':self.group.acronym})
self.client.login(username="secretary", password="secretary+password")
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
@ -190,11 +207,7 @@ class LockAppTestCase(TestCase):
self.assertEqual(len(q(':disabled[name="submit"]')), 1)
def test_view_request(self):
meeting = make_meeting_test_data()
meeting.session_request_lock_message='locked'
meeting.save()
group = Group.objects.get(acronym='mars')
url = reverse('ietf.secr.sreq.views.view',kwargs={'acronym':group.acronym})
url = reverse('ietf.secr.sreq.views.view',kwargs={'acronym':self.group.acronym})
self.client.login(username="secretary", password="secretary+password")
r = self.client.get(url,follow=True)
self.assertEqual(r.status_code, 200)
@ -202,11 +215,7 @@ class LockAppTestCase(TestCase):
self.assertEqual(len(q(':disabled[name="edit"]')), 1)
def test_new_request(self):
meeting = make_meeting_test_data()
meeting.session_request_lock_message='locked'
meeting.save()
group = Group.objects.get(acronym='mars')
url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':group.acronym})
url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':self.group.acronym})
# try as WG Chair
self.client.login(username="marschairman", password="marschairman+password")
@ -224,8 +233,8 @@ class LockAppTestCase(TestCase):
class NotMeetingCase(TestCase):
def test_not_meeting(self):
make_meeting_test_data()
group = Group.objects.get(acronym='mars')
MeetingFactory(type_id='ietf',date=datetime.date.today())
group = GroupFactory(acronym='mars')
url = reverse('ietf.secr.sreq.views.no_session',kwargs={'acronym':group.acronym})
self.client.login(username="secretary", password="secretary+password")

View file

@ -6,13 +6,13 @@ import debug # pyflakes:ignore
from django.urls import reverse
from ietf.doc.models import Document, State, BallotDocEvent, BallotType, BallotPositionDocEvent
from ietf.doc.factories import WgDraftFactory, CharterFactory
from ietf.doc.models import BallotDocEvent, BallotType, BallotPositionDocEvent
from ietf.doc.utils import update_telechat, create_ballot_if_not_open
from ietf.utils.test_utils import TestCase
from ietf.iesg.models import TelechatDate
from ietf.person.models import Person
from ietf.secr.telechat.views import get_next_telechat_date
from ietf.utils.test_data import make_test_data
SECR_USER='secretary'
@ -39,7 +39,7 @@ class SecrTelechatTestCase(TestCase):
self.assertEqual(response.status_code, 200)
def test_doc_detail_draft(self):
draft = make_test_data()
draft = WgDraftFactory(states=[('draft-iesg','pub-req'),])
ad = Person.objects.get(user__username="ad")
create_ballot_if_not_open(None, draft, ad, 'approve')
d = get_next_telechat_date()
@ -60,7 +60,7 @@ class SecrTelechatTestCase(TestCase):
def test_doc_detail_draft_invalid(self):
'''Test using a document not on telechat agenda'''
draft = make_test_data()
draft = WgDraftFactory(states=[('draft-iesg','pub-req'),])
date = get_next_telechat_date().strftime('%Y-%m-%d')
url = reverse('ietf.secr.telechat.views.doc_detail', kwargs={'date':date, 'name':draft.name})
self.client.login(username="secretary", password="secretary+password")
@ -69,10 +69,8 @@ class SecrTelechatTestCase(TestCase):
self.assertTrue('not on the Telechat agenda' in response.content)
def test_doc_detail_charter(self):
make_test_data()
by=Person.objects.get(name="(System)")
charter = Document.objects.filter(type='charter').first()
charter.set_state(State.objects.get(used=True, slug="intrev", type="charter"))
charter = CharterFactory(states=[('charter','intrev')])
last_week = datetime.date.today()-datetime.timedelta(days=7)
BallotDocEvent.objects.create(type='created_ballot',by=by,doc=charter, rev=charter.rev,
ballot_type=BallotType.objects.get(doc_type=charter.type,slug='r-extrev'),
@ -100,10 +98,8 @@ class SecrTelechatTestCase(TestCase):
self.assertEqual(response.status_code, 200)
def test_doc_detail_post_update_ballot(self):
make_test_data()
by=Person.objects.get(name="(System)")
charter = Document.objects.filter(type='charter').first()
charter.set_state(State.objects.get(used=True, slug="intrev", type="charter"))
charter = CharterFactory(states=[('charter','intrev')])
last_week = datetime.date.today()-datetime.timedelta(days=7)
BallotDocEvent.objects.create(type='created_ballot',by=by,doc=charter, rev=charter.rev,
ballot_type=BallotType.objects.get(doc_type=charter.type,slug='r-extrev'),
@ -140,10 +136,8 @@ class SecrTelechatTestCase(TestCase):
self.assertTrue(BallotPositionDocEvent.objects.filter(doc=charter, ad_id=13, pos__slug='noobj').exists())
def test_doc_detail_post_update_state(self):
make_test_data()
by=Person.objects.get(name="(System)")
charter = Document.objects.filter(type='charter').first()
charter.set_state(State.objects.get(used=True, slug="intrev", type="charter"))
charter = CharterFactory(states=[('charter','intrev')])
last_week = datetime.date.today()-datetime.timedelta(days=7)
BallotDocEvent.objects.create(type='created_ballot',by=by,doc=charter, rev=charter.rev,
ballot_type=BallotType.objects.get(doc_type=charter.type,slug='r-extrev'),

View file

@ -13,11 +13,12 @@ import ietf.stats.views
from ietf.submit.models import Submission
from ietf.doc.factories import WgDraftFactory, WgRfcFactory
from ietf.doc.models import Document, DocAlias, State, RelatedDocument, NewRevisionDocEvent, DocumentAuthor
from ietf.group.factories import RoleFactory
from ietf.meeting.factories import MeetingFactory
from ietf.person.factories import PersonFactory
from ietf.person.models import Person, Email
from ietf.name.models import FormalLanguageName, DocRelationshipName, CountryName
from ietf.review.factories import ReviewRequestFactory
from ietf.review.factories import ReviewRequestFactory, ReviewerSettingsFactory
from ietf.stats.models import MeetingRegistration, CountryAlias
from ietf.stats.utils import get_meeting_registration_data
@ -155,7 +156,10 @@ class StatisticsTests(TestCase):
self.assertTrue("United States" in unicontent(r))
def test_review_stats(self):
review_req = ReviewRequestFactory()
reviewer = PersonFactory()
review_req = ReviewRequestFactory(reviewer=reviewer.email_set.first())
RoleFactory(group=review_req.team,name_id='reviewer',person=reviewer)
ReviewerSettingsFactory(team=review_req.team, person=reviewer)
PersonFactory(user__username='plain')
# check redirect