2021-07-02 16:00:48 +12:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
# coding=utf-8
|
|
|
|
|
|
|
|
import shutil
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
from click.testing import CliRunner
|
|
|
|
|
|
|
|
from bdfr.__main__ import cli
|
|
|
|
|
2022-07-23 19:14:36 +12:00
|
|
|
does_test_config_exist = Path('./tests/test_config.cfg').exists()
|
2021-07-02 16:00:48 +12:00
|
|
|
|
|
|
|
|
|
|
|
def copy_test_config(run_path: Path):
|
2022-07-23 19:14:36 +12:00
|
|
|
shutil.copy(Path('./tests/test_config.cfg'), Path(run_path, 'test_config.cfg'))
|
2021-07-02 16:00:48 +12:00
|
|
|
|
|
|
|
|
|
|
|
def create_basic_args_for_cloner_runner(test_args: list[str], tmp_path: Path):
|
2022-09-03 12:47:58 +12:00
|
|
|
copy_test_config(tmp_path)
|
2021-07-02 16:00:48 +12:00
|
|
|
out = [
|
|
|
|
'clone',
|
|
|
|
str(tmp_path),
|
|
|
|
'-v',
|
2022-09-03 12:47:58 +12:00
|
|
|
'--config', str(Path(tmp_path, 'test_config.cfg')),
|
2021-07-02 16:00:48 +12:00
|
|
|
'--log', str(Path(tmp_path, 'test_log.txt')),
|
|
|
|
] + test_args
|
|
|
|
return out
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.online
|
|
|
|
@pytest.mark.reddit
|
|
|
|
@pytest.mark.skipif(not does_test_config_exist, reason='A test config file is required for integration tests')
|
|
|
|
@pytest.mark.parametrize('test_args', (
|
2022-09-23 18:51:53 +12:00
|
|
|
['-l', '6l7778'],
|
2021-07-02 16:00:48 +12:00
|
|
|
['-s', 'TrollXChromosomes/', '-L', 1],
|
2022-09-23 18:51:53 +12:00
|
|
|
['-l', 'eiajjw'],
|
|
|
|
['-l', 'xl0lhi'],
|
2021-07-02 16:00:48 +12:00
|
|
|
))
|
|
|
|
def test_cli_scrape_general(test_args: list[str], tmp_path: Path):
|
|
|
|
runner = CliRunner()
|
|
|
|
test_args = create_basic_args_for_cloner_runner(test_args, tmp_path)
|
|
|
|
result = runner.invoke(cli, test_args)
|
|
|
|
assert result.exit_code == 0
|
|
|
|
assert 'Downloaded submission' in result.output
|
|
|
|
assert 'Record for entry item' in result.output
|
2022-11-24 13:48:17 +13:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.online
|
|
|
|
@pytest.mark.reddit
|
|
|
|
@pytest.mark.skipif(not does_test_config_exist, reason='A test config file is required for integration tests')
|
|
|
|
@pytest.mark.parametrize('test_args', (
|
|
|
|
['-l', 'ijy4ch'], # user deleted post
|
|
|
|
['-l', 'kw4wjm'], # post from banned subreddit
|
|
|
|
))
|
|
|
|
def test_cli_scrape_soft_fail(test_args: list[str], tmp_path: Path):
|
|
|
|
runner = CliRunner()
|
|
|
|
test_args = create_basic_args_for_cloner_runner(test_args, tmp_path)
|
|
|
|
result = runner.invoke(cli, test_args)
|
|
|
|
assert result.exit_code == 0
|
|
|
|
assert 'Downloaded submission' not in result.output
|
|
|
|
assert 'Record for entry item' not in result.output
|