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

Converted stats, submit, sync. and utils/test to use factories. Excluded utils/test_data from coverage checks.
 - Legacy-Id: 15599
Note: SVN reference [15595] has been migrated to Git commit 39e76a836996ec9ed8ea449c92bdfae91c3dbaae
This commit is contained in:
Henrik Levkowetz 2018-10-19 12:54:58 +00:00
parent fcddc86447
commit ef3cbf4684
8 changed files with 73 additions and 72 deletions

View file

@ -1,7 +1,5 @@
# -*- conf-mode -*-
/personal/rjs/6.86.1.dev0@15568 # Test coverage lower
/personal/rcross/6.81.3.dev0@15262 # Secretariat admin access to Document has drawbacks
/personal/sbirkholz/mtgreg3@14074 # reviewed with issues; feedback sent
/personal/sbirkholz/meeting_registration@13969 # manual branch merge

View file

@ -457,7 +457,7 @@ def recent_drafts(request, days=7):
results, meta = prepare_document_table(request, docs, query={'sort':'-date', }, max_results=len(names))
pages = 0
for doc in results:
pages += doc.pages
pages += doc.pages or 0
return render(request, 'doc/recent_drafts.html', {
'docs':results, 'meta':meta, 'pages':pages, 'days': days,

View file

@ -511,6 +511,7 @@ TEST_CODE_COVERAGE_EXCLUDE_FILES = [
"ietf/name/generate_fixtures.py",
"ietf/review/import_from_review_tool.py",
"ietf/stats/backfill_data.py",
"ietf/utils/test_data.py",
]
# These are code line regex patterns

View file

@ -7,15 +7,17 @@ from requests import Response
from django.urls import reverse as urlreverse
from django.contrib.auth.models import User
from ietf.utils.test_data import make_test_data, make_review_data
from ietf.utils.test_utils import login_testing_unauthorized, TestCase, unicontent
import ietf.stats.views
from ietf.submit.models import Submission
from ietf.doc.models import Document, DocAlias, State, RelatedDocument, NewRevisionDocEvent
from ietf.doc.factories import WgDraftFactory, WgRfcFactory
from ietf.doc.models import Document, DocAlias, State, RelatedDocument, NewRevisionDocEvent, DocumentAuthor
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.stats.models import MeetingRegistration, CountryAlias
from ietf.stats.utils import get_meeting_registration_data
@ -27,7 +29,16 @@ class StatisticsTests(TestCase):
self.assertEqual(r.status_code, 200)
def test_document_stats(self):
draft = make_test_data()
WgRfcFactory()
draft = WgDraftFactory()
DocumentAuthor.objects.create(
document=draft,
person=Person.objects.get(email__address="aread@ietf.org"),
email=Email.objects.get(address="aread@ietf.org"),
country="Germany",
affiliation="IETF",
order=1
)
# create some data for the statistics
Submission.objects.create(
@ -102,7 +113,6 @@ class StatisticsTests(TestCase):
def test_meeting_stats(self):
# create some data for the statistics
make_test_data()
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today(), number="96")
MeetingRegistration.objects.create(first_name='John', last_name='Smith', country_code='US', email="john.smith@example.us", meeting=meeting)
CountryAlias.objects.get_or_create(alias="US", country=CountryName.objects.get(slug="US"))
@ -137,8 +147,6 @@ class StatisticsTests(TestCase):
self.assertTrue(q('table.stats-data'))
def test_known_country_list(self):
make_test_data()
# check redirect
url = urlreverse(ietf.stats.views.known_countries_list)
@ -147,8 +155,8 @@ class StatisticsTests(TestCase):
self.assertTrue("United States" in unicontent(r))
def test_review_stats(self):
doc = make_test_data()
review_req = make_review_data(doc)
review_req = ReviewRequestFactory()
PersonFactory(user__username='plain')
# check redirect
url = urlreverse(ietf.stats.views.review_stats)

View file

@ -19,8 +19,10 @@ from django.urls import reverse as urlreverse
import debug # pyflakes:ignore
from ietf.submit.utils import expirable_submissions, expire_submission, ensure_person_email_info_exists
from ietf.doc.factories import DocumentFactory, WgDraftFactory, IndividualDraftFactory
from ietf.doc.models import Document, DocAlias, DocEvent, State, BallotPositionDocEvent, DocumentAuthor
from ietf.doc.utils import create_ballot_if_not_open
from ietf.group.factories import GroupFactory, RoleFactory
from ietf.group.models import Group
from ietf.group.utils import setup_default_community_list_for_group
from ietf.meeting.models import Meeting
@ -33,7 +35,6 @@ from ietf.submit.models import Submission, Preapproval
from ietf.submit.mail import add_submission_email, process_response_email
from ietf.utils.mail import outbox, empty_outbox
from ietf.utils.models import VersionInfo
from ietf.utils.test_data import make_test_data
from ietf.utils.test_utils import login_testing_unauthorized, unicontent, TestCase
from ietf.utils.draft import Draft
@ -97,6 +98,9 @@ class SubmitTests(TestCase):
self.yang_iana_model_dir = self.tempdir('yang-iana-model')
settings.SUBMIT_YANG_IANA_MODEL_DIR = self.yang_iana_model_dir
# Submit views assume there is a "next" IETF to look for cutoff dates against
MeetingFactory(type_id='ietf', date=datetime.date.today()+datetime.timedelta(days=180))
def tearDown(self):
shutil.rmtree(self.staging_dir)
shutil.rmtree(self.repository_dir)
@ -195,7 +199,10 @@ class SubmitTests(TestCase):
def submit_new_wg(self, formats):
# submit new -> supply submitter info -> approve
draft = make_test_data()
GroupFactory(type_id='wg',acronym='ames')
mars = GroupFactory(type_id='wg', acronym='mars')
RoleFactory(name_id='chair', group=mars, person__user__username='marschairman')
draft = WgDraftFactory(group=mars)
setup_default_community_list_for_group(draft.group)
# prepare draft to suggest replace
@ -314,13 +321,19 @@ class SubmitTests(TestCase):
def submit_existing(self, formats, change_authors=True, group_type='wg', stream_type='ietf'):
# submit new revision of existing -> supply submitter info -> prev authors confirm
draft = make_test_data()
if not group_type=='wg':
draft.group.type_id=group_type
draft.group.save()
if not stream_type=='ietf':
draft.stream_id=stream_type
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="added_comment", by=Person.objects.get(user__username="secretary"), desc="Test")])
# The tests expect the draft to always have an ad, but that doesn't match what happens for most streams
ad = Person.objects.get(user__username='ad')
if group_type == 'area':
group = GroupFactory(type_id='area', acronym='mars')
RoleFactory(name_id='ad', group=group, person=ad)
else:
area = GroupFactory(type_id='area')
RoleFactory(name_id='ad',group=area,person=ad)
group = GroupFactory(type_id=group_type, parent=area, acronym='mars')
draft = DocumentFactory(type_id='draft', group=group, stream_id=stream_type, ad=ad, authors=PersonFactory.create_batch(1))
if stream_type == 'ietf':
draft.set_state(State.objects.get(type_id='draft-stream-ietf',slug='wg-doc'))
prev_author = draft.documentauthor_set.all()[0]
if change_authors:
# Make it such that one of the previous authors has an invalid email address
@ -503,7 +516,6 @@ class SubmitTests(TestCase):
def submit_new_individual(self, formats):
# submit new -> supply submitter info -> confirm
draft = make_test_data()
name = "draft-authorname-testing-tests"
rev = "00"
@ -558,9 +570,10 @@ class SubmitTests(TestCase):
self.submit_new_individual(["txt", "xml"])
def test_submit_update_individual(self):
draft = make_test_data()
draft.group = None
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="added_comment", by=Person.objects.get(user__username="secretary"), desc="Test")])
IndividualDraftFactory(name='draft-ietf-random-thing', states=[('draft','rfc')], other_aliases=['rfc9999',], pages=5)
ad=Person.objects.get(user__username='ad')
# Group of None here does not reflect real individual submissions
draft = IndividualDraftFactory(group=None, ad = ad, authors=[ad,], notify='aliens@example.mars', pages=5)
replaces_count = draft.relateddocument_set.filter(relationship_id='replaces').count()
name = draft.name
rev = '%02d'%(int(draft.rev)+1)
@ -600,9 +613,9 @@ class SubmitTests(TestCase):
self.assertIn(draft.title, unicontent(r))
def test_submit_cancel_confirmation(self):
draft = make_test_data()
draft.group = None
draft.save_with_history([DocEvent.objects.create(doc=draft, rev=draft.rev, type="added_comment", by=Person.objects.get(user__username="secretary"), desc="Test")])
ad=Person.objects.get(user__username='ad')
# Group of None here does not reflect real individual submissions
draft = IndividualDraftFactory(group=None, ad = ad, authors=[ad,], notify='aliens@example.mars', pages=5)
name = draft.name
old_rev = draft.rev
rev = '%02d'%(int(draft.rev)+1)
@ -622,8 +635,6 @@ class SubmitTests(TestCase):
self.assertEqual(draft.rev, old_rev)
def test_submit_new_wg_with_dash(self):
make_test_data()
group = Group.objects.create(acronym="mars-special", name="Mars Special", type_id="wg", state_id="active")
name = "draft-ietf-%s-testing-tests" % group.acronym
@ -633,8 +644,6 @@ class SubmitTests(TestCase):
self.assertEqual(Submission.objects.get(name=name).group.acronym, group.acronym)
def test_submit_new_irtf(self):
make_test_data()
group = Group.objects.create(acronym="saturnrg", name="Saturn", type_id="rg", state_id="active")
name = "draft-irtf-%s-testing-tests" % group.acronym
@ -645,8 +654,6 @@ class SubmitTests(TestCase):
self.assertEqual(Submission.objects.get(name=name).group.type_id, group.type_id)
def test_submit_new_iab(self):
make_test_data()
name = "draft-iab-testing-tests"
self.do_submission(name, "00")
@ -655,7 +662,7 @@ class SubmitTests(TestCase):
def test_cancel_submission(self):
# submit -> cancel
make_test_data()
GroupFactory(acronym='mars')
name = "draft-ietf-mars-testing-tests"
rev = "00"
@ -677,7 +684,7 @@ class SubmitTests(TestCase):
def test_edit_submission_and_force_post(self):
# submit -> edit
draft = make_test_data()
draft = WgDraftFactory(group__acronym='mars')
name = "draft-ietf-mars-testing-tests"
rev = "00"
@ -773,7 +780,7 @@ class SubmitTests(TestCase):
def test_search_for_submission_and_edit_as_secretariat(self):
# submit -> edit
make_test_data()
GroupFactory(acronym='mars')
name = "draft-ietf-mars-testing-tests"
rev = "00"
@ -823,7 +830,7 @@ class SubmitTests(TestCase):
def test_request_full_url(self):
# submit -> request full URL to be sent
make_test_data()
GroupFactory(acronym='mars')
name = "draft-ietf-mars-testing-tests"
rev = "00"
@ -855,8 +862,7 @@ class SubmitTests(TestCase):
# who gets the management url behaves as expected
def test_submit_all_file_types(self):
make_test_data()
GroupFactory(acronym='mars')
name = "draft-ietf-mars-testing-tests"
rev = "00"
group = "mars"
@ -910,14 +916,12 @@ class SubmitTests(TestCase):
self.assertEquals(r.status_code, 200)
def test_blackout_access(self):
make_test_data()
# get
url = urlreverse('ietf.submit.views.upload_submission')
# set meeting to today so we're in blackout period
# Put today in the blackout period
meeting = Meeting.get_current_meeting()
meeting.date = datetime.datetime.utcnow()
meeting.save()
meeting.importantdate_set.create(name_id='idcutoff',date=datetime.date.today()-datetime.timedelta(days=2))
# regular user, no access
r = self.client.get(url)
@ -933,9 +937,6 @@ class SubmitTests(TestCase):
self.assertEqual(len(q('input[type=file][name=txt]')), 1)
def submit_bad_file(self, name, formats):
make_test_data()
rev = ""
group = None
@ -988,8 +989,6 @@ class SubmitTests(TestCase):
self.assertIn('Expected an PS file of type "application/postscript"', m)
def test_submit_nonascii_name(self):
make_test_data()
name = "draft-authorname-testing-nonascii"
rev = "00"
group = None
@ -1018,8 +1017,6 @@ class SubmitTests(TestCase):
self.assertIn('The idnits check returned 1 warning', m)
def test_submit_invalid_yang(self):
make_test_data()
name = "draft-yang-testing-invalid"
rev = "00"
group = None
@ -1054,8 +1051,7 @@ class SubmitTests(TestCase):
class ApprovalsTestCase(TestCase):
def test_approvals(self):
make_test_data()
RoleFactory(name_id='chair', group__acronym='mars', person__user__username='marschairman')
url = urlreverse('ietf.submit.views.approvals')
self.client.login(username="marschairman", password="marschairman+password")
@ -1085,7 +1081,7 @@ class ApprovalsTestCase(TestCase):
self.assertEqual(len(q('.recently-approved a:contains("draft-ietf-mars-foo")')), 1)
def test_add_preapproval(self):
make_test_data()
RoleFactory(name_id='chair', group__acronym='mars', person__user__username='marschairman')
url = urlreverse('ietf.submit.views.add_preapproval')
login_testing_unauthorized(self, "marschairman", url)
@ -1110,7 +1106,7 @@ class ApprovalsTestCase(TestCase):
self.assertEqual(len(Preapproval.objects.filter(name=name)), 1)
def test_cancel_preapproval(self):
make_test_data()
RoleFactory(name_id='chair', group__acronym='mars', person__user__username='marschairman')
preapproval = Preapproval.objects.create(name="draft-ietf-mars-foo", by=Person.objects.get(user__username="marschairman"))
@ -1131,7 +1127,7 @@ class ApprovalsTestCase(TestCase):
class ManualPostsTestCase(TestCase):
def test_manual_posts(self):
make_test_data()
GroupFactory(acronym='mars')
url = urlreverse('ietf.submit.views.manualpost')
# Secretariat has access

View file

@ -8,19 +8,20 @@ import shutil
from django.conf import settings
from django.urls import reverse as urlreverse
from ietf.doc.factories import WgDraftFactory
from ietf.doc.models import Document, DocAlias, DocEvent, DeletedEvent, DocTagName, RelatedDocument, State, StateDocEvent
from ietf.doc.utils import add_state_change_event
from ietf.group.factories import GroupFactory
from ietf.person.models import Person
from ietf.sync import iana, rfceditor
from ietf.utils.mail import outbox, empty_outbox
from ietf.utils.test_data import make_test_data
from ietf.utils.test_utils import login_testing_unauthorized, unicontent
from ietf.utils.test_utils import TestCase
class IANASyncTests(TestCase):
def test_protocol_page_sync(self):
draft = make_test_data()
draft = WgDraftFactory()
DocAlias.objects.create(name="rfc1234", document=draft)
DocEvent.objects.create(doc=draft, rev=draft.rev, type="published_rfc", by=Person.objects.get(name="(System)"))
@ -36,7 +37,7 @@ class IANASyncTests(TestCase):
self.assertEqual(DocEvent.objects.filter(doc=draft, type="rfc_in_iana_registry").count(), 1)
def test_changes_sync(self):
draft = make_test_data()
draft = WgDraftFactory(ad=Person.objects.get(user__username='ad'))
data = json.dumps({
"changes": [
@ -91,7 +92,7 @@ class IANASyncTests(TestCase):
self.assertEqual(len(warnings), 0)
def test_changes_sync_errors(self):
draft = make_test_data()
draft = WgDraftFactory()
# missing "type"
data = json.dumps({
@ -131,7 +132,7 @@ class IANASyncTests(TestCase):
self.assertEqual(len(warnings), 1)
def test_iana_review_mail(self):
draft = make_test_data()
draft = WgDraftFactory()
subject_template = u'Subject: [IANA #12345] Last Call: <%(draft)s-%(rev)s.txt> (Long text) to Informational RFC'
msg_template = u"""From: "%(person)s via RT" <drafts-lastcall@iana.org>
@ -227,11 +228,10 @@ class RFCSyncTests(TestCase):
f.write("a" * size)
def test_rfc_index(self):
doc = make_test_data()
doc.set_state(State.objects.get(used=True, type="draft-iesg", slug="rfcqueue"))
# it's a bit strange to have this set when draft-iesg is set
area = GroupFactory(type_id='area')
doc = WgDraftFactory(group__parent=area,states=[('draft-iesg','rfcqueue'),('draft-stream-ise','rfc-edit')])
# it's a bit strange to have draft-stream-ise set when draft-iesg is set
# too, but for testing purposes ...
doc.set_state(State.objects.get(used=True, type="draft-stream-ise", slug="rfc-edit"))
updated_doc = Document.objects.create(name="draft-ietf-something")
DocAlias.objects.create(name=updated_doc.name, document=updated_doc)
@ -358,9 +358,7 @@ class RFCSyncTests(TestCase):
def test_rfc_queue(self):
draft = make_test_data()
draft.set_state(State.objects.get(used=True, type="draft-iesg", slug="ann"))
draft = WgDraftFactory(states=[('draft-iesg','ann')])
t = '''<rfc-editor-queue xmlns="http://www.rfc-editor.org/rfc-editor-queue">
<section name="IETF STREAM: WORKING GROUP STANDARDS TRACK">
@ -423,7 +421,6 @@ class RFCSyncTests(TestCase):
class DiscrepanciesTests(TestCase):
def test_discrepancies(self):
make_test_data()
# draft approved but no RFC Editor state
doc = Document.objects.create(name="draft-ietf-test1", type_id="draft")
@ -462,7 +459,7 @@ class DiscrepanciesTests(TestCase):
class RFCEditorUndoTests(TestCase):
def test_rfceditor_undo(self):
draft = make_test_data()
draft = WgDraftFactory()
e1 = add_state_change_event(draft, Person.objects.get(name="(System)"), None,
State.objects.get(used=True, type="draft-rfceditor", slug="auth"))

View file

@ -26,12 +26,12 @@ from django.urls import reverse as urlreverse
import debug # pyflakes:ignore
from ietf.group.factories import GroupFactory
from ietf.group.models import Group
from ietf.submit.tests import submission_file
from ietf.utils.draft import Draft, getmeta
from ietf.utils.mail import send_mail_preformatted, send_mail_text, send_mail_mime, outbox
from ietf.utils.management.commands import pyflakes
from ietf.utils.test_data import make_test_data
from ietf.utils.test_runner import get_template_paths, set_coverage_checking
from ietf.utils.test_utils import TestCase
@ -299,7 +299,8 @@ class TestWikiGlueManagementCommand(TestCase):
shutil.rmtree(os.path.dirname(self.svn_dir_pattern))
def test_wiki_create_output(self):
make_test_data()
for type in ['wg','rg','ag','area']:
GroupFactory(type_id=type)
groups = Group.objects.filter(
type__slug__in=['wg','rg','ag','area'],
state__slug='active'

Binary file not shown.