diff options
| author | JocelynDelalande <JocelynDelalande@users.noreply.github.com> | 2018-01-07 00:27:42 +0100 |
|---|---|---|
| committer | Alexis Metaireau <alexis@notmyidea.org> | 2018-01-07 00:27:42 +0100 |
| commit | 2019b398f164aa3f7edb8af439c92f1a32d2e920 (patch) | |
| tree | 53f839f424f79d34c319c42b74f69fc6076fc470 | |
| parent | 3b2e11ab6369dfa853383840dc28915b60c2d062 (diff) | |
| download | ihatemoney-mirror-2019b398f164aa3f7edb8af439c92f1a32d2e920.zip ihatemoney-mirror-2019b398f164aa3f7edb8af439c92f1a32d2e920.tar.gz ihatemoney-mirror-2019b398f164aa3f7edb8af439c92f1a32d2e920.tar.bz2 | |
manage commands testing (#313)
* Rename manage.ConfigTemplate → manage.GenerateConfig
To be consistent with the CLI name: `generate-config`.
* Add tests for manage.py commands
* Run tests from pip-installed package
To be able to detect packaging-related issues on test runs.
refs #305
| -rw-r--r-- | dev-requirements.txt | 1 | ||||
| -rwxr-xr-x | ihatemoney/manage.py | 8 | ||||
| -rw-r--r-- | ihatemoney/tests/tests.py | 27 | ||||
| -rw-r--r-- | tox.ini | 13 |
4 files changed, 43 insertions, 6 deletions
diff --git a/dev-requirements.txt b/dev-requirements.txt index 04358ae..28116fa 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -3,3 +3,4 @@ tox pytest Flask-Testing Flake8 +mock; python_version < '3.3' diff --git a/ihatemoney/manage.py b/ihatemoney/manage.py index 797e6c4..315cfac 100755 --- a/ihatemoney/manage.py +++ b/ihatemoney/manage.py @@ -4,7 +4,7 @@ import os import pkgutil import random import sys -from getpass import getpass +import getpass from flask_script import Manager, Command, Option from flask_migrate import Migrate, MigrateCommand @@ -20,11 +20,11 @@ class GeneratePasswordHash(Command): """Get password from user and hash it without printing it in clear text.""" def run(self): - password = getpass(prompt='Password: ') + password = getpass.getpass(prompt='Password: ') print(generate_password_hash(password)) -class ConfigTemplate(Command): +class GenerateConfig(Command): def get_options(self): return [ Option('config_file', choices=[ @@ -74,7 +74,7 @@ def main(): manager = Manager(app) manager.add_command('db', MigrateCommand) manager.add_command('generate_password_hash', GeneratePasswordHash) - manager.add_command('generate-config', ConfigTemplate) + manager.add_command('generate-config', GenerateConfig) manager.run() diff --git a/ihatemoney/tests/tests.py b/ihatemoney/tests/tests.py index de53c58..d4b6d7a 100644 --- a/ihatemoney/tests/tests.py +++ b/ihatemoney/tests/tests.py @@ -4,6 +4,10 @@ try: import unittest2 as unittest except ImportError: import unittest # NOQA +try: + from unittest.mock import patch +except ImportError: + from mock import patch import os import json @@ -16,6 +20,7 @@ from flask import session from flask_testing import TestCase from ihatemoney.run import create_app, db, load_configuration +from ihatemoney.manage import GenerateConfig, GeneratePasswordHash from ihatemoney import models from ihatemoney import utils @@ -1406,5 +1411,27 @@ class ServerTestCase(IhatemoneyTestCase): self.assertStatus(200, req) +class CommandTestCase(BaseTestCase): + def test_generate_config(self): + """ Simply checks that all config file generation + - raise no exception + - produce something non-empty + """ + cmd = GenerateConfig() + for config_file in cmd.get_options()[0].kwargs['choices']: + with patch('sys.stdout', new=six.StringIO()) as stdout: + cmd.run(config_file) + print(stdout.getvalue()) + self.assertNotEqual(len(stdout.getvalue().strip()), 0) + + def test_generate_password_hash(self): + cmd = GeneratePasswordHash() + with patch('sys.stdout', new=six.StringIO()) as stdout, \ + patch('getpass.getpass', new=lambda prompt: 'secret'): # NOQA + cmd.run() + print(stdout.getvalue()) + self.assertEqual(len(stdout.getvalue().strip()), 187) + + if __name__ == "__main__": unittest.main() @@ -6,22 +6,31 @@ skip_missing_interpreters = True commands = python --version - py.test ihatemoney/tests/tests.py + py.test --pyargs ihatemoney.tests.tests + deps = -rdev-requirements.txt -rrequirements.txt -install_command = pip install --pre {opts} {packages} +# To be sure we are importing ihatemoney pkg from pip-installed version +changedir = /tmp + +install_command = + pip install --pre {opts} {packages} + pip install . + [testenv:docs] commands = sphinx-build -a -n -b html -d docs/_build/doctrees docs docs/_build/html deps = -rdocs/requirements.txt +changedir = {toxinidir} [testenv:lint] commands = flake8 ihatemoney deps = -rdev-requirements.txt +changedir = {toxinidir} [flake8] exclude = migrations |
