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
This commit is contained in:
JocelynDelalande 2018-01-07 00:27:42 +01:00 committed by Alexis Metaireau
parent 3b2e11ab63
commit 2019b398f1
4 changed files with 43 additions and 6 deletions

View file

@ -3,3 +3,4 @@ tox
pytest
Flask-Testing
Flake8
mock; python_version < '3.3'

View file

@ -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()

View file

@ -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()

13
tox.ini
View file

@ -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