def test_calculate_alert__should_send_warning_when_depth_equal_twenty_percent_over_daily_average(
        mock_warning):
    depth = 166.0
    daily_average = 200.0
    calculate_alert(depth, daily_average, 166.0)

    mock_warning.assert_called()
def test_calculate_alert__should_send_alert_when_distance_equal_emergency_threshold(
        mock_alert):
    depth = 15.0
    daily_average = 637.23
    calculate_alert(depth, daily_average, 1000.0)

    mock_alert.assert_called()
def test_calculate_alert__should_send_alert_when_exceeds_emergency_threshold(
        mock_alert):
    depth = 14.0
    daily_average = 674.23
    calculate_alert(depth, daily_average, 1000.0)

    mock_alert.assert_called()
def test_calculate_alert__should_send_alert_when_distance_equal_alert_percent_for_daily(
        mock_alert):
    depth = 143.0
    daily_average = 200.0
    calculate_alert(depth, daily_average, 140.0)

    mock_alert.assert_called()
def test_calculate_alert__should_not_send_warning_when_fail_multiple_checks(
        mock_warning):
    depth = 15.0
    daily_average = 40.0
    calculate_alert(depth, daily_average, 40.0)

    assert mock_warning.call_count == 0
def test_calculate_alert__should_send_warning_when_depth_greater_than_twenty_percent_greater_than_running_average(
        mock_warning):
    depth = 160.0
    daily_average = 160.0
    running_average = 200.0
    calculate_alert(depth, daily_average, running_average)

    mock_warning.assert_called()
def test_calculate_alert__should_send_alert_when_distance_greater_than_alert_percent_for_running(
        mock_alert):
    depth = 140.0
    daily_average = 140.0
    running_average = 200.0
    calculate_alert(depth, daily_average, running_average)

    mock_alert.assert_called()
def test_calculate_alert__should_not_send_warning_when_depth_greater_than_twenty_percent_above_daily_average(
        mock_warning):
    depth = 170.0
    daily_average = 200.0
    running_average = 170.0
    calculate_alert(depth, daily_average, running_average)

    assert not mock_warning.called
def test_calculate_alert__should_not_send_warning_when_distance_above_emergency_threshold(
        mock_warning):
    depth = 600.0
    daily_average = 500.0
    running_average = 500.0
    calculate_alert(depth, daily_average, running_average)

    assert not mock_warning.called
def test_calculate_alert__should_return_warning_level_of_zero_when_not_exceeding_alert_states(
):
    depth = 200.0
    daily_average = 200.0
    actual = calculate_alert(depth, daily_average, 200.0)

    assert actual == 0
def test_calculate_alert__should_return_warning_level_of_one_when_warning_for_daily(
        mock_alert):
    depth = 80.0
    daily_average = 100.0
    actual = calculate_alert(depth, daily_average, 80.0)

    assert actual == 1
def test_calculate_alert__should_return_warning_level_of_three_when_emergency(
        mock_alert):
    depth = 14.0
    daily_average = 100.0
    actual = calculate_alert(depth, daily_average, 100.0)

    assert actual == 3
def test_calculate_alert__should_return_warning_level_of_two_when_alert_for_running(
        mock_alert):
    depth = 60.0
    daily_average = 60.0
    running_average = 100.0
    actual = calculate_alert(depth, daily_average, running_average)

    assert actual == 2
    def measure_depth(self):
        start, stop = get_intervals()
        current_depth = get_depth_by_intervals(start, stop)
        logging.info('Current depth: {}'.format(current_depth))

        self.__update_average_depth(current_depth)
        alert_level = calculate_alert(current_depth,
                                      self.__get_daily_average(), None)
        api_requests.save_current_depth(self.USER_ID, current_depth, stop,
                                        alert_level)

        return current_depth