Merge pull request #216 from pydanny/tests-base

Add test enhancements for this cookie
This commit is contained in:
Daniel Greenfeld 2015-04-20 11:22:17 -07:00
commit b41c689acb
11 changed files with 92 additions and 41 deletions

1
.gitignore vendored
View File

@ -4,3 +4,4 @@
local_settings.py
repo_name
.idea
my_test_project/*

View File

@ -1,16 +1,13 @@
language: python
before_install:
- time pip install pep8
sudo: false
install:
- pip install -r dev-requirements.txt
- pip install -r requirements.txt
script:
- pep8 --ignore E201,E202 --max-line-length=120 --exclude='migrations' .
- make test
- py.test
notifications:
email:
on_success: never
on_failure: never
on_success: change
on_failure: always

View File

@ -1,4 +1,4 @@
.PHONY: test
test:
py.test -q tests/*.py
py.test tests/*.py

View File

@ -1,3 +0,0 @@
cookiecutter
pep8
pytest

13
requirements.txt Normal file
View File

@ -0,0 +1,13 @@
cookiecutter==1.0.0
flake8==2.4.0
sh
# Debugging
# -------------------------------------
ipdb==0.8
ipython==3.1.0
# Testing
# -------------------------------------
pytest==2.7.0
git+git://github.com/mverteuil/pytest-ipdb.git

3
setup.cfg Normal file
View File

@ -0,0 +1,3 @@
[pytest]
python_paths = .
norecursedirs = .tox .git */migrations/* */static/* docs venv */{{cookiecutter.repo_name}}/*

51
tests/base.py Normal file
View File

@ -0,0 +1,51 @@
import os
import shutil
import unittest
from os.path import exists, dirname, join
import sh
from cookiecutter.main import cookiecutter
class DjangoCookieTestCase(unittest.TestCase):
root_dir = dirname(dirname(__file__))
ctx = {}
destpath = None
def generate_project(self, extra_context=None):
ctx = {
"project_name": "My Test Project",
"repo_name": "my_test_project",
"author_name": "Test Author",
"email": "test@example.com",
"description": "A short description of the project.",
"domain_name": "example.com",
"version": "0.1.0",
"timezone": "UTC",
"now": "2015/01/13",
"year": "2015"
}
if extra_context:
assert isinstance(extra_context, dict)
ctx.update(extra_context)
self.ctx = ctx
self.destpath = join(self.root_dir, self.ctx['repo_name'])
cookiecutter(template='./', checkout=None, no_input=True, extra_context=ctx)
# Build a list containing absolute paths to the generated files
paths = [os.path.join(dirpath, file_path)
for dirpath, subdirs, files in os.walk(self.destpath)
for file_path in files]
return paths
def clean(self):
if exists(self.destpath):
shutil.rmtree(self.destpath)
sh.cd(self.root_dir)
def tearDown(self):
self.clean()

View File

@ -1,28 +1,16 @@
import os
import re
import shutil
import unittest
from os.path import dirname, exists, join
from cookiecutter.main import cookiecutter
import sh
from .base import DjangoCookieTestCase
class TestCookiecutterSubstitution(unittest.TestCase):
class TestCookiecutterSubstitution(DjangoCookieTestCase):
"""Test that all cookiecutter instances are substituted"""
cookiecutter(dirname(dirname(__file__)), no_input=True)
destpath = join(dirname(dirname(__file__)), 'project_name')
def tearDown(self):
if exists(self.destpath):
shutil.rmtree(self.destpath)
def test_all_cookiecutter_instances_are_substituted(self):
# Build a list containing absolute paths to the generated files
paths = [os.path.join(dirpath, file_path)
for dirpath, subdirs, files in os.walk(self.destpath)
for file_path in files]
paths = self.generate_project()
# Construct the cookiecutter search pattern
pattern = "{{(\s?cookiecutter)[.](.*?)}}"
@ -36,6 +24,10 @@ class TestCookiecutterSubstitution(unittest.TestCase):
match,
"cookiecutter variable not replaced in {}".format(path))
if __name__ == '__main__':
unittest.main()
def test_flake8_complaince(self):
"""generated project should pass flake8"""
self.generate_project()
try:
sh.flake8(self.destpath)
except sh.ErrorReturnCode as e:
raise AssertionError(e)

View File

@ -7,7 +7,7 @@ Local settings
- Use Django Debug Toolbar
'''
from .common import *
from .common import * # noqa
# DEBUG
# ------------------------------------------------------------------------------

View File

@ -12,7 +12,7 @@ from __future__ import absolute_import, unicode_literals
from boto.s3.connection import OrdinaryCallingFormat
from .common import *
from .common import * # noqa
# This ensures that Django will be able to detect a secure connection
# properly on Heroku.

View File

@ -1,14 +1,11 @@
# -*- coding: utf-8 -*-
# Import the AbstractUser model
from __future__ import unicode_literals, absolute_import
from django.contrib.auth.models import AbstractUser
# Import the basic Django ORM models library
from django.db import models
from django.utils.translation import ugettext_lazy as _
# from django.db import models
# from django.utils.translation import ugettext_lazy as _
# Subclass AbstractUser
class User(AbstractUser):
def __unicode__(self):