def test11_update(self): """Test update method.""" tempdir = tempfile.mkdtemp(prefix='test_update') oo = Object() # First create and object oo.id = 'uri:wumpus' objdir = os.path.join(tempdir, '1') oo.digest_algorithm = 'sha256' oo.create(srcdir='fixtures/1.0/content/spec-ex-minimal/v1', metadata=VersionMetadata(), objdir=objdir) self.assertEqual( set(os.listdir(objdir)), set([ '0=ocfl_object_1.0', 'inventory.json', 'inventory.json.sha256', 'v1' ])) # Now update oo.digest_algorithm = 'sha512' oo.update(objdir=objdir, metadata=VersionMetadata()) self.assertEqual( set(os.listdir(objdir)), set([ '0=ocfl_object_1.0', 'inventory.json', 'inventory.json.sha512', 'v1', 'v2' ]))
def test_bag_extracted_version(self): """Test bag_extracted_version method.""" # Write bag with no metadata tempdir = tempfile.mkdtemp(prefix='test_bag1') with open(os.path.join(tempdir, 'my_file'), 'w') as fh: fh.write("Something\n") metadata = VersionMetadata() bag_extracted_version(tempdir, metadata) with open(os.path.join(tempdir, 'bag-info.txt'), 'r') as fh: info = fh.read() self.assertNotIn('Contact-Email', info) self.assertNotIn('Contact-Name', info) self.assertNotIn('External-Description', info) self.assertNotIn('External-Identifier', info) self.assertIn('Payload-Oxum', info) # Write bag with all metadata tempdir = tempfile.mkdtemp(prefix='test_bag2') with open(os.path.join(tempdir, 'my_file2'), 'w') as fh: fh.write("Something else\n") metadata = VersionMetadata() metadata.message = "hello" metadata.name = "A Person" metadata.address = "mailto:[email protected]" metadata.id = 'info:a-bag-2' bag_extracted_version(tempdir, metadata) with open(os.path.join(tempdir, 'bag-info.txt'), 'r') as fh: info = fh.read() self.assertIn('Contact-Email: [email protected]', info) self.assertIn('Contact-Name: A Person', info) self.assertIn('External-Description: hello', info) self.assertIn('External-Identifier: info:a-bag-2', info) self.assertIn('Payload-Oxum', info)
def test02_VersionMetedata_init(self): """Test VersionMetadata class.""" args = argparse.Namespace(created='a', message='b', name='c', address='d') m = VersionMetadata(args=args) d = m.as_dict(extra='x') self.assertEqual(d['created'], 'a') self.assertEqual(d['message'], 'b') self.assertEqual(d['user'], {'name': 'c', 'address': 'd'}) self.assertEqual(d['extra'], 'x') # with load from file m = VersionMetadata(inventory_file='tests/testdata/inventories/inv_1_good.json') self.assertEqual(m.version, 'v1')
def test06_build_inventory(self): """Test build_inventory.""" oo = Object(digest_algorithm="md5") for (vdir, inventory, manifest_to_srcfile) in oo.build_inventory( 'fixtures/1.0/content/spec-ex-full', metadata=VersionMetadata()): pass self.assertEqual(inventory['type'], 'https://ocfl.io/1.0/spec/#inventory') self.assertEqual(inventory['head'], 'v3') self.assertEqual( inventory['manifest'], { '184f84e28cbe75e050e9c25ea7f2e939': ['v1/content/foo/bar.xml'], '2673a7b11a70bc7ff960ad8127b4adeb': ['v2/content/foo/bar.xml'], 'c289c8ccd4bab6e385f5afdd89b5bda2': ['v1/content/image.tiff'], 'd41d8cd98f00b204e9800998ecf8427e': ['v1/content/empty.txt'] }) self.assertEqual(len(inventory['versions']), 3) # test skips by skipping 'v3' oo = Object(digest_algorithm="md5", skips=['v3']) for (vdir, inventory, manifest_to_srcfile) in oo.build_inventory( 'fixtures/1.0/content/spec-ex-full', metadata=VersionMetadata()): if vdir == 'v1': self.assertEqual( manifest_to_srcfile, { 'v1/content/image.tiff': 'fixtures/1.0/content/spec-ex-full/v1/image.tiff', 'v1/content/empty.txt': 'fixtures/1.0/content/spec-ex-full/v1/empty.txt', 'v1/content/foo/bar.xml': 'fixtures/1.0/content/spec-ex-full/v1/foo/bar.xml' }) else: self.assertEqual( manifest_to_srcfile, { 'v2/content/foo/bar.xml': 'fixtures/1.0/content/spec-ex-full/v2/foo/bar.xml' }) self.assertEqual(inventory['head'], 'v2') self.assertEqual(len(inventory['versions']), 2)
def test_bag_as_source(self): """Test bag_as_source method.""" metadata = VersionMetadata() self.assertRaises(bagit.BagError, bag_as_source, 'tests/testdata/files/hello_out_there.txt', metadata) self.assertRaises(BaggerError, bag_as_source, 'tests/testdata/bags/invalid_bag', metadata) # Check metadata update metadata = VersionMetadata() bag_as_source('tests/testdata/bags/uaa_v1', metadata) self.assertEqual(metadata.created, '2020-01-01T00:00:00Z') self.assertEqual(metadata.address, 'mailto:[email protected]') self.assertEqual(metadata.name, 'Yog-Sothoth') self.assertEqual(metadata.message, 'First version') self.assertEqual(metadata.id, 'info:bb123cd4567') # Check metedata still None when not in bag metadata = VersionMetadata() bag_as_source('tests/testdata/bags/bag_no_metadata', metadata) self.assertEqual(metadata.created, None) self.assertEqual(metadata.address, None) self.assertEqual(metadata.name, None) self.assertEqual(metadata.message, None) self.assertEqual(metadata.id, None)
def test10_create(self): """Test create method.""" tempdir = tempfile.mkdtemp(prefix='test_create') oo = Object() self.assertRaises(ObjectException, oo.create, srcdir='fixtures/1.0/content/spec-ex-full/v1') oo.identifier = 'uri:kliderkin' objdir = os.path.join(tempdir, '1') oo.create(srcdir='fixtures/1.0/content/spec-ex-full/v1', metadata=VersionMetadata(), objdir=objdir) self.assertEqual( set(os.listdir(objdir)), set([ '0=ocfl_object_1.0', 'inventory.json', 'inventory.json.sha512', 'v1' ]))
def test09_build(self): """Test write method.""" tempdir = tempfile.mkdtemp(prefix='test_write') oo = Object() self.assertRaises(ObjectException, oo.build, srcdir='fixtures/1.0/content/spec-ex-full') oo.id = 'uri:firkin' objdir = os.path.join(tempdir, '1') oo.build(srcdir='fixtures/1.0/content/spec-ex-full', metadata=VersionMetadata(), objdir=objdir) self.assertEqual( set(os.listdir(objdir)), set([ '0=ocfl_object_1.0', 'inventory.json', 'inventory.json.sha512', 'v1', 'v2', 'v3' ]))
def test03_VersionMetedata_from_inventory_file(self): """Test VersionMetadata from_inventory_file.""" m = VersionMetadata() m.from_inventory_file('tests/testdata/inventories/inv_1_good.json') self.assertEqual(m.created, '2018-10-02T12:00:00Z') # Failures m = VersionMetadata() self.assertRaises(Exception, m.from_inventory, inventory={}) self.assertRaises(Exception, m.from_inventory, inventory={'versions': {}}) self.assertRaises(Exception, m.from_inventory, inventory={'versions': {}}, vdir='v1') self.assertRaises(Exception, m.from_inventory, inventory={'head': 'v1', 'versions': {}}, vdir='v1')
def test05_add_version(self): """Test add_version method.""" self.maxDiff = None oo = Object(digest_algorithm="md5") inventory = {'manifest': {}, 'versions': {}} oo.add_version(inventory, 'fixtures/1.0/content/spec-ex-full/v1', vdir='v1', metadata=VersionMetadata()) self.assertEqual(inventory['head'], 'v1') self.assertEqual( inventory['manifest'], { '184f84e28cbe75e050e9c25ea7f2e939': ['v1/content/foo/bar.xml'], 'c289c8ccd4bab6e385f5afdd89b5bda2': ['v1/content/image.tiff'], 'd41d8cd98f00b204e9800998ecf8427e': ['v1/content/empty.txt'] }) self.assertEqual( inventory['versions'], { "v1": { 'created': '2018-01-01T01:01:01Z', 'message': 'Initial import', 'state': { '184f84e28cbe75e050e9c25ea7f2e939': ['foo/bar.xml'], 'c289c8ccd4bab6e385f5afdd89b5bda2': ['image.tiff'], 'd41d8cd98f00b204e9800998ecf8427e': ['empty.txt'] }, 'user': { 'address': '*****@*****.**', 'name': 'Alice' } } }) self.assertNotIn('fixity', inventory) # Now add second version to check forward delta oo.add_version(inventory, 'fixtures/1.0/content/spec-ex-full/v2', vdir='v2', metadata=VersionMetadata()) self.assertEqual(inventory['head'], 'v2') self.assertEqual( inventory['manifest'], { '184f84e28cbe75e050e9c25ea7f2e939': ['v1/content/foo/bar.xml'], '2673a7b11a70bc7ff960ad8127b4adeb': ['v2/content/foo/bar.xml'], 'c289c8ccd4bab6e385f5afdd89b5bda2': ['v1/content/image.tiff'], 'd41d8cd98f00b204e9800998ecf8427e': ['v1/content/empty.txt'] }) self.assertEqual( inventory['versions']['v2'], { 'created': '2018-02-02T02:02:02Z', 'message': 'Fix bar.xml, remove image.tiff, add empty2.txt', 'state': { '2673a7b11a70bc7ff960ad8127b4adeb': ['foo/bar.xml'], 'd41d8cd98f00b204e9800998ecf8427e': ['empty.txt', 'empty2.txt'] }, 'user': { 'address': '*****@*****.**', 'name': 'Bob' } }) # Now with fixity oo = Object(digest_algorithm="md5", fixity=['sha1']) inventory = {'manifest': {}, 'versions': {}, 'fixity': {'sha1': {}}} manifest_to_srcfile = oo.add_version( inventory, 'fixtures/1.0/content/spec-ex-full/v1', vdir='v1', metadata=VersionMetadata()) self.assertEqual( manifest_to_srcfile, { 'v1/content/image.tiff': 'fixtures/1.0/content/spec-ex-full/v1/image.tiff', 'v1/content/empty.txt': 'fixtures/1.0/content/spec-ex-full/v1/empty.txt', 'v1/content/foo/bar.xml': 'fixtures/1.0/content/spec-ex-full/v1/foo/bar.xml' })