Skip to content

Commit

Permalink
Merge pull request #4 from rloomans/more_tests
Browse files Browse the repository at this point in the history
Add more tests
  • Loading branch information
rloomans committed Jan 11, 2017
2 parents 06a44a3 + 6271b6f commit 8b4990b
Show file tree
Hide file tree
Showing 19 changed files with 469 additions and 68 deletions.
8 changes: 5 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
language: python
env:
global:
- DATABASE_URL="sqlite:///:memory"
- DJANGO_SETTINGS_MODULE=teamtemp.settings.dev
install:
- pip install -U pip setuptools wheel coveralls
- pip install -r requirements.txt
- pip install -r requirements/dev.txt
- pip install -U codeclimate-test-reporter
- python manage.py collectstatic --no-input
before_script:
- "export DATABASE_URL=sqlite:///:memory"
script:
- coverage run manage.py test
after_success:
Expand Down
25 changes: 1 addition & 24 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,24 +1 @@
Django==1.10.5
django-bootstrap3==7.1.0
dj-database-url==0.4.1
dj-static==0.0.6
django-csp==3.1
django-crispy-forms==1.6.1
django-filter==1.0.1
djangorestframework==3.5.3
django-secure==1.0.1
django-toolbelt==0.0.1
dj-database-url==0.4.1
dj-static==0.0.6
gunicorn==19.6.0
#https://google-visualization-python.googlecode.com/files/gviz_api_py-1.8.2.tar.gz
http://downloads.sourceforge.net/project/google-visualization-python/gviz_api_py-1.8.2.tar.gz
poster==0.8.1
py-bcrypt==0.4
psycopg2==2.6.2
pytz==2016.10
requests==2.12.4
static==1.1.1
Unirest==1.1.7
wsgiref==0.1.2
whitenoise==3.2.3
-r requirements/base.txt
22 changes: 22 additions & 0 deletions requirements/base.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
Django==1.10.5
django-bootstrap3==7.1.0
dj-database-url==0.4.2
dj-static==0.0.6
django-csp==3.1
django-crispy-forms==1.6.1
django-filter==1.0.1
djangorestframework==3.5.3
django-secure==1.0.1
django-toolbelt==0.0.1
gunicorn==19.6.0
#https://google-visualization-python.googlecode.com/files/gviz_api_py-1.8.2.tar.gz
http://downloads.sourceforge.net/project/google-visualization-python/gviz_api_py-1.8.2.tar.gz
poster==0.8.1
py-bcrypt==0.4
psycopg2==2.6.2
pytz==2016.10
requests==2.12.4
static==1.1.1
Unirest==1.1.7
wsgiref==0.1.2
whitenoise==3.2.3
8 changes: 8 additions & 0 deletions requirements/dev.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
-r base.txt

factory_boy>=2.8.1
coverage>=4.3.1
db-sqlite3>=0.0.1
django-extensions>=1.7.3
pydot>=1.2.2
factory_djoy>=0.6.0
90 changes: 90 additions & 0 deletions teamtemp/responses/migrations/0011_auto_20170111_1431.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.5 on 2017-01-11 04:31
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('responses', '0010_auto_20161221_1505'),
]

operations = [
migrations.AlterField(
model_name='teamresponsehistory',
name='id',
field=models.AutoField(primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='teams',
name='dept_name',
field=models.CharField(blank=True, db_index=True, max_length=64, null=True),
),
migrations.AlterField(
model_name='teams',
name='id',
field=models.AutoField(primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='teams',
name='region_name',
field=models.CharField(blank=True, db_index=True, max_length=64, null=True),
),
migrations.AlterField(
model_name='teams',
name='site_name',
field=models.CharField(blank=True, db_index=True, max_length=64, null=True),
),
migrations.AlterField(
model_name='teams',
name='team_name',
field=models.CharField(db_index=True, max_length=64),
),
migrations.AlterField(
model_name='teamtemperature',
name='archive_date',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='teamtemperature',
name='dept_names',
field=models.CharField(blank=True, max_length=64, null=True),
),
migrations.AlterField(
model_name='teamtemperature',
name='region_names',
field=models.CharField(blank=True, max_length=64, null=True),
),
migrations.AlterField(
model_name='teamtemperature',
name='site_names',
field=models.CharField(blank=True, max_length=64, null=True),
),
migrations.AlterField(
model_name='temperatureresponse',
name='archive_date',
field=models.DateTimeField(blank=True, db_index=True, null=True),
),
migrations.AlterField(
model_name='temperatureresponse',
name='id',
field=models.AutoField(primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='temperatureresponse',
name='response_date',
field=models.DateTimeField(db_index=True),
),
migrations.AlterField(
model_name='temperatureresponse',
name='team_name',
field=models.CharField(db_index=True, max_length=64),
),
migrations.AlterField(
model_name='wordcloudimage',
name='id',
field=models.AutoField(primary_key=True, serialize=False),
),
]
68 changes: 33 additions & 35 deletions teamtemp/responses/models.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,37 @@
import pytz
import hashlib
from django.db import models


class WordCloudImage(models.Model):
id = models.AutoField(primary_key=True)
word_hash = models.CharField(max_length=40, db_index=True)
word_list = models.CharField(max_length=5000)
image_url = models.CharField(max_length=255)
creation_date = models.DateTimeField(auto_now_add=True)

def __unicode__(self):
return u"{} {} {}".format(self.creation_date, self.word_list, self.image_url)
return u"{}: {} {} {} {}".format(self.id, self.creation_date, self.word_hash, self.word_list, self.image_url)

def clean(self):
self.word_list = self.word_list.lower()
self.word_list = self.word_list.lower().strip()
self.word_hash = hashlib.sha1(self.word_list).hexdigest()


class User(models.Model):
id = models.CharField(max_length=32, primary_key=True)
creation_date = models.DateTimeField(auto_now_add=True)

def __unicode__(self):
return u"{}".format(self.id)
return u"{}: {}".format(self.id, self.creation_date)


def _stats_for(query_set):
result = dict()
result['count'] = query_set.count()
result['average'] = query_set.aggregate(models.Avg('score'))
result['words'] = query_set.values('word').annotate(models.Count("id")).order_by()
return result, query_set
return {
'count': query_set.count(),
'average': query_set.aggregate(models.Avg('score')),
'words': query_set.values('word').annotate(models.Count("id")).order_by()
}, query_set


class TeamTemperature(models.Model):
Expand All @@ -48,41 +51,33 @@ class TeamTemperature(models.Model):
creator = models.ForeignKey(User, related_name="team_temperatures")
password = models.CharField(max_length=256)
archive_schedule = models.IntegerField(default=0)
archive_date = models.DateTimeField(null=True)
archive_date = models.DateTimeField(blank=True, null=True)
survey_type = models.CharField(default=TEAM_TEMP, choices=SURVEY_TYPE_CHOICES, max_length=20, db_index=True)
dept_names = models.CharField(default='DEPT,DEPT2', blank=True, max_length=64)
region_names = models.CharField(default='REGION,REGION2', blank=True, max_length=64)
site_names = models.CharField(default='SITE,SITE2', blank=True, max_length=64)
dept_names = models.CharField(blank=True, null=True, max_length=64)
region_names = models.CharField(blank=True, null=True, max_length=64)
site_names = models.CharField(blank=True, null=True, max_length=64)
default_tz = models.CharField(default='Australia/Queensland', choices=TIMEZONE_CHOICES, max_length=64)
max_word_count = models.IntegerField(default=1)
creation_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now=True)

def stats(self):
allresponses = self.temperature_responses.filter(archived=False)
return _stats_for(allresponses)
return _stats_for(self.temperature_responses.filter(archived=False))

def team_stats(self, team_name):
allresponses = self.temperature_responses.filter(team_name__in=team_name, archived=False)
return _stats_for(allresponses)
return _stats_for(self.temperature_responses.filter(team_name__in=team_name, archived=False))

def archive_stats(self, archive_date):
allresponses = self.temperature_responses.filter(archived=True, archive_date=archive_date)
return _stats_for(allresponses)
return _stats_for(self.temperature_responses.filter(archived=True, archive_date=archive_date))

def archive_team_stats(self, team_name, archive_date):
allresponses = self.temperature_responses.filter(team_name__in=team_name, archive_date=archive_date,
archived=True)
return _stats_for(allresponses)
return _stats_for(self.temperature_responses.filter(team_name__in=team_name, archive_date=archive_date, archived=True))

def accumulated_stats(self, start_date, end_date):
allresponses = self.temperature_responses.filter(response_date__gte=end_date, response_date__lte=start_date)
return _stats_for(allresponses)
return _stats_for(self.temperature_responses.filter(response_date__gte=end_date, response_date__lte=start_date))

def accumulated_team_stats(self, team_name, start_date, end_date):
allresponses = self.temperature_responses.filter(team_name__in=team_name, response_date__gte=end_date,
response_date__lte=start_date)
return _stats_for(allresponses)
return _stats_for(self.temperature_responses.filter(team_name__in=team_name, response_date__gte=end_date, response_date__lte=start_date))

def __unicode__(self):
return u"{}: {} {} {} {} {} {} {} {} {}".format(self.id, self.creator.id,
Expand All @@ -92,14 +87,15 @@ def __unicode__(self):


class TemperatureResponse(models.Model):
id = models.AutoField(primary_key=True)
request = models.ForeignKey(TeamTemperature, related_name="temperature_responses")
responder = models.ForeignKey(User, related_name="temperature_responses")
score = models.IntegerField()
word = models.CharField(max_length=32)
team_name = models.CharField(max_length=64, null=True, db_index=True)
team_name = models.CharField(max_length=64, db_index=True)
archived = models.BooleanField(default=False, db_index=True)
response_date = models.DateTimeField(null=True, db_index=True)
archive_date = models.DateTimeField(null=True, db_index=True)
response_date = models.DateTimeField(db_index=True)
archive_date = models.DateTimeField(blank=True, null=True, db_index=True)

def __unicode__(self):
return u"{}: {} {} {} {} {} {} {} {}".format(self.id, self.request.id,
Expand All @@ -109,13 +105,14 @@ def __unicode__(self):
self.archive_date)

def clean(self):
self.word = self.word.lower()
self.word = self.word.lower().strip()


class TeamResponseHistory(models.Model):
class Meta:
verbose_name_plural = "Team response histories"

id = models.AutoField(primary_key=True)
request = models.ForeignKey(TeamTemperature, related_name="team_response_histories")
average_score = models.DecimalField(decimal_places=5, max_digits=10)
word_list = models.CharField(max_length=5000)
Expand All @@ -130,7 +127,7 @@ def __unicode__(self):
self.team_name, self.archive_date)

def clean(self):
self.word_list = self.word_list.lower()
self.word_list = self.word_list.lower().strip()


class Teams(models.Model):
Expand All @@ -139,11 +136,12 @@ class Meta:
verbose_name_plural = "Teams"
unique_together = ("request", "team_name")

id = models.AutoField(primary_key=True)
request = models.ForeignKey(TeamTemperature, related_name="teams")
team_name = models.CharField(max_length=64, null=True, db_index=True)
dept_name = models.CharField(max_length=64, null=True, db_index=True)
site_name = models.CharField(max_length=64, null=True, db_index=True)
region_name = models.CharField(max_length=64, null=True, db_index=True)
team_name = models.CharField(max_length=64, db_index=True)
dept_name = models.CharField(max_length=64, blank=True, null=True, db_index=True)
site_name = models.CharField(max_length=64, blank=True, null=True, db_index=True)
region_name = models.CharField(max_length=64, blank=True, null=True, db_index=True)
creation_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now=True)

Expand Down
3 changes: 0 additions & 3 deletions teamtemp/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,6 @@

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

# Make this unique, and don't share it with anybody.
SECRET_KEY = os.environ['TEAMTEMP_SECRET_KEY']

MIDDLEWARE_CLASSES = (
'django.middleware.security.SecurityMiddleware',
'django.middleware.common.CommonMiddleware',
Expand Down
1 change: 1 addition & 0 deletions teamtemp/settings/dev.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from teamtemp.settings.base import *

DEBUG = os.environ.get('DJANGO_DEBUG', True)
SECRET_KEY = os.environ.get('TEAMTEMP_SECRET_KEY', 'rp47vufz8lrr1cxki7lmc9w221ajgauk5ctv6xi')
3 changes: 3 additions & 0 deletions teamtemp/settings/secure.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@

CSRF_COOKIE_SECURE = True
CSRF_COOKIE_HTTPONLY = True

# Make this unique, and don't share it with anybody.
SECRET_KEY = os.environ['TEAMTEMP_SECRET_KEY']
Loading

0 comments on commit 8b4990b

Please sign in to comment.