Skip to content

Commit 384f2bd

Browse files
committed
increase test coverage
1 parent 81d40ed commit 384f2bd

10 files changed

+196
-150
lines changed

manage.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ def test():
2626
@manager.command
2727
def cov():
2828
"""Runs the unit tests with coverage."""
29-
cov = coverage.coverage(branch=True, include='project/*')
29+
cov = coverage.coverage(
30+
branch=True,
31+
include='project/*',
32+
omit=["*/__init__.py", '*/models.py']
33+
)
3034
cov.start()
3135
tests = unittest.TestLoader().discover('tests')
3236
unittest.TextTestRunner(verbosity=2).run(tests)

project/home/views.py

+10-9
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
#### imports ####
33
#################
44

5-
from flask import render_template, Blueprint, request, flash, redirect, url_for
6-
from flask.ext.login import login_required, current_user
5+
from flask import render_template, Blueprint, \
6+
request, flash, redirect, url_for # pragma: no cover
7+
from flask.ext.login import login_required, current_user # pragma: no cover
78

8-
from .forms import MessageForm
9-
from project import db
10-
from project.models import BlogPost
9+
from .forms import MessageForm # pragma: no cover
10+
from project import db # pragma: no cover
11+
from project.models import BlogPost # pragma: no cover
1112

1213
################
1314
#### config ####
@@ -16,16 +17,16 @@
1617
home_blueprint = Blueprint(
1718
'home', __name__,
1819
template_folder='templates'
19-
)
20+
) # pragma: no cover
2021

2122

2223
################
2324
#### routes ####
2425
################
2526

2627
# use decorators to link the function to a url
27-
@home_blueprint.route('/', methods=['GET', 'POST'])
28-
@login_required
28+
@home_blueprint.route('/', methods=['GET', 'POST']) # pragma: no cover
29+
@login_required # pragma: no cover
2930
def home():
3031
error = None
3132
form = MessageForm(request.form)
@@ -45,6 +46,6 @@ def home():
4546
'index.html', posts=posts, form=form, error=error)
4647

4748

48-
@home_blueprint.route('/welcome')
49+
@home_blueprint.route('/welcome') # pragma: no cover
4950
def welcome():
5051
return render_template('welcome.html') # render a template

project/users/views.py

+12-10
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
#################
44

55
from flask import flash, redirect, render_template, request, \
6-
url_for, Blueprint
7-
from flask.ext.login import login_user, login_required, logout_user
6+
url_for, Blueprint # pragma: no cover
7+
from flask.ext.login import login_user, \
8+
login_required, logout_user # pragma: no cover
89

9-
from .forms import LoginForm, RegisterForm
10-
from project import db
11-
from project.models import User, bcrypt
10+
from .forms import LoginForm, RegisterForm # pragma: no cover
11+
from project import db # pragma: no cover
12+
from project.models import User, bcrypt # pragma: no cover
1213

1314
################
1415
#### config ####
@@ -17,14 +18,14 @@
1718
users_blueprint = Blueprint(
1819
'users', __name__,
1920
template_folder='templates'
20-
)
21+
) # pragma: no cover
2122

2223

2324
################
2425
#### routes ####
2526
################
2627

27-
@users_blueprint.route('/login', methods=['GET', 'POST'])
28+
@users_blueprint.route('/login', methods=['GET', 'POST']) # pragma: no cover
2829
def login():
2930
error = None
3031
form = LoginForm(request.form)
@@ -43,15 +44,16 @@ def login():
4344
return render_template('login.html', form=form, error=error)
4445

4546

46-
@users_blueprint.route('/logout')
47-
@login_required
47+
@users_blueprint.route('/logout') # pragma: no cover
48+
@login_required # pragma: no cover
4849
def logout():
4950
logout_user()
5051
flash('You were logged out.')
5152
return redirect(url_for('home.welcome'))
5253

5354

54-
@users_blueprint.route('/register/', methods=['GET', 'POST'])
55+
@users_blueprint.route(
56+
'/register/', methods=['GET', 'POST']) # pragma: no cover
5557
def register():
5658
form = RegisterForm()
5759
if form.validate_on_submit():

readme.md

+2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ Please help us keep this free, open source project going. Purchase the [Real Pyt
4949
| 26 | [Finalize Messaging System](http://youtu.be/WnT188ePHg4) | [part26](https://github.com/realpython/discover-flask/tree/part26) |
5050
| 27 | [Test Coverage with coverage.py](http://youtu.be/7Aqcn0-uAr0) | [part27](https://github.com/realpython/discover-flask/tree/part27) |
5151
| 28 | [Flask Testing!](http://youtu.be/YO2k80aDJj8) | [part28](https://github.com/realpython/discover-flask/tree/part28) |
52+
| 29 | Flask Testing (increase test coverage) | Coming Soon! |
53+
5254

5355
**You can view the entire video playlist [here](http://www.youtube.com/watch?v=WfpFUmV1d0w&list=PLLjmbh6XPGK4ISY747FUHXEl9lBxre4mM&feature=share).**
5456

tests/test_basic.py

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# tests/test_basic.py
2+
3+
import unittest
4+
5+
from base import BaseTestCase
6+
7+
8+
class FlaskTestCase(BaseTestCase):
9+
10+
# Ensure that Flask was set up correctly
11+
def test_index(self):
12+
response = self.client.get('/login', content_type='html/text')
13+
self.assertEqual(response.status_code, 200)
14+
15+
# Ensure that main page requires user login
16+
def test_main_route_requires_login(self):
17+
response = self.client.get('/', follow_redirects=True)
18+
self.assertIn(b'Please log in to access this page', response.data)
19+
20+
# Ensure that welcome page loads
21+
def test_welcome_route_works_as_expected(self):
22+
response = self.client.get('/welcome', follow_redirects=True)
23+
self.assertIn(b'Welcome to Flask!', response.data)
24+
25+
# Ensure that posts show up on the main page
26+
def test_posts_show_up_on_main_page(self):
27+
response = self.client.post(
28+
'/login',
29+
data=dict(username="admin", password="admin"),
30+
follow_redirects=True
31+
)
32+
self.assertIn(b'This is a test. Only a test.', response.data)
33+
34+
35+
if __name__ == '__main__':
36+
unittest.main()

tests/test_blog.py

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# tests/test_blog.py
2+
3+
import unittest
4+
5+
from base import BaseTestCase
6+
7+
8+
class BlogPostTests(BaseTestCase):
9+
10+
# Ensure a logged in user can add a new post
11+
def test_user_can_post(self):
12+
with self.client:
13+
self.client.post(
14+
'/login',
15+
data=dict(username="admin", password="admin"),
16+
follow_redirects=True
17+
)
18+
response = self.client.post(
19+
'/',
20+
data=dict(title="test", description="test"),
21+
follow_redirects=True
22+
)
23+
self.assertEqual(response.status_code, 200)
24+
self.assertIn(b'New entry was successfully posted. Thanks.',
25+
response.data)
26+
27+
28+
if __name__ == '__main__':
29+
unittest.main()

tests/test_forms.py

-1
This file was deleted.

tests/test_functional.py

-84
This file was deleted.

tests/test_models.py

-45
This file was deleted.

0 commit comments

Comments
 (0)