]> git.decadent.org.uk Git - dak.git/blobdiff - tests/dbtest_metadata.py
Merge remote-tracking branch 'jcristau/formatone-no-tar-sig'
[dak.git] / tests / dbtest_metadata.py
index f1f30098fb9206c8dcd81fee675ceaf334966232..1b698b85e85148a609ff6643cac77809a9badbc9 100755 (executable)
@@ -11,33 +11,83 @@ class MetadataTestCase(DBDakTestCase):
     This TestCase checks the metadata handling.
     """
 
+    def setup_metadata(self):
+        '''
+        Setup the metadata objects.
+        '''
+        self.setup_binaries()
+        self.depends = MetadataKey('Depends')
+        self.session.add(self.depends)
+        self.session.flush()
+        self.bin_hello = self.binary['hello_2.2-1_i386']
+        self.src_hello = self.bin_hello.source
+        self.session.add(self.bin_hello)
+        self.session.add(self.src_hello)
+        self.hello_dep = BinaryMetadata(self.depends, 'foobar (>= 1.0)', self.bin_hello)
+        self.session.add(self.hello_dep)
+        self.recommends = MetadataKey('Recommends')
+        self.bin_hello.key[self.recommends] = BinaryMetadata(self.recommends, 'goodbye')
+        self.build_dep = MetadataKey('Build-Depends')
+        self.hello_bd = SourceMetadata(self.build_dep, 'foobar-dev', self.src_hello)
+        self.session.add(self.hello_bd)
+        self.homepage = MetadataKey('Homepage')
+        self.src_hello.key[self.homepage] = SourceMetadata(self.homepage, 'http://debian.org')
+        self.session.flush()
+
     def test_mappers(self):
         '''
         Tests the mapper configuration.
         '''
-        self.setup_binaries()
+        self.setup_metadata()
         # MetadataKey
-        depends = MetadataKey(key = 'Depends')
-        self.session.add(depends)
-        self.session.flush()
-        self.assertTrue(depends.key_id is not None)
+        self.assertTrue(self.depends.key_id is not None)
         # BinaryMetadata
-        hello_dep = BinaryMetadata(binary = self.binary['hello_2.2-1_i386'],
-            key = depends, value = 'foobar (>= 1.0)')
-        self.session.add(hello_dep)
-        self.session.flush()
-        self.assertEqual('hello', hello_dep.binary.package)
-        self.assertEqual('Depends', hello_dep.key.key)
-        self.assertEqual('foobar (>= 1.0)', hello_dep.value)
+        self.assertEqual('hello', self.hello_dep.binary.package)
+        self.assertEqual('Depends', self.hello_dep.key.key)
+        self.assertEqual('foobar (>= 1.0)', self.hello_dep.value)
         # SourceMetadata
-        build_dep = MetadataKey(key = 'Build-Depends')
-        hello_bd = SourceMetadata(source = self.binary['hello_2.2-1_i386'].source,
-            key = build_dep, value = 'foobar-dev')
-        self.session.add(hello_bd)
+        self.assertEqual('hello', self.hello_bd.source.source)
+        self.assertEqual('Build-Depends', self.hello_bd.key.key)
+        self.assertEqual('foobar-dev', self.hello_bd.value)
+        # DBBinary relation
+        self.assertEqual(self.hello_dep, self.bin_hello.key[self.depends])
+        self.assertEqual('goodbye', self.bin_hello.key[self.recommends].value)
+        # DBSource relation
+        self.assertEqual(self.hello_bd, self.src_hello.key[self.build_dep])
+        self.assertEqual('http://debian.org', self.src_hello.key[self.homepage].value)
+
+    def test_association_proxy(self):
+        '''
+        Test the association proxies 'metadata' in DBBinary and DBSource.
+        '''
+        self.setup_metadata()
+        # DBBinary association proxy
+        essential = MetadataKey('Essential')
+        self.bin_hello.metadata[essential] = 'yes'
+        self.session.flush()
+        self.assertEqual('yes', self.bin_hello.metadata[essential])
+        self.assertEqual('foobar (>= 1.0)', self.bin_hello.metadata[self.depends])
+        self.assertTrue(self.recommends in self.bin_hello.metadata)
+        # DBSource association proxy
+        std_version = MetadataKey('Standards-Version')
+        self.src_hello.metadata[std_version] = '3.9.1'
+        self.session.flush()
+        self.assertEqual('3.9.1', self.src_hello.metadata[std_version])
+        self.assertEqual('http://debian.org', self.src_hello.metadata[self.homepage])
+        self.assertTrue(self.depends not in self.src_hello.metadata)
+
+    def test_delete(self):
+        '''
+        Tests the delete / cascading behaviour.
+        '''
+        self.setup_metadata()
+        self.session.delete(self.bin_hello)
+        # Remove associated binaries because we have no cascading rule for
+        # them.
+        for binary in self.src_hello.binaries:
+            self.session.delete(binary)
+        self.session.delete(self.src_hello)
         self.session.flush()
-        self.assertEqual('hello', hello_bd.source.source)
-        self.assertEqual('Build-Depends', hello_bd.key.key)
-        self.assertEqual('foobar-dev', hello_bd.value)
 
 if __name__ == '__main__':
     unittest.main()