diff --git a/devel/tests/test_reports.py b/devel/tests/test_reports.py index fefd8582..96b85a74 100644 --- a/devel/tests/test_reports.py +++ b/devel/tests/test_reports.py @@ -1,6 +1,8 @@ from django.contrib.auth.models import User from django.test import TransactionTestCase +from packages.models import PackageRelation + class DeveloperReport(TransactionTestCase): fixtures = ['main/fixtures/arches.json', 'main/fixtures/repos.json', @@ -73,3 +75,26 @@ def test_reports_pkgbases_with_username(self): def test_reports_pkgbases_invalid_report(self): response = self.client.get('/devel/reports/nonexistent/pkgbases/') self.assertEqual(response.status_code, 404) + + def test_report_filtered_by_maintainer(self): + PackageRelation.objects.create( + pkgbase='linux', + user=self.user, + type=PackageRelation.MAINTAINER, + ) + response = self.client.get( + f'/devel/reports/old/{self.user.username}/', follow=True) + self.assertEqual(response.status_code, 200) + pkgbases = {pkg.pkgbase for pkg in response.context['packages']} + self.assertEqual(pkgbases, {'linux'}) + + def test_report_pkgbases_filtered_by_maintainer(self): + PackageRelation.objects.create( + pkgbase='linux', + user=self.user, + type=PackageRelation.MAINTAINER, + ) + response = self.client.get( + f'/devel/reports/old/{self.user.username}/pkgbases/') + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content.decode().strip(), 'linux') diff --git a/devel/views.py b/devel/views.py index 61949b0b..97c78568 100644 --- a/devel/views.py +++ b/devel/views.py @@ -279,14 +279,10 @@ def change_profile(request): 'profile_form': profile_form}) -def get_report_packages(report, username): - packages = Package.objects.normal() +def get_report_packages(report, packages, username): if report.slug in ('uncompressed-man', 'uncompressed-info'): - packages = report.packages(packages, username) - else: - packages = report.packages(packages) - - return packages + return report.packages(packages, username) + return report.packages(packages) @login_required @@ -295,7 +291,14 @@ def report_pkgbases(request, report_name: str, username: str | None = None) -> H if report is None: raise Http404 - packages = get_report_packages(report, username) + packages = Package.objects.normal() + if username: + user = get_object_or_404(User, username=username, is_active=True) + maintained = PackageRelation.objects.filter( + user=user, type=PackageRelation.MAINTAINER).values('pkgbase') + packages = packages.filter(pkgbase__in=maintained) + + packages = get_report_packages(report, packages, username) pkgbases = sorted({pkg.pkgbase for pkg in packages}) return HttpResponse('\n'.join(pkgbases), content_type='text/plain') @@ -318,7 +321,7 @@ def report(request, report_name, username=None): maints = User.objects.filter(id__in=PackageRelation.objects.filter( type=PackageRelation.MAINTAINER).values('user')) - packages = get_report_packages(report, username) + packages = get_report_packages(report, packages, username) arches = {pkg.arch for pkg in packages} repos = {pkg.repo for pkg in packages} context = {