Commit 1c081ea8 authored by lizonr1's avatar lizonr1

Split tests into files

Add scripts to restart dataabase and to run tests with coverage
Add coverage configuraton
Add models tests
parent e571adc9
# .coveragerc to control coverage.py
[run]
branch = True
omit =
*/test*
*/apps*
*/migrations/*
*__init__.py*
*/settings/*
*wsgi.py*
*admin.py*
*manage.py*
[report]
# Regexes for lines to exclude from consideration
exclude_lines =
# Have to re-enable the standard pragma
pragma: no cover
# Don't complain about missing debug-only code:
def __repr__
if self\.debug
# Don't complain if tests don't hit defensive assertion code:
raise AssertionError
raise NotImplementedError
# Don't complain if non-runnable code isn't run:
if 0:
if __name__ == .__main__.:
ignore_errors = True
# Register your models here. # Register your models here.
from django.contrib import admin
from App.loyaltyMe.models import Task
admin.site.register(Task)
\ No newline at end of file
import datetime import datetime
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.forms import DateField
from App.loyaltyMe.models import Task from App.loyaltyMe.models import Task
...@@ -13,11 +12,11 @@ class Command(BaseCommand): ...@@ -13,11 +12,11 @@ class Command(BaseCommand):
tasks = [ tasks = [
# 'name',products # 'name',products
['Bądź u nas 10 godzin', datetime.datetime.now(), 'description', 'TM', datetime.timedelta(seconds=15), ['Bądź u nas 10 godzin', datetime.datetime.now(), 'description', 'TM', datetime.timedelta(seconds=15),
datetime.timedelta(seconds=15), datetime.timedelta(seconds=15), datetime.timedelta(seconds=15)], 15, 15, datetime.timedelta(seconds=15)],
['Przyjdz 10 razy', datetime.datetime.now(), 'description', 'PR', datetime.timedelta(seconds=15), ['Przyjdz 10 razy', datetime.datetime.now(), 'description', 'PR', datetime.timedelta(seconds=15),
datetime.timedelta(seconds=15), datetime.timedelta(seconds=15), datetime.timedelta(seconds=15)], 15, 15, datetime.timedelta(seconds=15)],
] ]
print("Creating Offers") print("Creating Tasks")
for task in tasks: for task in tasks:
print('Create {0}'.format(task[0])) print('Create {0}'.format(task[0]))
......
...@@ -25,13 +25,13 @@ class Task(models.Model): ...@@ -25,13 +25,13 @@ class Task(models.Model):
) )
type = models.CharField(max_length=2, choices=TYPE_CHOICES, default=PRESENCE) type = models.CharField(max_length=2, choices=TYPE_CHOICES, default=PRESENCE)
update_delay = models.DateField() update_delay = models.DurationField() # raz na dzień? Tego nie widzi usera
description = models.CharField(max_length=50) description = models.CharField(max_length=50)
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
counter_target = models.DurationField() counter_target = models.IntegerField() #badz 10 razy #badz przez m # To widzi user #cel koncowy
beacon_counter_target = models.DurationField() counter_incrementation = models.IntegerField() # o 1 # Tego nie widzi user
counter_incrementation = models.DurationField() beacon_counter_target = models.IntegerField() # 3x # 1x # tego nie widiz user
beacon_signal_delay = models.DurationField() beacon_signal_delay = models.DurationField() # przez 5minut # co 5 minut #tego nie widzi user
......
# Create your tests here. # Create your tests here.
import datetime from datetime import datetime, timedelta
from unittest import TestCase
from App.loyaltyMe.models import Task, UserTask from django.contrib.auth.models import User
from django.test import TestCase
from App.loyaltyMe.models import Task
from App.user.models import UserTask
class TaskTestCase(TestCase):
def setUp(self):
Task.objects.get_or_create(type="TM", update_delay=timedelta(seconds=10),
description="Test_description", name="test_name", counter_target=5,
beacon_counter_target=5, counter_incrementation=1,
beacon_signal_delay=timedelta(seconds=10))
class UserTaskTestCase(TestCase): class UserTaskTestCase(TestCase):
def setUp(self): def setUp(self):
self.task = Task(beacon_signal_delay=10) self.user = User.objects.get_or_create()[0]
self.beacon_signal_last_update = datetime.datetime.now() - datetime.timedelta(seconds=15) self.task = Task.objects.get_or_create(type="TM", update_delay=timedelta(seconds=10),
self.user_task = UserTask(task=self.task, beacon_signal_last_update=self.beacon_signal_last_update) description="Test_description", name="test_name", counter_target=1,
beacon_counter_target=2, counter_incrementation=1,
beacon_signal_delay=timedelta(seconds=15))[0]
beacon_signal_last_update = datetime.now() - timedelta(seconds=15)
self.user_task = UserTask.objects.get_or_create(task=self.task, user=self.user, done=False,
last_update=datetime.now(),
counter=0, beacon_counter=0,
beacon_signal_last_update=beacon_signal_last_update)[0]
def set_data_beacon_singal_passed(self):
self.user_task.task.beacon_signal_delay = timedelta(seconds=15)
self.user_task.beacon_signal_last_update = datetime.now() - timedelta(seconds=15)
def set_data_task_signal_passed(self):
self.user_task.update_delay= timedelta(seconds=15)
self.user_task.last_update=datetime.now() - timedelta(seconds=20)
def test_delay_passed(self):
signal_last_update = datetime.now() - timedelta(seconds=16)
signal_delay = timedelta(seconds=15)
result = self.user_task.delay_passed(signal_last_update, signal_delay)
self.assertTrue(result)
def test_delay_passed_limit_value(self):
signal_last_update = timedelta(seconds=15)
signal_delay = datetime.now() - timedelta(seconds=15)
result = self.user_task.delay_passed(signal_last_update, signal_delay)
self.assertTrue(result)
def test_delay_not_passed(self):
signal_last_update = timedelta(seconds=15)
signal_delay = datetime.now() - timedelta(seconds=14)
result = self.user_task.delay_passed(signal_last_update, signal_delay)
self.assertFalse(result)
def test_ready_to_update_beacon_counter_increase(self):
self.set_data_beacon_singal_passed()
self.user_task.beacon_counter = 0
result = self.user_task.ready_to_update()
self.assertEqual(self.user_task.beacon_counter, 1)
self.assertFalse(result)
def test_ready_to_update_beacon_counter_not_increase(self):
self.user_task.task.beacon_signal_delay = timedelta(seconds=15)
self.user_task.beacon_signal_last_update = datetime.now() - timedelta(seconds=14)
self.user_task.beacon_counter = 0
self.user_task.task.beacon_counter_target = 2
result = self.user_task.ready_to_update()
self.assertEqual(self.user_task.beacon_counter, 0)
self.assertFalse(result)
def test_ready_to_update_beacon_counter_reset(self):
self.set_data_beacon_singal_passed()
self.user_task.beacon_counter = 0
self.user_task.task.beacon_counter_target = 1
result = self.user_task.ready_to_update()
self.assertEqual(self.user_task.beacon_counter, 0)
self.assertTrue(result)
def test_update_counter_increase(self):
self.set_data_task_signal_passed()
self.set_data_beacon_singal_passed()
self.user_task.beacon_counter = 0
self.user_task.task.beacon_counter_target = 1
self.user_task.counter = 0
self.user_task.task.counter_target = 2
result = self.user_task.update()
self.assertEqual(self.user_task.counter, 1)
self.assertFalse(result)
def test_update_counter_not_increase(self):
self.set_data_beacon_singal_passed()
self.user_task.update_delay= timedelta(seconds=15)
self.user_task.last_update= datetime.now()
self.user_task.beacon_counter = 0
self.user_task.task.beacon_counter_target = 1
self.user_task.counter = 0
self.user_task.task.counter_target = 2
result = self.user_task.update()
self.assertEqual(self.user_task.counter, 0)
self.assertFalse(result)
def test_update_task_done(self):
self.set_data_task_signal_passed()
self.set_data_beacon_singal_passed()
self.user_task.beacon_counter = 0
self.user_task.task.beacon_counter_target = 1
self.user_task.counter = 0
self.user_task.task.counter_target = 1
def test_lol(self): result = self.user_task.update()
self.user_task.update() self.assertTrue(self.user_task.done)
self.assertTrue(result)
from django.db import models from datetime import timedelta, datetime
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db import models
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.dispatch import receiver from django.dispatch import receiver
from django.utils import timezone
from rest_framework.authtoken.models import Token from rest_framework.authtoken.models import Token
from datetime import timedelta from django.test import TestCase
# Create your models here. # Create your models here.
from App.loyaltyMe.models import Place, Promotion, Task from App.loyaltyMe.models import Place, Promotion, Task
...@@ -38,28 +38,38 @@ class UserTask(models.Model): ...@@ -38,28 +38,38 @@ class UserTask(models.Model):
blank=False, null=False, default=None) blank=False, null=False, default=None)
done = models.BooleanField(default=False) done = models.BooleanField(default=False)
last_update = models.DateField() last_update = models.DateField()
counter = models.DurationField() counter = models.IntegerField() #akutalnie bylem 3 razy # aktualny status uzytkwonika w zadaniu
beacon_counter = models.DurationField() beacon_counter = models.IntegerField() # juz 10 minut, jeszcze raz i bedzie hyvka # status czy zaliczyc z beaconow taska
beacon_signal_last_update = models.DateField() beacon_signal_last_update = models.DateField() #ostatnio 23 h temu # last update
def update(self): def update(self):
if not self.beacon_delay_passed(): if not self.ready_to_update():
return return False
if self.done: if self.done:
return return False
if self.task_delay_passed():
self.counter += self.task.counter_incrementation
if self.counter == self.task.counter_target: if self.counter == self.task.counter_target:
self.done = True self.done = True
return return True
actual_time = timezone.now() return False
if actual_time + self.task.update_delay > self.last_update:
self.counter += self.task.counter_incrementation
def beacon_delay_passed(self): def ready_to_update(self):
actual_time = timezone.now() if self.beacon_delay_passed():
if actual_time + timedelta(seconds = self.task.beacon_signal_delay) > self.beacon_signal_last_update:
self.beacon_counter = +1 self.beacon_counter = +1
self.beacon_signal_last_update = actual_time self.beacon_signal_last_update = datetime.now()
if self.beacon_counter == self.task.beacon_counter_target: if self.beacon_counter == self.task.beacon_counter_target:
self.beacon_counter = 0 self.beacon_counter = 0
return True return True
return False return False
def beacon_delay_passed(self):
return self.delay_passed(self.beacon_signal_last_update, self.task.beacon_signal_delay)
def task_delay_passed(self):
return self.delay_passed(self.last_update, self.task.update_delay)
def delay_passed(self, last_update, signal_delay):
actual_time = datetime.now()
time_difference = actual_time - last_update
return time_difference > signal_delay
\ No newline at end of file
sudo su postgres
dropdb kawowydzienniczek
createdb kawowydzienniczek -e utf8
psql
CREATE USER kawowydzienniczek;
ALTER USER kawowydzienniczek PASSWORD 'kawowydzienniczek7913';
ALTER DATABASE kawowydzienniczek OWNER TO kawowydzienniczek;
\ No newline at end of file
coverage erase
coverage run --source='.' manage.py test
coverage report -m | tail -n 2
\ No newline at end of file
...@@ -9,3 +9,4 @@ pycodestyle==2.0.0 ...@@ -9,3 +9,4 @@ pycodestyle==2.0.0
pyflakes==1.2.3 pyflakes==1.2.3
psycopg2 psycopg2
drfdocs drfdocs
coverage
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment