2016-08-24 14:49:30 +02:00
|
|
|
# -*- encoding: utf-8 -*-
|
|
|
|
|
|
|
|
import unittest
|
2016-11-08 12:24:50 +01:00
|
|
|
import datetime
|
2016-08-24 14:49:30 +02:00
|
|
|
|
2016-11-08 12:24:50 +01:00
|
|
|
from bson import tz_util
|
2016-08-24 14:49:30 +02:00
|
|
|
from pillar.web import utils
|
|
|
|
|
|
|
|
|
|
|
|
class IsValidIdTest(unittest.TestCase):
|
|
|
|
def test_valid(self):
|
|
|
|
# 24-byte hex strings
|
|
|
|
self.assertTrue(utils.is_valid_id(24 * 'a'))
|
2017-03-03 12:07:11 +01:00
|
|
|
self.assertTrue(utils.is_valid_id(24 * 'a'))
|
|
|
|
self.assertTrue(utils.is_valid_id('deadbeefbeefcacedeadcace'))
|
2016-08-24 14:49:30 +02:00
|
|
|
self.assertTrue(utils.is_valid_id('deadbeefbeefcacedeadcace'))
|
|
|
|
|
2017-03-03 14:14:36 +01:00
|
|
|
# 12-byte arbitrary ASCII bytes
|
|
|
|
self.assertTrue(utils.is_valid_id(b'DeadBeefCake'))
|
|
|
|
self.assertTrue(utils.is_valid_id(b'DeadBeefCake'))
|
2016-08-24 14:49:30 +02:00
|
|
|
|
2017-03-03 14:14:36 +01:00
|
|
|
# 12-byte object
|
|
|
|
self.assertTrue(utils.is_valid_id('beef€67890'.encode()))
|
2016-08-24 14:49:30 +02:00
|
|
|
|
|
|
|
def test_bad_length(self):
|
|
|
|
self.assertFalse(utils.is_valid_id(23 * 'a'))
|
2017-03-03 12:07:11 +01:00
|
|
|
self.assertFalse(utils.is_valid_id(25 * 'a'))
|
2016-08-24 14:49:30 +02:00
|
|
|
|
|
|
|
def test_non_string(self):
|
|
|
|
self.assertFalse(utils.is_valid_id(None))
|
|
|
|
self.assertFalse(utils.is_valid_id(1234))
|
|
|
|
self.assertFalse(utils.is_valid_id([24 * 'a']))
|
|
|
|
|
|
|
|
def test_bad_content(self):
|
|
|
|
# 24-character non-hexadecimal string
|
|
|
|
self.assertFalse(utils.is_valid_id('deadbeefbeefcakedeadcake'))
|
|
|
|
|
|
|
|
# unicode variant of valid 12-byte str object
|
2017-03-03 12:07:11 +01:00
|
|
|
self.assertFalse(utils.is_valid_id('beef€67890'))
|
2016-11-08 12:24:50 +01:00
|
|
|
|
|
|
|
|
|
|
|
class PrettyDateTest(unittest.TestCase):
|
2016-11-08 12:56:19 +01:00
|
|
|
def test_none(self):
|
|
|
|
from pillar.web.utils import pretty_date
|
|
|
|
|
|
|
|
self.assertIsNone(pretty_date(None))
|
|
|
|
|
2016-11-08 12:24:50 +01:00
|
|
|
def test_past(self):
|
|
|
|
from pillar.web.utils import pretty_date
|
|
|
|
|
|
|
|
now = datetime.datetime(2016, 11, 8, 11, 46, 30, 0, tz_util.utc) # a Tuesday
|
|
|
|
|
|
|
|
def pd(**diff):
|
|
|
|
return pretty_date(now - datetime.timedelta(**diff), now=now)
|
|
|
|
|
|
|
|
self.assertEqual('just now', pd(seconds=5))
|
|
|
|
self.assertEqual('5m ago', pd(minutes=5))
|
|
|
|
self.assertEqual('last Tuesday', pd(days=7))
|
|
|
|
self.assertEqual('1 week ago', pd(days=8))
|
|
|
|
self.assertEqual('2 weeks ago', pd(days=14))
|
|
|
|
self.assertEqual('08 Oct', pd(days=31))
|
|
|
|
self.assertEqual('08 Oct 2015', pd(days=31 + 366))
|
|
|
|
|
|
|
|
def test_future(self):
|
|
|
|
from pillar.web.utils import pretty_date
|
|
|
|
|
|
|
|
def pd(**diff):
|
|
|
|
return pretty_date(now + datetime.timedelta(**diff), now=now)
|
|
|
|
|
|
|
|
now = datetime.datetime(2016, 11, 8, 11, 46, 30, 0, tz_util.utc) # a Tuesday
|
|
|
|
self.assertEqual('just now', pd(seconds=5))
|
|
|
|
self.assertEqual('in 5m', pd(minutes=5))
|
|
|
|
self.assertEqual('next Tuesday', pd(days=7))
|
|
|
|
self.assertEqual('in 1 week', pd(days=8))
|
|
|
|
self.assertEqual('in 2 weeks', pd(days=14))
|
|
|
|
self.assertEqual('08 Dec', pd(days=30))
|
|
|
|
self.assertEqual('08 Dec 2017', pd(days=30 + 365))
|
|
|
|
|
|
|
|
def test_past_with_time(self):
|
|
|
|
from pillar.web.utils import pretty_date
|
|
|
|
|
|
|
|
now = datetime.datetime(2016, 11, 8, 11, 46, 30, 0, tz_util.utc) # a Tuesday
|
|
|
|
|
|
|
|
def pd(**diff):
|
|
|
|
return pretty_date(now - datetime.timedelta(**diff), detail=True, now=now)
|
|
|
|
|
|
|
|
self.assertEqual('just now', pd(seconds=5))
|
|
|
|
self.assertEqual('5m ago', pd(minutes=5))
|
|
|
|
self.assertEqual('last Tuesday at 11:46', pd(days=7))
|
|
|
|
self.assertEqual('1 week ago at 11:46', pd(days=8))
|
|
|
|
self.assertEqual('2 weeks ago at 11:46', pd(days=14))
|
|
|
|
self.assertEqual('08 Oct at 11:46', pd(days=31))
|
|
|
|
self.assertEqual('08 Oct 2015 at 11:46', pd(days=31 + 366))
|
|
|
|
|
|
|
|
def test_future_with_time(self):
|
|
|
|
from pillar.web.utils import pretty_date
|
|
|
|
|
|
|
|
def pd(**diff):
|
|
|
|
return pretty_date(now + datetime.timedelta(**diff), detail=True, now=now)
|
|
|
|
|
|
|
|
now = datetime.datetime(2016, 11, 8, 11, 46, 30, 0, tz_util.utc) # a Tuesday
|
|
|
|
self.assertEqual('just now', pd(seconds=5))
|
|
|
|
self.assertEqual('in 5m', pd(minutes=5))
|
|
|
|
self.assertEqual('next Tuesday at 11:46', pd(days=7))
|
|
|
|
self.assertEqual('in 1 week at 11:46', pd(days=8))
|
|
|
|
self.assertEqual('in 2 weeks at 11:46', pd(days=14))
|
|
|
|
self.assertEqual('08 Dec at 11:46', pd(days=30))
|
|
|
|
self.assertEqual('08 Dec 2017 at 11:46', pd(days=30 + 365))
|
2017-01-19 15:13:01 +01:00
|
|
|
|
|
|
|
|
|
|
|
class EvePaginationTest(unittest.TestCase):
|
|
|
|
def test_last_page_index(self):
|
|
|
|
from pillar.web.utils import last_page_index as lpi
|
|
|
|
|
|
|
|
self.assertEqual(1, lpi({'total': 0, 'max_results': 313}))
|
|
|
|
self.assertEqual(1, lpi({'total': 5, 'max_results': 10}))
|
|
|
|
self.assertEqual(1, lpi({'total': 5, 'max_results': 5}))
|
|
|
|
self.assertEqual(2, lpi({'total': 6, 'max_results': 5}))
|
|
|
|
self.assertEqual(2, lpi({'total': 9, 'max_results': 5}))
|
|
|
|
self.assertEqual(2, lpi({'total': 10, 'max_results': 5}))
|
|
|
|
self.assertEqual(3, lpi({'total': 11, 'max_results': 5}))
|
|
|
|
self.assertEqual(404129352, lpi({'total': 2828905463, 'max_results': 7}))
|