Completed
Pull Request — master (#5)
by George
01:21
created

test_consumer_opts()   A

Complexity

Conditions 4

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 4
dl 0
loc 5
rs 9.2
1
# -*- coding: utf-8 -*-
2
# vi:si:et:sw=4:sts=4:ts=4
3
4
import json
5
from unittest import mock
6
7
from click.testing import CliRunner
8
9
import pytest
10
11
from loafer import __version__
12
from loafer import conf
13
from loafer.cli import cli
14
15
16
@pytest.fixture
17
def runner():
18
    return CliRunner()
19
20
21
@pytest.fixture
22
def local_settings():
23
    return conf.Settings()
24
25
26
def test_version(runner):
27
    result = runner.invoke(cli, ['--version'])
28
    assert result.exit_code == 0
29
    assert __version__ in result.output
30
31
32
def test_verbose(runner, local_settings):
33
    with mock.patch('loafer.cli.settings', local_settings) as settings:
34
        runner.invoke(cli, ['-v'])
35
        assert settings.LOAFER_LOGLEVEL == 'INFO'
36
37
38
def test_very_verbose(runner, local_settings):
39
    with mock.patch('loafer.cli.settings', local_settings) as settings:
40
        runner.invoke(cli, ['-vv'])
41
        assert settings.LOAFER_LOGLEVEL == 'DEBUG'
42
43
44
def test_max_jobs(runner, local_settings):
45
    with mock.patch('loafer.cli.settings', local_settings) as settings:
46
        runner.invoke(cli, ['--max-jobs', '20'])
47
        assert settings.LOAFER_MAX_JOBS == 20
48
49
50
def test_max_jobs_error(runner, local_settings):
51
    result = runner.invoke(cli, ['--max-jobs', 'a'])
52
    assert isinstance(result.exception, SystemExit)
53
54
    with mock.patch('loafer.cli.settings', local_settings) as settings:
55
        result = runner.invoke(cli, ['--max-jobs', '0'])
56
        # preserves default value
57
        assert settings.LOAFER_MAX_JOBS == 10
58
59
60
def test_max_threads(runner, local_settings):
61
    with mock.patch('loafer.cli.settings', local_settings) as settings:
62
        runner.invoke(cli, ['--max-threads', '20'])
63
        assert settings.LOAFER_MAX_THREAD_POOL == 20
64
65
66
def test_max_threads_error(runner, local_settings):
67
    result = runner.invoke(cli, ['--max-threads', 'a'])
68
    assert isinstance(result.exception, SystemExit)
69
70
    with mock.patch('loafer.cli.settings', local_settings) as settings:
71
        result = runner.invoke(cli, ['--max-threads', '0'])
72
        # preserves default value
73
        assert settings.LOAFER_MAX_THREAD_POOL is None
74
75
76
def test_source(runner, local_settings):
77
    with mock.patch('loafer.cli.settings', local_settings) as settings:
78
        runner.invoke(cli, ['--source', 'foobar'])
79
        routes = settings.LOAFER_ROUTES
80
        assert routes[0]['source'] == 'foobar'
81
82
83
def test_handler(runner, local_settings):
84
    with mock.patch('loafer.cli.settings', local_settings) as settings:
85
        runner.invoke(cli, ['--handler', 'foobar'])
86
        routes = settings.LOAFER_ROUTES
87
        assert routes[0]['handler'] == 'foobar'
88
89
90
def test_translator(runner, local_settings):
91
    with mock.patch('loafer.cli.settings', local_settings) as settings:
92
        runner.invoke(cli, ['--translator', 'foobar'])
93
        routes = settings.LOAFER_ROUTES
94
        assert routes[0]['message_translator'] == 'foobar'
95
96
97
def test_consumer(runner, local_settings):
98
    with mock.patch('loafer.cli.settings', local_settings) as settings:
99
        runner.invoke(cli, ['--consumer', 'foobar'])
100
        assert settings.LOAFER_DEFAULT_CONSUMER_CLASS == 'foobar'
101
102
103
def test_consumer_opts(runner, local_settings):
104
    with mock.patch('loafer.cli.settings', local_settings) as settings:
105
        for opt in [{}, '1', [], '{"key": "value"}', '""']:
106
            runner.invoke(cli, ['--consumer-opts', str(opt)])
107
            assert settings.LOAFER_DEFAULT_CONSUMER_OPTIONS == json.loads(str(opt))
108
109
110
def test_consumer_opts_error(runner):
111
    for opt in ['test', '123:123']:
112
        result = runner.invoke(cli, ['--consumer-opts', opt])
113
        assert isinstance(result.exception, json.decoder.JSONDecodeError)
114