diff --git a/legal-api/pyproject.toml b/legal-api/pyproject.toml index 969d0c388e..abbb228fbf 100644 --- a/legal-api/pyproject.toml +++ b/legal-api/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "legal-api" -version = "3.1.10" +version = "3.1.11" description = "" authors = [ {name = "thor",email = "1042854+thorwolpert@users.noreply.github.com"} 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 d36db50073..1bc95824b9 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,9 +61,18 @@ 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_business_in_colin(filing_json, filing_type)) + msg.extend(validate_continuation_in_xpro_business_in_colin( + filing_json["filing"][filing_type].get("business"), + f"/filing/{filing_type}/business" + )) msg.extend(validate_continuation_in_authorization(filing_json, filing_type, legal_type)) - msg.extend(_validate_foreign_jurisdiction(filing_json, filing_type, legal_type)) + + foreign_jurisdiction = filing_json["filing"][filing_type]["foreignJurisdiction"] + msg.extend(validate_continuation_in_foreign_jurisdiction( + legal_type, + foreign_jurisdiction, + f"/filing/{filing_type}/foreignJurisdiction" + )) msg.extend(validate_name_request(filing_json, legal_type, filing_type)) if get_bool(filing_json, "/filing/continuationIn/isApproved"): @@ -161,13 +170,14 @@ def _validate_incorporation_date(incorporation_date: str, incorporation_date_pat return msg -def _validate_foreign_jurisdiction(filing_json: dict, filing_type: str, legal_type: str) -> list: +def validate_continuation_in_foreign_jurisdiction( + legal_type: str, + foreign_jurisdiction: dict, + foreign_jurisdiction_path: str, + skip_affidavit: bool = False +) -> list: """Validate continuation in foreign jurisdiction.""" msg = [] - foreign_jurisdiction = filing_json["filing"][filing_type]["foreignJurisdiction"] - incorporation_date = filing_json["filing"][filing_type]["foreignJurisdiction"]["incorporationDate"] - foreign_jurisdiction_path = f"/filing/{filing_type}/foreignJurisdiction" - incorporation_date_path = f"/filing/{filing_type}/foreignJurisdiction/incorporationDate" # identifier required (non-empty / non-whitespace) is enforced by the schema # (business-schemas continuation_in foreignJurisdiction.identifier pattern). @@ -189,9 +199,14 @@ def _validate_foreign_jurisdiction(filing_json: dict, filing_type: str, legal_ty if err := validate_foreign_jurisdiction(foreign_jurisdiction, foreign_jurisdiction_path): msg.extend(err) - elif (legal_type == Business.LegalTypes.ULC_CONTINUE_IN.value and - foreign_jurisdiction["country"] == "CA" and - ((region := foreign_jurisdiction.get("region")) and region == "AB")): + + # Skip affidavit if skip_affidavit is True (correction) + if ( + not skip_affidavit and + legal_type == Business.LegalTypes.ULC_CONTINUE_IN.value and + foreign_jurisdiction.get("country") == "CA" and + foreign_jurisdiction.get("region") == "AB" + ): affidavit_file_key_path = f"{foreign_jurisdiction_path}/affidavitFileKey" if file_key := foreign_jurisdiction.get("affidavitFileKey"): if err := validate_pdf(file_key, affidavit_file_key_path, False): @@ -199,6 +214,8 @@ def _validate_foreign_jurisdiction(filing_json: dict, filing_type: str, legal_ty else: msg.append({"error": "Affidavit from the directors is required.", "path": affidavit_file_key_path}) + incorporation_date = foreign_jurisdiction["incorporationDate"] + incorporation_date_path = f"{foreign_jurisdiction_path}/incorporationDate" msg.extend(_validate_incorporation_date(incorporation_date, incorporation_date_path)) return msg @@ -233,17 +250,17 @@ def validate_continuation_in_court_order(filing: dict, filing_type) -> list: return [] -def validate_business_in_colin(filing_json: dict, filing_type: str) -> list: +def validate_continuation_in_xpro_business_in_colin(xpro: 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"/filing/{filing_type}/business/identifier" - business_legal_name_path = f"/filing/{filing_type}/business/legalName" - business_founding_date_path = f"/filing/{filing_type}/business/foundingDate" - - if filing_json["filing"][filing_type].get("business"): - identifier = filing_json["filing"][filing_type]["business"]["identifier"] - legal_name = filing_json["filing"][filing_type]["business"].get("legalName") - founding_date = filing_json["filing"][filing_type]["business"].get("foundingDate") + 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") response = colin.query_business(identifier) response_json = response.json() if response.status_code != HTTPStatus.OK: @@ -252,7 +269,7 @@ def validate_business_in_colin(filing_json: dict, filing_type: str) -> list: elif legal_name != response_json["business"]["legalName"]: msg.append({"error": "Legal name does not match with company legal name from Colin.", "path": business_legal_name_path}) - elif founding_date != response_json["business"]["foundingDate"]: + elif not skip_founding_date and founding_date != response_json["business"]["foundingDate"]: msg.append({"error": "Founding date does not match with founding date from Colin.", "path": business_founding_date_path}) 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 337786bcc5..9111beed9c 100644 --- a/legal-api/src/legal_api/services/filings/validations/correction.py +++ b/legal-api/src/legal_api/services/filings/validations/correction.py @@ -37,6 +37,10 @@ validate_share_currency, validate_share_structure, ) +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.incorporation_application import ( validate_coop_parties_mailing_address, validate_roles, @@ -155,6 +159,25 @@ def _validate_corps_correction(business: Business, filing_dict, legal_type, msg) msg.extend(validate_share_currency(filing_dict, filing_type, business)) msg.extend(validate_resolution_date_in_share_structure(filing_dict, filing_type, business)) + msg.extend(_validate_continuation_in_correction(filing_dict, filing_type, legal_type)) + + +def _validate_continuation_in_correction(filing_dict, filing_type, legal_type): + msg = [] + if continuation_in := filing_dict["filing"][filing_type].get("continuationIn"): + msg.extend(validate_continuation_in_foreign_jurisdiction( + legal_type, + continuation_in, + 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", + skip_founding_date=True + )) + return msg + def _validate_special_resolution_correction(filing_dict, legal_type, msg): filing_type = "correction" 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 be8353b971..9405f1c38a 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 @@ -1916,7 +1916,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_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', return_value=[]) if filing_status == Filing.Status.APPROVED.value: 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 2a90716149..3f5b45e55e 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_business_in_colin, _validate_foreign_jurisdiction +from legal_api.services.filings.validations.continuation_in import validate_continuation_in_foreign_jurisdiction, validate_continuation_in_xpro_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_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_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_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_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_business_in_colin', return_value=[]) + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_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_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_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_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_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_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_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_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_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_business_in_colin(mocker, app, session, monkeypatch): +def test_validate_continuation_in_xpro_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_business_in_colin(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_name_request', return_value=[]) - mocker.patch('legal_api.services.filings.validations.continuation_in.validate_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', return_value=(404, {})) err = validate(None, filing) assert err.code == HTTPStatus.BAD_REQUEST -def test_validate_business_in_colin_founding_date_mismatch(mocker, app, session): +def test_validate_continuation_in_xpro_business_in_colin_founding_date_mismatch(mocker, app, session): """Assert continuation EXPRO business with founding date mismatch.""" filing = _get_continuation_in_template() @@ -820,12 +820,14 @@ def test_validate_business_in_colin_founding_date_mismatch(mocker, app, session) } )) - err = validate_business_in_colin(filing, 'continuationIn') + err = validate_continuation_in_xpro_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_business_in_colin_founding_date_match(mocker, app, session): +def test_validate_continuation_in_xpro_business_in_colin_founding_date_match(mocker, app, session): """Assert continuation EXPRO business with matching founding date.""" filing = _get_continuation_in_template() @@ -847,7 +849,9 @@ def test_validate_business_in_colin_founding_date_match(mocker, app, session): } )) - err = validate_business_in_colin(filing, 'continuationIn') + err = validate_continuation_in_xpro_business_in_colin( + filing["filing"]["continuationIn"].get("business"), + f"/filing/continuationIn/business") assert len(err) == 0 @@ -881,7 +885,8 @@ def test_validate_foreign_jurisdiction_incorporation_date(mocker, app, session): mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) # Run the validation function - err = _validate_foreign_jurisdiction(filing, 'continuationIn', 'CCC') + foreign_jurisdiction = filing['filing']['continuationIn']['foreignJurisdiction'] + err = validate_continuation_in_foreign_jurisdiction('CCC', foreign_jurisdiction, '/filing/continuationIn/foreignJurisdiction') # Assert that the error list contains the appropriate error for future incorporation date assert len(err) == 1 @@ -911,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_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', return_value=[]) err = validate(None, filing) @@ -971,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_business_in_colin', + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', return_value=[]) err = validate(None, filing) @@ -1013,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_business_in_colin', return_value=[]) + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', return_value=[]) err = validate(None, filing) @@ -1076,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_business_in_colin', return_value=[]) + mocker.patch('legal_api.services.filings.validations.continuation_in.validate_continuation_in_xpro_business_in_colin', return_value=[]) # perform test with freeze_time(now): @@ -1176,17 +1181,18 @@ def test_validate_foreign_jurisdiction_field_lengths(mocker, app, session, } } + foreign_jurisdiction = filing['filing']['continuationIn']['foreignJurisdiction'] if identifier is not None: - filing['filing']['continuationIn']['foreignJurisdiction']['identifier'] = identifier + foreign_jurisdiction['identifier'] = identifier if legal_name is not None: - filing['filing']['continuationIn']['foreignJurisdiction']['legalName'] = legal_name + foreign_jurisdiction['legalName'] = legal_name mocker.patch('legal_api.services.filings.validations.continuation_in.validate_foreign_jurisdiction', return_value=[]) mocker.patch('legal_api.services.filings.validations.continuation_in.validate_pdf', return_value=None) - err = _validate_foreign_jurisdiction(filing, 'continuationIn', 'C') + err = validate_continuation_in_foreign_jurisdiction('C', foreign_jurisdiction, '/filing/continuationIn/foreignJurisdiction') assert err == expected_errors 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 2251f16542..16aebcf5cc 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 @@ -23,10 +23,15 @@ import pytest from business_model.models import Business, Resolution +from business_common.utils.datetime import datetime as dt, timedelta from legal_api.services import NameXService from legal_api.services.authz import BASIC_USER, STAFF_ROLE from legal_api.services.filings import validate -from registry_schemas.example_data import CORRECTION_INCORPORATION, INCORPORATION_FILING_TEMPLATE +from registry_schemas.example_data import ( + CORRECTION_INCORPORATION, + CONTINUATION_IN_FILING_TEMPLATE, + INCORPORATION_FILING_TEMPLATE +) from tests.unit import MockResponse from tests.unit.models import factory_business, factory_completed_filing @@ -631,3 +636,175 @@ def create_mock_directors(count=3): if (new_legal_type in [Business.LegalTypes.BC_CCC.value, Business.LegalTypes.CCC_CONTINUE_IN.value, Business.LegalTypes.COOP.value] and not mock_directors): assert 'Must have a minimum of three directors. File a change of director filing first.' in [e['error'] for e in err.msg] + + +def test_validate_correction_continuation_in_incorporation_date(mocker, app, session, jwt): + """Assert that an error is raised if the correction continuation_in incorporation date is set to a future date.""" + identifier = 'BC1234567' + business = factory_business(identifier, entity_type='C') + corrected_filing = factory_completed_filing(business, CONTINUATION_IN_FILING_TEMPLATE) + + filing = copy.deepcopy(CORRECTION) + filing['filing']['header']['identifier'] = identifier + filing['filing']['correction']['correctedFilingId'] = corrected_filing.id + + filing['filing']['correction']['correctedFilingType'] = 'continuationIn' + future_date = (dt.now() + timedelta(days=1)).date().isoformat() # Set date to tomorrow + filing['filing']['correction']['continuationIn'] = { + 'country': 'CA', + 'region': 'AB', + 'legalName': 'HAULER SERVICES', + 'identifier': 'AB1234567', + 'incorporationDate': future_date + } + filing['filing']['business']['legalType'] = 'C' + del filing['filing']['correction']['commentOnly'] + + + with jwt_request_context(app, jwt, [BASIC_USER]): + err = validate(business, filing) + + # Assert that the error list contains the appropriate error for future incorporation date + assert len(err.msg) == 1 + assert err.msg[0]['error'] == 'Incorporation date cannot be in the future.' + assert err.msg[0]['path'] == '/filing/correction/continuationIn/incorporationDate' + + +@pytest.mark.parametrize( + 'test_name, identifier, legal_name, expected_errors', + [ + ( + 'SUCCESS', + 'C1234567', + 'Test', + [] + ), + ( + 'SUCCESS_IDENTIFIER_AT_MAX_LENGTH', + 'A' * 50, + 'Test', + [] + ), + ( + 'SUCCESS_LEGAL_NAME_AT_MAX_LENGTH', + 'C1234567', + 'A' * 1000, + [] + ), + ( + 'FAIL_IDENTIFIER_EXCEEDS_MAX_LENGTH', + 'A' * 51, + 'Test', + [ + { + 'error': 'Identifier must not exceed 50 characters.', + 'path': '/filing/correction/continuationIn/identifier' + } + ] + ), + ( + 'FAIL_LEGAL_NAME_EXCEEDS_MAX_LENGTH', + 'C1234567', + 'A' * 1001, + [ + { + 'error': 'Legal name must not exceed 1000 characters.', + 'path': '/filing/correction/continuationIn/legalName' + } + ] + ), + ( + 'FAIL_BOTH_EXCEED_MAX_LENGTH', + 'A' * 51, + 'A' * 1001, + [ + { + 'error': 'Identifier must not exceed 50 characters.', + 'path': '/filing/correction/continuationIn/identifier' + }, + { + 'error': 'Legal name must not exceed 1000 characters.', + 'path': '/filing/correction/continuationIn/legalName' + } + ] + ), + ] +) +def test_validate_continuation_in_field_lengths(mocker, app, session, jwt, + test_name, identifier, legal_name, expected_errors): + """Assert that identifier and legalName enforce max length for continuation in filings. + + The required (non-empty / non-whitespace) rule for these fields now lives in the schema; + see test_continuation_in_foreign_jurisdiction_name_rejected_by_schema. + """ + _identifier = 'BC1234567' + business = factory_business(_identifier, entity_type='C') + corrected_filing = factory_completed_filing(business, CONTINUATION_IN_FILING_TEMPLATE) + + filing = copy.deepcopy(CORRECTION) + filing['filing']['header']['identifier'] = _identifier + filing['filing']['correction']['correctedFilingId'] = corrected_filing.id + filing['filing']['correction']['correctedFilingType'] = 'continuationIn' + continuation_in = { + 'country': 'US', + 'region': 'WA', + 'legalName': 'HAULER SERVICES', + 'incorporationDate': dt.now().date().isoformat() + } + filing['filing']['business']['legalType'] = 'C' + del filing['filing']['correction']['commentOnly'] + + if identifier is not None: + continuation_in['identifier'] = identifier + + if legal_name is not None: + continuation_in['legalName'] = legal_name + + filing['filing']['correction']['continuationIn'] = continuation_in + with jwt_request_context(app, jwt, [BASIC_USER]): + err = validate(business, filing) + + if expected_errors: + assert err.msg == expected_errors + else: + assert err is None + + +def test_validate_continuation_in_xpro_founding_date_match(mocker, app, session, jwt): + """Assert continuation EXPRO business with matching founding date.""" + identifier = 'BC1234567' + business = factory_business(identifier, entity_type='C') + corrected_filing = factory_completed_filing(business, CONTINUATION_IN_FILING_TEMPLATE) + + filing = copy.deepcopy(CORRECTION) + filing['filing']['header']['identifier'] = identifier + filing['filing']['correction']['correctedFilingId'] = corrected_filing.id + filing['filing']['correction']['correctedFilingType'] = 'continuationIn' + filing['filing']['correction']['continuationIn'] = { + 'country': 'CA', + 'region': 'AB', + 'legalName': 'HAULER SERVICES', + 'identifier': 'AB1234567', + 'incorporationDate': dt.now().date().isoformat(), + 'xpro': { + 'identifier': 'A0077779', + 'legalName': 'Test Company Inc.' + } + } + filing['filing']['business']['legalType'] = 'C' + del filing['filing']['correction']['commentOnly'] + + mocker.patch('legal_api.services.filings.validations.continuation_in.colin.query_business', return_value=mocker.Mock( + status_code=HTTPStatus.OK, + json=lambda: { + 'business': { + 'identifier': 'A0077779', + 'legalName': 'Test Company Inc.' + } + } + )) + + with jwt_request_context(app, jwt, [BASIC_USER]): + err = validate(business, filing) + assert not err +