135 lines
5.3 KiB
Python
135 lines
5.3 KiB
Python
"""Tests for resync.resource_container."""
|
|
|
|
import unittest
|
|
from resync.resource import Resource
|
|
from resync.resource_container import ResourceContainer, _str_datetime_now
|
|
|
|
|
|
class TestResourceContainer(unittest.TestCase):
|
|
|
|
def test01_create_and_add(self):
|
|
rc = ResourceContainer(resources=[])
|
|
self.assertEqual(len(rc.resources), 0, "empty")
|
|
rc.add(Resource('a', timestamp=1))
|
|
rc.add(Resource('b', timestamp=2))
|
|
self.assertEqual(len(rc.resources), 2, "two resources")
|
|
# Add two more
|
|
rc.add([Resource('c'), Resource('d')])
|
|
self.assertEqual(len(rc.resources), 4, "four resources")
|
|
|
|
def test02_iter(self):
|
|
rc = ResourceContainer(resources=[])
|
|
rc.resources.append(Resource('a', timestamp=1))
|
|
rc.resources.append(Resource('b', timestamp=2))
|
|
rc.resources.append(Resource('c', timestamp=3))
|
|
rc.resources.append(Resource('d', timestamp=4))
|
|
resources = []
|
|
for r in rc:
|
|
resources.append(r)
|
|
self.assertEqual(len(resources), 4)
|
|
self.assertEqual(resources[0].uri, 'a')
|
|
self.assertEqual(resources[3].uri, 'd')
|
|
|
|
def test04_prune_dupes(self):
|
|
rc = ResourceContainer()
|
|
rc.resources.append(Resource('a', timestamp=1, change='created'))
|
|
rc.resources.append(Resource('b', timestamp=2, change='created'))
|
|
rc.resources.append(Resource('c', timestamp=3, change='updated'))
|
|
rc.resources.append(Resource('d', timestamp=4, change='deleted'))
|
|
rc.resources.append(Resource('a', timestamp=4, change='updated'))
|
|
rc.resources.append(Resource('b', timestamp=4, change='deleted'))
|
|
rc.resources.append(Resource('b', timestamp=5, change='created'))
|
|
rc.resources.append(Resource('b', timestamp=6, change='deleted'))
|
|
rc.resources.append(Resource('c', timestamp=7, change='deleted'))
|
|
rc.resources.append(Resource('d', timestamp=8, change='created'))
|
|
rc.prune_dupes()
|
|
self.assertEqual(len(rc.resources), 3)
|
|
i = iter(rc)
|
|
i1 = next(i)
|
|
self.assertEqual(i1.uri, 'a')
|
|
self.assertEqual(i1.change, 'updated')
|
|
i2 = next(i)
|
|
self.assertEqual(i2.uri, 'c')
|
|
self.assertEqual(i2.change, 'deleted')
|
|
i3 = next(i)
|
|
self.assertEqual(i3.uri, 'd')
|
|
self.assertEqual(i3.change, 'created')
|
|
|
|
def test05_from_until(self):
|
|
rc = ResourceContainer()
|
|
# via convenience methods
|
|
self.assertEqual(rc.md_from, None)
|
|
self.assertEqual(rc.md_until, None)
|
|
rc.md_from = "ftime"
|
|
rc.md_until = "utime"
|
|
self.assertEqual(rc.md_from, "ftime")
|
|
self.assertEqual(rc.md_until, "utime")
|
|
# via underlying dict
|
|
rc.md['md_from'] = "ftime2"
|
|
rc.md['md_until'] = "utime2too"
|
|
self.assertEqual(rc.md_from, "ftime2")
|
|
self.assertEqual(rc.md_until, "utime2too")
|
|
|
|
def test06_source_description(self):
|
|
# up links used to point to the source description
|
|
rc = ResourceContainer()
|
|
# via convenience methods
|
|
self.assertEqual(rc.up, None)
|
|
rc.up = "well-known"
|
|
self.assertEqual(rc.up, "well-known")
|
|
rc.up = "well-known2"
|
|
self.assertEqual(rc.up, "well-known2")
|
|
# via link
|
|
link = rc.link("up")
|
|
self.assertEqual(link['href'], "well-known2")
|
|
link['href'] = "wk3"
|
|
self.assertEqual(rc.up, "wk3")
|
|
|
|
def test07_describedby(self):
|
|
rc = ResourceContainer()
|
|
# via convenience methods
|
|
self.assertEqual(rc.describedby, None)
|
|
rc.describedby = "db_uri"
|
|
self.assertEqual(rc.describedby, "db_uri")
|
|
|
|
def test08_up(self):
|
|
rc = ResourceContainer()
|
|
# via convenience methods
|
|
self.assertEqual(rc.up, None)
|
|
rc.up = "up_uri"
|
|
self.assertEqual(rc.up, "up_uri")
|
|
|
|
def test09_capability(self):
|
|
"""Test capability property."""
|
|
rc = ResourceContainer()
|
|
self.assertEqual(rc.capability, None)
|
|
rc.capability = "fixit"
|
|
self.assertEqual(rc.capability, 'fixit')
|
|
|
|
def test10_link_set(self):
|
|
"""Test link_set method."""
|
|
rc = ResourceContainer()
|
|
self.assertEqual(rc.link('alink'), None) # non-spec rel should be supported
|
|
rc.link_set('alink', 'uri:l', extra1='one', extra2='two')
|
|
ln = rc.link('alink')
|
|
self.assertEqual(rc.link('alink'), {'rel': 'alink', 'href': 'uri:l',
|
|
'extra1': 'one', 'extra2': 'two'})
|
|
# Can update existing link
|
|
rc.link_set('alink', 'uri:new', extra1='1')
|
|
self.assertEqual(rc.link('alink'), {'rel': 'alink', 'href': 'uri:new',
|
|
'extra1': '1', 'extra2': 'two'})
|
|
|
|
def test11_index(self):
|
|
"""Test index property."""
|
|
rc = ResourceContainer()
|
|
self.assertEqual(rc.index, None)
|
|
rc.index = 'uri:i'
|
|
self.assertEqual(rc.index, 'uri:i')
|
|
|
|
def test12_str_datetime_now(self):
|
|
"""Test _str_datetime_now function."""
|
|
self.assertTrue(isinstance(_str_datetime_now(), str))
|
|
self.assertTrue(isinstance(_str_datetime_now('now'), str))
|
|
self.assertEqual(_str_datetime_now(0), '1970-01-01T00:00:00Z')
|
|
self.assertEqual(_str_datetime_now('2020-12-24T16:01:00Z'), '2020-12-24T16:01:00Z')
|