mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-30 13:10:47 +00:00
asset list from landlord
This commit is contained in:
parent
94cbf5f516
commit
acb306f7b9
10 changed files with 78 additions and 84 deletions
|
|
@ -7,7 +7,7 @@ from infrastructure.csv_s3_client import CsvS3Client
|
||||||
from repositories.user_address.user_address_csv_s3_repository import (
|
from repositories.user_address.user_address_csv_s3_repository import (
|
||||||
UserAddressCsvS3Repository,
|
UserAddressCsvS3Repository,
|
||||||
)
|
)
|
||||||
from domain.addresses.user_address import LandlordAssetList
|
from domain.addresses.user_address import AssetList
|
||||||
|
|
||||||
|
|
||||||
def handler(
|
def handler(
|
||||||
|
|
@ -32,7 +32,7 @@ def handler(
|
||||||
user_address_repo=user_address_repo,
|
user_address_repo=user_address_repo,
|
||||||
)
|
)
|
||||||
|
|
||||||
list_of_user_address: list[LandlordAssetList] = orchestrator.get_user_address(
|
list_of_user_address: list[AssetList] = orchestrator.get_user_address(
|
||||||
input_s3_uri=s3_uri
|
input_s3_uri=s3_uri
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,10 @@ def _empty_source_row() -> dict[str, str]:
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
class LandlordAssetList:
|
class AssetList:
|
||||||
user_address: str
|
address: str
|
||||||
postcode: Postcode
|
postcode: Postcode
|
||||||
internal_reference: Optional[str] = None
|
org_reference: Optional[str] = None
|
||||||
landlord_additional_info: dict[str, str] = field(
|
additional_info: dict[str, str] = field(
|
||||||
default_factory=_empty_source_row, compare=False
|
default_factory=_empty_source_row, compare=False
|
||||||
)
|
)
|
||||||
|
|
@ -2,21 +2,21 @@ from __future__ import annotations
|
||||||
|
|
||||||
from collections.abc import Iterable, Iterator
|
from collections.abc import Iterable, Iterator
|
||||||
|
|
||||||
from domain.addresses.user_address import LandlordAssetList
|
from domain.addresses.user_address import AssetList
|
||||||
from domain.postcode import Postcode
|
from domain.postcode import Postcode
|
||||||
|
|
||||||
|
|
||||||
def iter_postcode_grouped_batches(
|
def iter_postcode_grouped_batches(
|
||||||
addresses: Iterable[LandlordAssetList],
|
addresses: Iterable[AssetList],
|
||||||
*,
|
*,
|
||||||
max_batch_size: int = 500,
|
max_batch_size: int = 500,
|
||||||
) -> Iterator[list[LandlordAssetList]]:
|
) -> Iterator[list[AssetList]]:
|
||||||
if max_batch_size < 1:
|
if max_batch_size < 1:
|
||||||
raise ValueError("max_batch_size must be >= 1")
|
raise ValueError("max_batch_size must be >= 1")
|
||||||
|
|
||||||
groups = _group_by_postcode_in_order(addresses)
|
groups = _group_by_postcode_in_order(addresses)
|
||||||
|
|
||||||
buffer: list[LandlordAssetList] = []
|
buffer: list[AssetList] = []
|
||||||
for group in groups.values():
|
for group in groups.values():
|
||||||
group_len = len(group)
|
group_len = len(group)
|
||||||
|
|
||||||
|
|
@ -43,9 +43,9 @@ def iter_postcode_grouped_batches(
|
||||||
|
|
||||||
|
|
||||||
def _group_by_postcode_in_order(
|
def _group_by_postcode_in_order(
|
||||||
addresses: Iterable[LandlordAssetList],
|
addresses: Iterable[AssetList],
|
||||||
) -> dict[Postcode, list[LandlordAssetList]]:
|
) -> dict[Postcode, list[AssetList]]:
|
||||||
groups: dict[Postcode, list[LandlordAssetList]] = {}
|
groups: dict[Postcode, list[AssetList]] = {}
|
||||||
for address in addresses:
|
for address in addresses:
|
||||||
groups.setdefault(address.postcode, []).append(address)
|
groups.setdefault(address.postcode, []).append(address)
|
||||||
return groups
|
return groups
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
from repositories.user_address.user_address_repository import UserAddressRepository
|
from repositories.user_address.user_address_repository import UserAddressRepository
|
||||||
from domain.addresses.user_address import LandlordAssetList
|
from domain.addresses.user_address import AssetList
|
||||||
|
|
||||||
|
|
||||||
class LandlordDescriptionOverridesOrchestrator:
|
class LandlordDescriptionOverridesOrchestrator:
|
||||||
|
|
@ -9,15 +9,15 @@ class LandlordDescriptionOverridesOrchestrator:
|
||||||
def get_user_address(
|
def get_user_address(
|
||||||
self,
|
self,
|
||||||
input_s3_uri: str,
|
input_s3_uri: str,
|
||||||
) -> list[LandlordAssetList]:
|
) -> list[AssetList]:
|
||||||
return self._user_address_repo.load_batch(input_s3_uri)
|
return self._user_address_repo.load_batch(input_s3_uri)
|
||||||
|
|
||||||
def get_col_to_description_mappings(
|
def get_col_to_description_mappings(
|
||||||
self, list_of_user_address: list[LandlordAssetList]
|
self, list_of_user_address: list[AssetList]
|
||||||
) -> dict[str, set[str]]:
|
) -> dict[str, set[str]]:
|
||||||
mappings: dict[str, set[str]] = {}
|
mappings: dict[str, set[str]] = {}
|
||||||
for user_address in list_of_user_address:
|
for user_address in list_of_user_address:
|
||||||
for key, value in user_address.landlord_additional_info.items():
|
for key, value in user_address.additional_info.items():
|
||||||
# Lower-case so case-only typos collapse to one variant.
|
# Lower-case so case-only typos collapse to one variant.
|
||||||
mappings.setdefault(key, set()).add(value.lower())
|
mappings.setdefault(key, set()).add(value.lower())
|
||||||
return mappings
|
return mappings
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import uuid
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from domain.addresses.user_address import LandlordAssetList
|
from domain.addresses.user_address import AssetList
|
||||||
from domain.postcode import Postcode
|
from domain.postcode import Postcode
|
||||||
from infrastructure.csv_s3_client import CsvS3Client
|
from infrastructure.csv_s3_client import CsvS3Client
|
||||||
from repositories.user_address.user_address_repository import UserAddressRepository
|
from repositories.user_address.user_address_repository import UserAddressRepository
|
||||||
|
|
@ -20,14 +20,14 @@ class UserAddressCsvS3Repository(UserAddressRepository):
|
||||||
self._csv_client = csv_client
|
self._csv_client = csv_client
|
||||||
self._bucket = bucket
|
self._bucket = bucket
|
||||||
|
|
||||||
def load_batch(self, s3_uri: str) -> list[LandlordAssetList]:
|
def load_batch(self, s3_uri: str) -> list[AssetList]:
|
||||||
rows = self._csv_client.read_rows(s3_uri)
|
rows = self._csv_client.read_rows(s3_uri)
|
||||||
if rows and _POSTCODE_COLUMN not in rows[0]:
|
if rows and _POSTCODE_COLUMN not in rows[0]:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"Input CSV {s3_uri} has no {_POSTCODE_COLUMN!r} column; "
|
f"Input CSV {s3_uri} has no {_POSTCODE_COLUMN!r} column; "
|
||||||
f"columns present: {sorted(rows[0])}"
|
f"columns present: {sorted(rows[0])}"
|
||||||
)
|
)
|
||||||
addresses: list[LandlordAssetList] = []
|
addresses: list[AssetList] = []
|
||||||
for row in rows:
|
for row in rows:
|
||||||
parts = [
|
parts = [
|
||||||
row[col].strip()
|
row[col].strip()
|
||||||
|
|
@ -39,19 +39,19 @@ class UserAddressCsvS3Repository(UserAddressRepository):
|
||||||
raw_ref = row.get(_INTERNAL_REFERENCE_COLUMN, "").strip()
|
raw_ref = row.get(_INTERNAL_REFERENCE_COLUMN, "").strip()
|
||||||
internal_reference: Optional[str] = raw_ref or None
|
internal_reference: Optional[str] = raw_ref or None
|
||||||
addresses.append(
|
addresses.append(
|
||||||
LandlordAssetList(
|
AssetList(
|
||||||
user_address=user_address,
|
address=user_address,
|
||||||
postcode=Postcode(postcode),
|
postcode=Postcode(postcode),
|
||||||
internal_reference=internal_reference,
|
org_reference=internal_reference,
|
||||||
landlord_additional_info=row,
|
additional_info=row,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return addresses
|
return addresses
|
||||||
|
|
||||||
def save_batch(self, addresses: list[LandlordAssetList], path_prefix: str) -> str:
|
def save_batch(self, addresses: list[AssetList], path_prefix: str) -> str:
|
||||||
rows: list[dict[str, str]] = [
|
rows: list[dict[str, str]] = [
|
||||||
{
|
{
|
||||||
**addr.landlord_additional_info,
|
**addr.additional_info,
|
||||||
_POSTCODE_CLEAN_COLUMN: str(addr.postcode),
|
_POSTCODE_CLEAN_COLUMN: str(addr.postcode),
|
||||||
}
|
}
|
||||||
for addr in addresses
|
for addr in addresses
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,12 @@ from __future__ import annotations
|
||||||
|
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
|
|
||||||
from domain.addresses.user_address import LandlordAssetList
|
from domain.addresses.user_address import AssetList
|
||||||
|
|
||||||
|
|
||||||
class UserAddressRepository(ABC):
|
class UserAddressRepository(ABC):
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def load_batch(self, s3_uri: str) -> list[LandlordAssetList]: ...
|
def load_batch(self, s3_uri: str) -> list[AssetList]: ...
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def save_batch(
|
def save_batch(self, addresses: list[AssetList], path_prefix: str) -> str: ...
|
||||||
self, addresses: list[LandlordAssetList], path_prefix: str
|
|
||||||
) -> str: ...
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,13 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from domain.addresses.postcode_batching import iter_postcode_grouped_batches
|
from domain.addresses.postcode_batching import iter_postcode_grouped_batches
|
||||||
from domain.addresses.user_address import LandlordAssetList
|
from domain.addresses.user_address import AssetList
|
||||||
from domain.postcode import Postcode
|
from domain.postcode import Postcode
|
||||||
|
|
||||||
|
|
||||||
def _addrs(postcode: str, n: int) -> list[LandlordAssetList]:
|
def _addrs(postcode: str, n: int) -> list[AssetList]:
|
||||||
return [
|
return [
|
||||||
LandlordAssetList(
|
AssetList(address=f"{i} {postcode} Street", postcode=Postcode(postcode))
|
||||||
user_address=f"{i} {postcode} Street", postcode=Postcode(postcode)
|
|
||||||
)
|
|
||||||
for i in range(n)
|
for i in range(n)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,13 @@ import dataclasses
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from domain.addresses.user_address import LandlordAssetList
|
from domain.addresses.user_address import AssetList
|
||||||
from domain.postcode import Postcode
|
from domain.postcode import Postcode
|
||||||
|
|
||||||
|
|
||||||
def test_user_address_holds_postcode_value_object() -> None:
|
def test_user_address_holds_postcode_value_object() -> None:
|
||||||
# act
|
# act
|
||||||
addr = LandlordAssetList(user_address="1 The Street", postcode=Postcode("sw1a 1aa"))
|
addr = AssetList(address="1 The Street", postcode=Postcode("sw1a 1aa"))
|
||||||
# assert
|
# assert
|
||||||
assert addr.postcode == Postcode("SW1A1AA")
|
assert addr.postcode == Postcode("SW1A1AA")
|
||||||
|
|
||||||
|
|
@ -17,34 +17,32 @@ def test_user_address_preserves_user_address_verbatim() -> None:
|
||||||
# The free-text user_address string is intentionally NOT normalised --
|
# The free-text user_address string is intentionally NOT normalised --
|
||||||
# only the postcode is canonicalised, and that happens inside Postcode.
|
# only the postcode is canonicalised, and that happens inside Postcode.
|
||||||
# act
|
# act
|
||||||
addr = LandlordAssetList(
|
addr = AssetList(address=" 1 The Street ", postcode=Postcode("SW1A1AA"))
|
||||||
user_address=" 1 The Street ", postcode=Postcode("SW1A1AA")
|
|
||||||
)
|
|
||||||
# assert
|
# assert
|
||||||
assert addr.user_address == " 1 The Street "
|
assert addr.address == " 1 The Street "
|
||||||
|
|
||||||
|
|
||||||
def test_user_address_internal_reference_defaults_to_none() -> None:
|
def test_user_address_internal_reference_defaults_to_none() -> None:
|
||||||
# act
|
# act
|
||||||
addr = LandlordAssetList(user_address="1 The Street", postcode=Postcode("SW1A1AA"))
|
addr = AssetList(address="1 The Street", postcode=Postcode("SW1A1AA"))
|
||||||
# assert
|
# assert
|
||||||
assert addr.internal_reference is None
|
assert addr.org_reference is None
|
||||||
|
|
||||||
|
|
||||||
def test_user_address_internal_reference_accepted() -> None:
|
def test_user_address_internal_reference_accepted() -> None:
|
||||||
# act
|
# act
|
||||||
addr = LandlordAssetList(
|
addr = AssetList(
|
||||||
user_address="1 The Street",
|
address="1 The Street",
|
||||||
postcode=Postcode("SW1A1AA"),
|
postcode=Postcode("SW1A1AA"),
|
||||||
internal_reference="cust-42",
|
org_reference="cust-42",
|
||||||
)
|
)
|
||||||
# assert
|
# assert
|
||||||
assert addr.internal_reference == "cust-42"
|
assert addr.org_reference == "cust-42"
|
||||||
|
|
||||||
|
|
||||||
def test_user_address_is_frozen() -> None:
|
def test_user_address_is_frozen() -> None:
|
||||||
# arrange
|
# arrange
|
||||||
addr = LandlordAssetList(user_address="1 The Street", postcode=Postcode("SW1A1AA"))
|
addr = AssetList(address="1 The Street", postcode=Postcode("SW1A1AA"))
|
||||||
# act / assert
|
# act / assert
|
||||||
with pytest.raises(dataclasses.FrozenInstanceError):
|
with pytest.raises(dataclasses.FrozenInstanceError):
|
||||||
addr.postcode = Postcode("OTHER") # type: ignore[misc]
|
addr.postcode = Postcode("OTHER") # type: ignore[misc]
|
||||||
|
|
@ -54,45 +52,45 @@ def test_user_address_equality_uses_canonical_postcode() -> None:
|
||||||
# Postcode sanitises eagerly, so addresses built from different surface
|
# Postcode sanitises eagerly, so addresses built from different surface
|
||||||
# forms of the same postcode compare equal.
|
# forms of the same postcode compare equal.
|
||||||
# arrange
|
# arrange
|
||||||
a = LandlordAssetList(user_address="1 The Street", postcode=Postcode("sw1a 1aa"))
|
a = AssetList(address="1 The Street", postcode=Postcode("sw1a 1aa"))
|
||||||
b = LandlordAssetList(user_address="1 The Street", postcode=Postcode("SW1A1AA"))
|
b = AssetList(address="1 The Street", postcode=Postcode("SW1A1AA"))
|
||||||
# act / assert
|
# act / assert
|
||||||
assert a == b
|
assert a == b
|
||||||
|
|
||||||
|
|
||||||
def test_user_address_source_row_defaults_to_empty_dict() -> None:
|
def test_user_address_source_row_defaults_to_empty_dict() -> None:
|
||||||
# act
|
# act
|
||||||
addr = LandlordAssetList(user_address="1 The Street", postcode=Postcode("SW1A1AA"))
|
addr = AssetList(address="1 The Street", postcode=Postcode("SW1A1AA"))
|
||||||
# assert
|
# assert
|
||||||
assert addr.landlord_additional_info == {}
|
assert addr.additional_info == {}
|
||||||
|
|
||||||
|
|
||||||
def test_user_address_carries_source_row() -> None:
|
def test_user_address_carries_source_row() -> None:
|
||||||
# arrange
|
# arrange
|
||||||
row = {"Address 1": "1 The Street", "postcode": "SW1A 1AA", "SAP Score": "72"}
|
row = {"Address 1": "1 The Street", "postcode": "SW1A 1AA", "SAP Score": "72"}
|
||||||
# act
|
# act
|
||||||
addr = LandlordAssetList(
|
addr = AssetList(
|
||||||
user_address="1 The Street",
|
address="1 The Street",
|
||||||
postcode=Postcode("SW1A 1AA"),
|
postcode=Postcode("SW1A 1AA"),
|
||||||
landlord_additional_info=row,
|
additional_info=row,
|
||||||
)
|
)
|
||||||
# assert
|
# assert
|
||||||
assert addr.landlord_additional_info == row
|
assert addr.additional_info == row
|
||||||
|
|
||||||
|
|
||||||
def test_user_address_equality_ignores_source_row() -> None:
|
def test_user_address_equality_ignores_source_row() -> None:
|
||||||
# source_row is excluded from equality (and hashing): identity stays
|
# source_row is excluded from equality (and hashing): identity stays
|
||||||
# defined by the parsed fields.
|
# defined by the parsed fields.
|
||||||
# arrange
|
# arrange
|
||||||
a = LandlordAssetList(
|
a = AssetList(
|
||||||
user_address="1 The Street",
|
address="1 The Street",
|
||||||
postcode=Postcode("SW1A1AA"),
|
postcode=Postcode("SW1A1AA"),
|
||||||
landlord_additional_info={"x": "1"},
|
additional_info={"x": "1"},
|
||||||
)
|
)
|
||||||
b = LandlordAssetList(
|
b = AssetList(
|
||||||
user_address="1 The Street",
|
address="1 The Street",
|
||||||
postcode=Postcode("SW1A1AA"),
|
postcode=Postcode("SW1A1AA"),
|
||||||
landlord_additional_info={"y": "2"},
|
additional_info={"y": "2"},
|
||||||
)
|
)
|
||||||
# act / assert
|
# act / assert
|
||||||
assert a == b
|
assert a == b
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from domain.addresses.user_address import LandlordAssetList
|
from domain.addresses.user_address import AssetList
|
||||||
from domain.postcode import Postcode
|
from domain.postcode import Postcode
|
||||||
from orchestration.landlord_description_overrides_orchestrator import (
|
from orchestration.landlord_description_overrides_orchestrator import (
|
||||||
LandlordDescriptionOverridesOrchestrator,
|
LandlordDescriptionOverridesOrchestrator,
|
||||||
|
|
@ -11,18 +11,18 @@ from repositories.user_address.user_address_repository import UserAddressReposit
|
||||||
class _StubUserAddressRepository(UserAddressRepository):
|
class _StubUserAddressRepository(UserAddressRepository):
|
||||||
"""``get_col_to_description_mappings`` never touches the repo."""
|
"""``get_col_to_description_mappings`` never touches the repo."""
|
||||||
|
|
||||||
def load_batch(self, s3_uri: str) -> list[LandlordAssetList]:
|
def load_batch(self, s3_uri: str) -> list[AssetList]:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def save_batch(self, addresses: list[LandlordAssetList], path_prefix: str) -> str:
|
def save_batch(self, addresses: list[AssetList], path_prefix: str) -> str:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
|
||||||
def _make_user_address(landlord_additional_info: dict[str, str]) -> LandlordAssetList:
|
def _make_user_address(landlord_additional_info: dict[str, str]) -> AssetList:
|
||||||
return LandlordAssetList(
|
return AssetList(
|
||||||
user_address="1 High St",
|
address="1 High St",
|
||||||
postcode=Postcode("AA1 1AA"),
|
postcode=Postcode("AA1 1AA"),
|
||||||
landlord_additional_info=landlord_additional_info,
|
additional_info=landlord_additional_info,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from collections.abc import Iterator
|
||||||
import pytest
|
import pytest
|
||||||
from moto import mock_aws
|
from moto import mock_aws
|
||||||
|
|
||||||
from domain.addresses.user_address import LandlordAssetList
|
from domain.addresses.user_address import AssetList
|
||||||
from domain.postcode import Postcode
|
from domain.postcode import Postcode
|
||||||
from infrastructure.csv_s3_client import CsvS3Client
|
from infrastructure.csv_s3_client import CsvS3Client
|
||||||
from repositories.user_address.user_address_csv_s3_repository import (
|
from repositories.user_address.user_address_csv_s3_repository import (
|
||||||
|
|
@ -50,9 +50,9 @@ def test_load_batch_parses_address_postcode_and_reference(
|
||||||
# assert
|
# assert
|
||||||
assert len(addresses) == 1
|
assert len(addresses) == 1
|
||||||
address = addresses[0]
|
address = addresses[0]
|
||||||
assert address.user_address == "1 High Street, Flat 2, Townville"
|
assert address.address == "1 High Street, Flat 2, Townville"
|
||||||
assert address.postcode == Postcode("SW1A1AA")
|
assert address.postcode == Postcode("SW1A1AA")
|
||||||
assert address.internal_reference == "REF-001"
|
assert address.org_reference == "REF-001"
|
||||||
|
|
||||||
|
|
||||||
def test_load_batch_uses_only_address_1_when_others_missing(
|
def test_load_batch_uses_only_address_1_when_others_missing(
|
||||||
|
|
@ -75,9 +75,9 @@ def test_load_batch_uses_only_address_1_when_others_missing(
|
||||||
|
|
||||||
# assert
|
# assert
|
||||||
assert len(addresses) == 1
|
assert len(addresses) == 1
|
||||||
assert addresses[0].user_address == "10 Cardiff Road"
|
assert addresses[0].address == "10 Cardiff Road"
|
||||||
assert addresses[0].postcode == Postcode("CF101AA")
|
assert addresses[0].postcode == Postcode("CF101AA")
|
||||||
assert addresses[0].internal_reference == "REF-002"
|
assert addresses[0].org_reference == "REF-002"
|
||||||
|
|
||||||
|
|
||||||
def test_load_batch_handles_missing_internal_reference(
|
def test_load_batch_handles_missing_internal_reference(
|
||||||
|
|
@ -100,9 +100,9 @@ def test_load_batch_handles_missing_internal_reference(
|
||||||
|
|
||||||
# assert
|
# assert
|
||||||
assert len(addresses) == 1
|
assert len(addresses) == 1
|
||||||
assert addresses[0].user_address == "5 Park Lane"
|
assert addresses[0].address == "5 Park Lane"
|
||||||
assert addresses[0].postcode == Postcode("M11AA")
|
assert addresses[0].postcode == Postcode("M11AA")
|
||||||
assert addresses[0].internal_reference is None
|
assert addresses[0].org_reference is None
|
||||||
|
|
||||||
|
|
||||||
def test_load_batch_captures_full_source_row(
|
def test_load_batch_captures_full_source_row(
|
||||||
|
|
@ -124,7 +124,7 @@ def test_load_batch_captures_full_source_row(
|
||||||
addresses = repo.load_batch(uri)
|
addresses = repo.load_batch(uri)
|
||||||
|
|
||||||
# assert
|
# assert
|
||||||
assert addresses[0].landlord_additional_info == row
|
assert addresses[0].additional_info == row
|
||||||
|
|
||||||
|
|
||||||
def test_load_batch_raises_when_postcode_column_absent(
|
def test_load_batch_raises_when_postcode_column_absent(
|
||||||
|
|
@ -173,10 +173,10 @@ def test_save_batch_returns_uri_under_path_prefix(
|
||||||
) -> None:
|
) -> None:
|
||||||
# arrange
|
# arrange
|
||||||
addresses = [
|
addresses = [
|
||||||
LandlordAssetList(
|
AssetList(
|
||||||
user_address="1 High Street",
|
address="1 High Street",
|
||||||
postcode=Postcode("SW1A 1AA"),
|
postcode=Postcode("SW1A 1AA"),
|
||||||
landlord_additional_info={
|
additional_info={
|
||||||
"Address 1": "1 High Street",
|
"Address 1": "1 High Street",
|
||||||
"postcode": "SW1A 1AA",
|
"postcode": "SW1A 1AA",
|
||||||
},
|
},
|
||||||
|
|
@ -229,10 +229,10 @@ def test_save_batch_uses_unique_filename_per_call(
|
||||||
) -> None:
|
) -> None:
|
||||||
# arrange
|
# arrange
|
||||||
addresses = [
|
addresses = [
|
||||||
LandlordAssetList(
|
AssetList(
|
||||||
user_address="1 High Street",
|
address="1 High Street",
|
||||||
postcode=Postcode("SW1A 1AA"),
|
postcode=Postcode("SW1A 1AA"),
|
||||||
landlord_additional_info={
|
additional_info={
|
||||||
"Address 1": "1 High Street",
|
"Address 1": "1 High Street",
|
||||||
"postcode": "SW1A 1AA",
|
"postcode": "SW1A 1AA",
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue