Changeset - d8ec591edb40
[Not reviewed]
0 1 3
Branko Majic (branko) - 7 years ago 2018-02-26 22:38:32
branko@majic.rs
GC-11: Added intial dummy CLI skeleton implementation:

- Register entry point in the package setup script.
- Implemented a very basic main function as entry point that
constructs an empty argument parser.
- Implemented functional test for testing if the CLI tool gets invoked
correctly after installation.
- Added unit tests for implemented functionality.
4 files changed with 143 insertions and 0 deletions:
0 comments (0 inline, 0 general)
functional_tests/test_help.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 
#
 
# Copyright (C) 2018 Branko Majic
 
#
 
# This file is part of Gimmecert.
 
#
 
# Gimmecert is free software: you can redistribute it and/or modify it
 
# under the terms of the GNU General Public License as published by the Free
 
# Software Foundation, either version 3 of the License, or (at your option) any
 
# later version.
 
#
 
# Gimmecert is distributed in the hope that it will be useful, but
 
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 
# details.
 
#
 
# You should have received a copy of the GNU General Public License along with
 
# Gimmecert.  If not, see <http://www.gnu.org/licenses/>.
 
#
 

	
 

	
 
import subprocess
 

	
 

	
 
def test_cli_works():
 
    # John is a system integrator that in his line of work often needs
 
    # to issue certificates for testing. Just recently, he has heard
 
    # of a new tool called gimmecert that can be used for issuing
 
    # certificates in test environments that would make his life
 
    # easier.
 

	
 
    # John goes ahead and installs the tool on his local machine.
 

	
 
    # Before moving on, John decides to quickly test if the package
 
    # has been installed correctly. Assuming that the command is the
 
    # same as package name, he runs it.
 
    process = subprocess.Popen(["gimmecert"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 
    stdout, stderr = process.communicate()
 
    stdout, stderr = stdout.decode(), stderr.decode()
 

	
 
    # John has a look at output, and notices that no error has been
 
    # reported. He also verifies the return code is non-zero, just to
 
    # be on the safe side.
 
    assert stderr == ''
 
    assert process.returncode == 0
gimmecert/cli.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 
#
 
# Copyright (C) 2018 Branko Majic
 
#
 
# This file is part of Gimmecert.
 
#
 
# Gimmecert is free software: you can redistribute it and/or modify it
 
# under the terms of the GNU General Public License as published by the Free
 
# Software Foundation, either version 3 of the License, or (at your option) any
 
# later version.
 
#
 
# Gimmecert is distributed in the hope that it will be useful, but
 
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 
# details.
 
#
 
# You should have received a copy of the GNU General Public License along with
 
# Gimmecert.  If not, see <http://www.gnu.org/licenses/>.
 
#
 

	
 

	
 
import argparse
 

	
 

	
 
def get_parser():
 
    """
 
    Sets-up and returns a CLI argument parser.
 

	
 
    :returns: argparse.ArgumentParser -- argument parser for CLI.
 
    """
 

	
 
    parser = argparse.ArgumentParser()
 

	
 
    return parser
 

	
 

	
 
def main():
 
    """
 
    This function is a CLI entry point for the tool. It is a thin
 
    wrapper around the argument parser, and underlying command
 
    implementation.
 
    """
 

	
 
    parser = get_parser()
 
    parser.parse_args()
setup.py
Show inline comments
 
@@ -70,12 +70,15 @@ setup(
 
    author='Branko Majic',
 
    author_email='branko@majic.rs',
 
    install_requires=install_requirements,
 
    setup_requires=setup_requirements,
 
    tests_require=test_requirements,
 
    extras_require=extras_requirements,
 
    entry_points = {
 
        'console_scripts': ['gimmecert=gimmecert.cli:main'],
 
    },
 
    classifiers=[
 
        'Development Status :: 1 - Planning',
 
        'Environment :: Console',
 
        'Intended Audience :: Developers',
 
        'Intended Audience :: System Administrators',
 
        'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)',
tests/test_cli.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 
#
 
# Copyright (C) 2018 Branko Majic
 
#
 
# This file is part of Gimmecert.
 
#
 
# Gimmecert is free software: you can redistribute it and/or modify it
 
# under the terms of the GNU General Public License as published by the Free
 
# Software Foundation, either version 3 of the License, or (at your option) any
 
# later version.
 
#
 
# Gimmecert is distributed in the hope that it will be useful, but
 
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 
# details.
 
#
 
# You should have received a copy of the GNU General Public License along with
 
# Gimmecert.  If not, see <http://www.gnu.org/licenses/>.
 
#
 

	
 

	
 
import argparse
 

	
 
import gimmecert.cli
 

	
 
from unittest import mock
 

	
 

	
 
def test_get_parser_returns_parser():
 
    parser = gimmecert.cli.get_parser()
 

	
 
    assert isinstance(parser, argparse.ArgumentParser)
 

	
 

	
 
@mock.patch('gimmecert.cli.get_parser')
 
def test_main_invokes_get_parser(mock_get_parser):
 

	
 
    gimmecert.cli.main()
 

	
 
    mock_get_parser.assert_called_once_with()
 

	
 

	
 
@mock.patch('gimmecert.cli.get_parser')
 
def test_main_invokes_argument_parsing(mock_get_parser):
 
    mock_parser = mock.Mock()
 
    mock_get_parser.return_value = mock_parser
 

	
 
    gimmecert.cli.main()
 

	
 
    mock_parser.parse_args.assert_called_once_with()
0 comments (0 inline, 0 general)