diff --git a/legal-api/poetry.lock b/legal-api/poetry.lock index 2dc6ec6e41..c324406a90 100644 --- a/legal-api/poetry.lock +++ b/legal-api/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.3.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. [[package]] name = "aiofiles" @@ -316,7 +316,7 @@ files = [ [[package]] name = "business-model" -version = "3.4.8" +version = "3.4.10" description = "" optional = false python-versions = ">=3.13,<3.14" @@ -336,14 +336,14 @@ pg8000 = ">=1.31.2,<2.0.0" pycountry = ">=24.6.1,<25.0.0" pydantic = ">=2.10.6,<3.0.0" pytz = ">=2025.1,<2026.0" -registry-schemas = {git = "https://github.com/bcgov/business-schemas.git", rev = "2.18.79"} +registry-schemas = {git = "https://github.com/bcgov/business-schemas.git", rev = "2.18.81"} sql-versioning = {git = "https://github.com/bcgov/lear.git", rev = "main", subdirectory = "python/common/sql-versioning-alt"} [package.source] type = "git" url = "https://github.com/bcgov/lear.git" reference = "main" -resolved_reference = "5071d8846d154d403527f6d4daf563ee88b1cb85" +resolved_reference = "9ebbf2f737afc6190070c7a70019d3c049d5146a" subdirectory = "python/common/business-registry-model" [[package]] @@ -3336,7 +3336,7 @@ rpds-py = ">=0.7.0" [[package]] name = "registry_schemas" -version = "2.18.78" +version = "2.18.81" description = "A short description of the project" optional = false python-versions = ">=3.6" @@ -3354,8 +3354,8 @@ strict-rfc3339 = "*" [package.source] type = "git" url = "https://github.com/bcgov/business-schemas.git" -reference = "2.18.79" -resolved_reference = "40080a9b693e0090fae08db377baf94e34cb7588" +reference = "2.18.81" +resolved_reference = "d30c9eb9333f875eb916c5b4c1f083d13998d931" [[package]] name = "reportlab" diff --git a/legal-api/pyproject.toml b/legal-api/pyproject.toml index cb119ee4ea..3d785f2e4d 100644 --- a/legal-api/pyproject.toml +++ b/legal-api/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "legal-api" -version = "3.1.15" +version = "3.1.16" description = "" authors = [ {name = "thor",email = "1042854+thorwolpert@users.noreply.github.com"} diff --git a/legal-api/src/legal_api/resources/v2/business/business_extended.py b/legal-api/src/legal_api/resources/v2/business/business_extended.py index 17fe2ede64..e28af1d8c3 100644 --- a/legal-api/src/legal_api/resources/v2/business/business_extended.py +++ b/legal-api/src/legal_api/resources/v2/business/business_extended.py @@ -102,7 +102,7 @@ def _get_continuation_in_data(business: Business): "incorporationDate": incorporation_date } if jurisdiction.expro_identifier or jurisdiction.expro_legal_name: - continuation_in["xpro"] = { + continuation_in["expro"] = { "identifier": jurisdiction.expro_identifier, "legalName": jurisdiction.expro_legal_name } diff --git a/legal-api/src/legal_api/services/filings/validations/continuation_in.py b/legal-api/src/legal_api/services/filings/validations/continuation_in.py index 1bc95824b9..f3a629a14e 100644 --- a/legal-api/src/legal_api/services/filings/validations/continuation_in.py +++ b/legal-api/src/legal_api/services/filings/validations/continuation_in.py @@ -61,7 +61,7 @@ def validate(filing_json: dict) -> Error | None: # pylint: disable=too-many-bra return Error(HTTPStatus.FORBIDDEN, [{"error": babel(f"{legal_type} does not support continuation in filing.")}]) - msg.extend(validate_continuation_in_xpro_business_in_colin( + msg.extend(validate_continuation_in_expro_business_in_colin( filing_json["filing"][filing_type].get("business"), f"/filing/{filing_type}/business" )) @@ -250,17 +250,17 @@ def validate_continuation_in_court_order(filing: dict, filing_type) -> list: return [] -def validate_continuation_in_xpro_business_in_colin(xpro: dict, path: str, skip_founding_date: bool = False) -> list: +def validate_continuation_in_expro_business_in_colin(expro: dict, path: str, skip_founding_date: bool = False) -> list: """Validate continuation EXPRO business by making a call to Colin API.""" msg = [] business_identifier_path = f"{path}/identifier" business_legal_name_path = f"{path}/legalName" business_founding_date_path = f"{path}/foundingDate" - if xpro: - identifier = xpro["identifier"] - legal_name = xpro.get("legalName") - founding_date = xpro.get("foundingDate") + if expro: + identifier = expro["identifier"] + legal_name = expro.get("legalName") + founding_date = expro.get("foundingDate") response = colin.query_business(identifier) response_json = response.json() if response.status_code != HTTPStatus.OK: diff --git a/legal-api/src/legal_api/services/filings/validations/correction.py b/legal-api/src/legal_api/services/filings/validations/correction.py index e3ee7053b8..9a9b334186 100644 --- a/legal-api/src/legal_api/services/filings/validations/correction.py +++ b/legal-api/src/legal_api/services/filings/validations/correction.py @@ -40,8 +40,8 @@ validate_share_structure, ) from legal_api.services.filings.validations.continuation_in import ( + validate_continuation_in_expro_business_in_colin, validate_continuation_in_foreign_jurisdiction, - validate_continuation_in_xpro_business_in_colin, ) from legal_api.services.filings.validations.continuation_out import validate_continuation_out_date from legal_api.services.filings.validations.incorporation_application import ( @@ -217,9 +217,9 @@ def _validate_continuation_in_correction(filing_dict, filing_type, legal_type): f"/filing/{filing_type}/continuationIn", skip_affidavit=True )) - msg.extend(validate_continuation_in_xpro_business_in_colin( - continuation_in.get("xpro"), - f"/filing/{filing_type}/continuationIn/xpro", + msg.extend(validate_continuation_in_expro_business_in_colin( + continuation_in.get("expro"), + f"/filing/{filing_type}/continuationIn/expro", skip_founding_date=True )) return msg diff --git a/legal-api/src/legal_api/utils/util.py b/legal-api/src/legal_api/utils/util.py index 3fc946899c..f8376d9559 100644 --- a/legal-api/src/legal_api/utils/util.py +++ b/legal-api/src/legal_api/utils/util.py @@ -44,7 +44,11 @@ def build_schema_error_response(errors): "validator": context.validator, "validatorValue": context.validator_value }) - formatted_errors.append({"path": "/".join(error.path), "error": error.message, "context": validation_errors}) + formatted_errors.append({ + "path": "/".join([str(path) for path in error.path]), + "error": error.message, + "context": validation_errors + }) return formatted_errors diff --git a/legal-api/tests/unit/resources/v2/test_business_extended.py b/legal-api/tests/unit/resources/v2/test_business_extended.py index 32bd695e86..04313a8f20 100644 --- a/legal-api/tests/unit/resources/v2/test_business_extended.py +++ b/legal-api/tests/unit/resources/v2/test_business_extended.py @@ -182,7 +182,7 @@ def _create_continuation_in_business(business): 'legalName': 'HAULER SERVICES', 'identifier': 'AB1234567', 'incorporationDate': '2020-01-01', - 'xpro': { + 'expro': { 'identifier': 'A0077779', 'legalName': 'Test Company Inc.' } @@ -194,8 +194,8 @@ def _create_continuation_in_business(business): identifier=data['identifier'], legal_name=data['legalName'], incorporation_date=LegislationDatetime.as_utc_timezone_from_legislation_date_str(data['incorporationDate']), - expro_identifier=data['xpro']['identifier'], - expro_legal_name=data['xpro']['legalName'] + expro_identifier=data['expro']['identifier'], + expro_legal_name=data['expro']['legalName'] ) business.jurisdictions.append(jurisdiction) business.save() diff --git a/legal-api/tests/unit/resources/v2/test_business_filings/test_filings.py b/legal-api/tests/unit/resources/v2/test_business_filings/test_filings.py index 5d522f9c8f..fa8e02da95 100644 --- a/legal-api/tests/unit/resources/v2/test_business_filings/test_filings.py +++ b/legal-api/tests/unit/resources/v2/test_business_filings/test_filings.py @@ -1951,7 +1951,7 @@ def mockFlagsValue(flag, _user=None, _account_id=None): mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_name_request', return_value=[]) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_expro_business_in_colin', return_value=[]) if filing_status == Filing.Status.APPROVED.value: diff --git a/legal-api/tests/unit/services/filings/test_schemas.py b/legal-api/tests/unit/services/filings/test_schemas.py index c45a50ae17..6b95bcf978 100644 --- a/legal-api/tests/unit/services/filings/test_schemas.py +++ b/legal-api/tests/unit/services/filings/test_schemas.py @@ -55,15 +55,12 @@ def test_validate_schema_bad_cr(app): """Assert that an invalid AR returns an error.""" # validate_schema(json_data: Dict = None) -> Tuple(int, str): cr = copy.deepcopy(CORRECTION_REGISTRATION) - cr['filing']['correction']['parties'][0]['officer']['firstName'] = \ - 'this_first_name_maximum_length_is_over' - cr['filing']['correction']['parties'][0]['officer']['middleName'] = \ - 'this_first_name_maximum_length_is_over' + cr['filing']['correction']['parties'][0]['officer']['firstName'] = 'a' * 61 with app.app_context(): err = schemas.validate_against_schema(cr) - assert {'error': "", 'path': 'filing', 'context': []}.keys() == err.msg[0].keys() - assert "is not valid under any of the given schemas" in err.msg[0]['error'] + assert "is too long" in err.msg[0]['error'] + assert err.msg[0]['path'] == 'correction/parties/0/officer/firstName' assert err.code == HTTPStatus.UNPROCESSABLE_ENTITY diff --git a/legal-api/tests/unit/services/filings/validations/test_continuation_in.py b/legal-api/tests/unit/services/filings/validations/test_continuation_in.py index 3f5b45e55e..d350b0ba10 100644 --- a/legal-api/tests/unit/services/filings/validations/test_continuation_in.py +++ b/legal-api/tests/unit/services/filings/validations/test_continuation_in.py @@ -25,7 +25,7 @@ from business_model.models import Business from legal_api.services import NameXService from legal_api.services.filings.validations.validation import validate -from legal_api.services.filings.validations.continuation_in import validate_continuation_in_foreign_jurisdiction, validate_continuation_in_xpro_business_in_colin +from legal_api.services.filings.validations.continuation_in import validate_continuation_in_foreign_jurisdiction, validate_continuation_in_expro_business_in_colin from registry_schemas.example_data import CONTINUATION_IN from tests.unit.services.filings.validations import create_party, create_party_address, lists_are_equal @@ -86,7 +86,7 @@ def test_invalid_nr_continuation_in(mocker, app, session, monkeypatch): }] } mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_expro_business_in_colin', return_value=[]) with patch.object(NameXService, 'query_nr_number', return_value=MockResponse(invalid_nr_response)): err = validate(None, filing) @@ -127,7 +127,7 @@ def test_continuation_in_parties_missing_role(mocker, app, session, legal_type, mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_name_request', return_value=[]) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_expro_business_in_colin', return_value=[]) err = validate(None, filing) @@ -170,7 +170,7 @@ def test_continuation_in_parties_invalid_role(mocker, app, session, parties, exp mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_name_request', return_value=[]) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', return_value=[]) + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_expro_business_in_colin', return_value=[]) err = validate(None, filing) @@ -378,7 +378,7 @@ def test_validate_continuation_in_office(session, mocker, test_name, legal_type, mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_name_request', return_value=[]) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_expro_business_in_colin', return_value=[]) err = validate(None, filing) @@ -684,7 +684,7 @@ def test_validate_continuation_in_share_classes(session, mocker, test_name, lega mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_name_request', return_value=[]) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_expro_business_in_colin', return_value=[]) # perform test @@ -726,7 +726,7 @@ def test_continuation_in_court_orders(mocker, app, session, mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_name_request', return_value=[]) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_expro_business_in_colin', return_value=[]) err = validate(None, filing) @@ -764,7 +764,7 @@ def test_continuation_in_foreign_jurisdiction(mocker, app, session, legal_type, mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_name_request', return_value=[]) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_expro_business_in_colin', return_value=[]) err = validate(None, filing) @@ -776,7 +776,7 @@ def test_continuation_in_foreign_jurisdiction(mocker, app, session, legal_type, assert not err -def test_validate_continuation_in_xpro_business_in_colin(mocker, app, session, monkeypatch): +def test_validate_continuation_in_expro_business_in_colin(mocker, app, session, monkeypatch): """Assert valid continuation EXPRO business""" monkeypatch.setattr( 'legal_api.services.flags.value', @@ -790,14 +790,14 @@ def test_validate_continuation_in_xpro_business_in_colin(mocker, app, session, m mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_name_request', return_value=[]) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_expro_business_in_colin', return_value=(404, {})) err = validate(None, filing) assert err.code == HTTPStatus.BAD_REQUEST -def test_validate_continuation_in_xpro_business_in_colin_founding_date_mismatch(mocker, app, session): +def test_validate_continuation_in_expro_business_in_colin_founding_date_mismatch(mocker, app, session): """Assert continuation EXPRO business with founding date mismatch.""" filing = _get_continuation_in_template() @@ -820,14 +820,14 @@ def test_validate_continuation_in_xpro_business_in_colin_founding_date_mismatch( } )) - err = validate_continuation_in_xpro_business_in_colin( + err = validate_continuation_in_expro_business_in_colin( filing["filing"]["continuationIn"].get("business"), f"/filing/continuationIn/business") assert err[0]['error'] == 'Founding date does not match with founding date from Colin.' assert err[0]['path'] == '/filing/continuationIn/business/foundingDate' -def test_validate_continuation_in_xpro_business_in_colin_founding_date_match(mocker, app, session): +def test_validate_continuation_in_expro_business_in_colin_founding_date_match(mocker, app, session): """Assert continuation EXPRO business with matching founding date.""" filing = _get_continuation_in_template() @@ -849,7 +849,7 @@ def test_validate_continuation_in_xpro_business_in_colin_founding_date_match(moc } )) - err = validate_continuation_in_xpro_business_in_colin( + err = validate_continuation_in_expro_business_in_colin( filing["filing"]["continuationIn"].get("business"), f"/filing/continuationIn/business") assert len(err) == 0 @@ -916,7 +916,7 @@ def test_validate_before_and_after_approval(mocker, app, session, test_status, i mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_name_request', return_value=[]) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_expro_business_in_colin', return_value=[]) err = validate(None, filing) @@ -976,7 +976,7 @@ def test_continuation_in_share_class_series_validation(mocker, app, session, leg mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_name_request', return_value=[]) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_expro_business_in_colin', return_value=[]) err = validate(None, filing) @@ -1018,7 +1018,7 @@ def test_continuation_in_parties_delivery_address_validation(mocker, app, sessio mocker.patch('legal_api.services.filings.validations.continuation_in.validate_roles', return_value=[]) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_name_request', return_value=[]) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', return_value=[]) + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_expro_business_in_colin', return_value=[]) err = validate(None, filing) @@ -1081,7 +1081,7 @@ def test_validate_continuation_in_effective_date(mocker, app, session, jwt, test mocker.patch('legal_api.services.filings.validations.continuation_in.validate_roles', return_value=[]) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_name_request', return_value=[]) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', return_value=[]) + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_expro_business_in_colin', return_value=[]) # perform test with freeze_time(now): diff --git a/legal-api/tests/unit/services/filings/validations/test_correction_ia.py b/legal-api/tests/unit/services/filings/validations/test_correction_ia.py index 5bb5a84730..a069b6b43f 100644 --- a/legal-api/tests/unit/services/filings/validations/test_correction_ia.py +++ b/legal-api/tests/unit/services/filings/validations/test_correction_ia.py @@ -777,7 +777,7 @@ def test_validate_continuation_in_field_lengths(mocker, app, session, jwt, assert err is None -def test_validate_continuation_in_xpro_founding_date_match(mocker, app, session, jwt): +def test_validate_continuation_in_expro_founding_date_match(mocker, app, session, jwt): """Assert continuation EXPRO business with matching founding date.""" identifier = 'BC1234567' business = factory_business(identifier, entity_type='C') @@ -793,7 +793,7 @@ def test_validate_continuation_in_xpro_founding_date_match(mocker, app, session, 'legalName': 'HAULER SERVICES', 'identifier': 'AB1234567', 'incorporationDate': dt.now().date().isoformat(), - 'xpro': { + 'expro': { 'identifier': 'A0077779', 'legalName': 'Test Company Inc.' }