Skip to content

Commit

Permalink
tests, abstract base category class
Browse files Browse the repository at this point in the history
  • Loading branch information
zhebrak committed Feb 22, 2015
1 parent f4817db commit 286df29
Show file tree
Hide file tree
Showing 10 changed files with 149 additions and 37 deletions.
3 changes: 2 additions & 1 deletion statsy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
from django.utils.module_loading import autodiscover_modules

from statsy.core import Statsy
from statsy.log import logger
from statsy.sites import site


__all__ = [
'send', 'watch', 'get_send_params'
'objects', 'groups', 'events',
'site', 'autodiscover'
'site', 'autodiscover', 'logger'
]

_statsy = Statsy()
Expand Down
19 changes: 5 additions & 14 deletions statsy/managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,10 @@ class StatsyEventQuerySet(StatsyBaseQuerySet):

class StatsyQuerySet(models.QuerySet):
def by_group(self, group):
if isinstance(group, str):
return self.select_related('group').filter(group__name=group)

if isinstance(group, int):
return self.filter(group_id=group)

return self.filter(group=group)
return self.select_related('group').filter(group__name=group)

def by_event(self, event):
if isinstance(event, str):
return self.select_related('event').filter(event__name=event)

if isinstance(event, int):
return self.filter(event_id=event)

return self.filter(event=event)
return self.select_related('event').filter(event__name=event)

def by_user(self, user):
if isinstance(user, get_user_model()):
Expand Down Expand Up @@ -74,3 +62,6 @@ def today(self):
)

return self.by_time(start=start_of_today)

def active(self):
return self.select_related('group', 'event').filter(group__is_active=True, event__is_active=True)
18 changes: 18 additions & 0 deletions statsy/migrations/0002_auto_20150222_0457.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

dependencies = [
('statsy', '0001_initial'),
]

operations = [
migrations.AlterModelOptions(
name='statsyobject',
options={'ordering': ('-created_at',), 'verbose_name': 'Statsy Object', 'verbose_name_plural': 'Statsy Objects', 'permissions': (('stats_view', 'Can view stats'),)},
),
]
39 changes: 22 additions & 17 deletions statsy/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,14 @@
from statsy.managers import StatsyGroupQuerySet, StatsyEventQuerySet, StatsyQuerySet


class StatsyGroup(models.Model):
class StatsyCategory(models.Model):
""" Abstract base model for Group and Event """

name = models.CharField(max_length=30, verbose_name='name')
is_active = models.BooleanField(default=True, verbose_name='is active')

objects = StatsyGroupQuerySet.as_manager()

cache_key_string = 'statsy_group_{0}'

class Meta:
verbose_name = 'Statsy Group'
verbose_name_plural = 'Statsy Groups'
abstract = True

def __unicode__(self):
return self.name
Expand All @@ -32,11 +29,26 @@ def __unicode__(self):
def cache_key(self):
return self.cache_key_string.format(self.name)

def activate(self):
self.is_active = True
self.save()

class StatsyEvent(models.Model):
name = models.CharField(max_length=30, verbose_name='name')
is_active = models.BooleanField(default=True, verbose_name='is active')
def deactivate(self):
self.is_active = False
self.save()


class StatsyGroup(StatsyCategory):
objects = StatsyGroupQuerySet.as_manager()

cache_key_string = 'statsy_group_{0}'

class Meta:
verbose_name = 'Statsy Group'
verbose_name_plural = 'Statsy Groups'


class StatsyEvent(StatsyCategory):
objects = StatsyEventQuerySet.as_manager()

cache_key_string = 'statsy_event_{0}'
Expand All @@ -45,13 +57,6 @@ class Meta:
verbose_name = 'Statsy Event'
verbose_name_plural = 'Statsy Events'

def __unicode__(self):
return self.name

@property
def cache_key(self):
return self.cache_key_string.format(self.name)


class StatsyObject(models.Model):
group = models.ForeignKey(
Expand Down
3 changes: 3 additions & 0 deletions tests/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,6 @@
test_label = 'test_label'

test_value_list = [test_value_str, test_value_int, test_value_float]

test_username = 'test'
test_password = 'test'
13 changes: 12 additions & 1 deletion tests/test_core.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# coding: utf-8

from django.test import TestCase
from django.test import TestCase, override_settings

import statsy

Expand All @@ -25,3 +25,14 @@ def test_send_basic(self):
self.assertEqual(test_label, statsy_object.label)
self.assertEqual(test_value, statsy_object.value)

@override_settings(STATSY_ASYNC=True)
def test_send_async(self):
# It falls back to ASYNC=False mode

statsy_async = statsy.Statsy(async=True)

for test_value in test_value_list:
statsy_async.send(
group=test_group, event=test_event,
label=test_label, value=test_value
)
11 changes: 8 additions & 3 deletions tests/test_dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,27 @@

import statsy

from tests.settings import test_username, test_password, test_group, test_event, test_label, test_value_list


class DashboardTest(TestCase):
def setUp(self):
self.statsy = statsy.Statsy(cache=False)
self.client = Client()

test_username = 'test'
test_password = 'test'

get_user_model().objects.create_superuser(test_username, 'test@test.com', test_password)

self.client.login(
username=test_username,
password=test_password
)

for test_value in test_value_list:
statsy.send(
group=test_group, event=test_event,
label=test_label, value=test_value
)

def test_dashboard(self):
response = self.client.get(reverse('statsy.dashboard'))

Expand Down
11 changes: 11 additions & 0 deletions tests/test_log.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# coding: utf-8

from django.test import TestCase

import statsy


class LogTest(TestCase):
def test_log(self):
statsy.logger.info('INFO message')
statsy.logger.error('Error message')
45 changes: 44 additions & 1 deletion tests/test_managers.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
# coding: utf-8

from django.contrib.auth import get_user_model
from django.test import TestCase

import statsy

from tests.settings import test_group, test_event, test_label
from statsy.models import StatsyGroup

from tests.settings import test_group, test_event, test_label, test_username, test_password, test_value_list


class ManagersTest(TestCase):
Expand Down Expand Up @@ -62,3 +65,43 @@ def test_by_label(self):

for stats in stats_list:
self.assertEqual(stats.label, label_name)

def test_by_user(self):
for idx in [0, 1]:
user = get_user_model().objects.create_user(
'{0}_{1}'.format(test_username, idx), 'test@test.com', test_password
)

for _ in range(self.test_count):
self.statsy.send(user=user)

for idx in [0, 1]:
username = '{0}_{1}'.format(test_username, idx)
user = get_user_model().objects.get(username=username)

stats_list_str = self.statsy.objects.by_user(username)
stats_list_id = self.statsy.objects.by_user(user.id)
stats_list_obj = self.statsy.objects.by_user(user)

for stats_list in [stats_list_str, stats_list_id, stats_list_obj]:
self.assertEqual(stats_list.count(), self.test_count)

for stats in stats_list:
self.assertEqual(stats.user.username, username)

def test_active(self):
for idx, test_value in enumerate(test_value_list):
self.statsy.send(
group=test_group, event=test_event,
label=test_label, value=test_value
)

group = StatsyGroup.objects.get(name=test_group)

group.activate()
self.assertEqual(self.statsy.objects.active().count(), len(test_value_list))
self.assertEqual(self.statsy.groups.active().count(), 1)

group.deactivate()
self.assertEqual(self.statsy.objects.active().count(), 0)
self.assertEqual(self.statsy.groups.active().count(), 0)
24 changes: 24 additions & 0 deletions tests/test_models_unicode.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# coding: utf-8

from django.test import TestCase

import statsy

from tests.settings import test_group, test_event, test_label, test_value_list


class ModelsUnicodeTest(TestCase):
def setUp(self):
self.statsy = statsy.Statsy(cache=False)

for test_value in test_value_list:
self.statsy.send(
group=test_group, event=test_event,
label=test_label, value=test_value
)

def test_models_unicode(self):
for stats in self.statsy.objects.all():
self.assertIsInstance(str(stats), str)
self.assertIsInstance(str(stats.group), str)
self.assertIsInstance(str(stats.event), str)

0 comments on commit 286df29

Please sign in to comment.