resync/tests/test_resource_container.py
2016-03-07 11:15:01 -05:00

120 lines
4.8 KiB
Python

import unittest
from resync.resource import Resource
from resync.resource_container import ResourceContainer
class TestResourceContainer(unittest.TestCase):
def test01_create_and_add(self):
rc = ResourceContainer( resources=[] )
self.assertEqual( len(rc.resources), 0, "empty" )
rc.resources.append( Resource('a',timestamp=1) )
rc.resources.append( Resource('b',timestamp=2) )
self.assertEqual( len(rc.resources), 2, "two 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 test03_prune_before(self):
rc = ResourceContainer()
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) )
rc.prune_before(3)
self.assertEqual( len(rc.resources), 2 )
i = iter(rc)
self.assertEqual( next(i).uri, 'c' )
self.assertEqual( next(i).uri, 'd' )
# put some more back out of order
rc.resources.append( Resource('a',timestamp=1) )
rc.resources.append( Resource('b',timestamp=2) )
rc.resources.append( Resource('e',timestamp=1000) )
rc.prune_before(3.5)
self.assertEqual( len(rc.resources), 2 )
i = iter(rc)
self.assertEqual( next(i).uri, 'd' )
self.assertEqual( next(i).uri, 'e' )
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" )
if __name__ == '__main__':
suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestResourceContainer)
unittest.TextTestRunner().run(suite)