diff options
-rwxr-xr-x | src/vgstash_cli.py | 27 | ||||
-rw-r--r-- | tests/test_vgstash_cli.py | 21 |
2 files changed, 43 insertions, 5 deletions
diff --git a/src/vgstash_cli.py b/src/vgstash_cli.py index d00f339..1967458 100755 --- a/src/vgstash_cli.py +++ b/src/vgstash_cli.py @@ -194,18 +194,35 @@ def notes(title, system, edit): with tempfile.NamedTemporaryFile() as tmpfile: tmpfile.write(target_game.notes.encode("UTF-8")) tmpfile.flush() - process = subprocess.run([os.getenv("EDITOR", "vim"), tmpfile.name]) + pre_stat = os.stat(tmpfile.name) + o_mtime = pre_stat.st_mtime + o_size = pre_stat.st_size + try: + process = subprocess.run([os.getenv("EDITOR", "vim"), tmpfile.name]) + except: + click.echo("Could not run editor. Is it set correctly?") + return tmpfile.flush() tmpfile.seek(0) + post_stat = os.stat(tmpfile.name) + n_mtime = post_stat.st_mtime + n_size = post_stat.st_size note_arr = [] for line in tmpfile: note_arr.append(line.decode("UTF-8").rstrip("\r\n")) target_game.notes = "\n".join(note_arr) db.update_game(target_game, target_game) - if process.returncode == 0: - click.echo("Notes for {} on {} have been updated!".format(target_game.title, target_game.system)) - else: - click.echo("Couldn't find an editor for notes. Check the EDITOR environment variable and try again.") + if process.returncode == 0: + # determine what actually happened + if o_mtime == n_mtime: + if o_size == n_size: + click.echo("Notes for {} on {} left unchanged.".format(target_game.title, target_game.system)) + elif n_mtime > o_mtime and o_size != n_size: + click.echo("Notes for {} on {} have been updated!".format(target_game.title, target_game.system)) + return + else: + click.echo("The editor crashed. Please try again.") + return else: if len(target_game.notes) > 0: click.echo("Notes for {} on {}:".format(target_game.title, target_game.system)) diff --git a/tests/test_vgstash_cli.py b/tests/test_vgstash_cli.py index 0e24859..e24c5a4 100644 --- a/tests/test_vgstash_cli.py +++ b/tests/test_vgstash_cli.py @@ -231,6 +231,27 @@ def test_notes_invalid(): assert result.output == 'Game not found. Please try again.\n' +def test_notes_unmodified(): + runner = CliRunner() + print("--- WHAT EDITOR SEES ---") + result = runner.invoke(vgstash_cli.cli, ['notes', 'Vectorman 2', 'Genesis', '-e']) + print("--- END WHAT EDITOR SEES ---") + if verbose: + print(result.output) + assert result.exit_code == 0 + assert result.output == 'Notes for Vectorman 2 on Genesis left unchanged.\n' + + +def test_notes_bad_editor(): + os.environ['EDITOR'] = "zlurp" + 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 == "Could not run editor. Is it set correctly?\n" + + def test_notes_empty(): runner = CliRunner() result = runner.invoke(vgstash_cli.cli, ['notes', 'Super Mario Bros.', 'NES']) |