Skip to content

Commit

Permalink
TP-2000-144 - Measure edit form still broken (#496)
Browse files Browse the repository at this point in the history
* add form save in TrackedModelChangeView.form_valid and add test for form save in view tests

* override get_result_object on MeasureUpdate view to update new instance components

* add docstrings to tests
  • Loading branch information
gabelton authored and kintisheff committed Feb 21, 2022
1 parent 75496e2 commit 0c077e0
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
42 changes: 41 additions & 1 deletion measures/tests/test_views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
from unittest.mock import patch

import pytest
from django.core.exceptions import ValidationError
from django.urls import reverse

from common.models.transactions import Transaction
from common.tests import factories
from common.tests.util import assert_model_view_renders
from common.tests.util import get_class_based_view_urls_matching_url
Expand All @@ -10,6 +13,7 @@
from common.tests.util import view_urlpattern_ids
from common.views import TamatoListView
from common.views import TrackedModelDetailMixin
from measures.models import Measure
from measures.validators import validate_duties
from measures.views import MeasureFootnotesUpdate
from measures.views import MeasureList
Expand Down Expand Up @@ -159,7 +163,8 @@ def test_measure_update_duty_sentence(
with MeasureForm.
Generates minimal post_data from instance and verifies that the edit
endpoint redirects successfully.
endpoint redirects successfully. Checks that latest Measure instance has the
correct components, if duty_sentence in data.
"""
post_data = measure_form.data
# Remove keys with null value to avoid TypeError
Expand All @@ -169,4 +174,39 @@ def test_measure_update_duty_sentence(
url = reverse("measure-ui-edit", args=(measure_form.instance.sid,))
client.force_login(valid_user)
response = client.post(url, data=post_data)

assert response.status_code == 302

if update_data:
tx = Transaction.objects.last()
measure = Measure.objects.approved_up_to_transaction(tx).get(
sid=measure_form.instance.sid,
)
components = measure.components.approved_up_to_transaction(tx).filter(
component_measure__sid=measure_form.instance.sid,
)

assert components.exists()
assert components.count() == 1
assert components.first().duty_amount == 10.000


# https://uktrade.atlassian.net/browse/TP2000-144
@patch("measures.forms.MeasureForm.save")
def test_measure_form_save_called_on_measure_update(
save,
client,
valid_user,
measure_form,
):
"""Until work is done to make `TrackedModel` call new_version in save() we
need to check that MeasureUpdate view explicitly calls
MeasureForm.save(commit=False)"""
post_data = measure_form.data
post_data = {k: v for k, v in post_data.items() if v is not None}
post_data["update_type"] = 1
url = reverse("measure-ui-edit", args=(measure_form.instance.sid,))
client.force_login(valid_user)
client.post(url, data=post_data)

save.assert_called_with(commit=False)
7 changes: 7 additions & 0 deletions measures/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,13 @@ def get_context_data(self, **kwargs):

return context

def get_result_object(self, form):
obj = super().get_result_object(form)
form.instance = obj
form.save(commit=False)

return obj


class MeasureConfirmUpdate(MeasureMixin, TrackedModelDetailView):
template_name = "common/confirm_update.jinja"
Expand Down

0 comments on commit 0c077e0

Please sign in to comment.