Skip to content

Commit

Permalink
Merge pull request #351 from wallabag/impr/pytest
Browse files Browse the repository at this point in the history
tests: move docker service start in pytest
  • Loading branch information
Kdecherf authored Jul 22, 2023
2 parents 62d1948 + e38f9ad commit d5aac3e
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 16 deletions.
17 changes: 7 additions & 10 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,14 @@ jobs:
- name: "Build image"
run: docker-compose -f tests/docker-compose.${{ matrix.database }}.yml build

- name: "Run image"
run: docker-compose -f tests/docker-compose.${{ matrix.database }}.yml up -d

- name: "Install dependencies"
run: pip install pytest requests
run: pip install pytest pytest-docker requests

- name: "Check running instance"
run: docker ps
- name: "Run tests"
run: py.test --database=${{ matrix.database }} tests/

- name: "Wait 60s"
run: sleep 60
- name: "Get docker logs"
run: docker-compose -p "wallabag_${{ matrix.database }}" -f tests/docker-compose.${{ matrix.database }}.yml logs wallabag

- name: "Run tests"
run: py.test tests/
- name: "Cleanup environment"
run: docker-compose -p "wallabag_${{ matrix.database }}" -f tests/docker-compose.${{ matrix.database }}.yml down -v
4 changes: 4 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import pytest

def pytest_addoption(parser):
parser.addoption("--database", action="store", default="default")
52 changes: 46 additions & 6 deletions tests/test_login.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,53 @@
import pytest
import re
import requests
import os

from requests.exceptions import ConnectionError

URL = 'http://127.0.0.1:80'
@pytest.fixture(scope="session")
def database(pytestconfig):
return pytestconfig.getoption("database")

def is_responsive(url):
try:
response = requests.get(url)
if response.status_code == 200:
return True
except ConnectionError:
return False

def test_accessing_login_page():
r = requests.get(URL, allow_redirects=True)
@pytest.fixture(scope="session")
def docker_compose_project_name(database):
return "wallabag_{}".format(database)

@pytest.fixture(scope="session")
def docker_cleanup():
"""Disable docker cleanup at the end of tests to get logs outside of pytest"""
return False

@pytest.fixture(scope="session")
def docker_compose_command() -> str:
return "docker-compose"

@pytest.fixture(scope="session")
def docker_compose_file(pytestconfig, database):
return os.path.join(str(pytestconfig.rootdir), "tests/", "docker-compose.{}.yml".format(database))

@pytest.fixture(scope="session")
def wallabag_service(docker_ip, docker_services):
"""Ensure that wallabag service is up and responsive"""

# `port_for` takes a container port and returns the corresponding host port
port = docker_services.port_for("wallabag", 80)
url = "http://{}:{}".format(docker_ip, port)
docker_services.wait_until_responsive(
timeout=60.0, pause=0.5, check=lambda: is_responsive(url)
)
return url

def test_accessing_login_page(wallabag_service):
r = requests.get(wallabag_service, allow_redirects=True)

assert r.status_code == 200
assert 'Log in' in r.text
Expand All @@ -16,9 +56,9 @@ def test_accessing_login_page():
assert 'Username' in r.text


def test_logging_in():
def test_logging_in(wallabag_service):
client = requests.session()
r = client.get(URL, allow_redirects=True)
r = client.get(wallabag_service, allow_redirects=True)
jar = r.cookies

# get csrf token
Expand All @@ -39,7 +79,7 @@ def test_logging_in():
'_csrf_token': csrf
}

r = client.post(URL + '/login_check', cookies=jar, data=data)
r = client.post(wallabag_service + '/login_check', cookies=jar, data=data)
assert r.status_code == 200
assert '/unread/list' in r.text
assert '/starred/list' in r.text
Expand Down

0 comments on commit d5aac3e

Please sign in to comment.