Merge pull request #1442 from Hestia-Homes/feature/abri-api-integration

Abri API Integration: check for tenant data fetch trigger
This commit is contained in:
Daniel Roth 2026-07-03 10:33:44 +01:00 committed by GitHub
commit 71a309ad0a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 202 additions and 8 deletions

View file

@ -206,6 +206,28 @@ class HubspotDealDiffer:
return old_deal.confirmed_survey_time != new_deal.get("confirmed_survey_time")
@staticmethod
def check_for_abri_tenant_data_fetch(
new_deal: Dict[str, str],
new_project: Optional[ProjectData],
old_deal: HubspotDealData,
) -> bool:
if not HubspotDealDiffer._is_abri_condition_deal(new_deal, new_project):
return False
if old_deal.expected_commencement_date is not None:
return False
return parse_hs_date(new_deal.get("expected_commencement_date")) is not None
@staticmethod
def check_for_magicplan_trigger(
new_deal: Dict[str, str], old_deal: HubspotDealData
) -> bool:
new_outcome = (new_deal.get("outcome") or "").lower()
old_outcome = (old_deal.outcome or "").lower()
return new_outcome == "surveyed" and old_outcome != "surveyed"
@staticmethod
def _is_abri_condition_deal(
new_deal: Dict[str, str], new_project: Optional[ProjectData]
@ -219,14 +241,6 @@ class HubspotDealDiffer:
new_project_code = (new_deal.get("project_code") or "").lower()
return new_project_code == HubspotDealDiffer.ABRI_CONDITION_PROJECT_CODE.lower()
@staticmethod
def check_for_magicplan_trigger(
new_deal: Dict[str, str], old_deal: HubspotDealData
) -> bool:
new_outcome = (new_deal.get("outcome") or "").lower()
old_outcome = (old_deal.outcome or "").lower()
return new_outcome == "surveyed" and old_outcome != "surveyed"
@staticmethod
def _has_valid_pashub_link(new_pashub_link: str) -> bool:
return bool(new_pashub_link)

View file

@ -687,6 +687,186 @@ def test_abri_survey_amendment__date_first_set_on_abri_deal__returns_false() ->
assert result is False
# ====================================
# ABRI TENANT DATA FETCH TRIGGER TESTS
# ====================================
def test_abri_tenant_data_fetch__commencement_date_first_set_on_abri_deal__returns_true() -> (
None
):
deal_id = uuid.uuid4()
# Arrange
old_deal = make_old_deal(
id=deal_id,
project_code="Abri Condition",
expected_commencement_date=None,
)
new_deal = make_new_deal(
deal_id,
project_code="Abri Condition",
expected_commencement_date="2026-08-01",
)
# Act
result = HubspotDealDiffer.check_for_abri_tenant_data_fetch(
new_deal=new_deal,
new_project=None,
old_deal=old_deal,
)
# Assert
assert result is True
def test_abri_tenant_data_fetch__non_abri_deal__returns_false() -> None:
deal_id = uuid.uuid4()
# Arrange
old_deal = make_old_deal(
id=deal_id,
project_code="Southern Retrofit",
expected_commencement_date=None,
)
new_deal = make_new_deal(
deal_id,
project_code="Southern Retrofit",
expected_commencement_date="2026-08-01",
)
# Act
result = HubspotDealDiffer.check_for_abri_tenant_data_fetch(
new_deal=new_deal,
new_project=None,
old_deal=old_deal,
)
# Assert
assert result is False
def test_abri_tenant_data_fetch__commencement_date_already_set__returns_false() -> None:
deal_id = uuid.uuid4()
# Arrange
old_deal = make_old_deal(
id=deal_id,
project_code="Abri Condition",
expected_commencement_date=datetime(2026, 7, 1, tzinfo=timezone.utc),
)
new_deal = make_new_deal(
deal_id,
project_code="Abri Condition",
expected_commencement_date="2026-08-01",
)
# Act
result = HubspotDealDiffer.check_for_abri_tenant_data_fetch(
new_deal=new_deal,
new_project=None,
old_deal=old_deal,
)
# Assert
assert result is False
@pytest.mark.parametrize(
"new_overrides",
[
{},
{"expected_commencement_date": ""},
{"expected_commencement_date": "not-a-date"},
],
)
def test_abri_tenant_data_fetch__no_parseable_new_commencement_date__returns_false(
new_overrides: Dict[str, str],
) -> None:
deal_id = uuid.uuid4()
# Arrange
old_deal = make_old_deal(
id=deal_id,
project_code="Abri Condition",
expected_commencement_date=None,
)
new_deal = make_new_deal(
deal_id,
project_code="Abri Condition",
**new_overrides,
)
# Act
result = HubspotDealDiffer.check_for_abri_tenant_data_fetch(
new_deal=new_deal,
new_project=None,
old_deal=old_deal,
)
# Assert
assert result is False
def test_abri_tenant_data_fetch__associated_abri_project_id__returns_true() -> None:
deal_id = uuid.uuid4()
# Arrange
old_deal = make_old_deal(
id=deal_id,
project_code="Southern Retrofit",
expected_commencement_date=None,
)
new_deal = make_new_deal(
deal_id,
project_code="Southern Retrofit",
expected_commencement_date="2026-08-01",
)
new_project = ProjectData(
project_id=HubspotDealDiffer.ABRI_CONDITION_ASSOCIATED_PROJECT_ID,
name="Abri Condition",
)
# Act
result = HubspotDealDiffer.check_for_abri_tenant_data_fetch(
new_deal=new_deal,
new_project=new_project,
old_deal=old_deal,
)
# Assert
assert result is True
def test_abri_tenant_data_fetch__non_abri_project_id_with_abri_code__returns_false() -> (
None
):
deal_id = uuid.uuid4()
# Arrange
old_deal = make_old_deal(
id=deal_id,
project_code="Abri Condition",
expected_commencement_date=None,
)
new_deal = make_new_deal(
deal_id,
project_code="Abri Condition",
expected_commencement_date="2026-08-01",
)
new_project = ProjectData(project_id="999999", name="Southern Retrofit")
# Act
result = HubspotDealDiffer.check_for_abri_tenant_data_fetch(
new_deal=new_deal,
new_project=new_project,
old_deal=old_deal,
)
# Assert
assert result is False
# =======================
# DB UPDATE TRIGGER TESTS
# =======================