Handle areas with missing data

At the moment there are some areas which have:
- a `count_of_phones` value of `None`
- no sub-areas

This is wrong, but until we fix the data the phone counting code needs
to handle this.

This commit:
- adds the `or 0` in the right place (where it will catch these areas
  with missing data)
- adds a test which checks these areas, and compares them to other kinds
  of areas
This commit is contained in:
Chris Hill-Scott
2020-09-17 11:00:17 +01:00
parent e232950d46
commit 76244d8c07
3 changed files with 36 additions and 7 deletions

View File

@@ -59,8 +59,10 @@ class BroadcastArea(SortableMixin):
self.polygons.estimated_area / CITY_OF_LONDON.AREA_SQUARE_MILES
)
if self.sub_areas:
return sum(area.count_of_phones or 0 for area in self.sub_areas)
return self._count_of_phones
return sum(area.count_of_phones for area in self.sub_areas)
# TODO: remove the `or 0` once missing data is fixed, see
# https://www.pivotaltracker.com/story/show/174837293
return self._count_of_phones or 0
class BroadcastAreaLibrary(SerialisedModelCollection, SortableMixin, GetItemByIdMixin):

View File

@@ -124,7 +124,7 @@ class BroadcastMessage(JSONModel):
@property
def count_of_phones(self):
return round_to_significant_figures(
sum(area.count_of_phones or 0 for area in self.areas),
sum(area.count_of_phones for area in self.areas),
2
)

View File

@@ -161,10 +161,37 @@ def test_every_area_has_count_of_phones(library):
assert area.count_of_phones > 0
def test_bryher_has_hard_coded_count():
bryher = broadcast_area_libraries.get_areas('wd20-E05011090')[0]
assert bryher.name == 'Bryher'
assert bryher.count_of_phones == 76.44
@pytest.mark.parametrize('area_id, area_name, expected_count', (
# Unitary authority
('ctyua19-E10000014', 'Hampshire', 853_594.48),
# District
('lad20-E07000087', 'Fareham', 81_970.06),
# Ward
('wd20-E05004516', 'Fareham East', 5_684.9),
# Unitary authority
('lad20-E09000012', 'Hackney', 222_578.0),
# Ward
('wd20-E05009373', 'Hackney Downs', 11_321.169999999998),
# Special case: ward with hard-coded population
('wd20-E05011090', 'Bryher', 76.44),
# Areas with missing data
('lad20-E07000008', 'Cambridge', 0),
('lad20-E07000084', 'Basingstoke and Deane', 0),
('lad20-E07000118', 'Chorley', 0),
('lad20-E07000178', 'Oxford', 0),
))
def test_count_of_phones_for_all_levels(area_id, area_name, expected_count):
area = broadcast_area_libraries.get_areas(area_id)[0]
assert area.name == area_name
assert area.count_of_phones == expected_count
def test_city_of_london_counts_are_not_derived_from():