Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions src/alerts/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ def get_alert_types(alert_type_id: int | None = None, alert_type: str | None = N
"""
alert_type_id_filter = Q()
if alert_type_id is not None:
alert_type_id_filter = Q(id=alert_type_id)
alert_type_id_filter = Q(pk=alert_type_id)

alert_type_filter = Q()
if alert_type is not None:
Expand All @@ -302,7 +302,7 @@ def save_alert_type(alert_type_data: dict[str, Any]) -> AlertType:
The created or updated AlertType object.
"""
if alert_type_data.get("id", None) is not None:
alert_type = AlertType.objects.get(id=alert_type_data["id"])
alert_type = AlertType.objects.get(pk=alert_type_data["id"])
else:
alert_type = AlertType()
alert_type.alert_typ = alert_type_data["alert_typ"]
Expand All @@ -315,4 +315,9 @@ def save_alert_type(alert_type_data: dict[str, Any]) -> AlertType:
).first()
alert_type.void_ind = alert_type_data.get("void_ind", "n")
alert_type.save()
return alert_type
return alert_type

def stage_field_schedule_alerts(*args, **kwargs):
"""Re-export from alerts.util_alert_definitions for backward compatibility."""
from alerts.util_alert_definitions import stage_field_schedule_alerts as _fn
return _fn(*args, **kwargs)
5 changes: 4 additions & 1 deletion src/alerts/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,10 @@ def fun():
alert_type_id = request.query_params.get("id", None)

alert_types = get_alert_types(alert_type_id)
serializer = AlertTypeSerializer(alert_types, many=alert_type_id is None)
if alert_type_id is not None:
serializer = AlertTypeSerializer(alert_types.first())
else:
serializer = AlertTypeSerializer(alert_types, many=True)
return Response(serializer.data)

return access_response(
Expand Down
16 changes: 16 additions & 0 deletions src/form/migrations/0066_question_question_flow.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('form', '0065_flow_form_based'),
]

operations = [
migrations.AddField(
model_name='question',
name='question_flow',
field=models.ManyToManyField(blank=True, to='form.flow'),
),
]
1 change: 1 addition & 0 deletions src/form/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ class Question(models.Model):
value_multiplier = models.IntegerField(null=True, default=None)
active = models.CharField(max_length=1, default="y")
void_ind = models.CharField(max_length=1, default="n")
question_flow = models.ManyToManyField("Flow", blank=True)

def __str__(self):
return f"{self.id} {self.question}"
Expand Down
12 changes: 7 additions & 5 deletions src/form/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -299,11 +299,11 @@ def save_question(data):
question.value_multiplier = data.get("value_multiplier", None)
question.svg = data.get("svg", None)

question.save()

for qfid in data.get("question_flow_id_set", []):
question.question_flow.add(Flow.objects.get(id=qfid))

question.save()

if data["form_typ"]["form_typ"] in ["pit", "field"]:
if data.get("scout_question", None).get("id", None) is not None:
sq = scouting.models.Question.objects.get(id=data["scout_question"]["id"])
Expand Down Expand Up @@ -353,7 +353,7 @@ def save_question(data):
Answer(response=qa, question=question, value="!EXIST", void_ind="n").save()

if (
data["question_typ"]["is_list"] == "y"
data["question_typ"].get("is_list", "n") == "y"
and len(data.get("questionoption_set", [])) <= 0
):
raise Exception("Select questions must have options.")
Expand All @@ -373,6 +373,8 @@ def save_question(data):

qop.save()

return question


def get_question_types():
qts = QuestionType.objects.filter(void_ind="n").order_by(Lower("question_typ_nm"))
Expand Down Expand Up @@ -463,7 +465,7 @@ def save_response(data):
if data.get("response_id", None) is None:
response = Response()
else:
response = Response.objects.get(response_id=data["response_id"])
response = Response.objects.get(id=data["response_id"])

response.form_typ_id = data["form_typ"]
response.time = data["time"]
Expand All @@ -473,7 +475,7 @@ def save_response(data):


def delete_response(response_id: int):
res = Response.objects.get(response_id=response_id)
res = Response.objects.get(id=response_id)

res.void_ind = "y"
res._change_reason = "User deleted"
Expand Down
3 changes: 2 additions & 1 deletion src/scouting/field/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
ResponseColumnsView,
ResponsesView,
CheckInView,
ScoutingResponsesView,
)

app_name = "scouting_field"
Expand All @@ -12,6 +13,6 @@
path("responses/", ResponsesView.as_view(), name="responses"),
path("check-in/", CheckInView.as_view(), name="check-in"),
path("form/", FormView.as_view(), name="form"),
# path("scouting-responses/", ScoutingResponsesView.as_view()),
path("scouting-responses/", ScoutingResponsesView.as_view(), name="scouting-responses"),
path("response-columns/", ResponseColumnsView.as_view(), name="response-columns"),
]
2 changes: 1 addition & 1 deletion src/scouting/strategizing/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@ def save_dashboard(data: dict[str, Any], user_id: int) -> None:
else:
dashboard = Dashboard.objects.get(id=data["id"])

if dashboard.season is None:
if dashboard.season_id is None:
dashboard.season = scouting.util.get_current_season()

dashboard.active = data["active"]
Expand Down
2 changes: 1 addition & 1 deletion src/user/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class GroupSerializer(serializers.Serializer):
class PhoneTypeSerializer(serializers.Serializer):
"""Serializer for phone type objects used for SMS messaging."""

id = serializers.IntegerField(read_only=True)
id = serializers.IntegerField(required=False, allow_null=True)
carrier = serializers.CharField()
phone_type = serializers.CharField()

Expand Down
54 changes: 54 additions & 0 deletions tests/admin/test_admin_phone_type_extra.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
"""
Coverage tests for admin/views.py lines 259-262 (PhoneType update by ID).
"""
import pytest
from unittest.mock import patch


@pytest.mark.django_db
class TestPhoneTypeUpdateById:
"""Test updating an existing PhoneType by ID (lines 259-262)."""

url = "/admin/phone-type/"

def test_post_update_existing_phone_type(self, api_client, test_user):
"""Lines 259-262: update phone type when id is provided."""
import user.models as user_models

pt = user_models.PhoneType.objects.create(
phone_type="Verizon", carrier="ATT"
)

test_user.is_superuser = True
test_user.save()
api_client.force_authenticate(user=test_user)

with patch("admin.views.has_access", return_value=True):
response = api_client.post(
self.url,
{"id": pt.id, "phone_type": "T-Mobile", "carrier": "T-Mobile"},
format="json",
)

assert response.status_code == 200
assert response.data.get("error") is not True

pt.refresh_from_db()
assert pt.phone_type == "T-Mobile"
assert pt.carrier == "T-Mobile"

def test_post_create_new_phone_type(self, api_client, test_user):
"""Lines 264-266: create phone type when id is absent."""
test_user.is_superuser = True
test_user.save()
api_client.force_authenticate(user=test_user)

with patch("admin.views.has_access", return_value=True):
response = api_client.post(
self.url,
{"phone_type": "Sprint", "carrier": "Sprint"},
format="json",
)

assert response.status_code == 200
assert response.data.get("error") is not True
Loading