Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 90c76fa

Browse files
authored
34729 - Add Additional Data for FED Amalg Alert Warning (#4753)
* 34729 - Add additional data for FED amalg alert warning * 34729 - Lint
1 parent 585928c commit 90c76fa

6 files changed

Lines changed: 115 additions & 14 deletions

File tree

legal-api/src/legal_api/resources/v2/business/business.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,24 @@
2828
from legal_api.resources.v2.business.business_filings import saving_filings
2929
from legal_api.services import (
3030
ACCOUNT_IDENTITY,
31+
STAFF_ROLE,
3132
SYSTEM_ROLE,
3233
RegistrationBootstrapService,
3334
check_warnings,
3435
colin,
3536
flags,
3637
)
37-
from legal_api.services.authz import authorized, get_allowable_actions, get_allowed, get_could_files
38+
from legal_api.services.authz import (
39+
COLIN_SVC_ROLE,
40+
CONTACT_CENTRE_STAFF_ROLE,
41+
MAXIMUS_STAFF_ROLE,
42+
SBC_STAFF_ROLE,
43+
authorized,
44+
get_allowable_actions,
45+
get_allowed,
46+
get_could_files,
47+
has_any_roles,
48+
)
3849
from legal_api.services.permissions import ListActionsPermissionsAllowed, PermissionService
3950
from legal_api.services.search_service import AffiliationSearchDetails, BusinessSearchService
4051
from legal_api.utils.auth import jwt
@@ -72,7 +83,15 @@ def get_businesses(identifier: str):
7283
f"You are not authorized to view business {identifier}."}), \
7384
HTTPStatus.UNAUTHORIZED
7485

75-
warnings = check_warnings(business)
86+
is_staff = has_any_roles(jwt, [
87+
STAFF_ROLE,
88+
SYSTEM_ROLE,
89+
COLIN_SVC_ROLE,
90+
SBC_STAFF_ROLE,
91+
CONTACT_CENTRE_STAFF_ROLE,
92+
MAXIMUS_STAFF_ROLE,
93+
])
94+
warnings = check_warnings(business, is_staff)
7695
# TODO remove complianceWarnings line when UI has been integrated to use warnings instead of complianceWarnings
7796
business.compliance_warnings = warnings
7897
business.warnings = warnings

legal-api/src/legal_api/services/warnings/business/business_checks/business.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from .involuntary_dissolution import check_business as involuntary_dissolution_check
2323

2424

25-
def check_business(business: Business) -> list:
25+
def check_business(business: Business, is_staff: bool = False) -> list:
2626
"""Check business for warnings."""
2727
result = []
2828

@@ -31,7 +31,7 @@ def check_business(business: Business) -> list:
3131
Business.LegalTypes.PARTNERSHIP.value):
3232
result = firms_check(business)
3333
elif business.legal_type in Business.CORPS:
34-
result = corps_check(business)
34+
result = corps_check(business, is_staff)
3535

3636
if business.legal_type in InvoluntaryDissolutionService.ELIGIBLE_TYPES:
3737
result.extend(involuntary_dissolution_check(business))

legal-api/src/legal_api/services/warnings/business/business_checks/corps.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@
1818
from legal_api.services.warnings.business.business_checks import BusinessWarningCodes, WarningType
1919

2020

21-
def check_business(business: Business) -> list:
21+
def check_business(business: Business, is_staff: bool = False) -> list:
2222
"""Check business data."""
2323
result = []
2424

25-
result.extend(check_amalgamating_business(business))
25+
result.extend(check_amalgamating_business(business, is_staff))
2626
result.extend(check_transition_application(business))
2727

2828
return result
@@ -43,21 +43,25 @@ def check_transition_application(business: Business) -> list:
4343
return result
4444

4545

46-
def check_amalgamating_business(business: Business) -> list:
46+
def check_amalgamating_business(business: Business, is_staff: bool = False) -> list:
4747
"""Check if business is currently pending amalgamation."""
4848
result = []
4949

5050
filing = Business.is_pending_amalgamating_business(business.identifier)
5151

5252
# Check if a matching filing was found and if its effective date is greater than payment completion date
5353
if filing and filing.effective_date > filing.payment_completion_date:
54-
result.append({
54+
warning = {
5555
"code": "AMALGAMATING_BUSINESS",
5656
"message": "This business is part of a future effective amalgamation.",
5757
"warningType": WarningType.FUTURE_EFFECTIVE_AMALGAMATION,
5858
"data": {
59-
"amalgamationDate": filing.effective_date
59+
"amalgamationDate": filing.effective_date,
60+
"amalgamatingBusinesses": filing.filing_json["filing"]["amalgamationApplication"]["amalgamatingBusinesses"]
6061
}
61-
})
62+
}
63+
if is_staff:
64+
warning["data"]["filingId"] = filing.id
65+
result.append(warning)
6266

6367
return result

legal-api/src/legal_api/services/warnings/warning.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
from .business import check_business
1919

2020

21-
def check_warnings(business: Business) -> list:
21+
def check_warnings(business: Business, is_staff: bool = False) -> list:
2222
"""Check warnings for a business."""
2323
result = []
2424

2525
# Currently only checks for missing business info warnings but in future other warning checks can be included
2626
# e.g. compliance checks - result.extend(check_compliance(business))
27-
result.extend(check_business(business))
27+
result.extend(check_business(business, is_staff))
2828

2929
return result

legal-api/tests/unit/resources/v2/test_business.py

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,16 @@
2828
from requests import exceptions
2929

3030
from business_model.models import Amalgamation, Batch, Business, Filing, RegistrationBootstrap
31-
from legal_api.services.authz import ACCOUNT_IDENTITY, PUBLIC_USER, STAFF_ROLE, SYSTEM_ROLE
31+
from legal_api.services.authz import (
32+
ACCOUNT_IDENTITY,
33+
COLIN_SVC_ROLE,
34+
CONTACT_CENTRE_STAFF_ROLE,
35+
MAXIMUS_STAFF_ROLE,
36+
PUBLIC_USER,
37+
SBC_STAFF_ROLE,
38+
STAFF_ROLE,
39+
SYSTEM_ROLE,
40+
)
3241
from legal_api.services import flags
3342
from legal_api.services.cache import cache
3443
from legal_api.services.bootstrap import RegistrationBootstrapService
@@ -243,6 +252,40 @@ def test_get_business_info(app, session, client, jwt, requests_mock, test_name,
243252
assert registry_schemas.validate(rv.json, 'business')
244253

245254

255+
@pytest.mark.parametrize('role,expected_staff', [
256+
(STAFF_ROLE, True),
257+
(SYSTEM_ROLE, True),
258+
(COLIN_SVC_ROLE, True),
259+
(SBC_STAFF_ROLE, True),
260+
(CONTACT_CENTRE_STAFF_ROLE, True),
261+
(MAXIMUS_STAFF_ROLE, True),
262+
(PUBLIC_USER, False),
263+
])
264+
def test_get_business_info_passes_staff_status_to_warnings(
265+
app, session, client, jwt, role, expected_staff, monkeypatch, requests_mock):
266+
"""Assert that business warnings receive the correct staff status for each role."""
267+
identifier = 'BC7654321'
268+
factory_business_model(legal_name=f'{identifier} legal name',
269+
identifier=identifier,
270+
founding_date=datetime.fromtimestamp(0, UTC),
271+
last_ledger_timestamp=datetime.fromtimestamp(0, UTC),
272+
last_modified=datetime.fromtimestamp(0, UTC))
273+
warning_staff_values = []
274+
monkeypatch.setattr(
275+
'legal_api.resources.v2.business.business.check_warnings',
276+
lambda business, is_staff: warning_staff_values.append(is_staff) or []
277+
)
278+
if role == PUBLIC_USER:
279+
requests_mock.get(f"{app.config['AUTH_SVC_URL']}/entities/{identifier}/authorizations",
280+
json={'roles': ['view']})
281+
282+
rv = client.get(f'/api/v2/businesses/{identifier}',
283+
headers=create_header(jwt, [role], identifier))
284+
285+
assert rv.status_code == HTTPStatus.OK
286+
assert warning_staff_values == [expected_staff]
287+
288+
246289
@pytest.mark.parametrize('test_name,role,amalgamated', [
247290
('regular', PUBLIC_USER, False),
248291
('amalgamated', PUBLIC_USER, True),

legal-api/tests/unit/services/warnings/business/business_checks/test_corps.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ def test_check_business(session, has_amalgamation, expected_warning):
2828
business = factory_business(identifier="BC1234567")
2929

3030
mock_filing = Mock()
31+
mock_filing.id = "filing-id"
32+
mock_filing.filing_json = {
33+
"filing": {
34+
"amalgamationApplication": {
35+
"amalgamatingBusinesses": [{"identifier": "BC7654321"}]
36+
}
37+
}
38+
}
3139
if has_amalgamation:
3240
# Set effective_date in the future to simulate an amalgamation
3341
mock_filing.effective_date = datetime.now() + timedelta(days=1)
@@ -38,7 +46,7 @@ def test_check_business(session, has_amalgamation, expected_warning):
3846
mock_filing.payment_completion_date = datetime.now()
3947

4048
with patch('business_model.models.business.Business.is_pending_amalgamating_business', return_value=mock_filing):
41-
result = check_business(business)
49+
result = check_business(business, is_staff=True)
4250

4351
if expected_warning:
4452
assert len(result) == 1
@@ -48,5 +56,32 @@ def test_check_business(session, has_amalgamation, expected_warning):
4856
assert warning['warningType'] == WarningType.FUTURE_EFFECTIVE_AMALGAMATION
4957
assert 'amalgamationDate' in warning['data']
5058
assert isinstance(warning['data']['amalgamationDate'], datetime)
59+
assert warning['data']['filingId'] == "filing-id"
60+
assert warning['data']['amalgamatingBusinesses'] == [{"identifier": "BC7654321"}]
5161
else:
5262
assert len(result) == 0
63+
64+
65+
def test_check_business_excludes_filing_id_for_non_staff(session):
66+
"""Test that filing ids are only included for staff users."""
67+
business = factory_business(identifier="BC1234567")
68+
mock_filing = Mock(
69+
id="filing-id",
70+
effective_date=datetime.now() + timedelta(days=1),
71+
payment_completion_date=datetime.now(),
72+
filing_json={
73+
"filing": {
74+
"amalgamationApplication": {
75+
"amalgamatingBusinesses": [{"identifier": "BC7654321"}]
76+
}
77+
}
78+
}
79+
)
80+
81+
with patch('business_model.models.business.Business.is_pending_amalgamating_business', return_value=mock_filing):
82+
warning = check_business(business)[0]
83+
84+
assert warning['data'] == {
85+
"amalgamationDate": mock_filing.effective_date,
86+
"amalgamatingBusinesses": [{"identifier": "BC7654321"}]
87+
}

0 commit comments

Comments
 (0)