Merged in [19555] from jennifer@painless-security.com:

Use temporary directories instead of 'real' filesystem for tests. Fixes #3414.
 - Legacy-Id: 19561
Note: SVN reference [19555] has been migrated to Git commit 81d9234d54
This commit is contained in:
Robert Sparks 2021-11-08 18:16:56 +00:00
commit 5c28a85cf1
35 changed files with 278 additions and 419 deletions

View file

@ -5,7 +5,6 @@
import json import json
import html import html
import os import os
import shutil
import sys import sys
from importlib import import_module from importlib import import_module
@ -38,14 +37,7 @@ OMITTED_APPS = (
) )
class CustomApiTests(TestCase): class CustomApiTests(TestCase):
def setUp(self): settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['AGENDA_PATH']
self.agenda_path = self.tempdir('materials')
self.saved_agenda_path = settings.AGENDA_PATH
settings.AGENDA_PATH = self.agenda_path
def tearDown(self):
shutil.rmtree(self.agenda_path)
settings.AGENDA_PATH = self.saved_agenda_path
# Using mock to patch the import functions in ietf.meeting.views, where # Using mock to patch the import functions in ietf.meeting.views, where
# api_import_recordings() are using them: # api_import_recordings() are using them:

View file

@ -3,7 +3,6 @@
import os import os
import shutil
import datetime import datetime
import io import io
import lxml import lxml
@ -13,6 +12,7 @@ import json
import copy import copy
from http.cookies import SimpleCookie from http.cookies import SimpleCookie
from pathlib import Path
from pyquery import PyQuery from pyquery import PyQuery
from urllib.parse import urlparse, parse_qs from urllib.parse import urlparse, parse_qs
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
@ -523,19 +523,10 @@ Man Expires September 22, 2015 [Page 3]
""" """
def setUp(self): def setUp(self):
self.id_dir = self.tempdir('id') super().setUp()
self.saved_internet_draft_path = settings.INTERNET_DRAFT_PATH for dir in [settings.INTERNET_ALL_DRAFTS_ARCHIVE_DIR, settings.INTERNET_DRAFT_PATH]:
settings.INTERNET_DRAFT_PATH = self.id_dir with (Path(dir) / 'draft-ietf-mars-test-01.txt').open('w') as f:
self.saved_internet_all_drafts_archive_dir = settings.INTERNET_ALL_DRAFTS_ARCHIVE_DIR f.write(self.draft_text)
settings.INTERNET_ALL_DRAFTS_ARCHIVE_DIR = self.id_dir
f = io.open(os.path.join(self.id_dir, 'draft-ietf-mars-test-01.txt'), 'w')
f.write(self.draft_text)
f.close()
def tearDown(self):
settings.INTERNET_ALL_DRAFTS_ARCHIVE_DIR = self.saved_internet_all_drafts_archive_dir
settings.INTERNET_DRAFT_PATH = self.saved_internet_draft_path
shutil.rmtree(self.id_dir)
def test_document_draft(self): def test_document_draft(self):
draft = WgDraftFactory(name='draft-ietf-mars-test',rev='01') draft = WgDraftFactory(name='draft-ietf-mars-test',rev='01')
@ -694,6 +685,7 @@ Man Expires September 22, 2015 [Page 3]
self.assertEqual(r.status_code, 200) self.assertEqual(r.status_code, 200)
rfc = WgRfcFactory() rfc = WgRfcFactory()
(Path(settings.RFC_PATH) / rfc.get_base_name()).touch()
r = self.client.get(urlreverse("ietf.doc.views_doc.document_html", kwargs=dict(name=rfc.canonical_name()))) r = self.client.get(urlreverse("ietf.doc.views_doc.document_html", kwargs=dict(name=rfc.canonical_name())))
self.assertEqual(r.status_code, 200) self.assertEqual(r.status_code, 200)
r = self.client.get(urlreverse("ietf.doc.views_doc.document_html", kwargs=dict(name=rfc.rfc_number()))) r = self.client.get(urlreverse("ietf.doc.views_doc.document_html", kwargs=dict(name=rfc.rfc_number())))
@ -1895,6 +1887,7 @@ class ReferencesTest(TestCase):
class GenerateDraftAliasesTests(TestCase): class GenerateDraftAliasesTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.doc_aliases_file = NamedTemporaryFile(delete=False, mode='w+') self.doc_aliases_file = NamedTemporaryFile(delete=False, mode='w+')
self.doc_aliases_file.close() self.doc_aliases_file.close()
self.doc_virtual_file = NamedTemporaryFile(delete=False, mode='w+') self.doc_virtual_file = NamedTemporaryFile(delete=False, mode='w+')
@ -1909,6 +1902,7 @@ class GenerateDraftAliasesTests(TestCase):
settings.DRAFT_VIRTUAL_PATH = self.saved_draft_virtual_path settings.DRAFT_VIRTUAL_PATH = self.saved_draft_virtual_path
os.unlink(self.doc_aliases_file.name) os.unlink(self.doc_aliases_file.name)
os.unlink(self.doc_virtual_file.name) os.unlink(self.doc_virtual_file.name)
super().tearDown()
def testManagementCommand(self): def testManagementCommand(self):
a_month_ago = datetime.datetime.now() - datetime.timedelta(30) a_month_ago = datetime.datetime.now() - datetime.timedelta(30)
@ -2013,6 +2007,7 @@ class GenerateDraftAliasesTests(TestCase):
class EmailAliasesTests(TestCase): class EmailAliasesTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
WgDraftFactory(name='draft-ietf-mars-test',group__acronym='mars') WgDraftFactory(name='draft-ietf-mars-test',group__acronym='mars')
WgDraftFactory(name='draft-ietf-ames-test',group__acronym='ames') WgDraftFactory(name='draft-ietf-ames-test',group__acronym='ames')
RoleFactory(group__type_id='review', group__acronym='yangdoctors', name_id='secr') RoleFactory(group__type_id='review', group__acronym='yangdoctors', name_id='secr')
@ -2044,6 +2039,7 @@ expand-draft-ietf-ames-test.all@virtual.ietf.org ames-author@example.ames, ames
def tearDown(self): def tearDown(self):
settings.DRAFT_VIRTUAL_PATH = self.saved_draft_virtual_path settings.DRAFT_VIRTUAL_PATH = self.saved_draft_virtual_path
os.unlink(self.doc_alias_file.name) os.unlink(self.doc_alias_file.name)
super().tearDown()
def testAliases(self): def testAliases(self):
PersonFactory(user__username='plain') PersonFactory(user__username='plain')
@ -2068,6 +2064,7 @@ expand-draft-ietf-ames-test.all@virtual.ietf.org ames-author@example.ames, ames
class DocumentMeetingTests(TestCase): class DocumentMeetingTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.group = GroupFactory(type_id='wg',state_id='active') self.group = GroupFactory(type_id='wg',state_id='active')
self.group_chair = PersonFactory() self.group_chair = PersonFactory()
self.group.role_set.create(name_id='chair',person=self.group_chair,email=self.group_chair.email()) self.group.role_set.create(name_id='chair',person=self.group_chair,email=self.group_chair.email())
@ -2384,17 +2381,15 @@ class FieldTests(TestCase):
) )
class MaterialsTests(TestCase): class MaterialsTests(TestCase):
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['AGENDA_PATH']
def setUp(self): def setUp(self):
self.id_dir = self.tempdir('id') super().setUp()
self.saved_agenda_path = settings.AGENDA_PATH
settings.AGENDA_PATH = self.id_dir
meeting_number='111' meeting_number='111'
meeting_dir = os.path.join(f'{settings.AGENDA_PATH}',f'{meeting_number}') meeting_dir = Path(settings.AGENDA_PATH) / meeting_number
os.mkdir(meeting_dir) meeting_dir.mkdir()
agenda_dir = os.path.join(meeting_dir,'agenda') agenda_dir = meeting_dir / 'agenda'
os.mkdir(agenda_dir) agenda_dir.mkdir()
group_acronym='bogons' group_acronym='bogons'
@ -2402,35 +2397,26 @@ class MaterialsTests(TestCase):
# * build the DocumentHistory correctly # * build the DocumentHistory correctly
# * maybe do something by default with uploaded_filename # * maybe do something by default with uploaded_filename
# and there should be a more usable unit to save bits to disk (handle_file_upload isn't quite right) that tests can leverage # and there should be a more usable unit to save bits to disk (handle_file_upload isn't quite right) that tests can leverage
try: uploaded_filename_00 = f'agenda-{meeting_number}-{group_acronym}-00.txt'
uploaded_filename_00 = f'agenda-{meeting_number}-{group_acronym}-00.txt' uploaded_filename_01 = f'agenda-{meeting_number}-{group_acronym}-01.md'
uploaded_filename_01 = f'agenda-{meeting_number}-{group_acronym}-01.md' f = io.open(os.path.join(agenda_dir, uploaded_filename_00), 'w')
f = io.open(os.path.join(agenda_dir, uploaded_filename_00), 'w') f.write('This is some unremarkable text')
f.write('This is some unremarkable text') f.close()
f.close() f = io.open(os.path.join(agenda_dir, uploaded_filename_01), 'w')
f = io.open(os.path.join(agenda_dir, uploaded_filename_01), 'w') f.write('This links to [an unusual place](https://unusual.example).')
f.write('This links to [an unusual place](https://unusual.example).') f.close()
f.close()
self.doc = DocumentFactory(type_id='agenda',rev='00',group__acronym=group_acronym, newrevisiondocevent=None, name=f'agenda-{meeting_number}-{group_acronym}', uploaded_filename=uploaded_filename_00) self.doc = DocumentFactory(type_id='agenda',rev='00',group__acronym=group_acronym, newrevisiondocevent=None, name=f'agenda-{meeting_number}-{group_acronym}', uploaded_filename=uploaded_filename_00)
e = NewRevisionDocEventFactory(doc=self.doc,rev='00') e = NewRevisionDocEventFactory(doc=self.doc,rev='00')
self.doc.save_with_history([e]) self.doc.save_with_history([e])
self.doc.rev = '01' self.doc.rev = '01'
self.doc.uploaded_filename = uploaded_filename_01 self.doc.uploaded_filename = uploaded_filename_01
e = NewRevisionDocEventFactory(doc=self.doc, rev='01') e = NewRevisionDocEventFactory(doc=self.doc, rev='01')
self.doc.save_with_history([e]) self.doc.save_with_history([e])
# This is necessary for the view to be able to find the document # This is necessary for the view to be able to find the document
# which hints that the view has an issue : if a materials document is taken out of all SessionPresentations, it is no longer accessable by this view # which hints that the view has an issue : if a materials document is taken out of all SessionPresentations, it is no longer accessable by this view
SessionPresentationFactory(session__meeting__number=meeting_number, session__group=self.doc.group, document=self.doc) SessionPresentationFactory(session__meeting__number=meeting_number, session__group=self.doc.group, document=self.doc)
except:
shutil.rmtree(self.id_dir)
raise
def tearDown(self):
settings.AGENDA_PATH = self.saved_agenda_path
shutil.rmtree(self.id_dir)
def test_markdown_and_text(self): def test_markdown_and_text(self):
url = urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=self.doc.name,rev='00')) url = urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=self.doc.name,rev='00'))
@ -2446,15 +2432,7 @@ class MaterialsTests(TestCase):
self.assertEqual(q('#materials-content .panel-body a').attr['href'],'https://unusual.example') self.assertEqual(q('#materials-content .panel-body a').attr['href'],'https://unusual.example')
class Idnits2SupportTests(TestCase): class Idnits2SupportTests(TestCase):
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['DERIVED_DIR']
def setUp(self):
self.derived_dir = self.tempdir('derived')
self.saved_derived_dir = settings.DERIVED_DIR
settings.DERIVED_DIR = self.derived_dir
def tearDown(self):
settings.DERIVED_DIR = self.saved_derived_dir
shutil.rmtree(self.derived_dir)
def test_obsoleted(self): def test_obsoleted(self):
rfc = WgRfcFactory(alias2__name='rfc1001') rfc = WgRfcFactory(alias2__name='rfc1001')
@ -2506,6 +2484,7 @@ class Idnits2SupportTests(TestCase):
class RfcdiffSupportTests(TestCase): class RfcdiffSupportTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.target_view = 'ietf.doc.views_doc.rfcdiff_latest_json' self.target_view = 'ietf.doc.views_doc.rfcdiff_latest_json'
def getJson(self, view_args): def getJson(self, view_args):

View file

@ -1056,6 +1056,7 @@ class DeferUndeferTestCase(TestCase):
# when charters support being deferred, be sure to test them here # when charters support being deferred, be sure to test them here
def setUp(self): def setUp(self):
super().setUp()
IndividualDraftFactory(name='draft-ietf-mars-test',states=[('draft','active'),('draft-iesg','iesg-eva')], IndividualDraftFactory(name='draft-ietf-mars-test',states=[('draft','active'),('draft-iesg','iesg-eva')],
ad=Person.objects.get(user__username='ad')) ad=Person.objects.get(user__username='ad'))
DocumentFactory(type_id='statchg',name='status-change-imaginary-mid-review',states=[('statchg','iesgeval')]) DocumentFactory(type_id='statchg',name='status-change-imaginary-mid-review',states=[('statchg','iesgeval')])

View file

@ -2,10 +2,9 @@
import datetime import datetime
import debug # pyflakes:ignore import debug # pyflakes:ignore
import io
import os import os
import shutil
from pathlib import Path
from pyquery import PyQuery from pyquery import PyQuery
from random import randint from random import randint
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
@ -24,19 +23,11 @@ from ietf.utils.test_utils import TestCase, reload_db_objects, unicontent, login
class BofreqTests(TestCase): class BofreqTests(TestCase):
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['BOFREQ_PATH']
def setUp(self):
self.bofreq_dir = self.tempdir('bofreq')
self.saved_bofreq_path = settings.BOFREQ_PATH
settings.BOFREQ_PATH = self.bofreq_dir
def tearDown(self):
settings.BOFREQ_PATH = self.saved_bofreq_path
shutil.rmtree(self.bofreq_dir)
def write_bofreq_file(self, bofreq): def write_bofreq_file(self, bofreq):
fname = os.path.join(self.bofreq_dir, "%s-%s.md" % (bofreq.canonical_name(), bofreq.rev)) fname = Path(settings.BOFREQ_PATH) / ("%s-%s.md" % (bofreq.canonical_name(), bofreq.rev))
with io.open(fname, "w") as f: with fname.open("w") as f:
f.write(f"""# This is a test bofreq. f.write(f"""# This is a test bofreq.
Version: {bofreq.rev} Version: {bofreq.rev}

View file

@ -4,9 +4,8 @@
import datetime import datetime
import io import io
import os
import shutil
from pathlib import Path
from pyquery import PyQuery from pyquery import PyQuery
from django.conf import settings from django.conf import settings
@ -84,17 +83,12 @@ class ViewCharterTests(TestCase):
class EditCharterTests(TestCase): class EditCharterTests(TestCase):
def setUp(self): settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['CHARTER_PATH']
self.charter_dir = self.tempdir('charter')
self.saved_charter_path = settings.CHARTER_PATH
settings.CHARTER_PATH = self.charter_dir
def tearDown(self):
settings.CHARTER_PATH = self.saved_charter_path
shutil.rmtree(self.charter_dir)
def write_charter_file(self, charter): def write_charter_file(self, charter):
with io.open(os.path.join(self.charter_dir, "%s-%s.txt" % (charter.canonical_name(), charter.rev)), "w") as f: with (Path(settings.CHARTER_PATH) /
("%s-%s.txt" % (charter.canonical_name(), charter.rev))
).open("w") as f:
f.write("This is a charter.") f.write("This is a charter.")
def test_startstop_process(self): def test_startstop_process(self):
@ -513,7 +507,7 @@ class EditCharterTests(TestCase):
self.assertEqual(charter.rev, next_revision(prev_rev)) self.assertEqual(charter.rev, next_revision(prev_rev))
self.assertTrue("new_revision" in charter.latest_event().type) self.assertTrue("new_revision" in charter.latest_event().type)
with io.open(os.path.join(self.charter_dir, charter.canonical_name() + "-" + charter.rev + ".txt"), encoding='utf-8') as f: with (Path(settings.CHARTER_PATH) / (charter.canonical_name() + "-" + charter.rev + ".txt")).open(encoding='utf-8') as f:
self.assertEqual(f.read(), "Windows line\nMac line\nUnix line\n" + utf_8_snippet.decode('utf-8')) self.assertEqual(f.read(), "Windows line\nMac line\nUnix line\n" + utf_8_snippet.decode('utf-8'))
def test_submit_initial_charter(self): def test_submit_initial_charter(self):
@ -792,7 +786,9 @@ class EditCharterTests(TestCase):
self.assertTrue(not charter.ballot_open("approve")) self.assertTrue(not charter.ballot_open("approve"))
self.assertEqual(charter.rev, "01") self.assertEqual(charter.rev, "01")
self.assertTrue(os.path.exists(os.path.join(self.charter_dir, "charter-ietf-%s-%s.txt" % (group.acronym, charter.rev)))) self.assertTrue(
(Path(settings.CHARTER_PATH) / ("charter-ietf-%s-%s.txt" % (group.acronym, charter.rev))).exists()
)
self.assertEqual(len(outbox), 2) self.assertEqual(len(outbox), 2)
# #

View file

@ -4,7 +4,6 @@
import io import io
import os import os
import shutil
from pyquery import PyQuery from pyquery import PyQuery
from textwrap import wrap from textwrap import wrap
@ -367,11 +366,13 @@ class ConflictReviewTests(TestCase):
self.assertEqual(len(outbox), 0) self.assertEqual(len(outbox), 0)
def setUp(self): def setUp(self):
super().setUp()
IndividualDraftFactory(name='draft-imaginary-independent-submission') IndividualDraftFactory(name='draft-imaginary-independent-submission')
ConflictReviewFactory(name='conflict-review-imaginary-irtf-submission',review_of=IndividualDraftFactory(name='draft-imaginary-irtf-submission',stream_id='irtf'),notify='notifyme@example.net') ConflictReviewFactory(name='conflict-review-imaginary-irtf-submission',review_of=IndividualDraftFactory(name='draft-imaginary-irtf-submission',stream_id='irtf'),notify='notifyme@example.net')
class ConflictReviewSubmitTests(TestCase): class ConflictReviewSubmitTests(TestCase):
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['CONFLICT_REVIEW_PATH']
def test_initial_submission(self): def test_initial_submission(self):
doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')
url = urlreverse('ietf.doc.views_conflict_review.submit',kwargs=dict(name=doc.name)) url = urlreverse('ietf.doc.views_conflict_review.submit',kwargs=dict(name=doc.name))
@ -447,11 +448,5 @@ class ConflictReviewSubmitTests(TestCase):
self.assertTrue(q('textarea')[0].text.strip().startswith("[Edit this page")) self.assertTrue(q('textarea')[0].text.strip().startswith("[Edit this page"))
def setUp(self): def setUp(self):
super().setUp()
ConflictReviewFactory(name='conflict-review-imaginary-irtf-submission',review_of=IndividualDraftFactory(name='draft-imaginary-irtf-submission',stream_id='irtf'),notify='notifyme@example.net') ConflictReviewFactory(name='conflict-review-imaginary-irtf-submission',review_of=IndividualDraftFactory(name='draft-imaginary-irtf-submission',stream_id='irtf'),notify='notifyme@example.net')
self.test_dir = self.tempdir('conflict-review')
self.saved_conflict_review_path = settings.CONFLICT_REVIEW_PATH
settings.CONFLICT_REVIEW_PATH = self.test_dir
def tearDown(self):
settings.CONFLICT_REVIEW_PATH = self.saved_conflict_review_path
shutil.rmtree(self.test_dir)

View file

@ -16,6 +16,7 @@ from ietf.utils.test_utils import login_testing_unauthorized
class Downref(TestCase): class Downref(TestCase):
def setUp(self): def setUp(self):
super().setUp()
PersonFactory(name='Plain Man',user__username='plain') PersonFactory(name='Plain Man',user__username='plain')
self.draft = WgDraftFactory(name='draft-ietf-mars-test') self.draft = WgDraftFactory(name='draft-ietf-mars-test')
self.draftalias = self.draft.docalias.get(name='draft-ietf-mars-test') self.draftalias = self.draft.docalias.get(name='draft-ietf-mars-test')

View file

@ -3,12 +3,12 @@
import os import os
import shutil
import datetime import datetime
import io import io
import mock import mock
from collections import Counter from collections import Counter
from pathlib import Path
from pyquery import PyQuery from pyquery import PyQuery
from django.urls import reverse as urlreverse from django.urls import reverse as urlreverse
@ -547,27 +547,14 @@ class EditInfoTests(TestCase):
class DraftFileMixin(): class DraftFileMixin():
'''A mixin to setup temporary draft directories and files''' '''A mixin to setup temporary draft directories and files'''
def setUp(self): def setUp(self):
self.saved_id_dir = settings.INTERNET_DRAFT_PATH super().setUp()
self.saved_archive_dir = settings.INTERNET_DRAFT_ARCHIVE_DIR (Path(settings.INTERNET_DRAFT_ARCHIVE_DIR) / "unknown_ids").mkdir()
self.id_dir = self.tempdir('id') (Path(settings.INTERNET_DRAFT_ARCHIVE_DIR) / "deleted_tombstones").mkdir()
self.archive_dir = self.tempdir('id-archive') (Path(settings.INTERNET_DRAFT_ARCHIVE_DIR) / "expired_without_tombstone").mkdir()
os.mkdir(os.path.join(self.archive_dir, "unknown_ids"))
os.mkdir(os.path.join(self.archive_dir, "deleted_tombstones"))
os.mkdir(os.path.join(self.archive_dir, "expired_without_tombstone"))
settings.INTERNET_DRAFT_PATH = self.id_dir
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.archive_dir
def tearDown(self):
shutil.rmtree(self.id_dir)
shutil.rmtree(self.archive_dir)
settings.INTERNET_DRAFT_PATH = self.saved_id_dir
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.saved_archive_dir
def write_draft_file(self, name, size): def write_draft_file(self, name, size):
f = io.open(os.path.join(self.id_dir, name), 'w') with (Path(settings.INTERNET_DRAFT_PATH) / name).open('w') as f:
f.write("a" * size) f.write("a" * size)
f.close()
class ResurrectTests(DraftFileMixin, TestCase): class ResurrectTests(DraftFileMixin, TestCase):
@ -638,8 +625,8 @@ class ResurrectTests(DraftFileMixin, TestCase):
self.assertTrue('aread' in outbox[-1]['To']) self.assertTrue('aread' in outbox[-1]['To'])
# ensure file restored from archive directory # ensure file restored from archive directory
self.assertTrue(os.path.exists(os.path.join(self.id_dir, txt))) self.assertTrue(os.path.exists(os.path.join(settings.INTERNET_DRAFT_PATH, txt)))
self.assertTrue(not os.path.exists(os.path.join(self.archive_dir, txt))) self.assertTrue(not os.path.exists(os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, txt)))
class ExpireIDsTests(DraftFileMixin, TestCase): class ExpireIDsTests(DraftFileMixin, TestCase):
@ -749,8 +736,8 @@ class ExpireIDsTests(DraftFileMixin, TestCase):
self.assertTrue(draft.latest_event(type="expired_document")) self.assertTrue(draft.latest_event(type="expired_document"))
self.assertCountEqual(draft.action_holders.all(), []) self.assertCountEqual(draft.action_holders.all(), [])
self.assertIn('Removed all action holders', draft.latest_event(type='changed_action_holders').desc) self.assertIn('Removed all action holders', draft.latest_event(type='changed_action_holders').desc)
self.assertTrue(not os.path.exists(os.path.join(self.id_dir, txt))) self.assertTrue(not os.path.exists(os.path.join(settings.INTERNET_DRAFT_PATH, txt)))
self.assertTrue(os.path.exists(os.path.join(self.archive_dir, txt))) self.assertTrue(os.path.exists(os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, txt)))
draft.delete() draft.delete()
@ -772,8 +759,8 @@ class ExpireIDsTests(DraftFileMixin, TestCase):
clean_up_draft_files() clean_up_draft_files()
self.assertTrue(not os.path.exists(os.path.join(self.id_dir, unknown))) self.assertTrue(not os.path.exists(os.path.join(settings.INTERNET_DRAFT_PATH, unknown)))
self.assertTrue(os.path.exists(os.path.join(self.archive_dir, "unknown_ids", unknown))) self.assertTrue(os.path.exists(os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, "unknown_ids", unknown)))
# put file with malformed name (no revision) # put file with malformed name (no revision)
@ -782,8 +769,8 @@ class ExpireIDsTests(DraftFileMixin, TestCase):
clean_up_draft_files() clean_up_draft_files()
self.assertTrue(not os.path.exists(os.path.join(self.id_dir, malformed))) self.assertTrue(not os.path.exists(os.path.join(settings.INTERNET_DRAFT_PATH, malformed)))
self.assertTrue(os.path.exists(os.path.join(self.archive_dir, "unknown_ids", malformed))) self.assertTrue(os.path.exists(os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, "unknown_ids", malformed)))
# RFC draft # RFC draft
@ -796,11 +783,11 @@ class ExpireIDsTests(DraftFileMixin, TestCase):
clean_up_draft_files() clean_up_draft_files()
self.assertTrue(not os.path.exists(os.path.join(self.id_dir, txt))) self.assertTrue(not os.path.exists(os.path.join(settings.INTERNET_DRAFT_PATH, txt)))
self.assertTrue(os.path.exists(os.path.join(self.archive_dir, txt))) self.assertTrue(os.path.exists(os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, txt)))
self.assertTrue(not os.path.exists(os.path.join(self.id_dir, pdf))) self.assertTrue(not os.path.exists(os.path.join(settings.INTERNET_DRAFT_PATH, pdf)))
self.assertTrue(os.path.exists(os.path.join(self.archive_dir, pdf))) self.assertTrue(os.path.exists(os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, pdf)))
# expire draft # expire draft
draft.set_state(State.objects.get(used=True, type="draft", slug="expired")) draft.set_state(State.objects.get(used=True, type="draft", slug="expired"))
@ -817,8 +804,8 @@ class ExpireIDsTests(DraftFileMixin, TestCase):
clean_up_draft_files() clean_up_draft_files()
self.assertTrue(not os.path.exists(os.path.join(self.id_dir, txt))) self.assertTrue(not os.path.exists(os.path.join(settings.INTERNET_DRAFT_PATH, txt)))
self.assertTrue(os.path.exists(os.path.join(self.archive_dir, txt))) self.assertTrue(os.path.exists(os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, txt)))
class ExpireLastCallTests(TestCase): class ExpireLastCallTests(TestCase):
@ -898,6 +885,7 @@ class ExpireLastCallTests(TestCase):
class IndividualInfoFormsTests(TestCase): class IndividualInfoFormsTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
doc = WgDraftFactory(group__acronym='mars',shepherd=PersonFactory(user__username='plain',name='Plain Man').email_set.first()) doc = WgDraftFactory(group__acronym='mars',shepherd=PersonFactory(user__username='plain',name='Plain Man').email_set.first())
self.docname = doc.name self.docname = doc.name
@ -1373,6 +1361,7 @@ class IndividualInfoFormsTests(TestCase):
class SubmitToIesgTests(TestCase): class SubmitToIesgTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
role=RoleFactory(group__acronym='mars',name_id='chair',person=PersonFactory(user__username='marschairman')) role=RoleFactory(group__acronym='mars',name_id='chair',person=PersonFactory(user__username='marschairman'))
doc=WgDraftFactory( doc=WgDraftFactory(
name='draft-ietf-mars-test', name='draft-ietf-mars-test',
@ -1798,7 +1787,7 @@ class ChangeStreamStateTests(TestCase):
class ChangeReplacesTests(TestCase): class ChangeReplacesTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
role = RoleFactory(name_id='chair',group__acronym='mars',group__list_email='mars-wg@ietf.org',person__user__username='marschairman',person__name='WG Cháir Man') role = RoleFactory(name_id='chair',group__acronym='mars',group__list_email='mars-wg@ietf.org',person__user__username='marschairman',person__name='WG Cháir Man')
RoleFactory(name_id='delegate',group=role.group,person__user__email='marsdelegate@ietf.org') RoleFactory(name_id='delegate',group=role.group,person__user__email='marsdelegate@ietf.org')
#draft = WgDraftFactory(group=role.group) #draft = WgDraftFactory(group=role.group)

View file

@ -424,12 +424,14 @@ class BaseManipulationTests():
class IRTFChairTests(BaseManipulationTests, TestCase): class IRTFChairTests(BaseManipulationTests, TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.username = 'irtf-chair' self.username = 'irtf-chair'
self.balloter = '' self.balloter = ''
class SecretariatTests(BaseManipulationTests, TestCase): class SecretariatTests(BaseManipulationTests, TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.username = 'secretary' self.username = 'secretary'
self.balloter = '?balloter={}'.format(Person.objects.get(user__username='irtf-chair').pk) self.balloter = '?balloter={}'.format(Person.objects.get(user__username='irtf-chair').pk)
@ -437,6 +439,7 @@ class SecretariatTests(BaseManipulationTests, TestCase):
class IRSGMemberTests(TestCase): class IRSGMemberTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.username = get_active_irsg()[0].user.username self.username = get_active_irsg()[0].user.username
def test_cant_issue_irsg_ballot(self): def test_cant_issue_irsg_ballot(self):

View file

@ -7,6 +7,7 @@ import shutil
import datetime import datetime
import io import io
from pathlib import Path
from pyquery import PyQuery from pyquery import PyQuery
import debug # pyflakes:ignore import debug # pyflakes:ignore
@ -25,26 +26,24 @@ from ietf.utils.test_utils import TestCase, login_testing_unauthorized
class GroupMaterialTests(TestCase): class GroupMaterialTests(TestCase):
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['AGENDA_PATH']
def setUp(self): def setUp(self):
super().setUp()
self.materials_dir = self.tempdir("materials") self.materials_dir = self.tempdir("materials")
self.slides_dir = os.path.join(self.materials_dir, "slides") self.slides_dir = Path(self.materials_dir) / "slides"
if not os.path.exists(self.slides_dir): if not self.slides_dir.exists():
os.mkdir(self.slides_dir) self.slides_dir.mkdir()
self.saved_document_path_pattern = settings.DOCUMENT_PATH_PATTERN self.saved_document_path_pattern = settings.DOCUMENT_PATH_PATTERN
settings.DOCUMENT_PATH_PATTERN = self.materials_dir + "/{doc.type_id}/" settings.DOCUMENT_PATH_PATTERN = self.materials_dir + "/{doc.type_id}/"
self.agenda_dir = self.tempdir("agenda") self.meeting_slides_dir = Path(settings.AGENDA_PATH) / "42" / "slides"
self.meeting_slides_dir = os.path.join(self.agenda_dir, "42", "slides") if not self.meeting_slides_dir.exists():
if not os.path.exists(self.meeting_slides_dir): self.meeting_slides_dir.mkdir(parents=True)
os.makedirs(self.meeting_slides_dir)
self.saved_agenda_path = settings.AGENDA_PATH
settings.AGENDA_PATH = self.agenda_dir
def tearDown(self): def tearDown(self):
settings.DOCUMENT_PATH_PATTERN = self.saved_document_path_pattern settings.DOCUMENT_PATH_PATTERN = self.saved_document_path_pattern
shutil.rmtree(self.materials_dir) shutil.rmtree(self.materials_dir)
settings.AGENDA_PATH = self.saved_agenda_path super().tearDown()
shutil.rmtree(self.agenda_dir)
def create_slides(self): def create_slides(self):

View file

@ -41,6 +41,7 @@ from ietf.utils.text import strip_prefix, xslugify
class ReviewTests(TestCase): class ReviewTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.review_dir = self.tempdir('review') self.review_dir = self.tempdir('review')
self.old_document_path_pattern = settings.DOCUMENT_PATH_PATTERN self.old_document_path_pattern = settings.DOCUMENT_PATH_PATTERN
settings.DOCUMENT_PATH_PATTERN = self.review_dir + "/{doc.type_id}/" settings.DOCUMENT_PATH_PATTERN = self.review_dir + "/{doc.type_id}/"
@ -52,6 +53,7 @@ class ReviewTests(TestCase):
def tearDown(self): def tearDown(self):
shutil.rmtree(self.review_dir) shutil.rmtree(self.review_dir)
settings.DOCUMENT_PATH_PATTERN = self.old_document_path_pattern settings.DOCUMENT_PATH_PATTERN = self.old_document_path_pattern
super().tearDown()
def test_request_review(self): def test_request_review(self):
doc = WgDraftFactory(group__acronym='mars',rev='01') doc = WgDraftFactory(group__acronym='mars',rev='01')

View file

@ -4,7 +4,6 @@
import io import io
import os import os
import shutil
import debug # pyflakes:ignore import debug # pyflakes:ignore
@ -441,12 +440,14 @@ class StatusChangeTests(TestCase):
self.assertTrue(doc.latest_event(DocEvent,type="added_comment").desc.startswith('Affected RFC list changed.')) self.assertTrue(doc.latest_event(DocEvent,type="added_comment").desc.startswith('Affected RFC list changed.'))
def setUp(self): def setUp(self):
super().setUp()
IndividualRfcFactory(alias2__name='rfc14',name='draft-was-never-issued',std_level_id='unkn') IndividualRfcFactory(alias2__name='rfc14',name='draft-was-never-issued',std_level_id='unkn')
WgRfcFactory(alias2__name='rfc9999',name='draft-ietf-random-thing',std_level_id='ps') WgRfcFactory(alias2__name='rfc9999',name='draft-ietf-random-thing',std_level_id='ps')
WgRfcFactory(alias2__name='rfc9998',name='draft-ietf-random-other-thing',std_level_id='inf') WgRfcFactory(alias2__name='rfc9998',name='draft-ietf-random-other-thing',std_level_id='inf')
DocumentFactory(type_id='statchg',name='status-change-imaginary-mid-review',notify='notify@example.org') DocumentFactory(type_id='statchg',name='status-change-imaginary-mid-review',notify='notify@example.org')
class StatusChangeSubmitTests(TestCase): class StatusChangeSubmitTests(TestCase):
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['STATUS_CHANGE_PATH']
def test_initial_submission(self): def test_initial_submission(self):
doc = Document.objects.get(name='status-change-imaginary-mid-review') doc = Document.objects.get(name='status-change-imaginary-mid-review')
url = urlreverse('ietf.doc.views_status_change.submit',kwargs=dict(name=doc.name)) url = urlreverse('ietf.doc.views_status_change.submit',kwargs=dict(name=doc.name))
@ -532,11 +533,5 @@ class StatusChangeSubmitTests(TestCase):
self.assertContains(r, "This is the old proposal.") self.assertContains(r, "This is the old proposal.")
def setUp(self): def setUp(self):
super().setUp()
DocumentFactory(type_id='statchg',name='status-change-imaginary-mid-review',notify='notify@example.org') DocumentFactory(type_id='statchg',name='status-change-imaginary-mid-review',notify='notify@example.org')
self.test_dir = self.tempdir('status-change')
self.saved_status_change_path = settings.STATUS_CHANGE_PATH
settings.STATUS_CHANGE_PATH = self.test_dir
def tearDown(self):
settings.STATUS_CHANGE_PATH = self.saved_status_change_path
shutil.rmtree(self.test_dir)

View file

@ -17,6 +17,7 @@ class ActionHoldersTests(TestCase):
def setUp(self): def setUp(self):
"""Set up helper for the update_action_holders tests""" """Set up helper for the update_action_holders tests"""
super().setUp()
self.authors = PersonFactory.create_batch(3) self.authors = PersonFactory.create_batch(3)
self.ad = Person.objects.get(user__username='ad') self.ad = Person.objects.get(user__username='ad')
self.group = GroupFactory() self.group = GroupFactory()

View file

@ -76,6 +76,7 @@ class StreamTests(TestCase):
class GroupDocDependencyGraphTests(TestCase): class GroupDocDependencyGraphTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
set_coverage_checking(False) set_coverage_checking(False)
a = WgDraftFactory() a = WgDraftFactory()
b = WgDraftFactory() b = WgDraftFactory()
@ -83,6 +84,7 @@ class GroupDocDependencyGraphTests(TestCase):
def tearDown(self): def tearDown(self):
set_coverage_checking(True) set_coverage_checking(True)
super().tearDown()
def test_group_document_dependency_dotfile(self): def test_group_document_dependency_dotfile(self):
for group in Group.objects.filter(Q(type="wg") | Q(type="rg")): for group in Group.objects.filter(Q(type="wg") | Q(type="rg")):
@ -123,6 +125,7 @@ class GroupDocDependencyGraphTests(TestCase):
class GenerateGroupAliasesTests(TestCase): class GenerateGroupAliasesTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.doc_aliases_file = NamedTemporaryFile(delete=False, mode='w+') self.doc_aliases_file = NamedTemporaryFile(delete=False, mode='w+')
self.doc_aliases_file.close() self.doc_aliases_file.close()
self.doc_virtual_file = NamedTemporaryFile(delete=False, mode='w+') self.doc_virtual_file = NamedTemporaryFile(delete=False, mode='w+')
@ -137,6 +140,7 @@ class GenerateGroupAliasesTests(TestCase):
settings.GROUP_VIRTUAL_PATH = self.saved_draft_virtual_path settings.GROUP_VIRTUAL_PATH = self.saved_draft_virtual_path
os.unlink(self.doc_aliases_file.name) os.unlink(self.doc_aliases_file.name)
os.unlink(self.doc_virtual_file.name) os.unlink(self.doc_virtual_file.name)
super().tearDown()
def testManagementCommand(self): def testManagementCommand(self):
a_month_ago = datetime.datetime.now() - datetime.timedelta(30) a_month_ago = datetime.datetime.now() - datetime.timedelta(30)
@ -237,6 +241,7 @@ class GenerateGroupAliasesTests(TestCase):
class GroupRoleEmailTests(TestCase): class GroupRoleEmailTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
# make_immutable_base_data makes two areas, and puts a group in one of them # make_immutable_base_data makes two areas, and puts a group in one of them
# the tests below assume all areas have groups # the tests below assume all areas have groups
for area in Group.objects.filter(type_id='area'): for area in Group.objects.filter(type_id='area'):

View file

@ -3,12 +3,12 @@
import os import os
import shutil
import calendar import calendar
import datetime import datetime
import io import io
import bleach import bleach
from pathlib import Path
from pyquery import PyQuery from pyquery import PyQuery
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
@ -52,14 +52,7 @@ def pklist(docs):
return [ str(doc.pk) for doc in docs.all() ] return [ str(doc.pk) for doc in docs.all() ]
class GroupPagesTests(TestCase): class GroupPagesTests(TestCase):
def setUp(self): settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['CHARTER_PATH']
self.charter_dir = self.tempdir('charter')
self.saved_charter_path = settings.CHARTER_PATH
settings.CHARTER_PATH = self.charter_dir
def tearDown(self):
settings.CHARTER_PATH = self.saved_charter_path
shutil.rmtree(self.charter_dir)
def test_active_groups(self): def test_active_groups(self):
area = GroupFactory.create(type_id='area') area = GroupFactory.create(type_id='area')
@ -120,7 +113,7 @@ class GroupPagesTests(TestCase):
chair = Email.objects.filter(role__group=group, role__name="chair")[0] chair = Email.objects.filter(role__group=group, role__name="chair")[0]
with io.open(os.path.join(self.charter_dir, "%s-%s.txt" % (group.charter.canonical_name(), group.charter.rev)), "w") as f: with (Path(settings.CHARTER_PATH) / ("%s-%s.txt" % (group.charter.canonical_name(), group.charter.rev))).open("w") as f:
f.write("This is a charter.") f.write("This is a charter.")
url = urlreverse('ietf.group.views.wg_summary_area', kwargs=dict(group_type="wg")) url = urlreverse('ietf.group.views.wg_summary_area', kwargs=dict(group_type="wg"))
@ -252,7 +245,7 @@ class GroupPagesTests(TestCase):
group = CharterFactory().group group = CharterFactory().group
draft = WgDraftFactory(group=group) draft = WgDraftFactory(group=group)
with io.open(os.path.join(self.charter_dir, "%s-%s.txt" % (group.charter.canonical_name(), group.charter.rev)), "w") as f: with (Path(settings.CHARTER_PATH) / ("%s-%s.txt" % (group.charter.canonical_name(), group.charter.rev))).open("w") as f:
f.write("This is a charter.") f.write("This is a charter.")
milestone = GroupMilestone.objects.create( milestone = GroupMilestone.objects.create(
@ -465,14 +458,7 @@ class GroupPagesTests(TestCase):
class GroupEditTests(TestCase): class GroupEditTests(TestCase):
def setUp(self): settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['CHARTER_PATH']
self.charter_dir = self.tempdir('charter')
self.saved_charter_path = settings.CHARTER_PATH
settings.CHARTER_PATH = self.charter_dir
def tearDown(self):
settings.CHARTER_PATH = self.saved_charter_path
shutil.rmtree(self.charter_dir)
def test_create(self): def test_create(self):
@ -632,7 +618,7 @@ class GroupEditTests(TestCase):
self.assertTrue(len(q('form .has-error')) > 0) self.assertTrue(len(q('form .has-error')) > 0)
# edit info # edit info
with io.open(os.path.join(self.charter_dir, "%s-%s.txt" % (group.charter.canonical_name(), group.charter.rev)), "w") as f: with (Path(settings.CHARTER_PATH) / ("%s-%s.txt" % (group.charter.canonical_name(), group.charter.rev))).open("w") as f:
f.write("This is a charter.") f.write("This is a charter.")
area = group.parent area = group.parent
ad = Person.objects.get(name="Areað Irector") ad = Person.objects.get(name="Areað Irector")
@ -673,7 +659,7 @@ class GroupEditTests(TestCase):
self.assertEqual(group.list_subscribe, "subscribe.mars") self.assertEqual(group.list_subscribe, "subscribe.mars")
self.assertEqual(group.list_archive, "archive.mars") self.assertEqual(group.list_archive, "archive.mars")
self.assertTrue(os.path.exists(os.path.join(self.charter_dir, "%s-%s.txt" % (group.charter.canonical_name(), group.charter.rev)))) self.assertTrue((Path(settings.CHARTER_PATH) / ("%s-%s.txt" % (group.charter.canonical_name(), group.charter.rev))).exists())
self.assertEqual(len(outbox), 2) self.assertEqual(len(outbox), 2)
self.assertTrue('Personnel change' in outbox[0]['Subject']) self.assertTrue('Personnel change' in outbox[0]['Subject'])
for prefix in ['ad1','ad2','aread','marschairman','marsdelegate']: for prefix in ['ad1','ad2','aread','marschairman','marsdelegate']:
@ -1558,6 +1544,7 @@ class CustomizeWorkflowTests(TestCase):
class EmailAliasesTests(TestCase): class EmailAliasesTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
PersonFactory(user__username='plain') PersonFactory(user__username='plain')
GroupFactory(acronym='mars',parent=GroupFactory(type_id='area')) GroupFactory(acronym='mars',parent=GroupFactory(type_id='area'))
GroupFactory(acronym='ames',parent=GroupFactory(type_id='area')) GroupFactory(acronym='ames',parent=GroupFactory(type_id='area'))
@ -1580,6 +1567,7 @@ expand-ames-chairs@virtual.ietf.org mars_chair@ietf
def tearDown(self): def tearDown(self):
settings.GROUP_VIRTUAL_PATH = self.saved_group_virtual_path settings.GROUP_VIRTUAL_PATH = self.saved_group_virtual_path
os.unlink(self.group_alias_file.name) os.unlink(self.group_alias_file.name)
super().tearDown()
def testAliases(self): def testAliases(self):
url = urlreverse('ietf.group.urls_info_details.redirect.email', kwargs=dict(acronym="mars")) url = urlreverse('ietf.group.urls_info_details.redirect.email', kwargs=dict(acronym="mars"))
@ -1644,6 +1632,7 @@ class AjaxTests(TestCase):
class MeetingInfoTests(TestCase): class MeetingInfoTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.group = GroupFactory.create(type_id='wg') self.group = GroupFactory.create(type_id='wg')
today = datetime.date.today() today = datetime.date.today()
SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today-datetime.timedelta(days=14)) SessionFactory.create(meeting__type_id='ietf',group=self.group,meeting__date=today-datetime.timedelta(days=14))

View file

@ -3,9 +3,8 @@
import datetime import datetime
import io
import os from pathlib import Path
import shutil
from django.conf import settings from django.conf import settings
@ -20,17 +19,8 @@ from ietf.person.factories import PersonFactory, EmailFactory
from ietf.utils.test_utils import TestCase from ietf.utils.test_utils import TestCase
class IndexTests(TestCase): class IndexTests(TestCase):
def setUp(self):
self.id_dir = self.tempdir('id')
self.saved_internet_draft_path = settings.INTERNET_DRAFT_PATH
settings.INTERNET_DRAFT_PATH = self.id_dir
def tearDown(self):
settings.INTERNET_DRAFT_PATH = self.saved_internet_draft_path
shutil.rmtree(self.id_dir)
def write_draft_file(self, name, size): def write_draft_file(self, name, size):
with io.open(os.path.join(self.id_dir, name), 'w') as f: with (Path(settings.INTERNET_DRAFT_PATH) / name).open('w') as f:
f.write("a" * size) f.write("a" * size)
def test_all_id_txt(self): def test_all_id_txt(self):

View file

@ -4,10 +4,9 @@
import datetime import datetime
import io import io
import os
import shutil
import tarfile import tarfile
from pathlib import Path
from pyquery import PyQuery from pyquery import PyQuery
from django.conf import settings from django.conf import settings
@ -98,6 +97,7 @@ class IESGTests(TestCase):
class IESGAgendaTests(TestCase): class IESGAgendaTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
mars = GroupFactory(acronym='mars',parent=Group.objects.get(acronym='farfut')) mars = GroupFactory(acronym='mars',parent=Group.objects.get(acronym='farfut'))
wgdraft = WgDraftFactory(name='draft-ietf-mars-test', group=mars, intended_std_level_id='ps') wgdraft = WgDraftFactory(name='draft-ietf-mars-test', group=mars, intended_std_level_id='ps')
rfc = IndividualRfcFactory.create(stream_id='irtf', other_aliases=['rfc6666',], states=[('draft','rfc'),('draft-iesg','pub')], std_level_id='inf', ) rfc = IndividualRfcFactory.create(stream_id='irtf', other_aliases=['rfc6666',], states=[('draft','rfc'),('draft-iesg','pub')], std_level_id='inf', )
@ -122,10 +122,6 @@ class IESGAgendaTests(TestCase):
by = Person.objects.get(name="Areað Irector") by = Person.objects.get(name="Areað Irector")
date = get_agenda_date() date = get_agenda_date()
self.draft_dir = self.tempdir('agenda-draft')
self.saved_internet_draft_path = settings.INTERNET_DRAFT_PATH
settings.INTERNET_DRAFT_PATH = self.draft_dir
for d in list(self.telechat_docs.values()): for d in list(self.telechat_docs.values()):
TelechatDocEvent.objects.create(type="scheduled_for_telechat", TelechatDocEvent.objects.create(type="scheduled_for_telechat",
doc=d, doc=d,
@ -138,10 +134,6 @@ class IESGAgendaTests(TestCase):
for i in range(0, 10): for i in range(0, 10):
self.mgmt_items.append(IESGMgmtItemFactory()) self.mgmt_items.append(IESGMgmtItemFactory())
def tearDown(self):
settings.INTERNET_DRAFT_PATH = self.saved_internet_draft_path
shutil.rmtree(self.draft_dir)
def test_fill_in_agenda_docs(self): def test_fill_in_agenda_docs(self):
draft = self.telechat_docs["ietf_draft"] draft = self.telechat_docs["ietf_draft"]
statchg = self.telechat_docs["statchg"] statchg = self.telechat_docs["statchg"]
@ -479,7 +471,7 @@ class IESGAgendaTests(TestCase):
d1_filename = "%s-%s.txt" % (d1.name, d1.rev) d1_filename = "%s-%s.txt" % (d1.name, d1.rev)
d2_filename = "%s-%s.txt" % (d2.name, d2.rev) d2_filename = "%s-%s.txt" % (d2.name, d2.rev)
with io.open(os.path.join(self.draft_dir, d1_filename), "w") as f: with (Path(settings.INTERNET_DRAFT_PATH) / d1_filename).open("w") as f:
f.write("test content") f.write("test content")
url = urlreverse("ietf.iesg.views.telechat_docs_tarfile", kwargs=dict(date=get_agenda_date().isoformat())) url = urlreverse("ietf.iesg.views.telechat_docs_tarfile", kwargs=dict(date=get_agenda_date().isoformat()))

View file

@ -58,6 +58,7 @@ else:
class IetfAuthTests(TestCase): class IetfAuthTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.saved_use_python_htdigest = getattr(settings, "USE_PYTHON_HTDIGEST", None) self.saved_use_python_htdigest = getattr(settings, "USE_PYTHON_HTDIGEST", None)
settings.USE_PYTHON_HTDIGEST = True settings.USE_PYTHON_HTDIGEST = True
@ -74,6 +75,7 @@ class IetfAuthTests(TestCase):
settings.USE_PYTHON_HTDIGEST = self.saved_use_python_htdigest settings.USE_PYTHON_HTDIGEST = self.saved_use_python_htdigest
settings.HTPASSWD_FILE = self.saved_htpasswd_file settings.HTPASSWD_FILE = self.saved_htpasswd_file
settings.HTDIGEST_REALM = self.saved_htdigest_realm settings.HTDIGEST_REALM = self.saved_htdigest_realm
super().tearDown()
def test_index(self): def test_index(self):
self.assertEqual(self.client.get(urlreverse(ietf.ietfauth.views.index)).status_code, 200) self.assertEqual(self.client.get(urlreverse(ietf.ietfauth.views.index)).status_code, 200)

View file

@ -44,12 +44,6 @@ def make_data_from_content(content):
return data return data
class IprTests(TestCase): class IprTests(TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_get_genitive(self): def test_get_genitive(self):
self.assertEqual(get_genitive("Cisco"),"Cisco's") self.assertEqual(get_genitive("Cisco"),"Cisco's")
self.assertEqual(get_genitive("Ross"),"Ross'") self.assertEqual(get_genitive("Ross"),"Ross'")

View file

@ -4,11 +4,11 @@
import datetime import datetime
import io import io
import os
import shutil
import debug # pyflakes:ignore import debug # pyflakes:ignore
from pathlib import Path
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.urls import reverse as urlreverse from django.urls import reverse as urlreverse
@ -260,14 +260,7 @@ class ManagementCommandTests(TestCase):
class LiaisonManagementTests(TestCase): class LiaisonManagementTests(TestCase):
def setUp(self): settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['LIAISON_ATTACH_PATH']
self.saved_liaison_attach_path = settings.LIAISON_ATTACH_PATH
self.liaison_dir = self.tempdir('liaison')
settings.LIAISON_ATTACH_PATH = self.liaison_dir
def tearDown(self):
settings.LIAISON_ATTACH_PATH = self.saved_liaison_attach_path
shutil.rmtree(self.liaison_dir)
def test_add_restrictions(self): def test_add_restrictions(self):
# incoming restrictions # incoming restrictions
@ -443,7 +436,7 @@ class LiaisonManagementTests(TestCase):
self.assertEqual(new_liaison.attachments.count(), attachments_before + 1) self.assertEqual(new_liaison.attachments.count(), attachments_before + 1)
attachment = new_liaison.attachments.order_by("-name")[0] attachment = new_liaison.attachments.order_by("-name")[0]
self.assertEqual(attachment.title, "attachment") self.assertEqual(attachment.title, "attachment")
with io.open(os.path.join(self.liaison_dir, attachment.uploaded_filename)) as f: with (Path(settings.LIAISON_ATTACH_PATH) / attachment.uploaded_filename).open() as f:
written_content = f.read() written_content = f.read()
test_file.seek(0) test_file.seek(0)
@ -747,7 +740,7 @@ class LiaisonManagementTests(TestCase):
self.assertEqual(l.attachments.count(), 1) self.assertEqual(l.attachments.count(), 1)
attachment = l.attachments.all()[0] attachment = l.attachments.all()[0]
self.assertEqual(attachment.title, "attachment") self.assertEqual(attachment.title, "attachment")
with io.open(os.path.join(self.liaison_dir, attachment.uploaded_filename)) as f: with (Path(settings.LIAISON_ATTACH_PATH) / attachment.uploaded_filename).open() as f:
written_content = f.read() written_content = f.read()
test_file.seek(0) test_file.seek(0)
@ -826,7 +819,7 @@ class LiaisonManagementTests(TestCase):
self.assertEqual(l.attachments.count(), 1) self.assertEqual(l.attachments.count(), 1)
attachment = l.attachments.all()[0] attachment = l.attachments.all()[0]
self.assertEqual(attachment.title, "attachment") self.assertEqual(attachment.title, "attachment")
with io.open(os.path.join(self.liaison_dir, attachment.uploaded_filename)) as f: with (Path(settings.LIAISON_ATTACH_PATH) / attachment.uploaded_filename).open() as f:
written_content = f.read() written_content = f.read()
test_file.seek(0) test_file.seek(0)

View file

@ -10,6 +10,7 @@ from ietf.utils.test_utils import TestCase
class GatherAddressListsTests(TestCase): class GatherAddressListsTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.doc = WgDraftFactory(group__acronym='mars', rev='01') self.doc = WgDraftFactory(group__acronym='mars', rev='01')
self.author_address = self.doc.name + '@ietf.org' self.author_address = self.doc.name + '@ietf.org'

View file

@ -18,6 +18,7 @@ import debug # pyflakes:ignore
class ScheduleGeneratorTest(TestCase): class ScheduleGeneratorTest(TestCase):
def setUp(self): def setUp(self):
super().setUp()
# Create a meeting of 2 days, 5 sessions per day, in 2 rooms. There are 3 days # Create a meeting of 2 days, 5 sessions per day, in 2 rooms. There are 3 days
# actually created, but sundays are ignored. # actually created, but sundays are ignored.
# Two rooms is a fairly low level of simultaneous schedules, this is needed # Two rooms is a fairly low level of simultaneous schedules, this is needed

View file

@ -82,23 +82,19 @@ class BaseMeetingTestCase(TestCase):
superclass methods. superclass methods.
""" """
def setUp(self): def setUp(self):
super().setUp()
self.materials_dir = self.tempdir('materials') self.materials_dir = self.tempdir('materials')
self.id_dir = self.tempdir('id')
self.archive_dir = self.tempdir('id-archive')
self.storage_dir = self.tempdir('storage') self.storage_dir = self.tempdir('storage')
# #
os.mkdir(os.path.join(self.archive_dir, "unknown_ids")) archive_dir = Path(settings.INTERNET_DRAFT_ARCHIVE_DIR)
os.mkdir(os.path.join(self.archive_dir, "deleted_tombstones")) (archive_dir / "unknown_ids").mkdir()
os.mkdir(os.path.join(self.archive_dir, "expired_without_tombstone")) (archive_dir / "deleted_tombstones").mkdir()
(archive_dir / "expired_without_tombstone").mkdir()
# #
self.saved_agenda_path = settings.AGENDA_PATH self.saved_agenda_path = settings.AGENDA_PATH
self.saved_id_dir = settings.INTERNET_DRAFT_PATH
self.saved_archive_dir = settings.INTERNET_DRAFT_ARCHIVE_DIR
self.saved_meetinghost_logo_path = settings.MEETINGHOST_LOGO_PATH self.saved_meetinghost_logo_path = settings.MEETINGHOST_LOGO_PATH
# #
settings.AGENDA_PATH = self.materials_dir settings.AGENDA_PATH = self.materials_dir
settings.INTERNET_DRAFT_PATH = self.id_dir
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.archive_dir
settings.MEETINGHOST_LOGO_PATH = self.storage_dir settings.MEETINGHOST_LOGO_PATH = self.storage_dir
# The FileSystemStorage has already set its location before # The FileSystemStorage has already set its location before
@ -116,14 +112,11 @@ class BaseMeetingTestCase(TestCase):
self.patcher.stop() self.patcher.stop()
# #
shutil.rmtree(self.storage_dir) shutil.rmtree(self.storage_dir)
shutil.rmtree(self.id_dir)
shutil.rmtree(self.archive_dir)
shutil.rmtree(self.materials_dir) shutil.rmtree(self.materials_dir)
# #
settings.AGENDA_PATH = self.saved_agenda_path settings.AGENDA_PATH = self.saved_agenda_path
settings.INTERNET_DRAFT_PATH = self.saved_id_dir
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.saved_archive_dir
settings.MEETINGHOST_LOGO_PATH = self.saved_meetinghost_logo_path settings.MEETINGHOST_LOGO_PATH = self.saved_meetinghost_logo_path
super().tearDown()
def write_materials_file(self, meeting, doc, content): def write_materials_file(self, meeting, doc, content):
path = os.path.join(self.materials_dir, "%s/%s/%s" % (meeting.number, doc.type_id, doc.uploaded_filename)) path = os.path.join(self.materials_dir, "%s/%s/%s" % (meeting.number, doc.type_id, doc.uploaded_filename))
@ -2006,6 +1999,7 @@ class ReorderSlidesTests(TestCase):
class EditTests(TestCase): class EditTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
# make sure we have the colors of the area # make sure we have the colors of the area
from ietf.group.colors import fg_group_colors, bg_group_colors from ietf.group.colors import fg_group_colors, bg_group_colors
area_upper = "FARFUT" area_upper = "FARFUT"
@ -2803,6 +2797,7 @@ class SessionDetailsTests(TestCase):
class EditScheduleListTests(TestCase): class EditScheduleListTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.mtg = MeetingFactory(type_id='ietf') self.mtg = MeetingFactory(type_id='ietf')
ScheduleFactory(meeting=self.mtg, name='secretary1') ScheduleFactory(meeting=self.mtg, name='secretary1')
@ -2921,14 +2916,7 @@ class EditScheduleListTests(TestCase):
# ------------------------------------------------- # -------------------------------------------------
class InterimTests(TestCase): class InterimTests(TestCase):
def setUp(self): settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['AGENDA_PATH']
self.materials_dir = self.tempdir('materials')
self.saved_agenda_path = settings.AGENDA_PATH
settings.AGENDA_PATH = self.materials_dir
def tearDown(self):
settings.AGENDA_PATH = self.saved_agenda_path
shutil.rmtree(self.materials_dir)
# test_interim_announce subsumed by test_appears_on_announce # test_interim_announce subsumed by test_appears_on_announce
@ -4299,12 +4287,6 @@ class AjaxTests(TestCase):
self.assertEqual(data['utc'], '20:00') self.assertEqual(data['utc'], '20:00')
class FloorPlanTests(TestCase): class FloorPlanTests(TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_floor_plan_page(self): def test_floor_plan_page(self):
make_meeting_test_data() make_meeting_test_data()
meeting = Meeting.objects.filter(type_id='ietf').order_by('id').last() meeting = Meeting.objects.filter(type_id='ietf').order_by('id').last()
@ -4319,12 +4301,6 @@ class FloorPlanTests(TestCase):
self.assertEqual(r.status_code, 200) self.assertEqual(r.status_code, 200)
class IphoneAppJsonTests(TestCase): class IphoneAppJsonTests(TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_iphone_app_json_interim(self): def test_iphone_app_json_interim(self):
make_interim_test_data() make_interim_test_data()
meeting = Meeting.objects.filter(type_id='interim').order_by('id').last() meeting = Meeting.objects.filter(type_id='interim').order_by('id').last()
@ -4383,22 +4359,19 @@ class FinalizeProceedingsTests(TestCase):
self.assertEqual(meeting.session_set.filter(group__acronym="mars").first().sessionpresentation_set.filter(document__type="draft").first().rev,'00') self.assertEqual(meeting.session_set.filter(group__acronym="mars").first().sessionpresentation_set.filter(document__type="draft").first().rev,'00')
class MaterialsTests(TestCase): class MaterialsTests(TestCase):
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + [
'AGENDA_PATH',
'SLIDE_STAGING_PATH'
]
def setUp(self): def setUp(self):
super().setUp()
self.materials_dir = self.tempdir('materials') self.materials_dir = self.tempdir('materials')
self.staging_dir = self.tempdir('staging')
if not os.path.exists(self.materials_dir): if not os.path.exists(self.materials_dir):
os.mkdir(self.materials_dir) os.mkdir(self.materials_dir)
self.saved_agenda_path = settings.AGENDA_PATH
settings.AGENDA_PATH = self.materials_dir
self.saved_staging_path = settings.SLIDE_STAGING_PATH
settings.SLIDE_STAGING_PATH = self.staging_dir
def tearDown(self): def tearDown(self):
settings.AGENDA_PATH = self.saved_agenda_path
settings.SLIDE_STAGING_PATH = self.saved_staging_path
shutil.rmtree(self.materials_dir) shutil.rmtree(self.materials_dir)
shutil.rmtree(self.staging_dir) super().tearDown()
def crawl_materials(self, url, top): def crawl_materials(self, url, top):
seen = set() seen = set()
@ -4926,17 +4899,7 @@ class SessionTests(TestCase):
self.assertEqual(len(outbox),1) self.assertEqual(len(outbox),1)
class HasMeetingsTests(TestCase): class HasMeetingsTests(TestCase):
def setUp(self): settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['AGENDA_PATH']
self.materials_dir = self.tempdir('materials')
#
self.saved_agenda_path = settings.AGENDA_PATH
#
settings.AGENDA_PATH = self.materials_dir
def tearDown(self):
shutil.rmtree(self.materials_dir)
#
settings.AGENDA_PATH = self.saved_agenda_path
def do_request_interim(self, url, group, user, meeting_count): def do_request_interim(self, url, group, user, meeting_count):
login_testing_unauthorized(self,user.username, url) login_testing_unauthorized(self,user.username, url)

View file

@ -15,6 +15,7 @@ from ietf.utils.test_utils import TestCase, name_of_file_containing
@override_settings(ADMINS=(('Some Admin', 'admin@example.com'),)) @override_settings(ADMINS=(('Some Admin', 'admin@example.com'),))
class FeedbackEmailTests(TestCase): class FeedbackEmailTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.year = 2021 self.year = 2021
self.nomcom = NomComFactory(group__acronym=f'nomcom{self.year}') self.nomcom = NomComFactory(group__acronym=f'nomcom{self.year}')

View file

@ -76,6 +76,7 @@ class NomcomViewsTest(TestCase):
return response return response
def setUp(self): def setUp(self):
super().setUp()
setup_test_public_keys_dir(self) setup_test_public_keys_dir(self)
nomcom_test_data() nomcom_test_data()
self.cert_file, self.privatekey_file = get_cert_files() self.cert_file, self.privatekey_file = get_cert_files()
@ -107,6 +108,7 @@ class NomcomViewsTest(TestCase):
def tearDown(self): def tearDown(self):
teardown_test_public_keys_dir(self) teardown_test_public_keys_dir(self)
super().tearDown()
def access_member_url(self, url): def access_member_url(self, url):
login_testing_unauthorized(self, COMMUNITY_USER, url) login_testing_unauthorized(self, COMMUNITY_USER, url)
@ -954,12 +956,14 @@ class NomineePositionStateSaveTest(TestCase):
"""Tests for the NomineePosition save override method""" """Tests for the NomineePosition save override method"""
def setUp(self): def setUp(self):
super().setUp()
setup_test_public_keys_dir(self) setup_test_public_keys_dir(self)
nomcom_test_data() nomcom_test_data()
self.nominee = Nominee.objects.get(email__person__user__username=COMMUNITY_USER) self.nominee = Nominee.objects.get(email__person__user__username=COMMUNITY_USER)
def tearDown(self): def tearDown(self):
teardown_test_public_keys_dir(self) teardown_test_public_keys_dir(self)
super().tearDown()
def test_state_autoset(self): def test_state_autoset(self):
"""Verify state is autoset correctly""" """Verify state is autoset correctly"""
@ -989,6 +993,7 @@ class NomineePositionStateSaveTest(TestCase):
class FeedbackTest(TestCase): class FeedbackTest(TestCase):
def setUp(self): def setUp(self):
super().setUp()
setup_test_public_keys_dir(self) setup_test_public_keys_dir(self)
nomcom_test_data() nomcom_test_data()
@ -996,6 +1001,7 @@ class FeedbackTest(TestCase):
def tearDown(self): def tearDown(self):
teardown_test_public_keys_dir(self) teardown_test_public_keys_dir(self)
super().tearDown()
def test_encrypted_comments(self): def test_encrypted_comments(self):
@ -1022,6 +1028,7 @@ class FeedbackTest(TestCase):
class ReminderTest(TestCase): class ReminderTest(TestCase):
def setUp(self): def setUp(self):
super().setUp()
setup_test_public_keys_dir(self) setup_test_public_keys_dir(self)
nomcom_test_data() nomcom_test_data()
self.nomcom = get_nomcom_by_year(NOMCOM_YEAR) self.nomcom = get_nomcom_by_year(NOMCOM_YEAR)
@ -1065,6 +1072,7 @@ class ReminderTest(TestCase):
def tearDown(self): def tearDown(self):
teardown_test_public_keys_dir(self) teardown_test_public_keys_dir(self)
super().tearDown()
def test_is_time_to_send(self): def test_is_time_to_send(self):
self.nomcom.reminder_interval = 4 self.nomcom.reminder_interval = 4
@ -1120,6 +1128,7 @@ class ReminderTest(TestCase):
class InactiveNomcomTests(TestCase): class InactiveNomcomTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
setup_test_public_keys_dir(self) setup_test_public_keys_dir(self)
self.nc = NomComFactory.create(**nomcom_kwargs_for_year(group__state_id='conclude')) self.nc = NomComFactory.create(**nomcom_kwargs_for_year(group__state_id='conclude'))
self.plain_person = PersonFactory.create() self.plain_person = PersonFactory.create()
@ -1128,6 +1137,7 @@ class InactiveNomcomTests(TestCase):
def tearDown(self): def tearDown(self):
teardown_test_public_keys_dir(self) teardown_test_public_keys_dir(self)
super().tearDown()
def test_feedback_closed(self): def test_feedback_closed(self):
for view in ['ietf.nomcom.views.public_feedback', 'ietf.nomcom.views.private_feedback']: for view in ['ietf.nomcom.views.public_feedback', 'ietf.nomcom.views.private_feedback']:
@ -1314,6 +1324,7 @@ class InactiveNomcomTests(TestCase):
class FeedbackLastSeenTests(TestCase): class FeedbackLastSeenTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
setup_test_public_keys_dir(self) setup_test_public_keys_dir(self)
self.nc = NomComFactory.create(**nomcom_kwargs_for_year()) self.nc = NomComFactory.create(**nomcom_kwargs_for_year())
self.author = PersonFactory.create().email_set.first().address self.author = PersonFactory.create().email_set.first().address
@ -1334,6 +1345,7 @@ class FeedbackLastSeenTests(TestCase):
def tearDown(self): def tearDown(self):
teardown_test_public_keys_dir(self) teardown_test_public_keys_dir(self)
super().tearDown()
def test_feedback_index_badges(self): def test_feedback_index_badges(self):
url = reverse('ietf.nomcom.views.view_feedback',kwargs={'year':self.nc.year()}) url = reverse('ietf.nomcom.views.view_feedback',kwargs={'year':self.nc.year()})
@ -1420,6 +1432,7 @@ class FeedbackLastSeenTests(TestCase):
class NewActiveNomComTests(TestCase): class NewActiveNomComTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
setup_test_public_keys_dir(self) setup_test_public_keys_dir(self)
self.nc = NomComFactory.create(**nomcom_kwargs_for_year()) self.nc = NomComFactory.create(**nomcom_kwargs_for_year())
self.chair = self.nc.group.role_set.filter(name='chair').first().person self.chair = self.nc.group.role_set.filter(name='chair').first().person
@ -1428,6 +1441,7 @@ class NewActiveNomComTests(TestCase):
def tearDown(self): def tearDown(self):
teardown_test_public_keys_dir(self) teardown_test_public_keys_dir(self)
settings.DAYS_TO_EXPIRE_NOMINATION_LINK = self.saved_days_to_expire_nomination_link settings.DAYS_TO_EXPIRE_NOMINATION_LINK = self.saved_days_to_expire_nomination_link
super().tearDown()
def test_help(self): def test_help(self):
url = reverse('ietf.nomcom.views.configuration_help',kwargs={'year':self.nc.year()}) url = reverse('ietf.nomcom.views.configuration_help',kwargs={'year':self.nc.year()})
@ -1875,6 +1889,7 @@ Junk body for testing
class NomComIndexTests(TestCase): class NomComIndexTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
for year in range(2000,2014): for year in range(2000,2014):
NomComFactory.create(**nomcom_kwargs_for_year(year=year,populate_positions=False,populate_personnel=False)) NomComFactory.create(**nomcom_kwargs_for_year(year=year,populate_positions=False,populate_personnel=False))
@ -1885,6 +1900,7 @@ class NomComIndexTests(TestCase):
class NoPublicKeyTests(TestCase): class NoPublicKeyTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.nc = NomComFactory.create(**nomcom_kwargs_for_year(public_key=None)) self.nc = NomComFactory.create(**nomcom_kwargs_for_year(public_key=None))
self.chair = self.nc.group.role_set.filter(name='chair').first().person self.chair = self.nc.group.role_set.filter(name='chair').first().person
@ -1914,6 +1930,7 @@ class NoPublicKeyTests(TestCase):
class AcceptingTests(TestCase): class AcceptingTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
setup_test_public_keys_dir(self) setup_test_public_keys_dir(self)
self.nc = NomComFactory(**nomcom_kwargs_for_year()) self.nc = NomComFactory(**nomcom_kwargs_for_year())
self.plain_person = PersonFactory.create() self.plain_person = PersonFactory.create()
@ -1921,6 +1938,7 @@ class AcceptingTests(TestCase):
def tearDown(self): def tearDown(self):
teardown_test_public_keys_dir(self) teardown_test_public_keys_dir(self)
super().tearDown()
def test_public_accepting_nominations(self): def test_public_accepting_nominations(self):
url = reverse('ietf.nomcom.views.public_nominate',kwargs={'year':self.nc.year()}) url = reverse('ietf.nomcom.views.public_nominate',kwargs={'year':self.nc.year()})
@ -2021,12 +2039,14 @@ class AcceptingTests(TestCase):
class ShowNomineeTests(TestCase): class ShowNomineeTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
setup_test_public_keys_dir(self) setup_test_public_keys_dir(self)
self.nc = NomComFactory(**nomcom_kwargs_for_year()) self.nc = NomComFactory(**nomcom_kwargs_for_year())
self.plain_person = PersonFactory.create() self.plain_person = PersonFactory.create()
def tearDown(self): def tearDown(self):
teardown_test_public_keys_dir(self) teardown_test_public_keys_dir(self)
super().tearDown()
def test_feedback_pictures(self): def test_feedback_pictures(self):
url = reverse('ietf.nomcom.views.public_nominate',kwargs={'year':self.nc.year()}) url = reverse('ietf.nomcom.views.public_nominate',kwargs={'year':self.nc.year()})
@ -2042,6 +2062,7 @@ class ShowNomineeTests(TestCase):
class TopicTests(TestCase): class TopicTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
setup_test_public_keys_dir(self) setup_test_public_keys_dir(self)
self.nc = NomComFactory(**nomcom_kwargs_for_year(populate_topics=False)) self.nc = NomComFactory(**nomcom_kwargs_for_year(populate_topics=False))
self.plain_person = PersonFactory.create() self.plain_person = PersonFactory.create()
@ -2049,7 +2070,8 @@ class TopicTests(TestCase):
def tearDown(self): def tearDown(self):
teardown_test_public_keys_dir(self) teardown_test_public_keys_dir(self)
super().tearDown()
def testAddEditListRemoveTopic(self): def testAddEditListRemoveTopic(self):
self.assertFalse(self.nc.topic_set.exists()) self.assertFalse(self.nc.topic_set.exists())
@ -2192,6 +2214,7 @@ class EligibilityUnitTests(TestCase):
class rfc8713EligibilityTests(TestCase): class rfc8713EligibilityTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.nomcom = NomComFactory(group__acronym='nomcom2019', populate_personnel=False, first_call_for_volunteers=datetime.date(2019,5,1)) self.nomcom = NomComFactory(group__acronym='nomcom2019', populate_personnel=False, first_call_for_volunteers=datetime.date(2019,5,1))
meetings = [ MeetingFactory(date=date,type_id='ietf') for date in ( meetings = [ MeetingFactory(date=date,type_id='ietf') for date in (
@ -2249,6 +2272,7 @@ class rfc8713EligibilityTests(TestCase):
class rfc8788EligibilityTests(TestCase): class rfc8788EligibilityTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.nomcom = NomComFactory(group__acronym='nomcom2020', populate_personnel=False, first_call_for_volunteers=datetime.date(2020,5,1)) self.nomcom = NomComFactory(group__acronym='nomcom2020', populate_personnel=False, first_call_for_volunteers=datetime.date(2020,5,1))
meetings = [MeetingFactory(number=number, date=date, type_id='ietf') for number,date in [ meetings = [MeetingFactory(number=number, date=date, type_id='ietf') for number,date in [
@ -2286,6 +2310,7 @@ class rfc8788EligibilityTests(TestCase):
class rfc8989EligibilityTests(TestCase): class rfc8989EligibilityTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.nomcom = NomComFactory(group__acronym='nomcom2021', populate_personnel=False, first_call_for_volunteers=datetime.date(2021,5,15)) self.nomcom = NomComFactory(group__acronym='nomcom2021', populate_personnel=False, first_call_for_volunteers=datetime.date(2021,5,15))
# make_immutable_test_data makes things this test does not want # make_immutable_test_data makes things this test does not want
Role.objects.filter(name_id__in=('chair','secr')).delete() Role.objects.filter(name_id__in=('chair','secr')).delete()

View file

@ -76,7 +76,8 @@ class _Wrapper(TestCase):
reviewer_queue_policy_id = '' reviewer_queue_policy_id = ''
def setUp(self): def setUp(self):
self.team = ReviewTeamFactory(acronym="rotationteam", super().setUp()
self.team = ReviewTeamFactory(acronym="rotationteam",
name="Review Team", name="Review Team",
list_email="rotationteam@ietf.org", list_email="rotationteam@ietf.org",
parent=Group.objects.get(acronym="farfut")) parent=Group.objects.get(acronym="farfut"))

View file

@ -23,6 +23,7 @@ AD_USER=''
class SecrAnnouncementTestCase(TestCase): class SecrAnnouncementTestCase(TestCase):
def setUp(self): def setUp(self):
super().setUp()
chair = RoleName.objects.get(slug='chair') chair = RoleName.objects.get(slug='chair')
secr = RoleName.objects.get(slug='secr') secr = RoleName.objects.get(slug='secr')
ietf = Group.objects.get(acronym='ietf') ietf = Group.objects.get(acronym='ietf')

View file

@ -5,6 +5,8 @@
import datetime import datetime
import os import os
import shutil import shutil
from pathlib import Path
from pyquery import PyQuery from pyquery import PyQuery
from io import StringIO from io import StringIO
@ -25,27 +27,25 @@ from ietf.utils.test_utils import TestCase
class SecrMeetingTestCase(TestCase): class SecrMeetingTestCase(TestCase):
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['AGENDA_PATH']
def setUp(self): def setUp(self):
self.proceedings_dir = self.tempdir('proceedings') super().setUp()
self.saved_secr_proceedings_dir = settings.SECR_PROCEEDINGS_DIR
settings.SECR_PROCEEDINGS_DIR = self.proceedings_dir
self.saved_agenda_path = settings.AGENDA_PATH
settings.AGENDA_PATH = self.proceedings_dir
self.bluesheet_dir = self.tempdir('bluesheet') self.bluesheet_dir = self.tempdir('bluesheet')
self.bluesheet_path = os.path.join(self.bluesheet_dir,'blue_sheet.rtf') self.bluesheet_path = os.path.join(self.bluesheet_dir,'blue_sheet.rtf')
self.saved_secr_blue_sheet_path = settings.SECR_BLUE_SHEET_PATH self.saved_secr_blue_sheet_path = settings.SECR_BLUE_SHEET_PATH
settings.SECR_BLUE_SHEET_PATH = self.bluesheet_path settings.SECR_BLUE_SHEET_PATH = self.bluesheet_path
self.materials_dir = self.tempdir('materials') # n.b., the bluesheet upload relies on SECR_PROCEEDINGS_DIR being the same
# as AGENDA_PATH. This is probably a bug, but may not be worth fixing if
# the secr app is on the way out.
self.saved_secr_proceedings_dir = settings.SECR_PROCEEDINGS_DIR
settings.SECR_PROCEEDINGS_DIR = settings.AGENDA_PATH
def tearDown(self): def tearDown(self):
settings.SECR_PROCEEDINGS_DIR = self.saved_secr_proceedings_dir settings.SECR_PROCEEDINGS_DIR = self.saved_secr_proceedings_dir
settings.AGENDA_PATH = self.saved_agenda_path
settings.SECR_BLUE_SHEET_PATH = self.saved_secr_blue_sheet_path settings.SECR_BLUE_SHEET_PATH = self.saved_secr_blue_sheet_path
shutil.rmtree(self.proceedings_dir)
shutil.rmtree(self.bluesheet_dir) shutil.rmtree(self.bluesheet_dir)
shutil.rmtree(self.materials_dir) super().tearDown()
def test_main(self): def test_main(self):
"Main Test" "Main Test"
@ -170,8 +170,8 @@ class SecrMeetingTestCase(TestCase):
def test_blue_sheets_upload(self): def test_blue_sheets_upload(self):
"Test Bluesheets" "Test Bluesheets"
meeting = make_meeting_test_data() meeting = make_meeting_test_data()
os.makedirs(os.path.join(self.proceedings_dir,str(meeting.number),'bluesheets')) (Path(settings.SECR_PROCEEDINGS_DIR) / str(meeting.number) / 'bluesheets').mkdir(parents=True)
url = reverse('ietf.secr.meetings.views.blue_sheet',kwargs={'meeting_id':meeting.number}) url = reverse('ietf.secr.meetings.views.blue_sheet',kwargs={'meeting_id':meeting.number})
self.client.login(username="secretary", password="secretary+password") self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url) response = self.client.get(url)

View file

@ -6,7 +6,6 @@ import debug # pyflakes:ignore
import io import io
import json import json
import os import os
import shutil
from django.conf import settings from django.conf import settings
from django.urls import reverse from django.urls import reverse
@ -65,14 +64,7 @@ class VideoRecordingTestCase(TestCase):
self.assertEqual(urls[0]['url'],'https://www.youtube.com/watch?v=lhYWB5FFkg4&list=PLC86T-6ZTP5jo6kIuqdyeYYhsKv9sUwG1') self.assertEqual(urls[0]['url'],'https://www.youtube.com/watch?v=lhYWB5FFkg4&list=PLC86T-6ZTP5jo6kIuqdyeYYhsKv9sUwG1')
class RecordingTestCase(TestCase): class RecordingTestCase(TestCase):
def setUp(self): settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['MEETING_RECORDINGS_DIR']
self.meeting_recordings_dir = self.tempdir('meeting-recordings')
self.saved_meeting_recordings_dir = settings.MEETING_RECORDINGS_DIR
settings.MEETING_RECORDINGS_DIR = self.meeting_recordings_dir
def tearDown(self):
shutil.rmtree(self.meeting_recordings_dir)
settings.MEETING_RECORDINGS_DIR = self.saved_meeting_recordings_dir
def test_page(self): def test_page(self):
meeting = MeetingFactory(type_id='ietf') meeting = MeetingFactory(type_id='ietf')

View file

@ -15,6 +15,7 @@ SECR_USER='secretary'
class SecrRolesMainTestCase(TestCase): class SecrRolesMainTestCase(TestCase):
def setUp(self): def setUp(self):
super().setUp()
GroupFactory(type_id='sdo') # need this for the RoleForm initialization GroupFactory(type_id='sdo') # need this for the RoleForm initialization
def test_main(self): def test_main(self):

View file

@ -456,6 +456,7 @@ class SubmitRequestCase(TestCase):
class LockAppTestCase(TestCase): class LockAppTestCase(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.meeting = MeetingFactory(type_id='ietf', date=datetime.date.today(),session_request_lock_message='locked') self.meeting = MeetingFactory(type_id='ietf', date=datetime.date.today(),session_request_lock_message='locked')
self.group = GroupFactory(acronym='mars') self.group = GroupFactory(acronym='mars')
RoleFactory(name_id='chair', group=self.group, person__user__username='marschairman') RoleFactory(name_id='chair', group=self.group, person__user__username='marschairman')
@ -531,6 +532,7 @@ class RetrievePreviousCase(TestCase):
class SessionFormTest(TestCase): class SessionFormTest(TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.meeting = MeetingFactory(type_id='ietf') self.meeting = MeetingFactory(type_id='ietf')
self.group1 = GroupFactory() self.group1 = GroupFactory()
self.group2 = GroupFactory() self.group2 = GroupFactory()

View file

@ -7,7 +7,6 @@ import email
import io import io
import os import os
import re import re
import shutil
import sys import sys
import mock import mock
@ -43,6 +42,40 @@ from ietf.utils.models import VersionInfo
from ietf.utils.test_utils import login_testing_unauthorized, TestCase from ietf.utils.test_utils import login_testing_unauthorized, TestCase
from ietf.utils.draft import Draft from ietf.utils.draft import Draft
class BaseSubmitTestCase(TestCase):
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + [
'IDSUBMIT_STAGING_PATH',
'SUBMIT_YANG_RFC_MODEL_DIR',
'SUBMIT_YANG_DRAFT_MODEL_DIR',
'SUBMIT_YANG_IANA_MODEL_DIR',
'SUBMIT_YANG_CATALOG_DIR',
]
def setUp(self):
super().setUp()
# The system apparently relies on these paths being equal. If they are not,
# old drafts may not be moved out of the way properly.
self.saved_repository_path = settings.IDSUBMIT_REPOSITORY_PATH
settings.IDSUBMIT_REPOSITORY_PATH = settings.INTERNET_DRAFT_PATH
def tearDown(self):
settings.IDSUBMIT_REPOSITORY_PATH = self.saved_repository_path
super().tearDown()
@property
def staging_dir(self):
return settings.IDSUBMIT_STAGING_PATH
@property
def repository_dir(self):
return settings.IDSUBMIT_REPOSITORY_PATH
@property
def archive_dir(self):
return settings.INTERNET_DRAFT_ARCHIVE_DIR
def submission_file(name, rev, group, format, templatename, author=None, email=None, title=None, year=None, ascii=True): def submission_file(name, rev, group, format, templatename, author=None, email=None, title=None, year=None, ascii=True):
# construct appropriate text draft # construct appropriate text draft
f = io.open(os.path.join(settings.BASE_DIR, "submit", templatename)) f = io.open(os.path.join(settings.BASE_DIR, "submit", templatename))
@ -112,58 +145,12 @@ def create_draft_submission_with_rev_mismatch(rev='01'):
return draft, sub return draft, sub
class SubmitTests(TestCase): class SubmitTests(BaseSubmitTestCase):
def setUp(self): def setUp(self):
self.saved_idsubmit_staging_path = settings.IDSUBMIT_STAGING_PATH super().setUp()
self.staging_dir = self.tempdir('submit-staging')
settings.IDSUBMIT_STAGING_PATH = self.staging_dir
self.saved_internet_draft_path = settings.INTERNET_DRAFT_PATH
self.saved_idsubmit_repository_path = settings.IDSUBMIT_REPOSITORY_PATH
self.repository_dir = self.tempdir('submit-repository')
settings.INTERNET_DRAFT_PATH = settings.IDSUBMIT_REPOSITORY_PATH = self.repository_dir
self.saved_archive_dir = settings.INTERNET_DRAFT_ARCHIVE_DIR
self.archive_dir = self.tempdir('submit-archive')
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.archive_dir
self.saved_yang_rfc_model_dir = settings.SUBMIT_YANG_RFC_MODEL_DIR
self.yang_rfc_model_dir = self.tempdir('yang-rfc-model')
settings.SUBMIT_YANG_RFC_MODEL_DIR = self.yang_rfc_model_dir
self.saved_yang_draft_model_dir = settings.SUBMIT_YANG_DRAFT_MODEL_DIR
self.yang_draft_model_dir = self.tempdir('yang-draft-model')
settings.SUBMIT_YANG_DRAFT_MODEL_DIR = self.yang_draft_model_dir
self.saved_yang_iana_model_dir = settings.SUBMIT_YANG_IANA_MODEL_DIR
self.yang_iana_model_dir = self.tempdir('yang-iana-model')
settings.SUBMIT_YANG_IANA_MODEL_DIR = self.yang_iana_model_dir
self.saved_yang_catalog_model_dir = settings.SUBMIT_YANG_CATALOG_MODEL_DIR
self.yang_catalog_model_dir = self.tempdir('yang-catalog-model')
settings.SUBMIT_YANG_CATALOG_MODEL_DIR = self.yang_catalog_model_dir
# Submit views assume there is a "next" IETF to look for cutoff dates against # 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)) 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)
shutil.rmtree(self.archive_dir)
shutil.rmtree(self.yang_rfc_model_dir)
shutil.rmtree(self.yang_draft_model_dir)
shutil.rmtree(self.yang_iana_model_dir)
shutil.rmtree(self.yang_catalog_model_dir)
settings.IDSUBMIT_STAGING_PATH = self.saved_idsubmit_staging_path
settings.INTERNET_DRAFT_PATH = self.saved_internet_draft_path
settings.IDSUBMIT_REPOSITORY_PATH = self.saved_idsubmit_repository_path
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.saved_archive_dir
settings.SUBMIT_YANG_RFC_MODEL_DIR = self.saved_yang_rfc_model_dir
settings.SUBMIT_YANG_DRAFT_MODEL_DIR = self.saved_yang_draft_model_dir
settings.SUBMIT_YANG_IANA_MODEL_DIR = self.saved_yang_iana_model_dir
settings.SUBMIT_YANG_CATALOG_MODEL_DIR = self.saved_yang_catalog_model_dir
def create_and_post_submission(self, name, rev, author, group=None, formats=("txt",), base_filename=None): def create_and_post_submission(self, name, rev, author, group=None, formats=("txt",), base_filename=None):
"""Helper to create and post a submission """Helper to create and post a submission
@ -2096,7 +2083,7 @@ class SubmitTests(TestCase):
self.assertEqual(len(kept_div('span.label:contains("Removed")')), 0) self.assertEqual(len(kept_div('span.label:contains("Removed")')), 0)
self.assertEqual(len(kept_div('span.label:contains("New")')), 0) self.assertEqual(len(kept_div('span.label:contains("New")')), 0)
class ApprovalsTestCase(TestCase): class ApprovalsTestCase(BaseSubmitTestCase):
def test_approvals(self): def test_approvals(self):
RoleFactory(name_id='chair', RoleFactory(name_id='chair',
group__acronym='mars', group__acronym='mars',
@ -2267,7 +2254,7 @@ class ApprovalsTestCase(TestCase):
self.assertEqual(len(Preapproval.objects.filter(name=preapproval.name)), 0) self.assertEqual(len(Preapproval.objects.filter(name=preapproval.name)), 0)
class ManualPostsTestCase(TestCase): class ManualPostsTestCase(BaseSubmitTestCase):
def test_manual_posts(self): def test_manual_posts(self):
GroupFactory(acronym='mars') GroupFactory(acronym='mars')
@ -2712,60 +2699,13 @@ Subject: test
return r return r
class ApiSubmitTests(TestCase): class ApiSubmitTests(BaseSubmitTestCase):
def setUp(self): def setUp(self):
super().setUp()
# break early in case of missing configuration # break early in case of missing configuration
self.assertTrue(os.path.exists(settings.IDSUBMIT_IDNITS_BINARY)) self.assertTrue(os.path.exists(settings.IDSUBMIT_IDNITS_BINARY))
self.saved_idsubmit_staging_path = settings.IDSUBMIT_STAGING_PATH
self.staging_dir = self.tempdir('submit-staging')
settings.IDSUBMIT_STAGING_PATH = self.staging_dir
self.saved_internet_draft_path = settings.INTERNET_DRAFT_PATH
self.saved_idsubmit_repository_path = settings.IDSUBMIT_REPOSITORY_PATH
self.repository_dir = self.tempdir('submit-repository')
settings.INTERNET_DRAFT_PATH = settings.IDSUBMIT_REPOSITORY_PATH = self.repository_dir
self.saved_archive_dir = settings.INTERNET_DRAFT_ARCHIVE_DIR
self.archive_dir = self.tempdir('submit-archive')
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.archive_dir
self.saved_yang_rfc_model_dir = settings.SUBMIT_YANG_RFC_MODEL_DIR
self.rfc_model_dir = self.tempdir('yang-rfcmod')
settings.SUBMIT_YANG_RFC_MODEL_DIR = self.rfc_model_dir
self.saved_yang_draft_model_dir = settings.SUBMIT_YANG_DRAFT_MODEL_DIR
self.draft_model_dir = self.tempdir('yang-draftmod')
settings.SUBMIT_YANG_DRAFT_MODEL_DIR = self.draft_model_dir
self.saved_yang_iana_model_dir = settings.SUBMIT_YANG_IANA_MODEL_DIR
self.iana_model_dir = self.tempdir('yang-ianamod')
settings.SUBMIT_YANG_IANA_MODEL_DIR = self.iana_model_dir
self.saved_yang_catalog_model_dir = settings.SUBMIT_YANG_CATALOG_MODEL_DIR
self.catalog_model_dir = self.tempdir('yang-catalogmod')
settings.SUBMIT_YANG_CATALOG_MODEL_DIR = self.catalog_model_dir
MeetingFactory(type_id='ietf', date=datetime.date.today()+datetime.timedelta(days=60)) MeetingFactory(type_id='ietf', date=datetime.date.today()+datetime.timedelta(days=60))
def tearDown(self):
shutil.rmtree(self.staging_dir)
shutil.rmtree(self.repository_dir)
shutil.rmtree(self.archive_dir)
shutil.rmtree(self.rfc_model_dir)
shutil.rmtree(self.draft_model_dir)
shutil.rmtree(self.iana_model_dir)
shutil.rmtree(self.catalog_model_dir)
settings.IDSUBMIT_STAGING_PATH = self.saved_idsubmit_staging_path
settings.INTERNET_DRAFT_PATH = self.saved_internet_draft_path
settings.IDSUBMIT_REPOSITORY_PATH = self.saved_idsubmit_repository_path
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.saved_archive_dir
settings.SUBMIT_YANG_RFC_MODEL_DIR = self.saved_yang_rfc_model_dir
settings.SUBMIT_YANG_DRAFT_MODEL_DIR = self.saved_yang_draft_model_dir
settings.SUBMIT_YANG_IANA_MODEL_DIR = self.saved_yang_iana_model_dir
settings.SUBMIT_YANG_CATALOG_MODEL_DIR = self.saved_yang_catalog_model_dir
def do_post_submission(self, rev, author=None, name=None, group=None, email=None, title=None, year=None): def do_post_submission(self, rev, author=None, name=None, group=None, email=None, title=None, year=None):
url = urlreverse('ietf.submit.views.api_submit') url = urlreverse('ietf.submit.views.api_submit')
if author is None: if author is None:
@ -2893,7 +2833,7 @@ class ApiSubmitTests(TestCase):
) )
class RefsTests(TestCase): class RefsTests(BaseSubmitTestCase):
def test_draft_refs_identification(self): def test_draft_refs_identification(self):

View file

@ -7,7 +7,6 @@ import io
import json import json
import datetime import datetime
import quopri import quopri
import shutil
from django.conf import settings from django.conf import settings
from django.urls import reverse as urlreverse from django.urls import reverse as urlreverse
@ -219,22 +218,8 @@ ICANN
class RFCSyncTests(TestCase): class RFCSyncTests(TestCase):
def setUp(self):
self.save_id_dir = settings.INTERNET_DRAFT_PATH
self.save_archive_dir = settings.INTERNET_DRAFT_ARCHIVE_DIR
self.id_dir = self.tempdir('id')
self.archive_dir = self.tempdir('id-archive')
settings.INTERNET_DRAFT_PATH = self.id_dir
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.archive_dir
def tearDown(self):
shutil.rmtree(self.id_dir)
shutil.rmtree(self.archive_dir)
settings.INTERNET_DRAFT_PATH = self.save_id_dir
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.save_archive_dir
def write_draft_file(self, name, size): def write_draft_file(self, name, size):
with io.open(os.path.join(self.id_dir, name), 'w') as f: with io.open(os.path.join(settings.INTERNET_DRAFT_PATH, name), 'w') as f:
f.write("a" * size) f.write("a" * size)
def test_rfc_index(self): def test_rfc_index(self):
@ -382,8 +367,8 @@ class RFCSyncTests(TestCase):
self.assertEqual(doc.get_state_slug("draft-stream-ise"), "pub") self.assertEqual(doc.get_state_slug("draft-stream-ise"), "pub")
self.assertEqual(doc.std_level_id, "ps") self.assertEqual(doc.std_level_id, "ps")
self.assertEqual(doc.pages, 42) self.assertEqual(doc.pages, 42)
self.assertTrue(not os.path.exists(os.path.join(self.id_dir, draft_filename))) self.assertTrue(not os.path.exists(os.path.join(settings.INTERNET_DRAFT_PATH, draft_filename)))
self.assertTrue(os.path.exists(os.path.join(self.archive_dir, draft_filename))) self.assertTrue(os.path.exists(os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, draft_filename)))
# make sure we can apply it again with no changes # make sure we can apply it again with no changes
changed = list(rfceditor.update_docs_from_rfc_index(data, errata, today - datetime.timedelta(days=30))) changed = list(rfceditor.update_docs_from_rfc_index(data, errata, today - datetime.timedelta(days=30)))

View file

@ -38,6 +38,7 @@ import os
import re import re
import email import email
import html5lib import html5lib
import shutil
import sys import sys
from urllib.parse import unquote from urllib.parse import unquote
@ -151,9 +152,27 @@ class ReverseLazyTest(django.test.TestCase):
self.assertRedirects(response, "/ipr/", status_code=301) self.assertRedirects(response, "/ipr/", status_code=301)
class TestCase(django.test.TestCase): class TestCase(django.test.TestCase):
"""IETF TestCase class
Based on django.test.TestCase, but adds a few things:
* asserts for html5 validation.
* tempdir() convenience method
* setUp() and tearDown() that override settings paths with temp directories
The setUp() and tearDown() methods create / remove temporary paths and override
Django's settings with the temp dir names. Subclasses of this class must
be sure to call the superclass methods if they are overridden. These are created
anew for each test to avoid risk of cross-talk between test cases. Overriding
the settings_temp_path_overrides class value will modify which path settings are
replaced with temp test dirs.
""" """
Does basically the same as django.test.TestCase, but adds asserts for html5 validation. # These settings will be overridden with empty temporary directories
""" settings_temp_path_overrides = [
'RFC_PATH',
'INTERNET_ALL_DRAFTS_ARCHIVE_DIR',
'INTERNET_DRAFT_ARCHIVE_DIR',
'INTERNET_DRAFT_PATH',
]
parser = html5lib.HTMLParser(strict=True) parser = html5lib.HTMLParser(strict=True)
@ -238,4 +257,18 @@ class TestCase(django.test.TestCase):
def __str__(self): def __str__(self):
return u"%s (%s.%s)" % (self._testMethodName, strclass(self.__class__),self._testMethodName) return u"%s (%s.%s)" % (self._testMethodName, strclass(self.__class__),self._testMethodName)
def setUp(self):
# Replace settings paths with temporary directories.
super().setUp()
self._ietf_temp_dirs = {} # trashed during tearDown, DO NOT put paths you care about in this
for setting in self.settings_temp_path_overrides:
self._ietf_temp_dirs[setting] = self.tempdir(slugify(setting))
self._ietf_saved_context = django.test.utils.override_settings(**self._ietf_temp_dirs)
self._ietf_saved_context.enable()
def tearDown(self):
self._ietf_saved_context.disable()
for dir in self._ietf_temp_dirs.values():
shutil.rmtree(dir)
super().tearDown()

View file

@ -188,6 +188,7 @@ class TemplateChecksTestCase(TestCase):
templates = {} # type: Dict[str, Template] templates = {} # type: Dict[str, Template]
def setUp(self): def setUp(self):
super().setUp()
set_coverage_checking(False) set_coverage_checking(False)
self.paths = list(get_template_paths()) self.paths = list(get_template_paths())
self.paths.sort() self.paths.sort()
@ -199,7 +200,7 @@ class TemplateChecksTestCase(TestCase):
def tearDown(self): def tearDown(self):
set_coverage_checking(True) set_coverage_checking(True)
pass super().tearDown()
def test_parse_templates(self): def test_parse_templates(self):
errors = [] errors = []
@ -294,6 +295,7 @@ class TemplateChecksTestCase(TestCase):
class TestWikiGlueManagementCommand(TestCase): class TestWikiGlueManagementCommand(TestCase):
def setUp(self): def setUp(self):
super().setUp()
# We create temporary wiki and svn directories, and provide them to the management # We create temporary wiki and svn directories, and provide them to the management
# command through command line switches. We have to do it this way because the # command through command line switches. We have to do it this way because the
# management command reads in its own copy of settings.py in its own python # management command reads in its own copy of settings.py in its own python
@ -310,6 +312,7 @@ class TestWikiGlueManagementCommand(TestCase):
shutil.rmtree(os.path.dirname(self.wiki_dir_pattern)) shutil.rmtree(os.path.dirname(self.wiki_dir_pattern))
shutil.rmtree(os.path.dirname(self.svn_dir_pattern)) shutil.rmtree(os.path.dirname(self.svn_dir_pattern))
set_coverage_checking(True) set_coverage_checking(True)
super().tearDown()
def test_wiki_create_output(self): def test_wiki_create_output(self):
for group_type in ['wg','rg','ag','area','rag']: for group_type in ['wg','rg','ag','area','rag']:
@ -423,6 +426,7 @@ class TestBowerStaticFiles(TestCase):
class DraftTests(TestCase): class DraftTests(TestCase):
def setUp(self): def setUp(self):
super().setUp()
file,_ = submission_file(name='draft-test-draft-class',rev='00',format='txt',templatename='test_submission.txt',group=None) file,_ = submission_file(name='draft-test-draft-class',rev='00',format='txt',templatename='test_submission.txt',group=None)
self.draft = Draft(text=file.getvalue(),source='draft-test-draft-class-00.txt',name_from_source=False) self.draft = Draft(text=file.getvalue(),source='draft-test-draft-class-00.txt',name_from_source=False)