Skip to content

Commit

Permalink
Add specific tests for the VragenService
Browse files Browse the repository at this point in the history
  • Loading branch information
swrichards committed Oct 30, 2024
1 parent 033e7bd commit b3c72a2
Show file tree
Hide file tree
Showing 2 changed files with 169 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/open_inwoner/openklant/tests/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ def __init__(self):
self.klant_contactmoment4 = generate_oas_component_cached(
"cmc",
"schemas/Klantcontactmoment",
uuid="aaaaaaaa-aaaa-aaaa-aaaa-ffffffffffff",
url=f"{CONTACTMOMENTEN_ROOT}klantcontactmomenten/aaaaaaaa-aaaa-aaaa-aaaa-ffffffffffff",
klant=self.klant_vestiging["url"],
contactmoment=self.contactmoment_vestiging["url"],
Expand Down
169 changes: 168 additions & 1 deletion src/open_inwoner/openklant/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from unittest.mock import patch
from uuid import uuid4

from django.test import modify_settings, override_settings
from django.test import TestCase, modify_settings, override_settings
from django.urls import reverse
from django.utils.translation import gettext as _

Expand All @@ -13,6 +13,7 @@
from zgw_consumers.api_models.base import factory

from open_inwoner.accounts.tests.factories import UserFactory
from open_inwoner.accounts.views.contactmoments import ContactMomentenVragenService
from open_inwoner.configurations.models import SiteConfiguration
from open_inwoner.openklant.api_models import ContactMoment, Klant, KlantContactMoment
from open_inwoner.openklant.constants import Status
Expand All @@ -33,6 +34,172 @@
from .factories import KlantContactMomentAnswerFactory


@requests_mock.Mocker()
@override_settings(ROOT_URLCONF="open_inwoner.cms.tests.urls")
class ContactMomentenVragenServiceTestCase(TestCase):
maxDiff = None

def setUp(self):
super().setUp()
MockAPIReadData.setUpServices()
self.service = ContactMomentenVragenService()
self.user = UserFactory()
klanten_config = OpenKlantConfig.get_solo()
klanten_config.exclude_contactmoment_kanalen = ["intern_initiatief"]
klanten_config.save()

self.contactformsubject = ContactFormSubject.objects.create(
subject="oip_subject",
subject_code="e_suite_subject_code",
config=klanten_config,
)

def test_list_questions_returns_expected_rows(self, m):
data = MockAPIReadData().install_mocks(m)
config = OpenKlantConfig.get_solo()

for user, params, expected_klantcontact, expected_contactmoment, use_rsin in (
(
data.user,
{"user_bsn": "100000001"},
data.klant_contactmoment,
data.contactmoment,
False,
),
(
data.eherkenning_user,
{"user_kvk_or_rsin": "12345678"},
data.klant_contactmoment2,
data.contactmoment2,
False,
),
(
data.eherkenning_user,
{"user_kvk_or_rsin": "12345678", "vestigingsnummer": "1234"},
data.klant_contactmoment4,
data.contactmoment_vestiging,
False,
),
(
data.eherkenning_user,
# RSIN case
{"user_kvk_or_rsin": "000000000", "vestigingsnummer": "1234"},
data.klant_contactmoment4,
data.contactmoment_vestiging,
True,
),
(
data.eherkenning_user,
# RSIN case
{"user_kvk_or_rsin": "000000000"},
data.klant_contactmoment2,
data.contactmoment2,
True,
),
):
with self.subTest(f"{user=} {params=} {use_rsin=}"):
config.use_rsin_for_innNnpId_query_parameter = use_rsin
config.save()
questions = list(self.service.list_questions(params, user))

detail_url = reverse(
"cases:contactmoment_detail",
kwargs={"kcm_uuid": uuid_from_url(expected_klantcontact["url"])},
)
self.assertEqual(len(questions), 1)
self.assertEqual(
questions[0],
{
"registered_date": datetime.fromisoformat(
expected_contactmoment["registratiedatum"]
),
"channel": expected_contactmoment["kanaal"].title(),
"question_text": expected_contactmoment["tekst"],
"subject": self.contactformsubject.subject,
"answer_text": expected_contactmoment["antwoord"],
"identification": expected_contactmoment["identificatie"],
"status": str(Status.afgehandeld.label),
"case_detail_url": detail_url,
"new_answer_available": False,
},
)
m.reset_mock()
data = MockAPIReadData().install_mocks(m)

def test_retrieve_question_returns_expected_result(self, m):
data = MockAPIReadData().install_mocks(m)
config = OpenKlantConfig.get_solo()

for user, params, expected_klantcontact, expected_contactmoment, use_rsin in (
(
data.user,
{"user_bsn": "100000001"},
data.klant_contactmoment,
data.contactmoment,
False,
),
(
data.eherkenning_user,
{"user_kvk_or_rsin": "12345678"},
data.klant_contactmoment2,
data.contactmoment2,
False,
),
(
data.eherkenning_user,
{"user_kvk_or_rsin": "12345678", "vestigingsnummer": "1234"},
data.klant_contactmoment4,
data.contactmoment_vestiging,
False,
),
(
data.eherkenning_user,
# RSIN case
{"user_kvk_or_rsin": "000000000", "vestigingsnummer": "1234"},
data.klant_contactmoment4,
data.contactmoment_vestiging,
True,
),
(
data.eherkenning_user,
# RSIN case
{"user_kvk_or_rsin": "000000000"},
data.klant_contactmoment2,
data.contactmoment2,
True,
),
):
with self.subTest(f"{user=} {params=} {use_rsin=}"):
config.use_rsin_for_innNnpId_query_parameter = use_rsin
config.save()
question, _ = self.service.retrieve_question(
params, expected_klantcontact["uuid"], user
)

detail_url = reverse(
"cases:contactmoment_detail",
kwargs={"kcm_uuid": uuid_from_url(expected_klantcontact["url"])},
)
self.assertEqual(
question,
{
"registered_date": datetime.fromisoformat(
expected_contactmoment["registratiedatum"]
),
"channel": expected_contactmoment["kanaal"].title(),
"question_text": expected_contactmoment["tekst"],
"subject": self.contactformsubject.subject,
"answer_text": expected_contactmoment["antwoord"],
"identification": expected_contactmoment["identificatie"],
"status": str(Status.afgehandeld.label),
"case_detail_url": detail_url,
"new_answer_available": False,
},
)
m.reset_mock()
data = MockAPIReadData().install_mocks(m)


@requests_mock.Mocker()
@patch(
"open_inwoner.accounts.views.contactmoments.get_kcm_answer_mapping", autospec=True
Expand Down

0 comments on commit b3c72a2

Please sign in to comment.