summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/data/test_import.yml16
-rw-r--r--tests/test_vgstash.py145
-rw-r--r--tests/test_vgstash_cli.py258
3 files changed, 419 insertions, 0 deletions
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"))