def test_clean_no_previous(self): now = timezone.now() form = SubmitCaffeineForm(self.user, DRINK_TYPES.coffee, data={ 'date': now.date(), 'time': now.time() }) self.assertTrue(form.is_valid(), str(form.errors))
def test_clean_old_previous(self): Caffeine.objects.create( user=self.user, ctype=DRINK_TYPES.coffee, date=timezone.now() - timedelta(minutes=10)) now = timezone.now() form = SubmitCaffeineForm( self.user, DRINK_TYPES.coffee, data={'date': now.date(), 'time': now.time()}) self.assertTrue(form.is_valid(), str(form.errors))
def test_submit_older(self): Caffeine.objects.create( user=self.user, ctype=DRINK_TYPES.coffee, date=timezone.now()) before = timezone.now() - timedelta( minutes=settings.MINIMUM_DRINK_DISTANCE + 1) form = SubmitCaffeineForm( self.user, DRINK_TYPES.coffee, data={'date': before.date(), 'time': before.time()}) self.assertTrue(form.is_valid(), str(form.errors))
def test_clean_old_previous(self): Caffeine.objects.create(user=self.user, ctype=DRINK_TYPES.coffee, date=timezone.now() - timedelta(minutes=10)) now = timezone.now() form = SubmitCaffeineForm(self.user, DRINK_TYPES.coffee, data={ 'date': now.date(), 'time': now.time() }) self.assertTrue(form.is_valid(), str(form.errors))
def test_submit_older(self): Caffeine.objects.create(user=self.user, ctype=DRINK_TYPES.coffee, date=timezone.now()) before = timezone.now() - timedelta( minutes=settings.MINIMUM_DRINK_DISTANCE + 1) form = SubmitCaffeineForm(self.user, DRINK_TYPES.coffee, data={ 'date': before.date(), 'time': before.time() }) self.assertTrue(form.is_valid(), str(form.errors))
def test_submit_close_older_fails(self): Caffeine.objects.create( user=self.user, ctype=DRINK_TYPES.coffee, date=timezone.now()) close_before = timezone.now() - timedelta( minutes=settings.MINIMUM_DRINK_DISTANCE - 1) form = SubmitCaffeineForm( self.user, DRINK_TYPES.coffee, data={'date': close_before.date(), 'time': close_before.time()}) self.assertFalse(form.is_valid()) form_errors = form.non_field_errors() self.assertEqual(len(form_errors), 1) self.assertRegexpMatches( form_errors[0], r'^Your last %(drink)s was less than %(minutes)d minutes ago' % { 'drink': DRINK_TYPES[DRINK_TYPES.coffee], 'minutes': settings.MINIMUM_DRINK_DISTANCE })
def test_clean_empty_date_and_time(self): caffeine = SubmitCaffeineForm(self.user, DRINK_TYPES.coffee, data={ 'date': '', 'time': '' }).save() self.assertLessEqual(caffeine.date, timezone.now()) self.assertEqual(caffeine.ctype, DRINK_TYPES.coffee) self.assertEqual(caffeine.user, self.user) self.assertEqual(caffeine.timezone, 'Europe/Berlin')
def test_submit_close_older_fails(self): Caffeine.objects.create(user=self.user, ctype=DRINK_TYPES.coffee, date=timezone.now()) close_before = timezone.now() - timedelta( minutes=settings.MINIMUM_DRINK_DISTANCE - 1) form = SubmitCaffeineForm(self.user, DRINK_TYPES.coffee, data={ 'date': close_before.date(), 'time': close_before.time() }) self.assertFalse(form.is_valid()) form_errors = form.non_field_errors() self.assertEqual(len(form_errors), 1) self.assertRegexpMatches( form_errors[0], r'^Your last %(drink)s was less than %(minutes)d minutes ago' % { 'drink': DRINK_TYPES[DRINK_TYPES.coffee], 'minutes': settings.MINIMUM_DRINK_DISTANCE })
def test_save_with_passed_data(self): now = timezone.now() caffeine = SubmitCaffeineForm(self.user, DRINK_TYPES.coffee, data={ 'date': now.date(), 'time': now.time() }).save() self.assertLessEqual(caffeine.date, timezone.now()) self.assertEqual(caffeine.ctype, DRINK_TYPES.coffee) self.assertEqual(caffeine.user, self.user) self.assertEqual(caffeine.timezone, 'Europe/Berlin')
def add_drink(request, userinfo, messages, *args, **kwargs): """ Submit a caffeinated beverage. :param HttpRequest request: POST request :param User userinfo: :py:class:`caffeine.models.User` :param dict messages: message dictionary :return: messages array or :py:class:`django.http.HttpResponseBadRequest` """ ctype = request.POST.get('beverage') drinktime = request.POST.get('time') time = None if not ctype: messages.setdefault('error', []).append( API_ERROR_MISSING_PARAM_BEVERAGE) elif not hasattr(DRINK_TYPES, ctype): messages.setdefault('error', []).append( API_ERROR_INVALID_BEVERAGE) if not drinktime: messages.setdefault('error', []).append( API_ERROR_MISSING_PARAM_TIME) else: time = _parse_drinktime(drinktime, messages) if time is not None and time > datetime.now() + timedelta(minutes=1): messages.setdefault('error', []).append(API_ERROR_FUTURE_DATETIME) if 'error' in messages: return HttpResponseBadRequest(json.dumps(messages), 'text/json') data = {'date': time.date(), 'time': time.time()} form = SubmitCaffeineForm(userinfo, getattr(DRINK_TYPES, ctype), data) form.date = time.date() form.time = time.time() if not form.is_valid(): for key in form.errors: messages.setdefault('error', []).extend(form.errors[key]) return HttpResponseBadRequest(json.dumps(messages), 'text/json') drink = form.save() messages['success'] = _('Your %(drink)s has been registered!') % { 'drink': drink } return messages
def test_clean_no_previous(self): now = timezone.now() form = SubmitCaffeineForm( self.user, DRINK_TYPES.coffee, data={'date': now.date(), 'time': now.time()}) self.assertTrue(form.is_valid(), str(form.errors))