def test_should_retrieve_message_stats_in_subcounties_when_district_name_supplied( self): RapidProMessage(**self.message).save() bugolobi_name = 'Bugolobi' bugolobi = Location(**dict( name=bugolobi_name, parent=self.kampala, type='subcounty')).save() text = "NECOC.%s. flood" % bugolobi_name message_bugolobi = dict(phone_no='123444', text=text, received_at=self.date_time, relayer_id=234, run_id=23243) RapidProMessage(**message_bugolobi).save() Disaster(**self.disaster_attr).save() disaster_attr_bugolobi = self.disaster_attr.copy() disaster_attr_bugolobi["locations"] = [bugolobi] Disaster(**disaster_attr_bugolobi).save() multi_location_stats_service = MultiLocationStatsService( self.kampala.name) stats = multi_location_stats_service.stats() self.assertEqual(1, len(stats)) self.assertEqual(1, stats['Bugolobi'].messages.count) self.assertEqual(50, stats['Bugolobi'].messages.percentage) self.assertEqual(1, stats['Bugolobi'].disasters.count) self.assertEqual(50, stats['Bugolobi'].disasters.percentage)
def test_should_retrieve_message_stats_in_all_locations(self): RapidProMessage(**self.message).save() RapidProMessage(**self.message_bukoto).save() Disaster(**self.disaster_attr).save() Disaster(**self.disaster_attr_bukoto).save() multi_location_stats_service = MultiLocationStatsService(location=None) stats = multi_location_stats_service.stats() self.assertEqual(2, len(stats)) self.assertEqual(1, stats['Kampala'].messages.count) self.assertEqual(50, stats['Kampala'].messages.percentage) self.assertEqual(1, stats['Kampala'].disasters.count) self.assertEqual(50, stats['Kampala'].disasters.percentage) self.assertEqual(1, stats['Bukoto'].messages.count) self.assertEqual(50, stats['Bukoto'].messages.percentage) self.assertEqual(1, stats['Bukoto'].disasters.count) self.assertEqual(50, stats['Bukoto'].disasters.percentage)
def test_should_retrieve_message_stats_in_all_locations(self): RapidProMessage(**self.message).save() RapidProMessage(**self.message_bukoto).save() Disaster(**self.disaster_attr).save() Disaster(**self.disaster_attr_bukoto).save() multi_location_stats_service = MultiLocationStatsService(location=None) stats = multi_location_stats_service.stats() self.assertEqual(2, len(stats)) self.assertEqual(1, stats["Kampala"].messages.count) self.assertEqual(50, stats["Kampala"].messages.percentage) self.assertEqual(1, stats["Kampala"].disasters.count) self.assertEqual(50, stats["Kampala"].disasters.percentage) self.assertEqual(1, stats["Bukoto"].messages.count) self.assertEqual(50, stats["Bukoto"].messages.percentage) self.assertEqual(1, stats["Bukoto"].disasters.count) self.assertEqual(50, stats["Bukoto"].disasters.percentage)
def test_should_retrieve_message_stats_in_subcounties_when_district_name_supplied(self): RapidProMessage(**self.message).save() bugolobi_name = "Bugolobi" bugolobi = Location(**dict(name=bugolobi_name, parent=self.kampala, type="subcounty")).save() text = "NECOC.%s. flood" % bugolobi_name message_bugolobi = dict(phone_no="123444", text=text, received_at=self.date_time, relayer_id=234, run_id=23243) RapidProMessage(**message_bugolobi).save() Disaster(**self.disaster_attr).save() disaster_attr_bugolobi = self.disaster_attr.copy() disaster_attr_bugolobi["locations"] = [bugolobi] Disaster(**disaster_attr_bugolobi).save() multi_location_stats_service = MultiLocationStatsService(self.kampala.name) stats = multi_location_stats_service.stats() self.assertEqual(1, len(stats)) self.assertEqual(1, stats["Bugolobi"].messages.count) self.assertEqual(50, stats["Bugolobi"].messages.percentage) self.assertEqual(1, stats["Bugolobi"].disasters.count) self.assertEqual(50, stats["Bugolobi"].disasters.percentage)
def __init__(self, location, **kwargs): self.stats = MultiLocationStatsService(location, **kwargs).stats() self.data = self._serialized_data()
class MultiLocationStatsSerializer(object): def __init__(self, location, **kwargs): self.stats = MultiLocationStatsService(location, **kwargs).stats() self.data = self._serialized_data() def _serialized_data(self): return {location_name.lower(): LocationStatsSerializer(self.stats[location_name]).data for location_name in self.stats.keys()}