-
Notifications
You must be signed in to change notification settings - Fork 378
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: do nothing if rfc has no draft; add test (#6960)
* fix: Check that rfc came from draft first * test: Add mgmt command test * test: Cannot force-reset draftless RFC
- Loading branch information
1 parent
b653892
commit 4227ef5
Showing
2 changed files
with
77 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
# Copyright The IETF Trust 2024, All Rights Reserved | ||
# -*- coding: utf-8 -*- | ||
|
||
from io import StringIO | ||
|
||
from django.core.management import call_command, CommandError | ||
|
||
from ietf.doc.factories import DocumentAuthorFactory, WgDraftFactory, WgRfcFactory | ||
from ietf.doc.models import Document, DocumentAuthor | ||
from ietf.utils.test_utils import TestCase | ||
|
||
|
||
class CommandTests(TestCase): | ||
@staticmethod | ||
def _call_command(command_name, *args, **options): | ||
"""Call command, capturing (and suppressing) output""" | ||
out = StringIO() | ||
err = StringIO() | ||
options["stdout"] = out | ||
options["stderr"] = err | ||
call_command(command_name, *args, **options) | ||
return out.getvalue(), err.getvalue() | ||
|
||
def test_reset_rfc_authors(self): | ||
command_name = "reset_rfc_authors" | ||
|
||
draft = WgDraftFactory() | ||
DocumentAuthorFactory.create_batch(3, document=draft) | ||
rfc = WgRfcFactory() # rfc does not yet have a draft | ||
DocumentAuthorFactory.create_batch(3, document=rfc) | ||
bad_rfc_num = ( | ||
1 | ||
+ Document.objects.filter(rfc_number__isnull=False) | ||
.order_by("-rfc_number") | ||
.first() | ||
.rfc_number | ||
) | ||
docauthor_fields = [ | ||
field.name | ||
for field in DocumentAuthor._meta.get_fields() | ||
if field.name not in ["document", "id"] | ||
] | ||
|
||
with self.assertRaises(CommandError, msg="Cannot reset a bad RFC number"): | ||
self._call_command(command_name, bad_rfc_num) | ||
|
||
with self.assertRaises(CommandError, msg="Cannot reset an RFC with no draft"): | ||
self._call_command(command_name, rfc.rfc_number) | ||
|
||
with self.assertRaises(CommandError, msg="Cannot force-reset an RFC with no draft"): | ||
self._call_command(command_name, rfc.rfc_number, "--force") | ||
|
||
# Link the draft to the rfc | ||
rfc.targets_related.create(relationship_id="became_rfc", source=draft) | ||
|
||
with self.assertRaises(CommandError, msg="Cannot reset an RFC with authors"): | ||
self._call_command(command_name, rfc.rfc_number) | ||
|
||
# Calling with force should work | ||
self._call_command(command_name, rfc.rfc_number, "--force") | ||
self.assertCountEqual( | ||
draft.documentauthor_set.values(*docauthor_fields), | ||
rfc.documentauthor_set.values(*docauthor_fields), | ||
) | ||
|
||
# Calling on an RFC with no authors should also work | ||
rfc.documentauthor_set.all().delete() | ||
self._call_command(command_name, rfc.rfc_number) | ||
self.assertCountEqual( | ||
draft.documentauthor_set.values(*docauthor_fields), | ||
rfc.documentauthor_set.values(*docauthor_fields), | ||
) |