|
| 1 | +from __future__ import annotations |
| 2 | + |
| 3 | +from pathlib import Path |
| 4 | +from tempfile import TemporaryDirectory |
| 5 | +from typing import TYPE_CHECKING, Any, Generator |
| 6 | + |
| 7 | +import pytest |
| 8 | + |
| 9 | +if TYPE_CHECKING: |
| 10 | + from flask.testing import FlaskClient |
| 11 | + |
| 12 | +TEST_FILE = Path(__file__).parent.parent / 'data' / 'container' / 'test.zip' |
| 13 | +EXTRACTION_TEST_DIR = 'extractor_foo123' |
| 14 | + |
| 15 | + |
| 16 | +@pytest.fixture |
| 17 | +def test_dir() -> Generator[Path, Any, None]: |
| 18 | + with TemporaryDirectory() as tmp_dir: |
| 19 | + input_dir = Path(tmp_dir) / EXTRACTION_TEST_DIR / 'input' |
| 20 | + input_dir.mkdir(parents=True) |
| 21 | + (Path(tmp_dir) / EXTRACTION_TEST_DIR / 'reports').mkdir() |
| 22 | + test_file = input_dir / 'test.zip' |
| 23 | + test_file.write_bytes(TEST_FILE.read_bytes()) |
| 24 | + yield Path(tmp_dir) |
| 25 | + |
| 26 | + |
| 27 | +@pytest.fixture |
| 28 | +def client(test_dir) -> FlaskClient: |
| 29 | + from server import app, config |
| 30 | + |
| 31 | + config.set('unpack', 'data_folder', str(test_dir)) |
| 32 | + return app.test_client() |
| 33 | + |
| 34 | + |
| 35 | +def test_server_start(client: FlaskClient, test_dir: Path): |
| 36 | + response = client.get(f'/start/{EXTRACTION_TEST_DIR}') |
| 37 | + assert response.status_code == 200 |
| 38 | + extraction_dir = test_dir / EXTRACTION_TEST_DIR |
| 39 | + output_dir = extraction_dir / 'files' |
| 40 | + assert output_dir.is_dir() |
| 41 | + extracted_files = {f.name for f in output_dir.glob('**/*') if f.is_file()} |
| 42 | + assert extracted_files == {'testfile1', 'testfile2', 'test file 3_.txt'} |
| 43 | + |
| 44 | + |
| 45 | +def test_dir_not_found(client: FlaskClient): |
| 46 | + response = client.get('/start/not_found') |
| 47 | + assert response.status_code == 400 |
| 48 | + |
| 49 | + |
| 50 | +def test_server_status(client: FlaskClient): |
| 51 | + response = client.get('/status') |
| 52 | + assert response.status_code == 200 |
0 commit comments