def test_get_processed_siemens_records_invalid_bool_value(self, _handle_record, uow): siemens_file_handler = SiemensFileHandler() siemens_file_handler.logger = Mock() siemens_file_handler.date_time_str = Mock() siemens_file_handler.get_string_timestamp = Mock() mappings_dict = {"123456_bp": [{"syrx_num": "400000-0001-237323-BP-001", "point_type": "BP"}]} siemens_file_handler.get_mappings_dict = Mock(return_value=mappings_dict) records = [{"siemens_meter_name": "123456_bp", "value": "a", "timestamp": "2014-09-07 23:00"}] def handle_record_side_effect(mapping, record, rv, error_messages): error_messages.append("Invalid value for boolean point") _handle_record.side_effect = handle_record_side_effect rv = siemens_file_handler.get_processed_siemens_records(records) _handle_record.assert_called_with(mappings_dict["123456_bp"][0], records[0], rv, ["Invalid value for boolean point"]) assert len(rv.good_records) == 0 assert len(rv.bad_records) == 1 assert len(rv.unmapped_vendor_points) == 0 assert len(rv.global_vendor_point_records) == 0 assert rv.bad_records[0] == {"siemens_meter_name": "123456_bp", "value": "a", "timestamp": "2014-09-07 23:00", "error": {"date": siemens_file_handler.date_time_str, "messages": ["Invalid value for boolean point"]}}
def test_get_processed_siemens_records_invalid_float_value(self, _handle_record, uow): siemens_file_handler = SiemensFileHandler() siemens_file_handler.logger = Mock() siemens_file_handler.date_time_str = Mock() siemens_file_handler.get_string_timestamp = Mock() mappings_dict = {"123456_ep": [{"syrx_num": "400000-0001-237323-EP-001", "point_type": "EP"}]} siemens_file_handler.get_mappings_dict = Mock(return_value=mappings_dict) records = [{"siemens_meter_name": "123456_ep", "value": "a", "timestamp": "2014-09-07 23:00"}] def handle_record_side_effect(mapping, record, rv, error_messages): error_messages.append("Invalid value for energy/numeric/position point") _handle_record.side_effect = handle_record_side_effect rv = siemens_file_handler.get_processed_siemens_records(records) # assertion looks wrong, but since it's not passing the error list by value it sees a call with an # already populated error_messages _handle_record.assert_called_with(mappings_dict["123456_ep"][0], records[0], rv, ["Invalid value for energy/numeric/position point"]) assert len(rv.good_records) == 0 assert len(rv.bad_records) == 1 assert len(rv.unmapped_vendor_points) == 0 assert len(rv.global_vendor_point_records) == 0 assert rv.bad_records[0] == {"siemens_meter_name": "123456_ep", "value": "a", "timestamp": "2014-09-07 23:00", "error": {"date": siemens_file_handler.date_time_str, "messages": ["Invalid value for energy/numeric/position point"]}}
def test_get_processed_siemens_records_nonexistent_mapping(self, _handle_record, uow): siemens_file_handler = SiemensFileHandler() siemens_file_handler.logger = Mock() siemens_file_handler.date_time_str = Mock() siemens_file_handler.get_string_timestamp = Mock() mappings_dict = {} siemens_file_handler.get_mappings_dict = Mock(return_value=mappings_dict) records = [{"siemens_meter_name": "123456_ep", "value": "0", "timestamp": "2014-09-07 23:00"}] rv = siemens_file_handler.get_processed_siemens_records(records) assert not _handle_record.called assert len(rv.good_records) == 0 assert len(rv.bad_records) == 1 assert len(rv.unmapped_vendor_points) == 1 assert len(rv.global_vendor_point_records) == 0 assert rv.bad_records[0] == {"siemens_meter_name": "123456_ep", "value": "0", "timestamp": "2014-09-07 23:00", "error": {"date": siemens_file_handler.date_time_str, "messages": ["Could not find vendor mapping"]}} assert rv.unmapped_vendor_points[0] == {"source": "siemens", "siemens_meter_name": "123456_ep", "date_added": siemens_file_handler.date_time_str}
def test_process_siemens_records(self, uow): siemens_file_handler = SiemensFileHandler() siemens_file_handler.logger = Mock() siemens_file_handler.date_str = Mock() siemens_file_handler.handle_unmapped_vendor_points = Mock() processed_records = ProcessSiemensRecordsReturn() processed_records.good_records = [ {"name": "record0"}, {"name": "record1"} ] processed_records.bad_records = [ {"name": "record2"}, {"name": "record3"} ] processed_records.unmapped_vendor_points = [ {"name": "record4"}, {"name": "record5"} ] processed_records.global_vendor_point_records = [ {"name": "record6"}, {"name": "record7"} ] siemens_file_handler.get_processed_siemens_records = Mock(return_value=processed_records) siemens_file_handler.make_global_vendor_point_records_unique = Mock(return_value=processed_records.global_vendor_point_records) records = [MagicMock(), MagicMock()] good_record_file = io.StringIO() bad_record_file = io.StringIO() rv = siemens_file_handler.process_siemens_records(records, good_record_file, bad_record_file) siemens_file_handler.get_processed_siemens_records.assert_called_with(records) good_record_file.seek(0) good_records_written_data = good_record_file.read().strip().split("\n") assert len(good_records_written_data) == 2 assert json.loads(good_records_written_data[0]) == {"name": "record0"} assert json.loads(good_records_written_data[1]) == {"name": "record1"} bad_record_file.seek(0) bad_records_written_data = bad_record_file.read().strip().split("\n") assert len(bad_records_written_data) == 2 assert json.loads(bad_records_written_data[0]) == {"name": "record2"} assert json.loads(bad_records_written_data[1]) == {"name": "record3"} siemens_file_handler.handle_unmapped_vendor_points.assert_called_with(processed_records.unmapped_vendor_points) assert rv.num_good_records == 2 assert rv.num_bad_records == 2 assert rv.num_unmapped_vendor_points == 2
def test_get_processed_siemens_records_successful_global_multi_mapping(self, _handle_global_mapping, uow): siemens_file_handler = SiemensFileHandler() siemens_file_handler.logger = Mock() siemens_file_handler.date_time_str = Mock() siemens_file_handler.get_string_timestamp = Mock() mappings_dict = {"123456_ep": [{"syrx_num": "400000-0001-237323-EP-001", "point_type": "EP", "global": True}, {"syrx_num": "400000-0002-237323-EP-001", "point_type": "EP", "global": True}]} siemens_file_handler.get_mappings_dict = Mock(return_value=mappings_dict) def handle_global_mapping_side_effect(mapping, record, rv, error_messages): if mapping["point_type"] in ["EP", "NP", "PP"]: record["value"] = float(record["value"]) elif mapping["point_type"] == "BP": if record["value"].upper() == "ON" or record["value"].upper() == "RUN": record["value"] = 1.0 elif record["value"].upper() == "OFF" or record["value"].upper() == "STOP": record["value"] = 0.0 record["timestamp"] = siemens_file_handler.get_string_timestamp(record["timestamp"]) global_record = { "source": "siemens", "siemens_meter_name": record["siemens_meter_name"], "timestamp": record["timestamp"], "value": record["value"], "date_added": siemens_file_handler.date_time_str } rv.global_vendor_point_records.append(global_record) _handle_global_mapping.side_effect = handle_global_mapping_side_effect records = [{"siemens_meter_name": "123456_ep", "value": "100.1", "timestamp": "2014-09-07 23:00"}] rv = siemens_file_handler.get_processed_siemens_records(records) _handle_global_mapping.assert_has_calls([call(mappings_dict["123456_ep"][0], records[0], rv, [])]) assert len(rv.good_records) == 0 assert len(rv.bad_records) == 0 assert len(rv.unmapped_vendor_points) == 0 assert len(rv.global_vendor_point_records) == 1 assert rv.global_vendor_point_records[0] == {"source": "siemens", "siemens_meter_name": "123456_ep", "timestamp": siemens_file_handler.get_string_timestamp.return_value, "value": 100.1, "date_added": siemens_file_handler.date_time_str}
def test_get_processed_siemens_records_successful(self, _handle_record, uow): siemens_file_handler = SiemensFileHandler() siemens_file_handler.logger = Mock() siemens_file_handler.date_time_str = Mock() siemens_file_handler.get_string_timestamp = Mock() mappings_dict = {"123456_ep": [{"syrx_num": "400000-0001-237323-EP-001", "point_type": "EP"}], "123456_np": [{"syrx_num": "400000-0001-237323-NP-001", "point_type": "NP"}], "123456_pp": [{"syrx_num": "400000-0001-237323-PP-001", "point_type": "PP"}], "123456_bp": [{"syrx_num": "400000-0001-237323-BP-001", "point_type": "BP"}]} siemens_file_handler.get_mappings_dict = Mock(return_value=mappings_dict) records = [{"siemens_meter_name": "123456_ep", "value": "100.1", "timestamp": "2014-09-07 23:00"}, {"siemens_meter_name": "123456_np", "value": "100.2", "timestamp": "2014-09-07 23:00"}, {"siemens_meter_name": "123456_pp", "value": "100.3", "timestamp": "2014-09-07 23:00"}, {"siemens_meter_name": "123456_bp", "value": "ON", "timestamp": "2014-09-07 23:00"}, {"siemens_meter_name": "123456_bp", "value": "OFF", "timestamp": "2014-09-07 23:15"}] def handle_record_side_effect(mapping, record, rv, error_messages): if mapping["point_type"] in ["EP", "NP", "PP"]: record["value"] = float(record["value"]) elif mapping["point_type"] == "BP": if record["value"].upper() == "ON" or record["value"].upper() == "RUN": record["value"] = 1.0 elif record["value"].upper() == "OFF" or record["value"].upper() == "STOP": record["value"] = 0.0 record["timestamp"] = siemens_file_handler.get_string_timestamp(record["timestamp"]) good_record = { "syrx_num": mapping["syrx_num"], "timestamp": record["timestamp"], "value": record["value"], "date_added": siemens_file_handler.date_time_str } rv.good_records.append(good_record) _handle_record.side_effect = handle_record_side_effect rv = siemens_file_handler.get_processed_siemens_records(records) _handle_record.assert_has_calls([call(mappings_dict["123456_ep"][0], records[0], rv, []), call(mappings_dict["123456_np"][0], records[1], rv, []), call(mappings_dict["123456_pp"][0], records[2], rv, []), call(mappings_dict["123456_bp"][0], records[3], rv, []), call(mappings_dict["123456_bp"][0], records[4], rv, [])]) assert len(rv.good_records) == 5 assert len(rv.bad_records) == 0 assert len(rv.unmapped_vendor_points) == 0 assert len(rv.global_vendor_point_records) == 0 assert rv.good_records[0] == {"syrx_num": "400000-0001-237323-EP-001", "timestamp": siemens_file_handler.get_string_timestamp.return_value, "value": 100.1, "date_added": siemens_file_handler.date_time_str} assert rv.good_records[1] == {"syrx_num": "400000-0001-237323-NP-001", "timestamp": siemens_file_handler.get_string_timestamp.return_value, "value": 100.2, "date_added": siemens_file_handler.date_time_str} assert rv.good_records[2] == {"syrx_num": "400000-0001-237323-PP-001", "timestamp": siemens_file_handler.get_string_timestamp.return_value, "value": 100.3, "date_added": siemens_file_handler.date_time_str} assert rv.good_records[3] == {"syrx_num": "400000-0001-237323-BP-001", "timestamp": siemens_file_handler.get_string_timestamp.return_value, "value": 1.0, "date_added": siemens_file_handler.date_time_str} assert rv.good_records[4] == {"syrx_num": "400000-0001-237323-BP-001", "timestamp": siemens_file_handler.get_string_timestamp.return_value, "value": 0.0, "date_added": siemens_file_handler.date_time_str}