"""
Test that nginx-proxy detects new containers
"""
from time import sleep

import pytest
from docker.errors import NotFound


@pytest.fixture()
def web1(docker_compose):
    """
    pytest fixture creating a web container with `VIRTUAL_HOST=web1.nginx-proxy` listening on port 81.
    """
    container = docker_compose.containers.run(
        name="web1",
        image="web",
        detach=True,
        environment={
            "WEB_PORTS": "81",
            "VIRTUAL_HOST": "web1.nginx-proxy"
        },
        ports={"81/tcp": None}
    )
    sleep(2)  # give it some time to initialize and for docker-gen to detect it
    yield container
    try:
        docker_compose.containers.get("web1").remove(force=True)
    except NotFound:
        pass


def test_nginx_proxy_behavior_when_alone(docker_compose, nginxproxy):
    r = nginxproxy.get("http://nginx-proxy/")
    assert r.status_code == 503


def test_new_container_is_detected(web1, nginxproxy):
    r = nginxproxy.get("http://web1.nginx-proxy/port")
    assert r.status_code == 200
    assert "answer from port 81\n" == r.text

    web1.remove(force=True)
    sleep(2)
    r = nginxproxy.get("http://web1.nginx-proxy/port")
    assert r.status_code == 503