Pytest tests (#17750)
* Convert core tests
* Convert component tests to use pytest assert
* Lint 🤷♂️
* Fix test
* Fix 3 typos in docs
This commit is contained in:
parent
4222f7562b
commit
08fe7c3ece
223 changed files with 6747 additions and 7237 deletions
|
@ -5,6 +5,7 @@ from datetime import datetime, timedelta
|
|||
|
||||
from homeassistant import util
|
||||
import homeassistant.util.dt as dt_util
|
||||
import pytest
|
||||
|
||||
|
||||
class TestUtil(unittest.TestCase):
|
||||
|
@ -12,60 +13,56 @@ class TestUtil(unittest.TestCase):
|
|||
|
||||
def test_sanitize_filename(self):
|
||||
"""Test sanitize_filename."""
|
||||
self.assertEqual("test", util.sanitize_filename("test"))
|
||||
self.assertEqual("test", util.sanitize_filename("/test"))
|
||||
self.assertEqual("test", util.sanitize_filename("..test"))
|
||||
self.assertEqual("test", util.sanitize_filename("\\test"))
|
||||
self.assertEqual("test", util.sanitize_filename("\\../test"))
|
||||
assert "test" == util.sanitize_filename("test")
|
||||
assert "test" == util.sanitize_filename("/test")
|
||||
assert "test" == util.sanitize_filename("..test")
|
||||
assert "test" == util.sanitize_filename("\\test")
|
||||
assert "test" == util.sanitize_filename("\\../test")
|
||||
|
||||
def test_sanitize_path(self):
|
||||
"""Test sanitize_path."""
|
||||
self.assertEqual("test/path", util.sanitize_path("test/path"))
|
||||
self.assertEqual("test/path", util.sanitize_path("~test/path"))
|
||||
self.assertEqual("//test/path",
|
||||
util.sanitize_path("~/../test/path"))
|
||||
assert "test/path" == util.sanitize_path("test/path")
|
||||
assert "test/path" == util.sanitize_path("~test/path")
|
||||
assert "//test/path" == util.sanitize_path("~/../test/path")
|
||||
|
||||
def test_slugify(self):
|
||||
"""Test slugify."""
|
||||
self.assertEqual("test", util.slugify("T-!@#$!#@$!$est"))
|
||||
self.assertEqual("test_more", util.slugify("Test More"))
|
||||
self.assertEqual("test_more", util.slugify("Test_(More)"))
|
||||
self.assertEqual("test_more", util.slugify("Tèst_Mörê"))
|
||||
self.assertEqual("b827eb000000", util.slugify("B8:27:EB:00:00:00"))
|
||||
self.assertEqual("testcom", util.slugify("test.com"))
|
||||
self.assertEqual("greg_phone__exp_wayp1",
|
||||
util.slugify("greg_phone - exp_wayp1"))
|
||||
self.assertEqual("we_are_we_are_a_test_calendar",
|
||||
util.slugify("We are, we are, a... Test Calendar"))
|
||||
self.assertEqual("test_aouss_aou", util.slugify("Tèst_äöüß_ÄÖÜ"))
|
||||
assert "test" == util.slugify("T-!@#$!#@$!$est")
|
||||
assert "test_more" == util.slugify("Test More")
|
||||
assert "test_more" == util.slugify("Test_(More)")
|
||||
assert "test_more" == util.slugify("Tèst_Mörê")
|
||||
assert "b827eb000000" == util.slugify("B8:27:EB:00:00:00")
|
||||
assert "testcom" == util.slugify("test.com")
|
||||
assert "greg_phone__exp_wayp1" == \
|
||||
util.slugify("greg_phone - exp_wayp1")
|
||||
assert "we_are_we_are_a_test_calendar" == \
|
||||
util.slugify("We are, we are, a... Test Calendar")
|
||||
assert "test_aouss_aou" == util.slugify("Tèst_äöüß_ÄÖÜ")
|
||||
|
||||
def test_repr_helper(self):
|
||||
"""Test repr_helper."""
|
||||
self.assertEqual("A", util.repr_helper("A"))
|
||||
self.assertEqual("5", util.repr_helper(5))
|
||||
self.assertEqual("True", util.repr_helper(True))
|
||||
self.assertEqual("test=1",
|
||||
util.repr_helper({"test": 1}))
|
||||
self.assertEqual("1986-07-09T12:00:00+00:00",
|
||||
util.repr_helper(datetime(1986, 7, 9, 12, 0, 0)))
|
||||
assert "A" == util.repr_helper("A")
|
||||
assert "5" == util.repr_helper(5)
|
||||
assert "True" == util.repr_helper(True)
|
||||
assert "test=1" == util.repr_helper({"test": 1})
|
||||
assert "1986-07-09T12:00:00+00:00" == \
|
||||
util.repr_helper(datetime(1986, 7, 9, 12, 0, 0))
|
||||
|
||||
def test_convert(self):
|
||||
"""Test convert."""
|
||||
self.assertEqual(5, util.convert("5", int))
|
||||
self.assertEqual(5.0, util.convert("5", float))
|
||||
self.assertEqual(True, util.convert("True", bool))
|
||||
self.assertEqual(1, util.convert("NOT A NUMBER", int, 1))
|
||||
self.assertEqual(1, util.convert(None, int, 1))
|
||||
self.assertEqual(1, util.convert(object, int, 1))
|
||||
assert 5 == util.convert("5", int)
|
||||
assert 5.0 == util.convert("5", float)
|
||||
assert util.convert("True", bool) is True
|
||||
assert 1 == util.convert("NOT A NUMBER", int, 1)
|
||||
assert 1 == util.convert(None, int, 1)
|
||||
assert 1 == util.convert(object, int, 1)
|
||||
|
||||
def test_ensure_unique_string(self):
|
||||
"""Test ensure_unique_string."""
|
||||
self.assertEqual(
|
||||
"Beer_3",
|
||||
util.ensure_unique_string("Beer", ["Beer", "Beer_2"]))
|
||||
self.assertEqual(
|
||||
"Beer",
|
||||
util.ensure_unique_string("Beer", ["Wine", "Soda"]))
|
||||
assert "Beer_3" == \
|
||||
util.ensure_unique_string("Beer", ["Beer", "Beer_2"])
|
||||
assert "Beer" == \
|
||||
util.ensure_unique_string("Beer", ["Wine", "Soda"])
|
||||
|
||||
def test_ordered_enum(self):
|
||||
"""Test the ordered enum class."""
|
||||
|
@ -76,96 +73,96 @@ class TestUtil(unittest.TestCase):
|
|||
SECOND = 2
|
||||
THIRD = 3
|
||||
|
||||
self.assertTrue(TestEnum.SECOND >= TestEnum.FIRST)
|
||||
self.assertTrue(TestEnum.SECOND >= TestEnum.SECOND)
|
||||
self.assertFalse(TestEnum.SECOND >= TestEnum.THIRD)
|
||||
assert TestEnum.SECOND >= TestEnum.FIRST
|
||||
assert TestEnum.SECOND >= TestEnum.SECOND
|
||||
assert not (TestEnum.SECOND >= TestEnum.THIRD)
|
||||
|
||||
self.assertTrue(TestEnum.SECOND > TestEnum.FIRST)
|
||||
self.assertFalse(TestEnum.SECOND > TestEnum.SECOND)
|
||||
self.assertFalse(TestEnum.SECOND > TestEnum.THIRD)
|
||||
assert TestEnum.SECOND > TestEnum.FIRST
|
||||
assert not (TestEnum.SECOND > TestEnum.SECOND)
|
||||
assert not (TestEnum.SECOND > TestEnum.THIRD)
|
||||
|
||||
self.assertFalse(TestEnum.SECOND <= TestEnum.FIRST)
|
||||
self.assertTrue(TestEnum.SECOND <= TestEnum.SECOND)
|
||||
self.assertTrue(TestEnum.SECOND <= TestEnum.THIRD)
|
||||
assert not (TestEnum.SECOND <= TestEnum.FIRST)
|
||||
assert TestEnum.SECOND <= TestEnum.SECOND
|
||||
assert TestEnum.SECOND <= TestEnum.THIRD
|
||||
|
||||
self.assertFalse(TestEnum.SECOND < TestEnum.FIRST)
|
||||
self.assertFalse(TestEnum.SECOND < TestEnum.SECOND)
|
||||
self.assertTrue(TestEnum.SECOND < TestEnum.THIRD)
|
||||
assert not (TestEnum.SECOND < TestEnum.FIRST)
|
||||
assert not (TestEnum.SECOND < TestEnum.SECOND)
|
||||
assert TestEnum.SECOND < TestEnum.THIRD
|
||||
|
||||
# Python will raise a TypeError if the <, <=, >, >= methods
|
||||
# raise a NotImplemented error.
|
||||
self.assertRaises(TypeError,
|
||||
lambda x, y: x < y, TestEnum.FIRST, 1)
|
||||
with pytest.raises(TypeError):
|
||||
TestEnum.FIRST < 1
|
||||
|
||||
self.assertRaises(TypeError,
|
||||
lambda x, y: x <= y, TestEnum.FIRST, 1)
|
||||
with pytest.raises(TypeError):
|
||||
TestEnum.FIRST <= 1
|
||||
|
||||
self.assertRaises(TypeError,
|
||||
lambda x, y: x > y, TestEnum.FIRST, 1)
|
||||
with pytest.raises(TypeError):
|
||||
TestEnum.FIRST > 1
|
||||
|
||||
self.assertRaises(TypeError,
|
||||
lambda x, y: x >= y, TestEnum.FIRST, 1)
|
||||
with pytest.raises(TypeError):
|
||||
TestEnum.FIRST >= 1
|
||||
|
||||
def test_ordered_set(self):
|
||||
"""Test ordering of set."""
|
||||
set1 = util.OrderedSet([1, 2, 3, 4])
|
||||
set2 = util.OrderedSet([3, 4, 5])
|
||||
|
||||
self.assertEqual(4, len(set1))
|
||||
self.assertEqual(3, len(set2))
|
||||
assert 4 == len(set1)
|
||||
assert 3 == len(set2)
|
||||
|
||||
self.assertIn(1, set1)
|
||||
self.assertIn(2, set1)
|
||||
self.assertIn(3, set1)
|
||||
self.assertIn(4, set1)
|
||||
self.assertNotIn(5, set1)
|
||||
assert 1 in set1
|
||||
assert 2 in set1
|
||||
assert 3 in set1
|
||||
assert 4 in set1
|
||||
assert 5 not in set1
|
||||
|
||||
self.assertNotIn(1, set2)
|
||||
self.assertNotIn(2, set2)
|
||||
self.assertIn(3, set2)
|
||||
self.assertIn(4, set2)
|
||||
self.assertIn(5, set2)
|
||||
assert 1 not in set2
|
||||
assert 2 not in set2
|
||||
assert 3 in set2
|
||||
assert 4 in set2
|
||||
assert 5 in set2
|
||||
|
||||
set1.add(5)
|
||||
self.assertIn(5, set1)
|
||||
assert 5 in set1
|
||||
|
||||
set1.discard(5)
|
||||
self.assertNotIn(5, set1)
|
||||
assert 5 not in set1
|
||||
|
||||
# Try again while key is not in
|
||||
set1.discard(5)
|
||||
self.assertNotIn(5, set1)
|
||||
assert 5 not in set1
|
||||
|
||||
self.assertEqual([1, 2, 3, 4], list(set1))
|
||||
self.assertEqual([4, 3, 2, 1], list(reversed(set1)))
|
||||
assert [1, 2, 3, 4] == list(set1)
|
||||
assert [4, 3, 2, 1] == list(reversed(set1))
|
||||
|
||||
self.assertEqual(1, set1.pop(False))
|
||||
self.assertEqual([2, 3, 4], list(set1))
|
||||
assert 1 == set1.pop(False)
|
||||
assert [2, 3, 4] == list(set1)
|
||||
|
||||
self.assertEqual(4, set1.pop())
|
||||
self.assertEqual([2, 3], list(set1))
|
||||
assert 4 == set1.pop()
|
||||
assert [2, 3] == list(set1)
|
||||
|
||||
self.assertEqual('OrderedSet()', str(util.OrderedSet()))
|
||||
self.assertEqual('OrderedSet([2, 3])', str(set1))
|
||||
assert 'OrderedSet()' == str(util.OrderedSet())
|
||||
assert 'OrderedSet([2, 3])' == str(set1)
|
||||
|
||||
self.assertEqual(set1, util.OrderedSet([2, 3]))
|
||||
self.assertNotEqual(set1, util.OrderedSet([3, 2]))
|
||||
self.assertEqual(set1, set([2, 3]))
|
||||
self.assertEqual(set1, {3, 2})
|
||||
self.assertEqual(set1, [2, 3])
|
||||
self.assertEqual(set1, [3, 2])
|
||||
self.assertNotEqual(set1, {2})
|
||||
assert set1 == util.OrderedSet([2, 3])
|
||||
assert set1 != util.OrderedSet([3, 2])
|
||||
assert set1 == set([2, 3])
|
||||
assert set1 == {3, 2}
|
||||
assert set1 == [2, 3]
|
||||
assert set1 == [3, 2]
|
||||
assert set1 != {2}
|
||||
|
||||
set3 = util.OrderedSet(set1)
|
||||
set3.update(set2)
|
||||
|
||||
self.assertEqual([3, 4, 5, 2], set3)
|
||||
self.assertEqual([3, 4, 5, 2], set1 | set2)
|
||||
self.assertEqual([3], set1 & set2)
|
||||
self.assertEqual([2], set1 - set2)
|
||||
assert [3, 4, 5, 2] == set3
|
||||
assert [3, 4, 5, 2] == set1 | set2
|
||||
assert [3] == set1 & set2
|
||||
assert [2] == set1 - set2
|
||||
|
||||
set1.update([1, 2], [5, 6])
|
||||
self.assertEqual([2, 3, 1, 5, 6], set1)
|
||||
assert [2, 3, 1, 5, 6] == set1
|
||||
|
||||
def test_throttle(self):
|
||||
"""Test the add cooldown decorator."""
|
||||
|
@ -188,36 +185,36 @@ class TestUtil(unittest.TestCase):
|
|||
test_throttle1()
|
||||
test_throttle2()
|
||||
|
||||
self.assertEqual(1, len(calls1))
|
||||
self.assertEqual(1, len(calls2))
|
||||
assert 1 == len(calls1)
|
||||
assert 1 == len(calls2)
|
||||
|
||||
# Call second time. Methods should not get called
|
||||
test_throttle1()
|
||||
test_throttle2()
|
||||
|
||||
self.assertEqual(1, len(calls1))
|
||||
self.assertEqual(1, len(calls2))
|
||||
assert 1 == len(calls1)
|
||||
assert 1 == len(calls2)
|
||||
|
||||
# Call again, overriding throttle, only first one should fire
|
||||
test_throttle1(no_throttle=True)
|
||||
test_throttle2(no_throttle=True)
|
||||
|
||||
self.assertEqual(2, len(calls1))
|
||||
self.assertEqual(1, len(calls2))
|
||||
assert 2 == len(calls1)
|
||||
assert 1 == len(calls2)
|
||||
|
||||
with patch('homeassistant.util.utcnow', return_value=plus3):
|
||||
test_throttle1()
|
||||
test_throttle2()
|
||||
|
||||
self.assertEqual(2, len(calls1))
|
||||
self.assertEqual(1, len(calls2))
|
||||
assert 2 == len(calls1)
|
||||
assert 1 == len(calls2)
|
||||
|
||||
with patch('homeassistant.util.utcnow', return_value=plus5):
|
||||
test_throttle1()
|
||||
test_throttle2()
|
||||
|
||||
self.assertEqual(3, len(calls1))
|
||||
self.assertEqual(2, len(calls2))
|
||||
assert 3 == len(calls1)
|
||||
assert 2 == len(calls2)
|
||||
|
||||
def test_throttle_per_instance(self):
|
||||
"""Test that the throttle method is done per instance of a class."""
|
||||
|
@ -229,8 +226,8 @@ class TestUtil(unittest.TestCase):
|
|||
"""Test the throttle."""
|
||||
return True
|
||||
|
||||
self.assertTrue(Tester().hello())
|
||||
self.assertTrue(Tester().hello())
|
||||
assert Tester().hello()
|
||||
assert Tester().hello()
|
||||
|
||||
def test_throttle_on_method(self):
|
||||
"""Test that throttle works when wrapping a method."""
|
||||
|
@ -244,8 +241,8 @@ class TestUtil(unittest.TestCase):
|
|||
tester = Tester()
|
||||
throttled = util.Throttle(timedelta(seconds=1))(tester.hello)
|
||||
|
||||
self.assertTrue(throttled())
|
||||
self.assertIsNone(throttled())
|
||||
assert throttled()
|
||||
assert throttled() is None
|
||||
|
||||
def test_throttle_on_two_method(self):
|
||||
"""Test that throttle works when wrapping two methods."""
|
||||
|
@ -264,8 +261,8 @@ class TestUtil(unittest.TestCase):
|
|||
|
||||
tester = Tester()
|
||||
|
||||
self.assertTrue(tester.hello())
|
||||
self.assertTrue(tester.goodbye())
|
||||
assert tester.hello()
|
||||
assert tester.goodbye()
|
||||
|
||||
@patch.object(util, 'random')
|
||||
def test_get_random_string(self, mock_random):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue