def test_match_and_merge_unmatched_objects_with_dates(self): # Make sure that the dates sort correctly! (only testing release_date, but also sorts # on generation_date, then pk partitioner = EquivalencePartitioner.make_default_state_equivalence( PropertyState) self.property_state_factory.get_property_state( no_default_data=True, address_line_1='123 same address', release_date=datetime.datetime(2010, 1, 1, 1, 1, tzinfo=tz.get_current_timezone()), site_eui=25, import_file_id=self.import_file.id, data_state=DATA_STATE_MAPPING, ) self.property_state_factory.get_property_state( no_default_data=True, address_line_1='123 same address', release_date=datetime.datetime(2015, 1, 1, 1, 1, tzinfo=tz.get_current_timezone()), site_eui=150, import_file_id=self.import_file.id, data_state=DATA_STATE_MAPPING, ) self.property_state_factory.get_property_state( no_default_data=True, address_line_1='123 same address', release_date=datetime.datetime(2005, 1, 1, 1, 1, tzinfo=tz.get_current_timezone()), site_eui=300, import_file_id=self.import_file.id, data_state=DATA_STATE_MAPPING, ) props = self.import_file.find_unmatched_property_states() uniq_states, dup_states = filter_duplicated_states(props) merged, keys = match_and_merge_unmatched_objects( uniq_states, partitioner) found = False for ps in merged: found = True self.assertEqual(ps.site_eui.magnitude, 150) # from the second record self.assertEqual(found, True)
def test_equivalence(self): all_unmatched_properties = self.import_file.find_unmatched_property_states( ) unmatched_properties, duplicate_property_states = tasks.filter_duplicated_states( all_unmatched_properties) partitioner = EquivalencePartitioner.make_propertystate_equivalence() equiv_classes = partitioner.calculate_equivalence_classes( unmatched_properties) self.assertEqual(len(equiv_classes), 512)
def test_match_and_merge_unmatched_objects_all_unique(self): # create some objects to match and merge partitioner = EquivalencePartitioner.make_default_state_equivalence( PropertyState) for i in range(10): self.property_state_factory.get_property_state( import_file_id=self.import_file.id, data_state=DATA_STATE_MAPPING, ) props = self.import_file.find_unmatched_property_states() uniq_states, dup_states = filter_duplicated_states(props) merged, keys = match_and_merge_unmatched_objects( uniq_states, partitioner) self.assertEqual(len(merged), 10)
def test_match_and_merge_unmatched_objects_with_duplicates(self): # create some objects to match and merge partitioner = EquivalencePartitioner.make_default_state_equivalence( PropertyState) for i in range(8): self.property_state_factory.get_property_state( import_file_id=self.import_file.id, data_state=DATA_STATE_MAPPING, ) self.property_state_factory.get_property_state( no_default_data=True, extra_data={'moniker': '12345'}, address_line_1='123 same address', site_eui=25, import_file_id=self.import_file.id, data_state=DATA_STATE_MAPPING, ) self.property_state_factory.get_property_state( no_default_data=True, extra_data={'moniker': '12345'}, address_line_1='123 same address', site_eui=150, import_file_id=self.import_file.id, data_state=DATA_STATE_MAPPING, ) props = self.import_file.find_unmatched_property_states() uniq_states, dup_states = filter_duplicated_states(props) merged, keys = match_and_merge_unmatched_objects( uniq_states, partitioner) self.assertEqual(len(merged), 9) self.assertEqual(len(keys), 9) # find the ps_cp_1 in the list of merged found = False for ps in merged: if ps.extra_data.get('moniker', None) == '12345': found = True self.assertEqual(ps.site_eui.magnitude, 150) # from the second record self.assertEqual(found, True)
def test_import_duplicates(self): # Check to make sure all the properties imported ps = PropertyState.objects.filter( data_state=DATA_STATE_MAPPING, organization=self.org, import_file=self.import_file, ) self.assertEqual(len(ps), 9) self.assertEqual( PropertyState.objects.filter(pm_property_id='2264').count(), 7) hashes = map(tasks.hash_state_object, ps) self.assertEqual(len(hashes), 9) self.assertEqual(len(set(hashes)), 4) unique_property_states, _ = tasks.filter_duplicated_states(ps) self.assertEqual(len(unique_property_states), 4) tasks.match_buildings(self.import_file.id) self.assertEqual(Property.objects.count(), 3) self.assertEqual(PropertyView.objects.count(), 3) self.assertEqual( PropertyView.objects.filter(state__pm_property_id='2264').count(), 1) pv = PropertyView.objects.filter(state__pm_property_id='2264').first() self.assertEqual(pv.state.pm_property_id, '2264') self.assertEqual(pv.state.gross_floor_area, 12555) self.assertEqual(pv.state.energy_score, 75) self.assertEqual(TaxLot.objects.count(), 0) self.assertEqual( self.import_file.find_unmatched_property_states().count(), 7) self.assertEqual( self.import_file.find_unmatched_tax_lot_states().count(), 0) return
def test_filter_duplicated_states(self): for i in range(10): self.property_state_factory.get_property_state( no_default_data=True, address_line_1='123 The Same Address', # extra_data={"extra_1": "value_%s" % i}, import_file_id=self.import_file.id, data_state=DATA_STATE_MAPPING, ) for i in range(5): self.property_state_factory.get_property_state( import_file_id=self.import_file.id, data_state=DATA_STATE_MAPPING, ) props = self.import_file.find_unmatched_property_states() uniq_states, dup_states = filter_duplicated_states(props) # There should be 6 uniq states. 5 from the second call, and one of 'The Same Address' self.assertEqual(len(uniq_states), 6) self.assertEqual(len(dup_states), 9)