From 91a0694ae5ee616d556b5dfea101c6609fd8ccec Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Mon, 25 Sep 2017 19:45:58 +0300 Subject: [PATCH] Fix timezone issues and create coffee view unit test --- coffee_scale/tests.py | 31 +++++++++++++++++-- coffee_scale/views.py | 5 +-- infoscreen/hsl_fetcher.py | 9 +++--- members/forms.py | 4 +-- members/migrations/0016_auto_20170925_1924.py | 26 ++++++++++++++++ members/models.py | 5 ++- 6 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 members/migrations/0016_auto_20170925_1924.py diff --git a/coffee_scale/tests.py b/coffee_scale/tests.py index 7ce503c..b1e5f9b 100644 --- a/coffee_scale/tests.py +++ b/coffee_scale/tests.py @@ -1,3 +1,30 @@ -from django.test import TestCase +from django.test import TestCase, Client +from django.conf import settings -# Create your tests here. +from coffee_scale.mqtt import on_message + +HOST = settings.MQTT_SETTINGS['HOST'] +PORT = settings.MQTT_SETTINGS['PORT'] +TOPICS = settings.MQTT_SETTINGS['TOPICS'] + + +class MQTTTestCase(TestCase): + """Tests MQTT functionality""" + + class MockMessage: + def __init__(self, payload, topic): + self.payload = payload + self.topic = topic + + def setUp(self): + payload = '10'.encode('utf-8') + topic = TOPICS['CUPS'] + msg = MQTTTestCase.MockMessage(payload, topic) + + on_message(None, None, msg) + self.c = Client() + + def test_receive_cups(self): + response = self.c.get('/coffee/cups') + payload = response.json() + self.assertEquals(payload['cups'], 10) diff --git a/coffee_scale/views.py b/coffee_scale/views.py index 4d226e3..dc9bd00 100644 --- a/coffee_scale/views.py +++ b/coffee_scale/views.py @@ -1,7 +1,8 @@ from django.shortcuts import render from django.http import JsonResponse -import datetime +from django.utils import timezone + from .mqtt import get_latest import coffee_scale.mqtt # somehow this is needed @@ -15,7 +16,7 @@ def coffee_view(request): def cups_view(request): - now = datetime.datetime.now() + now = timezone.now() latest = get_latest() data = { 'date': now, diff --git a/infoscreen/hsl_fetcher.py b/infoscreen/hsl_fetcher.py index 8cc29e1..f52097e 100644 --- a/infoscreen/hsl_fetcher.py +++ b/infoscreen/hsl_fetcher.py @@ -3,7 +3,8 @@ import urllib.request import json import logging -from datetime import datetime, timedelta +from datetime import timedelta, datetime +from django.utils import timezone from django.conf import settings @@ -20,7 +21,7 @@ class HSLFetcher: def fetch_if_needed(self): """Check if new fetch from HSL API is needed.""" - if (datetime.now() - HSLFetcher.last_fetched > + if (timezone.now() - HSLFetcher.last_fetched > timedelta(minutes=HSLFetcher.INTERVAL)): self.fetch() @@ -38,7 +39,7 @@ class HSLFetcher: arr = [] - time = (datetime.now() + + time = (timezone.now() + timedelta(minutes=settings.HSL_DEPARTURE_THRESHOLD)) time = "{0:02d}{0:02d}".format(time.hour, time.minute) for element in data: @@ -65,7 +66,7 @@ class HSLFetcher: obj = model_arr[count - 1] obj.data = json_dump obj.save() - now = datetime.now() + now = timezone.now() HSLFetcher.last_fetched = now logging.info( diff --git a/members/forms.py b/members/forms.py index 5622123..eb49a83 100644 --- a/members/forms.py +++ b/members/forms.py @@ -6,7 +6,7 @@ from django.utils.translation import ugettext_lazy as _ from members.models import Member, Payment, Request import csv -import datetime +from django.utils import timezone import logging @@ -73,7 +73,7 @@ class MemberForm(forms.ModelForm): payment_data = { 'source': payment_source, 'member': member.id, - 'date': datetime.datetime.now(), + 'date': timezone.now(), } form = PaymentForm(payment_data) if not form.is_valid(): diff --git a/members/migrations/0016_auto_20170925_1924.py b/members/migrations/0016_auto_20170925_1924.py new file mode 100644 index 0000000..56f8934 --- /dev/null +++ b/members/migrations/0016_auto_20170925_1924.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2017-09-25 16:24 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('members', '0015_auto_20170925_1917'), + ] + + operations = [ + migrations.AlterField( + model_name='member', + name='created', + field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='Created'), + ), + migrations.AlterField( + model_name='payment', + name='date', + field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='Date'), + ), + ] diff --git a/members/models.py b/members/models.py index 1a78afe..aaf9c80 100644 --- a/members/models.py +++ b/members/models.py @@ -4,7 +4,6 @@ from django.db import models from django.utils import timezone from django.utils.translation import ugettext_lazy as _ -from datetime import datetime import csv @@ -79,7 +78,7 @@ class Request(BaseMember): class Payment(models.Model): """Payment model representing one payment event.""" - date = models.DateTimeField(_('Date'), default=datetime.now) + date = models.DateTimeField(_('Date'), default=timezone.now) source = models.CharField(_('Source'), choices=[ ('AYY', _('AYY')), ('cash', _('Cash')), @@ -100,7 +99,7 @@ class Payment(models.Model): class Member(BaseMember): """Member model represets one member on the registry.""" - created = models.DateTimeField(_('Created'), default=datetime.now) + created = models.DateTimeField(_('Created'), default=timezone.now) def last_paid(self): """Return member's last payment."""