Skip to content
This repository was archived by the owner on Jun 13, 2025. It is now read-only.

Commit 46b727b

Browse files
committed
lint, update with tests
1 parent 23419a2 commit 46b727b

File tree

3 files changed

+65
-18
lines changed

3 files changed

+65
-18
lines changed

codecov_auth/admin.py

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import csv
21
import logging
32
from datetime import timedelta
43
from typing import Optional, Sequence
4+
55
import django.forms as forms
66
from django.conf import settings
77
from django.contrib import admin, messages
88
from django.contrib.admin.models import LogEntry
99
from django.db.models import OuterRef, Subquery
1010
from django.db.models.fields import BLANK_CHOICE_DASH
1111
from django.forms import CheckboxInput, Select, Textarea
12-
from django.http import HttpRequest, HttpResponse
12+
from django.http import HttpRequest
1313
from django.shortcuts import redirect, render
1414
from django.utils import timezone
1515
from django.utils.html import format_html
@@ -25,7 +25,7 @@
2525

2626
from codecov.admin import AdminMixin
2727
from codecov.commands.exceptions import ValidationError
28-
from codecov_auth.helpers import History
28+
from codecov_auth.helpers import History, export_to_csv
2929
from codecov_auth.models import OrganizationLevelToken, Owner, SentryUser, Session, User
3030
from codecov_auth.services.org_level_token_service import OrgLevelTokenService
3131
from services.task import TaskService
@@ -734,21 +734,6 @@ class PlansInline(admin.TabularInline):
734734
Plan._meta.get_field("benefits"): {"widget": Textarea(attrs={"rows": 3})},
735735
}
736736

737-
def export_to_csv(modeladmin, request, queryset):
738-
model = queryset.model
739-
response = HttpResponse(content_type="text/csv")
740-
response["Content-Disposition"] = f'attachment; filename="{model._meta.model_name}s.csv"'
741-
writer = csv.writer(response)
742-
743-
writer.writerow([field.name for field in model._meta.fields])
744-
745-
for obj in queryset:
746-
writer.writerow([getattr(obj, field.name) for field in model._meta.fields])
747-
748-
return response
749-
750-
export_to_csv.short_description = "Export selected items to CSV"
751-
752737

753738
@admin.register(Tier)
754739
class TierAdmin(admin.ModelAdmin):

codecov_auth/helpers.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
import csv
12
from traceback import format_stack
23

34
import requests
45
from django.contrib.admin.models import CHANGE, LogEntry
56
from django.contrib.contenttypes.models import ContentType
7+
from django.http import HttpResponse
68

79
from codecov_auth.constants import GITLAB_BASE_URL
810

@@ -69,3 +71,22 @@ def log(objects, message, user, action_flag=None, add_traceback=False):
6971
change_message=message,
7072
action_flag=action_flag,
7173
)
74+
75+
76+
def export_to_csv(modeladmin, request, queryset):
77+
model = queryset.model
78+
response = HttpResponse(content_type="text/csv")
79+
response["Content-Disposition"] = (
80+
f'attachment; filename="{model._meta.model_name}s.csv"'
81+
)
82+
writer = csv.writer(response)
83+
84+
writer.writerow([field.name for field in model._meta.fields])
85+
86+
for obj in queryset:
87+
writer.writerow([getattr(obj, field.name) for field in model._meta.fields])
88+
89+
return response
90+
91+
92+
export_to_csv.short_description = "Export selected items to CSV"

codecov_auth/tests/test_admin.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,6 +1007,23 @@ def test_plan_change_form_validation(self):
10071007
self.assertEqual(response.status_code, 200)
10081008
self.assertContains(response, "Monthly uploads limit cannot be negative.")
10091009

1010+
def test_export_to_csv(self):
1011+
response = self.client.post(
1012+
reverse("admin:codecov_auth_plan_changelist"),
1013+
data={"action": "export_to_csv", ACTION_CHECKBOX_NAME: [self.plan.pk]},
1014+
)
1015+
self.assertEqual(response.status_code, 200)
1016+
1017+
def test_export_to_csv_with_multiple_selected_items(self):
1018+
response = self.client.post(
1019+
reverse("admin:codecov_auth_plan_changelist"),
1020+
data={
1021+
"action": "export_to_csv",
1022+
ACTION_CHECKBOX_NAME: [self.plan.pk, self.tier.pk],
1023+
},
1024+
)
1025+
self.assertEqual(response.status_code, 200)
1026+
10101027

10111028
class TierAdminTest(TestCase):
10121029
def setUp(self):
@@ -1051,3 +1068,27 @@ def test_tier_change_form(self):
10511068
"private_repo_support",
10521069
]:
10531070
self.assertContains(response, f"id_{field}")
1071+
1072+
def test_export_to_csv(self):
1073+
response = self.client.post(
1074+
reverse("admin:codecov_auth_tier_changelist"),
1075+
data={"action": "export_to_csv", ACTION_CHECKBOX_NAME: [self.tier.pk]},
1076+
)
1077+
self.assertEqual(response.status_code, 200)
1078+
1079+
def test_export_to_csv_with_multiple_selected_items(self):
1080+
response = self.client.post(
1081+
reverse("admin:codecov_auth_tier_changelist"),
1082+
data={
1083+
"action": "export_to_csv",
1084+
ACTION_CHECKBOX_NAME: [self.tier.pk, self.plan.pk],
1085+
},
1086+
)
1087+
self.assertEqual(response.status_code, 200)
1088+
1089+
def test_export_to_csv_with_no_selected_items(self):
1090+
response = self.client.post(
1091+
reverse("admin:codecov_auth_tier_changelist"),
1092+
data={"action": "export_to_csv"},
1093+
)
1094+
self.assertEqual(response.status_code, 200)

0 commit comments

Comments
 (0)