From af348a05dd7684051a430c9215d9a16e0192ab84 Mon Sep 17 00:00:00 2001 From: Serene-Arc Date: Thu, 11 Mar 2021 17:21:05 +1000 Subject: [PATCH] Add some integration tests --- .../tests/test_integration.py | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 bulkredditdownloader/tests/test_integration.py diff --git a/bulkredditdownloader/tests/test_integration.py b/bulkredditdownloader/tests/test_integration.py new file mode 100644 index 0000000..f554e8b --- /dev/null +++ b/bulkredditdownloader/tests/test_integration.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +# coding=utf-8 + +from pathlib import Path + +import pytest +from click.testing import CliRunner + +from bulkredditdownloader.__main__ import cli + + +@pytest.mark.online +@pytest.mark.reddit +@pytest.mark.skipif(Path('test_config.cfg') is False, reason='A test config file is required for integration tests') +@pytest.mark.parametrize('test_args', ( + ['-s', 'Mindustry', '-L', 1], + ['-s', 'r/Mindustry', '-L', 1], + ['-s', 'r/mindustry', '-L', 1], + ['-s', 'mindustry', '-L', 1], + ['-s', 'https://www.reddit.com/r/TrollXChromosomes/', '-L', 1], + ['-s', 'r/TrollXChromosomes/', '-L', 1], + ['-s', 'TrollXChromosomes/', '-L', 1], + ['-s', 'trollxchromosomes', '-L', 1], +)) +def test_cli_download_subreddits(test_args: list[str], tmp_path: Path): + runner = CliRunner() + test_args = ['download', str(tmp_path), '-v', '--config', 'test_config.cfg'] + test_args + result = runner.invoke(cli, test_args) + assert result.exit_code == 0 + assert 'Added submissions from subreddit ' in result.output + + +@pytest.mark.online +@pytest.mark.reddit +@pytest.mark.skipif(Path('test_config.cfg') is False, reason='A test config file is required for integration tests') +@pytest.mark.parametrize('test_args', ( + ['-l', 'm2601g'], + ['-l', 'https://www.reddit.com/r/TrollXChromosomes/comments/m2601g/its_a_step_in_the_right_direction/'], +)) +def test_cli_download_links(test_args: list[str], tmp_path: Path): + runner = CliRunner() + test_args = ['download', str(tmp_path), '-v', '--config', 'test_config.cfg'] + test_args + result = runner.invoke(cli, test_args) + assert result.exit_code == 0 + assert len(list(tmp_path.iterdir())) == 1 + + +@pytest.mark.online +@pytest.mark.reddit +@pytest.mark.skipif(Path('test_config.cfg') is False, reason='A test config file is required for integration tests') +@pytest.mark.parametrize('test_args', ( + ['--user', 'helen_darten', '-m', 'cuteanimalpics', '-L', 10], +)) +def test_cli_download_multireddit(test_args: list[str], tmp_path: Path): + runner = CliRunner() + test_args = ['download', str(tmp_path), '-v', '--config', 'test_config.cfg'] + test_args + result = runner.invoke(cli, test_args) + assert result.exit_code == 0 + assert 'Added submissions from multireddit ' in result.output + + +@pytest.mark.online +@pytest.mark.reddit +@pytest.mark.authenticated +@pytest.mark.skipif(Path('test_config.cfg') is False, reason='A test config file is required for integration tests') +@pytest.mark.parametrize('test_args', ( + ['--user', 'me', '--upvoted', '--authenticate', '-L', 10, '--set-folder-scheme', ''], + ['--user', 'me', '--saved', '--authenticate', '-L', 10, '--set-folder-scheme', ''], + ['--user', 'me', '--submitted', '--authenticate', '-L', 10, '--set-folder-scheme', ''], + ['--user', 'djnish', '--submitted', '-L', 10, '--set-folder-scheme', ''], +)) +def test_cli_download_user_data_good(test_args: list[str], tmp_path: Path): + runner = CliRunner() + test_args = ['download', str(tmp_path), '-v', '--config', 'test_config.cfg'] + test_args + result = runner.invoke(cli, test_args) + assert result.exit_code == 0 + assert 'Downloaded submission ' in result.output + + +@pytest.mark.online +@pytest.mark.reddit +@pytest.mark.authenticated +@pytest.mark.skipif(Path('test_config.cfg') is False, reason='A test config file is required for integration tests') +@pytest.mark.parametrize('test_args', ( + ['--user', 'me', '-L', 10, '--set-folder-scheme', ''], +)) +def test_cli_download_user_data_bad_me_unauthenticated(test_args: list[str], tmp_path: Path): + runner = CliRunner() + test_args = ['download', str(tmp_path), '-v', '--config', 'test_config.cfg'] + test_args + result = runner.invoke(cli, test_args) + assert result.exit_code == 0 + assert 'To use "me" as a user, an authenticated Reddit instance must be used' in result.output