Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
increase test coverage
  • Loading branch information
mjhea0 committed Dec 28, 2014
1 parent 81d40ed commit 384f2bd
Show file tree
Hide file tree
Showing 10 changed files with 196 additions and 150 deletions.
6 changes: 5 additions & 1 deletion manage.py
Expand Up @@ -26,7 +26,11 @@ def test():
@manager.command
def cov():
"""Runs the unit tests with coverage."""
cov = coverage.coverage(branch=True, include='project/*')
cov = coverage.coverage(
branch=True,
include='project/*',
omit=["*/__init__.py", '*/models.py']
)
cov.start()
tests = unittest.TestLoader().discover('tests')
unittest.TextTestRunner(verbosity=2).run(tests)
Expand Down
19 changes: 10 additions & 9 deletions project/home/views.py
Expand Up @@ -2,12 +2,13 @@
#### imports ####
#################

from flask import render_template, Blueprint, request, flash, redirect, url_for
from flask.ext.login import login_required, current_user
from flask import render_template, Blueprint, \
request, flash, redirect, url_for # pragma: no cover
from flask.ext.login import login_required, current_user # pragma: no cover

from .forms import MessageForm
from project import db
from project.models import BlogPost
from .forms import MessageForm # pragma: no cover
from project import db # pragma: no cover
from project.models import BlogPost # pragma: no cover

################
#### config ####
Expand All @@ -16,16 +17,16 @@
home_blueprint = Blueprint(
'home', __name__,
template_folder='templates'
)
) # pragma: no cover


################
#### routes ####
################

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


@home_blueprint.route('/welcome')
@home_blueprint.route('/welcome') # pragma: no cover
def welcome():
return render_template('welcome.html') # render a template
22 changes: 12 additions & 10 deletions project/users/views.py
Expand Up @@ -3,12 +3,13 @@
#################

from flask import flash, redirect, render_template, request, \
url_for, Blueprint
from flask.ext.login import login_user, login_required, logout_user
url_for, Blueprint # pragma: no cover
from flask.ext.login import login_user, \
login_required, logout_user # pragma: no cover

from .forms import LoginForm, RegisterForm
from project import db
from project.models import User, bcrypt
from .forms import LoginForm, RegisterForm # pragma: no cover
from project import db # pragma: no cover
from project.models import User, bcrypt # pragma: no cover

################
#### config ####
Expand All @@ -17,14 +18,14 @@
users_blueprint = Blueprint(
'users', __name__,
template_folder='templates'
)
) # pragma: no cover


################
#### routes ####
################

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


@users_blueprint.route('/logout')
@login_required
@users_blueprint.route('/logout') # pragma: no cover
@login_required # pragma: no cover
def logout():
logout_user()
flash('You were logged out.')
return redirect(url_for('home.welcome'))


@users_blueprint.route('/register/', methods=['GET', 'POST'])
@users_blueprint.route(
'/register/', methods=['GET', 'POST']) # pragma: no cover
def register():
form = RegisterForm()
if form.validate_on_submit():
Expand Down
2 changes: 2 additions & 0 deletions readme.md
Expand Up @@ -49,6 +49,8 @@ Please help us keep this free, open source project going. Purchase the [Real Pyt
| 26 | [Finalize Messaging System](http://youtu.be/WnT188ePHg4) | [part26](https://github.com/realpython/discover-flask/tree/part26) |
| 27 | [Test Coverage with coverage.py](http://youtu.be/7Aqcn0-uAr0) | [part27](https://github.com/realpython/discover-flask/tree/part27) |
| 28 | [Flask Testing!](http://youtu.be/YO2k80aDJj8) | [part28](https://github.com/realpython/discover-flask/tree/part28) |
| 29 | Flask Testing (increase test coverage) | Coming Soon! |


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

Expand Down
36 changes: 36 additions & 0 deletions tests/test_basic.py
@@ -0,0 +1,36 @@
# tests/test_basic.py

import unittest

from base import BaseTestCase


class FlaskTestCase(BaseTestCase):

# Ensure that Flask was set up correctly
def test_index(self):
response = self.client.get('/login', content_type='html/text')
self.assertEqual(response.status_code, 200)

# Ensure that main page requires user login
def test_main_route_requires_login(self):
response = self.client.get('/', follow_redirects=True)
self.assertIn(b'Please log in to access this page', response.data)

# Ensure that welcome page loads
def test_welcome_route_works_as_expected(self):
response = self.client.get('/welcome', follow_redirects=True)
self.assertIn(b'Welcome to Flask!', response.data)

# Ensure that posts show up on the main page
def test_posts_show_up_on_main_page(self):
response = self.client.post(
'/login',
data=dict(username="admin", password="admin"),
follow_redirects=True
)
self.assertIn(b'This is a test. Only a test.', response.data)


if __name__ == '__main__':
unittest.main()
29 changes: 29 additions & 0 deletions tests/test_blog.py
@@ -0,0 +1,29 @@
# tests/test_blog.py

import unittest

from base import BaseTestCase


class BlogPostTests(BaseTestCase):

# Ensure a logged in user can add a new post
def test_user_can_post(self):
with self.client:
self.client.post(
'/login',
data=dict(username="admin", password="admin"),
follow_redirects=True
)
response = self.client.post(
'/',
data=dict(title="test", description="test"),
follow_redirects=True
)
self.assertEqual(response.status_code, 200)
self.assertIn(b'New entry was successfully posted. Thanks.',
response.data)


if __name__ == '__main__':
unittest.main()
1 change: 0 additions & 1 deletion tests/test_forms.py

This file was deleted.

84 changes: 0 additions & 84 deletions tests/test_functional.py

This file was deleted.

45 changes: 0 additions & 45 deletions tests/test_models.py

This file was deleted.

0 comments on commit 384f2bd

Please sign in to comment.