def test_timeout_too_short(slowserver):
    global sleep_time
    sleep_time = 2

    publisher = HttpPublisher(name="Test", url=slowserver.url, timeout_seconds=1)

    with pytest.raises(PublishFailure):
        publisher.send(Failure("failure", Validation("validation", priority=Priority.NORMAL), "description"))
def test_not_enough_attempts(failingserver):
    global times_to_fail
    times_to_fail = 3

    publisher = HttpPublisher(name="Test", url=failingserver.url, attempts=3)

    with pytest.raises(PublishFailure):
        publisher.send(Failure("failure", Validation("validation", priority=Priority.NORMAL), "description"))
def test_does_not_publish_success(goodserver):
    publisher = HttpPublisher(name="Test",
                              url=goodserver.url,
                              publish_successes=False)
    publisher.send(
        Success("success", Validation("validation", priority=Priority.NORMAL),
                "description"))
    assert not request_sent
def test_timeout_too_short(slowserver):
    global sleep_time
    sleep_time = 2

    publisher = HttpPublisher(name="Test", url=slowserver.url + "/failure", timeout_seconds=3)

    publisher.send(Failure("failure", Validation("validation", priority=Priority.NORMAL), "description"))
    assert request_sent
    assert requested_url == "/failure"
def test_publishes_failure_to_correct_url(goodserver):
    publisher = HttpPublisher(name="Test",
                              success_url=goodserver.url + '/success',
                              failure_url=goodserver.url + '/failure',
                              publish_successes=True)
    publisher.send(
        Failure("failure", Validation("validation", priority=Priority.NORMAL),
                "description"))
    assert request_sent
    assert requested_url == '/failure'
def test_enough_attempts(failingserver):
    global times_to_fail
    times_to_fail = 2

    publisher = HttpPublisher(name="Test", url=failingserver.url + "/failure", attempts=3)

    publisher.send(Failure("failure", Validation("validation", priority=Priority.NORMAL), "description"))

    assert request_sent
    assert requested_url == "/failure"
def test_publishes_failure_to_correct_url(goodserver):
    publisher = HttpPublisher(
        name="Test",
        success_url=goodserver.url + "/success",
        failure_url=goodserver.url + "/failure",
        publish_successes=True,
    )
    publisher.send(Failure("failure", Validation("validation", priority=Priority.NORMAL), "description"))
    assert request_sent
    assert requested_url == "/failure"
def test_not_enough_attempts(failingserver):
    global times_to_fail
    times_to_fail = 3

    publisher = HttpPublisher(name="Test", url=failingserver.url, attempts=3)

    with pytest.raises(PublishFailure):
        publisher.send(
            Failure("failure",
                    Validation("validation", priority=Priority.NORMAL),
                    "description"))
def test_timeout_too_short(slowserver):
    global sleep_time
    sleep_time = 2

    publisher = HttpPublisher(name="Test",
                              url=slowserver.url,
                              timeout_seconds=1)

    with pytest.raises(PublishFailure):
        publisher.send(
            Failure("failure",
                    Validation("validation", priority=Priority.NORMAL),
                    "description"))
def test_timeout_too_short(slowserver):
    global sleep_time
    sleep_time = 2

    publisher = HttpPublisher(name="Test",
                              url=slowserver.url + '/failure',
                              timeout_seconds=3)

    publisher.send(
        Failure("failure", Validation("validation", priority=Priority.NORMAL),
                "description"))
    assert request_sent
    assert requested_url == '/failure'
def test_enough_attempts(failingserver):
    global times_to_fail
    times_to_fail = 2

    publisher = HttpPublisher(name="Test",
                              url=failingserver.url + '/failure',
                              attempts=3)

    publisher.send(
        Failure("failure", Validation("validation", priority=Priority.NORMAL),
                "description"))

    assert request_sent
    assert requested_url == '/failure'
def test_requires_failure_url():
    with pytest.raises(ValueError):
        HttpPublisher(success_url="success")
def test_requires_method():
    with pytest.raises(ValueError):
        HttpPublisher(url="both", attempts=1, method=None)
def test_requires_at_least_one_attempt():
    with pytest.raises(ValueError):
        HttpPublisher(url="both", attempts=0)
def test_does_not_publish_success(goodserver):
    publisher = HttpPublisher(name="Test", url=goodserver.url, publish_successes=False)
    publisher.send(Success("success", Validation("validation", priority=Priority.NORMAL), "description"))
    assert not request_sent
def test_publish_success_if_success_url_is_given():
    publisher = HttpPublisher(success_url="success", failure_url="failure")

    assert publisher._publish_successes
def test_rep():
    publisher = HttpPublisher(url="both")
    publisher.__repr__()
def test_success_and_failure_urls_are_set():
    publisher = HttpPublisher(url="both")

    assert publisher._success_url == "both"
    assert publisher._failure_url == "both"
def test_retry_after_seconds_is_positive():
    with pytest.raises(ValueError):
        HttpPublisher(url="both", attempts=1, retry_after_seconds=-43)
def test_rep():
    publisher = HttpPublisher(url="both")
    publisher.__repr__()