def insert_new_measurement(database: Database, data_model, metric_data: dict, measurement: dict, previous_measurement: dict) -> dict: """Insert a new measurement.""" if "_id" in measurement: del measurement["_id"] metric = Metric(data_model, metric_data) metric_type = data_model["metrics"][metric.type()] measurement["start"] = measurement["end"] = now = iso_timestamp() for scale in metric_type["scales"]: value = calculate_measurement_value(data_model, metric, measurement["sources"], scale) status = metric.status(value) measurement[scale] = dict(value=value, status=status, direction=metric.direction()) # We can't cover determine_status_start() returning False in the feature tests because all new measurements have # a status start timestamp, hence the pragma: no cover-behave: if status_start := determine_status_start( status, previous_measurement, scale, now): # pragma: no cover-behave measurement[scale]["status_start"] = status_start for target in ("target", "near_target", "debt_target"): target_type = cast(TargetType, target) measurement[scale][target] = determine_target_value( metric, measurement, scale, target_type)
def test_green_with_debt(self): """Test a measurement with debt, better than the target.""" metric = Metric( self.data_model, dict(type="metric_type", target="20", near_target="25", debt_target="30", accept_debt=True)) self.assertEqual("target_met", metric.status("15"))
def test_debt_not_met(self): """Test a measurement worse than the accepted debt.""" metric = Metric( self.data_model, dict(type="metric_type", target="20", near_target="25", debt_target="30", accept_debt=True)) self.assertEqual("target_not_met", metric.status("35"))
def test_debt_end_date_removed(self): """Test a measurement with the technical end date reset.""" metric = Metric( self.data_model, dict(type="metric_type", target="20", near_target="25", debt_target="30", accept_debt=True, debt_end_date=""), ) self.assertEqual("debt_target_met", metric.status("29"))
def test_debt_past_end_date(self): """Test a measurement with expired debt.""" metric = Metric( self.data_model, dict( type="metric_type", target="20", near_target="25", debt_target="30", accept_debt=True, debt_end_date="2019-06-10", ), ) self.assertEqual("target_not_met", metric.status("29"))
def test_near_target_worse_than_target(self): """Test that the measurement is red when the near target is worse than the target.""" metric = Metric( self.data_model, dict(type="metric_type", target="20", near_target="15")) self.assertEqual("target_met", metric.status("17"))
def test_red(self): """Test a red measurement.""" metric = Metric( self.data_model, dict(type="metric_type", target="20", near_target="25")) self.assertEqual("target_not_met", metric.status("30"))
def test_yellow(self): """Test a yellow measurement.""" metric = Metric( self.data_model, dict(type="metric_type", target="20", near_target="25")) self.assertEqual("near_target_met", metric.status("22"))
def test_green(self): """Test a green measurement.""" metric = Metric( self.data_model, dict(type="metric_type", target="20", near_target="15")) self.assertEqual("target_met", metric.status("10"))