-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmanage.py
129 lines (105 loc) · 3.16 KB
/
manage.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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import unittest
import click
import coverage
from passlib.hash import pbkdf2_sha256
from app.db import db
from app.services import material_service
@click.option(
"--pattern", default="test*.py", help="Test search pattern", required=False
)
def cov(pattern):
"""
Run the unit tests with coverage
"""
cov = coverage.coverage(branch=True, include="app/*")
cov.start()
# Discover tests in both the unit and integration directories
unit_tests = unittest.TestLoader().discover("tests/unit", pattern=pattern)
integration_tests = unittest.TestLoader().discover(
"tests/integration", pattern=pattern
)
all_tests = unittest.TestSuite([unit_tests, integration_tests])
result = unittest.TextTestRunner(verbosity=2).run(all_tests)
if result.wasSuccessful():
cov.stop()
cov.save()
print("Coverage Summary:")
cov.report()
cov.erase()
return 0
return 1
@click.option(
"--pattern", default="test*.py", help="Test search pattern", required=False
)
def cov_html(pattern):
"""
Run the unit tests with coverage and generate an HTML report.
"""
cov = coverage.coverage(branch=True, include="app/*")
cov.start()
# Discover tests in both the unit and integration directories
unit_tests = unittest.TestLoader().discover("tests/unit", pattern=pattern)
integration_tests = unittest.TestLoader().discover(
"tests/integration", pattern=pattern
)
all_tests = unittest.TestSuite([unit_tests, integration_tests])
result = unittest.TextTestRunner(verbosity=2).run(all_tests)
if result.wasSuccessful():
cov.stop()
cov.save()
print("Coverage Summary:")
cov.report()
cov.html_report(directory="report/htmlcov")
cov.erase()
return 0
return 1
@click.option("--pattern", default="test_*.py", help="Test pattern", required=False)
def tests(pattern):
"""
Run the tests without code coverage
"""
# Discover tests in both the unit and integration directories
unit_tests = unittest.TestLoader().discover("tests/unit", pattern=pattern)
integration_tests = unittest.TestLoader().discover(
"tests/integration", pattern=pattern
)
all_tests = unittest.TestSuite([unit_tests, integration_tests])
result = unittest.TextTestRunner(verbosity=2).run(all_tests)
if result.wasSuccessful():
return 0
return 1
def create_db():
"""
Create Database.
"""
db.create_all()
material_service.insert_initial_materials()
db.session.commit()
def reset_db():
"""
Reset Database.
"""
db.drop_all()
db.create_all()
material_service.insert_initial_materials()
db.session.commit()
def drop_db():
"""
Drop Database.
"""
db.drop_all()
db.session.commit()
def init_app(app):
if app.config["APP_ENV"] == "production":
commands = [create_db, reset_db, drop_db]
else:
commands = [
create_db,
reset_db,
drop_db,
tests,
cov_html,
cov,
]
for command in commands:
app.cli.add_command(app.cli.command()(command))