Skip to content

Commit

Permalink
👌 [#2041] PR feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
stevenbal committed Mar 15, 2024
1 parent 83e4b1f commit 67c28a6
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 79 deletions.
8 changes: 3 additions & 5 deletions src/open_inwoner/accounts/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -278,11 +278,9 @@ class Meta:
| Q(login_type=LoginTypeChoices.eherkenning),
name="check_kvk_or_rsin_only_set_when_login_eherkenning",
),
# CheckConstraint(
# check=((Q(kvk="") & ~Q(rsin="")) | (~Q(kvk="") & Q(rsin="")))
# | ~Q(login_type=LoginTypeChoices.eherkenning),
# name="check_kvk_or_rsin_exclusive_when_login_eherkenning",
# ),
# NOTE: we do not need a constraint that enforces exclusivity between
# `KVK` and `RSIN`, because companies have both of these attributes and we
# need both of them to fetch cases for these companies
]

def __init__(self, *args, **kwargs):
Expand Down
114 changes: 70 additions & 44 deletions src/open_inwoner/accounts/tests/test_profile_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -541,52 +541,78 @@ def test_modify_phone_and_email_updates_klant_api(self, m):
)

@requests_mock.Mocker()
def test_eherkenning_user_updates_klant_api(self, m):
def test_eherkenning_user_updates_klant_api_with_rsin(self, m):
MockAPIReadPatchData.setUpServices()
data = MockAPIReadPatchData()

for use_rsin_for_innNnpId_query_parameter in [True, False]:
with self.subTest(
use_rsin_for_innNnpId_query_parameter=use_rsin_for_innNnpId_query_parameter
):
# NOTE Explicitly creating a new Mocker object here, because for some reason
# `m` is overridden somewhere, which causes issues when `MockAPIReadPatchData.install_mocks`
# is run for the second time
with requests_mock.Mocker() as m:
data = MockAPIReadPatchData().install_mocks_eherkenning(
m, use_rsin=use_rsin_for_innNnpId_query_parameter
)

config = OpenKlantConfig.get_solo()
config.use_rsin_for_innNnpId_query_parameter = (
use_rsin_for_innNnpId_query_parameter
)
config.save()

response = self.app.get(self.url, user=data.eherkenning_user)

# reset noise from signals
m.reset_mock()
self.clearTimelineLogs()

form = response.forms["profile-edit"]
form["email"] = "[email protected]"
form["phonenumber"] = "0612345678"
form.submit()

# user data tested in other cases
self.assertTrue(data.matchers[0].called)
klant_patch_data = data.matchers[1].request_history[0].json()
self.assertEqual(
klant_patch_data,
{
"emailadres": "[email protected]",
"telefoonnummer": "0612345678",
},
)
self.assertTimelineLog("retrieved klant for user")
self.assertTimelineLog(
"patched klant from user profile edit with fields: emailadres, telefoonnummer"
)
matchers = data.install_mocks_eherkenning(m, use_rsin=True).matchers

config = OpenKlantConfig.get_solo()
config.use_rsin_for_innNnpId_query_parameter = True
config.save()

response = self.app.get(self.url, user=data.eherkenning_user)

# reset noise from signals
m.reset_mock()
self.clearTimelineLogs()

form = response.forms["profile-edit"]
form["email"] = "[email protected]"
form["phonenumber"] = "0612345678"
form.submit()

# user data tested in other cases
self.assertTrue(matchers[0].called)
klant_patch_data = matchers[1].request_history[0].json()
self.assertEqual(
klant_patch_data,
{
"emailadres": "[email protected]",
"telefoonnummer": "0612345678",
},
)
self.assertTimelineLog("retrieved klant for user")
self.assertTimelineLog(
"patched klant from user profile edit with fields: emailadres, telefoonnummer"
)

@requests_mock.Mocker()
def test_eherkenning_user_updates_klant_api_with_kvk(self, m):
MockAPIReadPatchData.setUpServices()
data = MockAPIReadPatchData()

matchers = data.install_mocks_eherkenning(m, use_rsin=False).matchers

config = OpenKlantConfig.get_solo()
config.use_rsin_for_innNnpId_query_parameter = False
config.save()

response = self.app.get(self.url, user=data.eherkenning_user)

# reset noise from signals
m.reset_mock()
self.clearTimelineLogs()

form = response.forms["profile-edit"]
form["email"] = "[email protected]"
form["phonenumber"] = "0612345678"
form.submit()

# user data tested in other cases
self.assertTrue(matchers[0].called)
klant_patch_data = matchers[1].request_history[0].json()
self.assertEqual(
klant_patch_data,
{
"emailadres": "[email protected]",
"telefoonnummer": "0612345678",
},
)
self.assertTimelineLog("retrieved klant for user")
self.assertTimelineLog(
"patched klant from user profile edit with fields: emailadres, telefoonnummer"
)

@requests_mock.Mocker()
def test_modify_phone_updates_klant_api_but_skips_unchanged(self, m):
Expand Down
12 changes: 4 additions & 8 deletions src/open_inwoner/accounts/tests/test_user_constraints.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from unittest import skip

from django.db import IntegrityError, transaction
from django.test import TestCase

Expand Down Expand Up @@ -50,12 +48,10 @@ def test_unique_rsin_when_login_herkenning(self):
with self.assertRaises(IntegrityError):
UserFactory(rsin="12345678", login_type=LoginTypeChoices.eherkenning)

@skip("Not yet implemented")
def test_not_both_kvk_and_rsin_when_login_eherkenning(self):
with self.assertRaises(IntegrityError):
UserFactory(
kvk="12345678", rsin="12345678", login_type=LoginTypeChoices.eherkenning
)
def test_both_kvk_and_rsin_when_login_eherkenning(self):
UserFactory(
kvk="12345678", rsin="12345678", login_type=LoginTypeChoices.eherkenning
)

def test_not_bsn_when_login_not_digid(self):
for login_type in [
Expand Down
14 changes: 5 additions & 9 deletions src/open_inwoner/cms/cases/tests/test_contactform.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
)
from zgw_consumers.constants import APITypes

from open_inwoner.accounts.models import User
from open_inwoner.accounts.tests.factories import (
DigidUserFactory,
eHerkenningUserFactory,
Expand Down Expand Up @@ -458,18 +457,15 @@ def test_form_success_with_api(self, m, contactmoment_mock):
def test_form_success_with_api_eherkenning_user(self, m, contactmoment_mock):
self._setUpMocks(m)
self._setUpExtraMocks(m)

eherkenning_user = eHerkenningUserFactory.create(
kvk="12345678",
rsin="000000000",
email=self.klant["emailadres"],
)
for use_rsin_for_innNnpId_query_parameter in [True, False]:
with self.subTest(
use_rsin_for_innNnpId_query_parameter=use_rsin_for_innNnpId_query_parameter
):
# FIXME for some reason creating the user outside of the loop
# makes the second iteration fail?
User.objects.filter(kvk="12345678").delete()
eherkenning_user = eHerkenningUserFactory(
kvk="12345678", rsin="000000000"
)

config = OpenKlantConfig.get_solo()
config.use_rsin_for_innNnpId_query_parameter = (
use_rsin_for_innNnpId_query_parameter
Expand Down
9 changes: 2 additions & 7 deletions src/open_inwoner/openklant/tests/data.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from requests.exceptions import RequestException
from zgw_consumers.constants import APITypes

from open_inwoner.accounts.models import User
from open_inwoner.accounts.tests.factories import (
DigidUserFactory,
eHerkenningUserFactory,
Expand Down Expand Up @@ -39,13 +38,11 @@ def setUpServices(cls):

class MockAPIReadPatchData(MockAPIData):
def __init__(self):
User.objects.filter(email="[email protected]").delete()
self.user = DigidUserFactory(
email="[email protected]",
phonenumber="0100000000",
)

User.objects.filter(kvk="12345678").delete()
self.eherkenning_user = eHerkenningUserFactory(
email="[email protected]",
kvk="12345678",
Expand Down Expand Up @@ -107,14 +104,14 @@ def install_mocks_eherkenning(self, m, use_rsin=True) -> "MockAPIReadPatchData":

class MockAPIReadData(MockAPIData):
def __init__(self):
User.objects.filter(bsn="100000001").delete()
self.user = DigidUserFactory(
bsn="100000001",
)
User.objects.filter(kvk="12345678").delete()

self.eherkenning_user = eHerkenningUserFactory(
kvk="12345678",
rsin="000000000",
email="[email protected]",
)

self.klant = generate_oas_component_cached(
Expand Down Expand Up @@ -310,11 +307,9 @@ def install_mocks(self, m, link_objectcontactmomenten=False) -> "MockAPIReadData

class MockAPICreateData(MockAPIData):
def __init__(self):
User.objects.filter(bsn="100000001").delete()
self.user = DigidUserFactory(
bsn="100000001",
)
User.objects.filter(kvk="12345678").delete()
self.eherkenning_user = eHerkenningUserFactory(
kvk="12345678",
rsin="000000000",
Expand Down
8 changes: 6 additions & 2 deletions src/open_inwoner/openklant/tests/test_contactform.py
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,8 @@ def test_submit_and_register_bsn_user_via_api(self, m):

def test_submit_and_register_kvk_or_rsin_user_via_api(self, _m):
MockAPICreateData.setUpServices()
data = MockAPICreateData()
original_phonenumber = data.eherkenning_user.phonenumber

config = OpenKlantConfig.get_solo()
config.register_contact_moment = True
Expand All @@ -456,7 +458,9 @@ def test_submit_and_register_kvk_or_rsin_user_via_api(self, _m):
)
config.save()

data = MockAPICreateData()
data.eherkenning_user.phonenumber = original_phonenumber
data.eherkenning_user.save()

data.install_mocks_eherkenning(
m, use_rsin=use_rsin_for_innNnpId_query_parameter
)
Expand Down Expand Up @@ -604,6 +608,7 @@ def test_submit_and_register_bsn_user_via_api_and_update_klant(self, m):

def test_submit_and_register_kvk_or_rsin_user_via_api_and_update_klant(self, _m):
MockAPICreateData.setUpServices()
data = MockAPICreateData()

config = OpenKlantConfig.get_solo()
config.register_contact_moment = True
Expand All @@ -625,7 +630,6 @@ def test_submit_and_register_kvk_or_rsin_user_via_api_and_update_klant(self, _m)
)
config.save()

data = MockAPICreateData()
data.install_mocks_eherkenning_missing_contact_info(
m, use_rsin=use_rsin_for_innNnpId_query_parameter
)
Expand Down
7 changes: 3 additions & 4 deletions src/open_inwoner/openklant/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ def test_list_for_bsn(self, m):
self.assertEqual(status_item.text(), f"{_('Status')}\n{_('Afgehandeld')}")

def test_list_for_kvk_or_rsin(self, m):
data = MockAPIReadData().install_mocks(m)

for use_rsin_for_innNnpId_query_parameter in [True, False]:
with self.subTest(
use_rsin_for_innNnpId_query_parameter=use_rsin_for_innNnpId_query_parameter
Expand All @@ -83,8 +85,6 @@ def test_list_for_kvk_or_rsin(self, m):
)
config.save()

data = MockAPIReadData().install_mocks(m)

detail_url = reverse(
"cases:contactmoment_detail",
kwargs={"kcm_uuid": data.klant_contactmoment2["uuid"]},
Expand Down Expand Up @@ -274,6 +274,7 @@ def test_show_detail_for_bsn_with_zaak_reformat_esuite_id(self, m):
)

def test_show_detail_for_kvk_or_rsin(self, m):
data = MockAPIReadData().install_mocks(m)
for use_rsin_for_innNnpId_query_parameter in [True, False]:
with self.subTest(
use_rsin_for_innNnpId_query_parameter=use_rsin_for_innNnpId_query_parameter
Expand All @@ -284,8 +285,6 @@ def test_show_detail_for_kvk_or_rsin(self, m):
)
config.save()

data = MockAPIReadData().install_mocks(m)

detail_url = reverse(
"cases:contactmoment_detail",
kwargs={"kcm_uuid": data.klant_contactmoment2["uuid"]},
Expand Down

0 comments on commit 67c28a6

Please sign in to comment.