From 8775fcd12876f3acc5f9b919afe1cf3be238a186 Mon Sep 17 00:00:00 2001 From: zlg Date: Wed, 10 Oct 2018 21:29:08 -0700 Subject: Move tests and data to dedicated directory Also tweaked the export command to report correctly. --- .gitignore | 1 + setup.py | 3 +- src/vgstash/test_vgstash.py | 145 ---------------------- src/vgstash/test_vgstash_cli.py | 258 ---------------------------------------- src/vgstash_cli.py | 2 +- tests/data/test_import.yml | 16 +++ tests/test_vgstash.py | 145 ++++++++++++++++++++++ tests/test_vgstash_cli.py | 258 ++++++++++++++++++++++++++++++++++++++++ tox.ini | 2 +- 9 files changed, 423 insertions(+), 407 deletions(-) delete mode 100644 src/vgstash/test_vgstash.py delete mode 100644 src/vgstash/test_vgstash_cli.py create mode 100644 tests/data/test_import.yml create mode 100644 tests/test_vgstash.py create mode 100644 tests/test_vgstash_cli.py diff --git a/.gitignore b/.gitignore index 4775e15..da6c42f 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ __pycache__/ /dist/ .vgstash.db +tests/data/test_export.* diff --git a/setup.py b/setup.py index f2f16d1..11c37fa 100755 --- a/setup.py +++ b/setup.py @@ -28,9 +28,8 @@ setup( }, install_requires=[ 'Click>=6.0', # for better Windows console support - 'PyYAML', # importing from YAML files + 'PyYAML', # import/export YAML files ], - #py_modules=["vgstash"], classifiers=( "Development Status :: 2 - Pre-Alpha", "License :: OSI Approved :: GNU Affero General Public License v3", diff --git a/src/vgstash/test_vgstash.py b/src/vgstash/test_vgstash.py deleted file mode 100644 index 74f3c43..0000000 --- a/src/vgstash/test_vgstash.py +++ /dev/null @@ -1,145 +0,0 @@ -import os -import pytest -import vgstash -import sqlite3 - -def test_config(): - assert vgstash.DEFAULT_CONFIG['db_location'] - assert vgstash.DEFAULT_CONFIG['progress'] in vgstash.PROGRESS.values() - assert vgstash.DEFAULT_CONFIG['ownership'] in vgstash.OWNERSHIP.values() - -@pytest.fixture(scope="module") -def vgstash_db(): - vgstash.DEFAULT_CONFIG['db_location'] = '.vgstash.db' - yield vgstash.DB(vgstash.DEFAULT_CONFIG['db_location']) - os.remove(vgstash.DEFAULT_CONFIG['db_location']) - -def test_game_min(): - game = vgstash.Game("test_game1", "system3") - assert isinstance(game, vgstash.Game) - assert isinstance(game.title, str) - assert isinstance(game.system, str) - assert isinstance(game.ownership, int) - assert isinstance(game.progress, int) - assert isinstance(game.notes, str) - assert game.ownership in vgstash.OWNERSHIP.values() - assert game.progress in vgstash.PROGRESS.values() - -def test_game_ownership(): - game = vgstash.Game("test_game2", "system3", 1) - assert isinstance(game, vgstash.Game) - assert isinstance(game.title, str) - assert isinstance(game.system, str) - assert isinstance(game.ownership, int) - assert isinstance(game.progress, int) - assert isinstance(game.notes, str) - assert game.ownership in vgstash.OWNERSHIP.values() - assert game.progress in vgstash.PROGRESS.values() - -def test_game_ownership_str(): - game = vgstash.Game("test_game2", "system3", 'd') - assert isinstance(game, vgstash.Game) - assert isinstance(game.title, str) - assert isinstance(game.system, str) - assert isinstance(game.ownership, int) - assert isinstance(game.progress, int) - assert isinstance(game.notes, str) - assert game.ownership in vgstash.OWNERSHIP.values() - assert game.progress in vgstash.PROGRESS.values() - -def test_game_progress(): - game = vgstash.Game("test_game3", "system3", progress=1) - assert isinstance(game, vgstash.Game) - assert isinstance(game.title, str) - assert isinstance(game.system, str) - assert isinstance(game.ownership, int) - assert isinstance(game.progress, int) - assert isinstance(game.notes, str) - assert game.ownership in vgstash.OWNERSHIP.values() - assert game.progress in vgstash.PROGRESS.values() - -def test_game_progress_str(): - game = vgstash.Game("test_game3", "system3", progress='c') - assert isinstance(game, vgstash.Game) - assert isinstance(game.title, str) - assert isinstance(game.system, str) - assert isinstance(game.ownership, int) - assert isinstance(game.progress, int) - assert isinstance(game.notes, str) - assert game.ownership in vgstash.OWNERSHIP.values() - assert game.progress in vgstash.PROGRESS.values() - -def test_game_notes_no_own_or_progress(): - game = vgstash.Game("test_game4", "system3", notes="Hello world") - assert isinstance(game, vgstash.Game) - assert isinstance(game.title, str) - assert isinstance(game.system, str) - assert isinstance(game.ownership, int) - assert isinstance(game.progress, int) - assert isinstance(game.notes, str) - assert game.ownership in vgstash.OWNERSHIP.values() - assert game.progress in vgstash.PROGRESS.values() - -def test_game_full(): - game = vgstash.Game("test_game5", "system3", 'b', 2, "Blah") - assert isinstance(game, vgstash.Game) - assert isinstance(game.title, str) - assert isinstance(game.system, str) - assert isinstance(game.ownership, int) - assert isinstance(game.progress, int) - assert isinstance(game.notes, str) - assert game.ownership in vgstash.OWNERSHIP.values() - assert game.progress in vgstash.PROGRESS.values() - -def test_db(vgstash_db): - assert isinstance(vgstash_db.conn, sqlite3.Connection) - -def test_db_create_schema(vgstash_db): - assert vgstash_db.create_schema() - -def test_db_add_game(vgstash_db): - game = vgstash.Game("db_add_game", "system") - assert vgstash_db.add_game(game) - assert vgstash_db.has_game(game) - -def test_db_add_game_ownership(vgstash_db): - game = vgstash.Game("db_add_game_ownership", "system2", 'p') - assert vgstash_db.add_game(game) - assert vgstash_db.has_game(game) - -def test_db_add_game_notes(vgstash_db): - game = vgstash.Game("db_add_game_notes", "system2", '-', '-', 'my notes') - assert vgstash_db.add_game(game) - assert vgstash_db.has_game(game) - -def test_db_update_game(vgstash_db): - oldgame = vgstash.Game("db_add_game", "system") - newgame = vgstash.Game("db_update_game", "system") - if vgstash_db.has_game(oldgame): - assert vgstash_db.update_game(oldgame, newgame) - assert vgstash_db.has_game(newgame) - -def test_db_delete_game(vgstash_db): - game = vgstash.Game("db_delete_game", "system2") - vgstash_db.add_game(game) - assert vgstash_db.delete_game(game) - -def test_db_list_games(vgstash_db): - res = vgstash_db.list_games() - assert isinstance(res, list) - assert isinstance(res[0], sqlite3.Row) - -def test_db_add_filter(vgstash_db): - assert vgstash_db.add_filter("db_add_filter", "SELECT * FROM games WHERE system = 'system2'") - assert vgstash_db.has_filter("db_add_filter") - -def test_db_update_filter(vgstash_db): - assert vgstash_db.update_filter("db_add_filter", "SELECT * FROM games WHERE system='system'") - assert vgstash_db.has_filter("db_add_filter") - assert "'system'" in vgstash.FILTERS["db_add_filter"] - -def test_db_delete_filter(vgstash_db): - assert vgstash_db.delete_filter("db_add_filter") - -def test_db_list_filters(vgstash_db): - assert len(vgstash_db.list_filters()) > 0 diff --git a/src/vgstash/test_vgstash_cli.py b/src/vgstash/test_vgstash_cli.py deleted file mode 100644 index 098c39e..0000000 --- a/src/vgstash/test_vgstash_cli.py +++ /dev/null @@ -1,258 +0,0 @@ -import click -import os -import pytest -import vgstash -import vgstash_cli - -from click.testing import CliRunner - -# TODO: Setup a testing directory for test data and integrate with pytest - -verbose = True -interactive = False - -# Change this to suit your testing environment -if not interactive: - os.environ['EDITOR'] = "cat" -else: - if not os.getenv("EDITOR"): - os.environ['EDITOR'] = "vim" - -def test_init(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['init']) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == "Initializing the database...\nSchema created.\n" - - -def test_add_minimum(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['add', 'Super Mario Bros.', 'NES']) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == "Added Super Mario Bros. for NES. You physically own it and are playing it.\n" - - -def test_add_ownership(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['add', 'The Legend of Zelda', 'NES', 'd']) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == "Added The Legend of Zelda for NES. You digitally own it and are playing it.\n" - - -def test_add_typical(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['add', 'Sonic the Hedgehog 2', 'Genesis', '0', '3']) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == "Added Sonic the Hedgehog 2 for Genesis. You do not own it and have beaten it.\n" - - -def test_add_full(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['add', 'Vectorman', 'Genesis', 'u', 'b', 'beep']) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == "Added Vectorman for Genesis. You do not own it and have beaten it. It also has notes.\n" - - -def test_add_full_note_with_newline(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['add', 'Vectorman 2', 'Genesis', 'p', 'p', 'beep\nboop']) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == "Added Vectorman 2 for Genesis. You physically own it and are playing it. It also has notes.\n" - - -def test_list(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.list_games, ['--raw']) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == '\n'.join(( - 'Sonic the Hedgehog 2|Genesis|0|3|', - 'Vectorman|Genesis|0|3|beep', - 'Vectorman 2|Genesis|1|2|beep\\nboop', - 'Super Mario Bros.|NES|1|2|', - 'The Legend of Zelda|NES|2|2|\n', - )) - - -def test_list_filter(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['list', '-r', 'playlog']) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == '\n'.join(( - 'Vectorman 2|Genesis|1|2|beep\\nboop', - 'Super Mario Bros.|NES|1|2|', - 'The Legend of Zelda|NES|2|2|\n', - )) - - -def test_list_pretty(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['list', '-w', '80']) - if verbose: - print() - print(result.output) - assert result.exit_code == 0 - assert result.output == '\n'.join(( - 'Title | System | Own | Progress', - '--------------------------------------------------------------------------------', - 'Sonic the Hedgehog 2 | Genesis | | B', - 'Vectorman | Genesis | | B', - 'Vectorman 2 | Genesis | P | P', - 'Super Mario Bros. | NES | P | P', - 'The Legend of Zelda | NES | D | P\n', - )) - - -def test_list_pretty_smaller(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['list', '-w', '60']) - if verbose: - print() - print(result.output) - assert result.exit_code == 0 - assert result.output == '\n'.join(( - 'Title | System | Own | Progress', - '------------------------------------------------------------', - 'Sonic the Hedgehog 2 | Genesis | | B', - 'Vectorman | Genesis | | B', - 'Vectorman 2 | Genesis | P | P', - 'Super Mario Bros. | NES | P | P', - 'The Legend of Zelda | NES | D | P\n' - )) - - -def test_list_pretty_tiny(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['list', '-w', '50']) - if verbose: - print() - print(result.output) - assert result.exit_code == 0 - assert result.output == '\n'.join(( - 'Title | System | Own | Progress', - '--------------------------------------------------', - 'Sonic the Hedgehog 2 | Genesis | | B', - 'Vectorman | Genesis | | B', - 'Vectorman 2 | Genesis | P | P', - 'Super Mario Bros. | NES | P | P', - 'The Legend of Zelda | NES | D | P\n' - )) - - -def test_delete(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['delete', 'Vectorman', 'Genesis']) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == "Removed Vectorman for Genesis from your collection.\n" - - -def test_update(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['update', 'Super Mario Bros.', 'NES', 'progress', 'c']) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == 'Updated Super Mario Bros. for NES. Its progress is now complete.\n' - - list_result = runner.invoke(vgstash_cli.cli, ['list', '-w', '40']) - if verbose: - print(list_result.output) - assert list_result.exit_code == 0 - assert list_result.output == "\n".join(( - 'Title | System | Own | Progress', - '----------------------------------------', - 'Sonic the H | Genesis | | B', - 'Vectorman 2 | Genesis | P | P', - 'Super Mario | NES | P | C', - 'The Legend | NES | D | P\n' - )) - - -def test_notes(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['notes', 'Vectorman 2', 'Genesis']) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == "\n".join(( - 'Notes for Vectorman 2 on Genesis:', - '', - 'beep', - 'boop\n' - )) - - -def test_notes_edit(): - if not interactive: - return - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ['notes', 'Vectorman 2', 'Genesis', '-e']) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == "Notes for Vectorman 2 on Genesis have been updated!\n" - - # List the results to make sure they match what the editor has. - list_runner = CliRunner() - list_result = runner.invoke(vgstash_cli.cli, ['list', '-r']) - if verbose: - print(list_result.output) - assert list_result.exit_code == 0 - - -def test_import_file_yaml(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ["import", "test_import.yml"]) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == "Successfully imported 2 games from {}.\n".format(os.path.join(os.getcwd(), "test_import.yml")) - - # List the results to make sure they match what the editor has. - list_runner = CliRunner() - list_result = runner.invoke(vgstash_cli.cli, ['list', '-w', '40']) - if verbose: - print(list_result.output) - assert list_result.exit_code == 0 - - -def test_import_file_yaml_update(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ["import", "test_import.yml", "-u"]) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == "Successfully imported 3 games from {}.\n".format(os.path.join(os.getcwd(), "test_import.yml")) - - # List the results to make sure they match what the editor has. - list_runner = CliRunner() - list_result = runner.invoke(vgstash_cli.cli, ['list', '-w', '40']) - if verbose: - print(list_result.output) - assert list_result.exit_code == 0 - - -def test_export_file_yaml(): - runner = CliRunner() - result = runner.invoke(vgstash_cli.cli, ["export", "-f", "yaml", "test_export.yml"]) - if verbose: - print(result.output) - assert result.exit_code == 0 - assert result.output == "Successfully exported 6 games to {}.\n".format(os.path.join(os.getcwd(), "test_export.yml")) diff --git a/src/vgstash_cli.py b/src/vgstash_cli.py index 72a751a..17fd301 100644 --- a/src/vgstash_cli.py +++ b/src/vgstash_cli.py @@ -270,5 +270,5 @@ def export_file(format, filepath): with open(filepath, "w") as fp: yaml.dump(game_set, fp, default_flow_style=False, indent=4, allow_unicode=True) - click.echo("Successfully exported 6 games to {}.".format(os.path.join(os.getcwd(), "test_export.yml"))) + click.echo("Successfully exported {} games to {}.".format(len(game_set), filepath)) diff --git a/tests/data/test_import.yml b/tests/data/test_import.yml new file mode 100644 index 0000000..eb93579 --- /dev/null +++ b/tests/data/test_import.yml @@ -0,0 +1,16 @@ +# vgstash DB file version 0.2 +- ownership: 1 + progress: 3 + system: NES + title: Super Mario Bros. + notes: '' +- ownership: 2 + progress: 4 + system: 3DS + title: The Legend of Zelda + notes: '' +- ownership: 2 + progress: 3 + system: WiiU + title: Super Smash Bros for WiiU + notes: '' diff --git a/tests/test_vgstash.py b/tests/test_vgstash.py new file mode 100644 index 0000000..74f3c43 --- /dev/null +++ b/tests/test_vgstash.py @@ -0,0 +1,145 @@ +import os +import pytest +import vgstash +import sqlite3 + +def test_config(): + assert vgstash.DEFAULT_CONFIG['db_location'] + assert vgstash.DEFAULT_CONFIG['progress'] in vgstash.PROGRESS.values() + assert vgstash.DEFAULT_CONFIG['ownership'] in vgstash.OWNERSHIP.values() + +@pytest.fixture(scope="module") +def vgstash_db(): + vgstash.DEFAULT_CONFIG['db_location'] = '.vgstash.db' + yield vgstash.DB(vgstash.DEFAULT_CONFIG['db_location']) + os.remove(vgstash.DEFAULT_CONFIG['db_location']) + +def test_game_min(): + game = vgstash.Game("test_game1", "system3") + assert isinstance(game, vgstash.Game) + assert isinstance(game.title, str) + assert isinstance(game.system, str) + assert isinstance(game.ownership, int) + assert isinstance(game.progress, int) + assert isinstance(game.notes, str) + assert game.ownership in vgstash.OWNERSHIP.values() + assert game.progress in vgstash.PROGRESS.values() + +def test_game_ownership(): + game = vgstash.Game("test_game2", "system3", 1) + assert isinstance(game, vgstash.Game) + assert isinstance(game.title, str) + assert isinstance(game.system, str) + assert isinstance(game.ownership, int) + assert isinstance(game.progress, int) + assert isinstance(game.notes, str) + assert game.ownership in vgstash.OWNERSHIP.values() + assert game.progress in vgstash.PROGRESS.values() + +def test_game_ownership_str(): + game = vgstash.Game("test_game2", "system3", 'd') + assert isinstance(game, vgstash.Game) + assert isinstance(game.title, str) + assert isinstance(game.system, str) + assert isinstance(game.ownership, int) + assert isinstance(game.progress, int) + assert isinstance(game.notes, str) + assert game.ownership in vgstash.OWNERSHIP.values() + assert game.progress in vgstash.PROGRESS.values() + +def test_game_progress(): + game = vgstash.Game("test_game3", "system3", progress=1) + assert isinstance(game, vgstash.Game) + assert isinstance(game.title, str) + assert isinstance(game.system, str) + assert isinstance(game.ownership, int) + assert isinstance(game.progress, int) + assert isinstance(game.notes, str) + assert game.ownership in vgstash.OWNERSHIP.values() + assert game.progress in vgstash.PROGRESS.values() + +def test_game_progress_str(): + game = vgstash.Game("test_game3", "system3", progress='c') + assert isinstance(game, vgstash.Game) + assert isinstance(game.title, str) + assert isinstance(game.system, str) + assert isinstance(game.ownership, int) + assert isinstance(game.progress, int) + assert isinstance(game.notes, str) + assert game.ownership in vgstash.OWNERSHIP.values() + assert game.progress in vgstash.PROGRESS.values() + +def test_game_notes_no_own_or_progress(): + game = vgstash.Game("test_game4", "system3", notes="Hello world") + assert isinstance(game, vgstash.Game) + assert isinstance(game.title, str) + assert isinstance(game.system, str) + assert isinstance(game.ownership, int) + assert isinstance(game.progress, int) + assert isinstance(game.notes, str) + assert game.ownership in vgstash.OWNERSHIP.values() + assert game.progress in vgstash.PROGRESS.values() + +def test_game_full(): + game = vgstash.Game("test_game5", "system3", 'b', 2, "Blah") + assert isinstance(game, vgstash.Game) + assert isinstance(game.title, str) + assert isinstance(game.system, str) + assert isinstance(game.ownership, int) + assert isinstance(game.progress, int) + assert isinstance(game.notes, str) + assert game.ownership in vgstash.OWNERSHIP.values() + assert game.progress in vgstash.PROGRESS.values() + +def test_db(vgstash_db): + assert isinstance(vgstash_db.conn, sqlite3.Connection) + +def test_db_create_schema(vgstash_db): + assert vgstash_db.create_schema() + +def test_db_add_game(vgstash_db): + game = vgstash.Game("db_add_game", "system") + assert vgstash_db.add_game(game) + assert vgstash_db.has_game(game) + +def test_db_add_game_ownership(vgstash_db): + game = vgstash.Game("db_add_game_ownership", "system2", 'p') + assert vgstash_db.add_game(game) + assert vgstash_db.has_game(game) + +def test_db_add_game_notes(vgstash_db): + game = vgstash.Game("db_add_game_notes", "system2", '-', '-', 'my notes') + assert vgstash_db.add_game(game) + assert vgstash_db.has_game(game) + +def test_db_update_game(vgstash_db): + oldgame = vgstash.Game("db_add_game", "system") + newgame = vgstash.Game("db_update_game", "system") + if vgstash_db.has_game(oldgame): + assert vgstash_db.update_game(oldgame, newgame) + assert vgstash_db.has_game(newgame) + +def test_db_delete_game(vgstash_db): + game = vgstash.Game("db_delete_game", "system2") + vgstash_db.add_game(game) + assert vgstash_db.delete_game(game) + +def test_db_list_games(vgstash_db): + res = vgstash_db.list_games() + assert isinstance(res, list) + assert isinstance(res[0], sqlite3.Row) + +def test_db_add_filter(vgstash_db): + assert vgstash_db.add_filter("db_add_filter", "SELECT * FROM games WHERE system = 'system2'") + assert vgstash_db.has_filter("db_add_filter") + +def test_db_update_filter(vgstash_db): + assert vgstash_db.update_filter("db_add_filter", "SELECT * FROM games WHERE system='system'") + assert vgstash_db.has_filter("db_add_filter") + assert "'system'" in vgstash.FILTERS["db_add_filter"] + +def test_db_delete_filter(vgstash_db): + assert vgstash_db.delete_filter("db_add_filter") + +def test_db_list_filters(vgstash_db): + assert len(vgstash_db.list_filters()) > 0 diff --git a/tests/test_vgstash_cli.py b/tests/test_vgstash_cli.py new file mode 100644 index 0000000..f81d119 --- /dev/null +++ b/tests/test_vgstash_cli.py @@ -0,0 +1,258 @@ +import click +import os +import pytest +import vgstash +import vgstash_cli + +from click.testing import CliRunner + +# TODO: Setup a testing directory for test data and integrate with pytest + +verbose = True +interactive = False + +# Change this to suit your testing environment +if not interactive: + os.environ['EDITOR'] = "cat" +else: + if not os.getenv("EDITOR"): + os.environ['EDITOR'] = "vim" + +def test_init(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['init']) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == "Initializing the database...\nSchema created.\n" + + +def test_add_minimum(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['add', 'Super Mario Bros.', 'NES']) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == "Added Super Mario Bros. for NES. You physically own it and are playing it.\n" + + +def test_add_ownership(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['add', 'The Legend of Zelda', 'NES', 'd']) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == "Added The Legend of Zelda for NES. You digitally own it and are playing it.\n" + + +def test_add_typical(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['add', 'Sonic the Hedgehog 2', 'Genesis', '0', '3']) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == "Added Sonic the Hedgehog 2 for Genesis. You do not own it and have beaten it.\n" + + +def test_add_full(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['add', 'Vectorman', 'Genesis', 'u', 'b', 'beep']) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == "Added Vectorman for Genesis. You do not own it and have beaten it. It also has notes.\n" + + +def test_add_full_note_with_newline(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['add', 'Vectorman 2', 'Genesis', 'p', 'p', 'beep\nboop']) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == "Added Vectorman 2 for Genesis. You physically own it and are playing it. It also has notes.\n" + + +def test_list(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.list_games, ['--raw']) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == '\n'.join(( + 'Sonic the Hedgehog 2|Genesis|0|3|', + 'Vectorman|Genesis|0|3|beep', + 'Vectorman 2|Genesis|1|2|beep\\nboop', + 'Super Mario Bros.|NES|1|2|', + 'The Legend of Zelda|NES|2|2|\n', + )) + + +def test_list_filter(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['list', '-r', 'playlog']) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == '\n'.join(( + 'Vectorman 2|Genesis|1|2|beep\\nboop', + 'Super Mario Bros.|NES|1|2|', + 'The Legend of Zelda|NES|2|2|\n', + )) + + +def test_list_pretty(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['list', '-w', '80']) + if verbose: + print() + print(result.output) + assert result.exit_code == 0 + assert result.output == '\n'.join(( + 'Title | System | Own | Progress', + '--------------------------------------------------------------------------------', + 'Sonic the Hedgehog 2 | Genesis | | B', + 'Vectorman | Genesis | | B', + 'Vectorman 2 | Genesis | P | P', + 'Super Mario Bros. | NES | P | P', + 'The Legend of Zelda | NES | D | P\n', + )) + + +def test_list_pretty_smaller(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['list', '-w', '60']) + if verbose: + print() + print(result.output) + assert result.exit_code == 0 + assert result.output == '\n'.join(( + 'Title | System | Own | Progress', + '------------------------------------------------------------', + 'Sonic the Hedgehog 2 | Genesis | | B', + 'Vectorman | Genesis | | B', + 'Vectorman 2 | Genesis | P | P', + 'Super Mario Bros. | NES | P | P', + 'The Legend of Zelda | NES | D | P\n' + )) + + +def test_list_pretty_tiny(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['list', '-w', '50']) + if verbose: + print() + print(result.output) + assert result.exit_code == 0 + assert result.output == '\n'.join(( + 'Title | System | Own | Progress', + '--------------------------------------------------', + 'Sonic the Hedgehog 2 | Genesis | | B', + 'Vectorman | Genesis | | B', + 'Vectorman 2 | Genesis | P | P', + 'Super Mario Bros. | NES | P | P', + 'The Legend of Zelda | NES | D | P\n' + )) + + +def test_delete(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['delete', 'Vectorman', 'Genesis']) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == "Removed Vectorman for Genesis from your collection.\n" + + +def test_update(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['update', 'Super Mario Bros.', 'NES', 'progress', 'c']) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == 'Updated Super Mario Bros. for NES. Its progress is now complete.\n' + + list_result = runner.invoke(vgstash_cli.cli, ['list', '-w', '40']) + if verbose: + print(list_result.output) + assert list_result.exit_code == 0 + assert list_result.output == "\n".join(( + 'Title | System | Own | Progress', + '----------------------------------------', + 'Sonic the H | Genesis | | B', + 'Vectorman 2 | Genesis | P | P', + 'Super Mario | NES | P | C', + 'The Legend | NES | D | P\n' + )) + + +def test_notes(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['notes', 'Vectorman 2', 'Genesis']) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == "\n".join(( + 'Notes for Vectorman 2 on Genesis:', + '', + 'beep', + 'boop\n' + )) + + +def test_notes_edit(): + if not interactive: + return + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ['notes', 'Vectorman 2', 'Genesis', '-e']) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == "Notes for Vectorman 2 on Genesis have been updated!\n" + + # List the results to make sure they match what the editor has. + list_runner = CliRunner() + list_result = runner.invoke(vgstash_cli.cli, ['list', '-r']) + if verbose: + print(list_result.output) + assert list_result.exit_code == 0 + + +def test_import_file_yaml(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ["import", "tests/data/test_import.yml"]) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == "Successfully imported 2 games from {}.\n".format(os.path.join(os.getcwd(), "tests/data/test_import.yml")) + + # List the results to make sure they match what the editor has. + list_runner = CliRunner() + list_result = runner.invoke(vgstash_cli.cli, ['list', '-w', '40']) + if verbose: + print(list_result.output) + assert list_result.exit_code == 0 + + +def test_import_file_yaml_update(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ["import", "tests/data/test_import.yml", "-u"]) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == "Successfully imported 3 games from {}.\n".format(os.path.join(os.getcwd(), "tests/data/test_import.yml")) + + # List the results to make sure they match what the editor has. + list_runner = CliRunner() + list_result = runner.invoke(vgstash_cli.cli, ['list', '-w', '40']) + if verbose: + print(list_result.output) + assert list_result.exit_code == 0 + + +def test_export_file_yaml(): + runner = CliRunner() + result = runner.invoke(vgstash_cli.cli, ["export", "-f", "yaml", "tests/data/test_export.yml"]) + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == "Successfully exported 6 games to {}.\n".format(os.path.join(os.getcwd(), "tests/data/test_export.yml")) diff --git a/tox.ini b/tox.ini index 9b397b2..f0b7805 100644 --- a/tox.ini +++ b/tox.ini @@ -10,4 +10,4 @@ envlist = py36 deps = pytest commands = - pytest -svv + pytest -svv --rootdir=tests/ -- cgit v1.2.3-54-g00ecf