Files
deb-python-sqlalchemy-utils/tests/primitives/test_weekdays.py
Jacob Magnusson 815f07d6c1 Use pytest fixtures to reduce complexity and repetition
Also:

Allow override of database name and user in tests (important for me as I would have to mess with my PSQL and MySQL database users otherwise)
Use dict.items instead of six.iteritems as it sporadically caused RuntimeError: dictionary changed size during iteration in Python 2.6 tests.
Fix typo DNS to DSN
Adds Python 3.5 to tox.ini
Added an .editorconfig
Import babel.dates in sqlalchemy_utils.i18n as an exception would be raised when using the latest versions of babel.
2016-01-19 10:52:30 +01:00

170 lines
4.9 KiB
Python

import pytest
import six
from flexmock import flexmock
from sqlalchemy_utils import i18n
from sqlalchemy_utils.primitives import WeekDay, WeekDays
@pytest.fixture
def set_get_locale():
i18n.get_locale = lambda: i18n.babel.Locale('fi')
@pytest.mark.skipif('i18n.babel is None')
@pytest.mark.usefixtures('set_get_locale')
class TestWeekDay(object):
def test_constructor_with_valid_index(self):
day = WeekDay(1)
assert day.index == 1
@pytest.mark.parametrize('index', [-1, 7])
def test_constructor_with_invalid_index(self, index):
with pytest.raises(ValueError):
WeekDay(index)
def test_equality_with_equal_week_day(self):
day = WeekDay(1)
day2 = WeekDay(1)
assert day == day2
def test_equality_with_unequal_week_day(self):
day = WeekDay(1)
day2 = WeekDay(2)
assert day != day2
def test_equality_with_unsupported_comparison(self):
day = WeekDay(1)
assert day != 'foobar'
def test_hash_is_equal_to_index_hash(self):
day = WeekDay(1)
assert hash(day) == hash(day.index)
def test_representation(self):
day = WeekDay(1)
assert repr(day) == "WeekDay(1)"
@pytest.mark.parametrize(
('index', 'first_week_day', 'position'),
[
(0, 0, 0),
(1, 0, 1),
(6, 0, 6),
(0, 6, 1),
(1, 6, 2),
(6, 6, 0),
]
)
def test_position(self, index, first_week_day, position):
i18n.get_locale = flexmock(first_week_day=first_week_day)
day = WeekDay(index)
assert day.position == position
def test_get_name_returns_localized_week_day_name(self):
day = WeekDay(0)
assert day.get_name() == u'maanantaina'
def test_override_get_locale_as_class_method(self):
day = WeekDay(0)
assert day.get_name() == u'maanantaina'
def test_name_delegates_to_get_name(self):
day = WeekDay(0)
flexmock(day).should_receive('get_name').and_return(u'maanantaina')
assert day.name == u'maanantaina'
def test_unicode(self):
day = WeekDay(0)
flexmock(day).should_receive('name').and_return(u'maanantaina')
assert six.text_type(day) == u'maanantaina'
def test_str(self):
day = WeekDay(0)
flexmock(day).should_receive('name').and_return(u'maanantaina')
assert str(day) == 'maanantaina'
@pytest.mark.skipif('i18n.babel is None')
class TestWeekDays(object):
def test_constructor_with_valid_bit_string(self):
days = WeekDays('1000100')
assert days._days == set([WeekDay(0), WeekDay(4)])
@pytest.mark.parametrize(
'bit_string',
[
'000000', # too short
'00000000', # too long
]
)
def test_constructor_with_bit_string_of_invalid_length(self, bit_string):
with pytest.raises(ValueError):
WeekDays(bit_string)
def test_constructor_with_bit_string_containing_invalid_characters(self):
with pytest.raises(ValueError):
WeekDays('foobarz')
def test_constructor_with_another_week_days_object(self):
days = WeekDays('0000000')
another_days = WeekDays(days)
assert days._days == another_days._days
def test_representation(self):
days = WeekDays('0000000')
assert repr(days) == "WeekDays('0000000')"
@pytest.mark.parametrize(
'bit_string',
[
'0000000',
'1000000',
'0000001',
'0101000',
'1111111',
]
)
def test_as_bit_string(self, bit_string):
days = WeekDays(bit_string)
assert days.as_bit_string() == bit_string
def test_equality_with_equal_week_days_object(self):
days = WeekDays('0001000')
days2 = WeekDays('0001000')
assert days == days2
def test_equality_with_unequal_week_days_object(self):
days = WeekDays('0001000')
days2 = WeekDays('1000000')
assert days != days2
def test_equality_with_equal_bit_string(self):
days = WeekDays('0001000')
assert days == '0001000'
def test_equality_with_unequal_bit_string(self):
days = WeekDays('0001000')
assert days != '0101000'
def test_equality_with_unsupported_comparison(self):
days = WeekDays('0001000')
assert days != 0
def test_iterator_starts_from_locales_first_week_day(self):
i18n.get_locale = lambda: flexmock(first_week_day=1)
days = WeekDays('1111111')
indices = list(day.index for day in days)
assert indices == [1, 2, 3, 4, 5, 6, 0]
def test_unicode(self):
i18n.get_locale = lambda: i18n.babel.Locale('fi')
days = WeekDays('1000100')
assert six.text_type(days) == u'maanantaina, perjantaina'
def test_str(self):
i18n.get_locale = lambda: i18n.babel.Locale('fi')
days = WeekDays('1000100')
assert str(days) == 'maanantaina, perjantaina'