From 6227162e536b5b74ad2c5ae7279ace2cfd8310a9 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Mon, 13 Jul 2020 17:36:34 +0000 Subject: [PATCH] Updated mgmt command to find github repos to back up. Improved test coverage of branch changes. Branch ready for merge. - Legacy-Id: 18163 --- .../commands/find_github_backup_info.py | 30 ++++++++++++++----- ietf/doc/tests_draft.py | 5 ++-- .../0034_populate_groupextresources.py | 2 +- ietf/group/tests_info.py | 17 ++++++++--- ietf/group/views.py | 9 ------ ietf/ietfauth/tests.py | 6 ++-- 6 files changed, 44 insertions(+), 25 deletions(-) diff --git a/ietf/doc/management/commands/find_github_backup_info.py b/ietf/doc/management/commands/find_github_backup_info.py index 77a7e86cb..a030c74b6 100644 --- a/ietf/doc/management/commands/find_github_backup_info.py +++ b/ietf/doc/management/commands/find_github_backup_info.py @@ -2,8 +2,8 @@ import json from django.core.management.base import BaseCommand +from django.db.models import F -from ietf.extresource.models import ExtResource from ietf.doc.models import DocExtResource from ietf.group.models import GroupExtResource from ietf.person.models import PersonExtResource @@ -14,17 +14,33 @@ class Command(BaseCommand): def handle(self, *args, **options): info_dict = {} - for repo in ExtResource.objects.filter(name__slug='github_repo'): + + + for repo in DocExtResource.objects.filter(name__slug='github_repo'): + if not repo.value.endswith('/'): + repo.value += '/' if repo not in info_dict: info_dict[repo.value] = [] - - for username in DocExtResource.objects.filter(extresource__name__slug='github_username', doc__name__in=repo.docextresource_set.values_list('doc__name',flat=True).distinct()): + for username in DocExtResource.objects.filter(name__slug='github_username', doc=F('doc')): info_dict[repo.value].push(username.value) - for username in GroupExtResource.objects.filter(extresource__name__slug='github_username', group__acronym__in=repo.groupextresource_set.values_list('group__acronym',flat=True).distinct()): + for repo in GroupExtResource.objects.filter(name__slug='github_repo'): + if not repo.value.endswith('/'): + repo.value += '/' + if repo not in info_dict: + info_dict[repo.value] = [] + for username in GroupExtResource.objects.filter(name__slug='github_username', group=F('group')): info_dict[repo.value].push(username.value) - for username in PersonExtResource.objects.filter(extresource__name__slug='github_username', person_id__in=repo.personextresource_set.values_list('person__id',flat=True).distinct()): + for repo in PersonExtResource.objects.filter(name__slug='github_repo'): + if not repo.value.endswith('/'): + repo.value += '/' + if repo not in info_dict: + info_dict[repo.value] = [] + for username in PersonExtResource.objects.filter(name__slug='github_username', person=F('person')): info_dict[repo.value].push(username.value) - print (json.dumps(info_dict)) + #print (json.dumps(info_dict)) + # For now, all we need are the repo names + for name in info_dict.keys(): + print(name) diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py index abea8cd5a..0b2d8327e 100644 --- a/ietf/doc/tests_draft.py +++ b/ietf/doc/tests_draft.py @@ -1117,8 +1117,8 @@ class IndividualInfoFormsTests(TestCase): badlines = ( 'github_repo https://github3.com/some/repo', 'github_notify badaddr', - 'website /not/a/good/url' - 'notavalidtag blahblahblah' + 'website /not/a/good/url', + 'notavalidtag blahblahblah', ) for line in badlines: @@ -1140,6 +1140,7 @@ class IndividualInfoFormsTests(TestCase): self.assertIn('github_username githubuser', doc.latest_event(DocEvent,type="changed_document").desc) self.assertEqual(doc.docextresource_set.count(), 3) self.assertEqual(doc.docextresource_set.get(name__slug='github_repo').display_name, 'Some display text') + self.assertIn(doc.docextresource_set.first().name.slug,str(doc.docextresource_set.first())) class SubmitToIesgTests(TestCase): diff --git a/ietf/group/migrations/0034_populate_groupextresources.py b/ietf/group/migrations/0034_populate_groupextresources.py index 8910cc122..e15c4201e 100644 --- a/ietf/group/migrations/0034_populate_groupextresources.py +++ b/ietf/group/migrations/0034_populate_groupextresources.py @@ -68,7 +68,7 @@ def forward(apps, schema_editor): name = ExtResourceName.objects.get(slug=slug) try: validate_external_resource_value(name, group_url.url) - GroupExtResource.objects.create(group=group_url.group, name_id=slug, value=group_url.url, display_name=group_url.name) # TODO: validate this value against name.type + GroupExtResource.objects.create(group=group_url.group, name_id=slug, value=group_url.url, display_name=group_url.name) except ValidationError as e: # pyflakes:ignore print("Failed validation:", group_url.url, e, file=stats_file) stats['failed_validation'] +=1 diff --git a/ietf/group/tests_info.py b/ietf/group/tests_info.py index 4a25060e7..304fe9eec 100644 --- a/ietf/group/tests_info.py +++ b/ietf/group/tests_info.py @@ -31,7 +31,7 @@ from ietf.group.factories import (GroupFactory, RoleFactory, GroupEventFactory, from ietf.group.models import Group, GroupEvent, GroupMilestone, GroupStateTransitions, Role from ietf.group.utils import save_group_in_history, setup_default_community_list_for_group from ietf.meeting.factories import SessionFactory -from ietf.name.models import DocTagName, GroupStateName, GroupTypeName +from ietf.name.models import DocTagName, GroupStateName, GroupTypeName, ExtResourceName from ietf.person.models import Person, Email from ietf.person.factories import PersonFactory from ietf.review.factories import ReviewRequestFactory, ReviewAssignmentFactory @@ -634,6 +634,7 @@ class GroupEditTests(TestCase): def test_edit_extresources(self): group = GroupFactory(acronym='mars',parent=GroupFactory(type_id='area')) CharterFactory(group=group) + ExtResourceName.objects.create(slug='keymaster', name='Keymaster', type_id='email') url = urlreverse('ietf.group.views.edit', kwargs=dict(group_type=group.type_id, acronym=group.acronym, action="edit", field="resources")) login_testing_unauthorized(self, "secretary", url) @@ -646,8 +647,9 @@ class GroupEditTests(TestCase): badlines = ( 'github_repo https://github3.com/some/repo', 'github_notify badaddr', - 'website /not/a/good/url' - 'notavalidtag blahblahblah' + 'website /not/a/good/url', + 'notavalidtag blahblahblah', + 'github_repo', ) for line in badlines: @@ -660,6 +662,8 @@ class GroupEditTests(TestCase): github_repo https://github.com/some/repo Some display text github_username githubuser webpage http://example.com/http/is/fine + jabber_room xmpp:mars@jabber.example.com + keymaster keymaster@example.org Group Rooter """ r = self.client.post(url, dict(resources=goodlines, submit="1")) @@ -667,8 +671,13 @@ class GroupEditTests(TestCase): group = Group.objects.get(acronym=group.acronym) self.assertEqual(group.latest_event(GroupEvent,type="info_changed").desc[:20], 'Resources changed to') self.assertIn('github_username githubuser', group.latest_event(GroupEvent,type="info_changed").desc) - self.assertEqual(group.groupextresource_set.count(), 3) + self.assertEqual(group.groupextresource_set.count(), 5) self.assertEqual(group.groupextresource_set.get(name__slug='github_repo').display_name, 'Some display text') + self.assertIn(group.groupextresource_set.first().name.slug, str(group.groupextresource_set.first())) + + # exercise format_resources + r = self.client.get(url) + self.assertIn('Group Rooter', unicontent(r)) def test_edit_field(self): diff --git a/ietf/group/views.py b/ietf/group/views.py index 9a4e2c0e6..4f7b4d90f 100644 --- a/ietf/group/views.py +++ b/ietf/group/views.py @@ -860,15 +860,6 @@ def edit(request, group_type=None, acronym=None, action="edit", field=None): return entry % dict(attr=attr, new=new, old=old) - def format_urls(urls, fs="\n"): - res = [] - for u in urls: - if u.name: - res.append("%s (%s)" % (u.url, u.name)) - else: - res.append(u.url) - return fs.join(res) - def format_resources(resources, fs="\n"): res = [] for r in resources: diff --git a/ietf/ietfauth/tests.py b/ietf/ietfauth/tests.py index 41bdf6594..19adf26dc 100644 --- a/ietf/ietfauth/tests.py +++ b/ietf/ietfauth/tests.py @@ -681,8 +681,9 @@ class IetfAuthTests(TestCase): badlines = ( 'github_repo https://github3.com/some/repo', 'github_notify badaddr', - 'website /not/a/good/url' - 'notavalidtag blahblahblah' + 'website /not/a/good/url', + 'notavalidtag blahblahblah', + 'website', ) for line in badlines: @@ -701,6 +702,7 @@ class IetfAuthTests(TestCase): self.assertEqual(r.status_code,302) self.assertEqual(person.personextresource_set.count(), 3) self.assertEqual(person.personextresource_set.get(name__slug='github_repo').display_name, 'Some display text') + self.assertIn(person.personextresource_set.first().name.slug, str(person.personextresource_set.first())) class OpenIDConnectTests(TestCase):