forked from frostming/flask-crontab
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_flask_crontab.py
114 lines (85 loc) · 2.93 KB
/
test_flask_crontab.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import pytest
from unittest import mock
from functools import partial
from flask import Flask, current_app
import flask_crontab
@pytest.fixture()
def crontab():
app = Flask(__name__)
return flask_crontab.Crontab(app)
@pytest.fixture()
def source():
return []
@pytest.fixture()
def _crontab(crontab, monkeypatch, source):
def write(self):
source[:] = self.crontab_lines
def read(self):
self.crontab_lines[:] = source
with crontab.app.app_context():
flask_crontab._Crontab.read = read
flask_crontab._Crontab.write = write
rv = flask_crontab._Crontab()
monkeypatch.setattr(flask_crontab, "_Crontab", mock.Mock(return_value=rv))
yield rv
@pytest.fixture()
def invoke(crontab):
runner = crontab.app.test_cli_runner()
return partial(runner.invoke, cli=flask_crontab.crontab_cli)
def test_add_jobs(crontab, _crontab, invoke):
@crontab.job()
def foo():
pass
result = invoke(args=["add"])
assert result.exit_code == 0
assert (
"Adding cronjob: 98fa712b876a5ec6f63cff664b748da3 -> test_flask_crontab:foo"
in result.output
)
assert "* * * * *" in _crontab.crontab_lines[0]
def test_remove_jobs(crontab, _crontab, invoke, source):
source[:] = ["* * * * * echo hello", "*/5 * * * mon-fri echo foobar"]
@crontab.job()
def foo():
pass
result = invoke(args=["add"])
assert len(_crontab.crontab_lines) == 3
result = invoke(args=["remove"])
assert result.exit_code == 0
assert (
"Removing cronjob: 98fa712b876a5ec6f63cff664b748da3 -> test_flask_crontab:foo"
in result.output
)
assert len(_crontab.crontab_lines) == 2
def test_show_jobs(crontab, _crontab, invoke):
@crontab.job()
def foo():
pass
@crontab.job()
def bar():
pass
invoke(args=["add"])
result = invoke(args=["show"])
assert result.exit_code == 0
assert "98fa712b876a5ec6f63cff664b748da3 -> test_flask_crontab:foo" in result.output
assert "f27593c4417a660d5bcaf0d498179e67 -> test_flask_crontab:bar" in result.output
def test_run_jobs(crontab, _crontab, invoke):
foo = mock.Mock()
foo.__name__ = "foo"
foo.__module__ = __name__
crontab.job()(foo)
crontab.job(args=("hello",), kwargs={"name": "John"})(foo)
invoke(args=["add"])
result = invoke(args=["run", "98fa712b876a5ec6f63cff664b748da3"])
assert result.exit_code == 0
foo.assert_called_with()
result = invoke(args=["run", "625b3192eb860a8a0bb0a43656cedf98"])
assert result.exit_code == 0
foo.assert_called_with("hello", name="John")
def test_run_with_appcontext(crontab, _crontab, invoke):
@crontab.job()
def check_config():
assert current_app.config["CRONTAB_EXECUTABLE"] == "/usr/bin/crontab"
assert not current_app.config["CRONTAB_LOCK_JOBS"]
result = invoke(args=["run", "c1ad6548c98a4fda072c8b7bab20b189"])
assert result.exit_code == 0