Package elisa :: Package core :: Package tests :: Module test_media_db
[hide private]
[frames] | no frames]

Source Code for Module elisa.core.tests.test_media_db

  1  # Elisa - Home multimedia server 
  2  # Copyright (C) 2006-2008 Fluendo Embedded S.L. (www.fluendo.com). 
  3  # All rights reserved. 
  4  # 
  5  # This file is available under one of two license agreements. 
  6  # 
  7  # This file is licensed under the GPL version 3. 
  8  # See "LICENSE.GPL" in the root of this distribution including a special 
  9  # exception to use Elisa with Fluendo's plugins. 
 10  # 
 11  # The GPL part of Elisa is also available under a commercial licensing 
 12  # agreement from Fluendo. 
 13  # See "LICENSE.Elisa" in the root directory of this distribution package 
 14  # for details on that license. 
 15   
 16  from elisa.core.tests.elisa_test_case import ElisaTestCase 
 17  from elisa.core import media_db, media_uri, db_backend 
 18  import os, tempfile, platform 
 19  DB_DUMP="""\ 
 20   
 21   
 22  """ 
 23   
24 -class TestMediaDB(ElisaTestCase):
25 first_load = True 26
27 - def __init__(self, methodName='runTest'):
28 ElisaTestCase.__init__(self, methodName=methodName) 29 self._db_file = os.path.join(tempfile.gettempdir(), 'test.db') 30 31 if os.path.exists(self._db_file): 32 os.unlink(self._db_file) 33 34 try: 35 backend = db_backend.DBBackend(db_backend='sqlite', 36 database=self._db_file) 37 except db_backend.DBBackendError, error: 38 self.skip = error
39
40 - def setUp(self):
41 ElisaTestCase.setUp(self) 42 43 self._tmp_uri = media_uri.MediaUri(u'file:///%s/' % tempfile.gettempdir()) 44 45 backend = db_backend.DBBackend(db_backend='sqlite', 46 database=self._db_file) 47 backend.sql_execute(DB_DUMP) 48 self._db = media_db.MediaDB(backend, True)
49
50 - def tearDown(self):
51 # avoid "database lock" issues 52 self._db.close()
53 54
55 - def test_reset(self):
56 57 version_row = self._db._backend.sql_execute("select version from core_meta") 58 self.failUnless(version_row) 59 version = version_row[0].version 60 self.assertEqual(version, media_db.CURRENT_DB_VERSION)
61 62
63 - def test_add_source(self):
64 """ Add a new media source in the database 65 """ 66 source = self._db.add_source(self._tmp_uri, 'tmp') 67 self.failUnless(source)
68
69 - def test_hide_show_source(self):
70 """ Update source's "available" flag 71 """ 72 self._db.add_source(self._tmp_uri, 'tmp') 73 source = self._db.get_source_for_uri(self._tmp_uri) 74 self.failUnless(source) 75 self.failUnless(self._db.hide_source(source)) 76 self.failUnless(self._db.show_source(source))
77
79 source = self._db.add_source(self._tmp_uri, 'tmp') 80 source = self._db.get_source_for_uri(self._tmp_uri) 81 self.failUnless(source) 82 83 # TODO: test metadata keyword in add_media_node 84 m_uri = self._tmp_uri.join(u'foo.avi') 85 86 added = self._db.add_media(m_uri, "foo.avi", source, 87 'video') 88 self.assertEquals(added, True) 89 90 media = self._db.get_media_information(m_uri) 91 self.failUnless(media) 92 self.assertEquals(media.uri, unicode(m_uri)) 93 self.assertEquals(media.short_name, 'foo.avi') 94 media_id = media.id 95 self.failUnless(self._db.del_media_node(media)) 96 97 media = self._db.get_media_with_id(media_id) 98 self.assertEquals(media.deleted, 1)
99 100
101 - def test_get_source_for_uri(self):
102 source = self._db.add_source(self._tmp_uri, 'tmp') 103 source = self._db.get_source_for_uri(self._tmp_uri) 104 self.failUnless(source) 105 self.assertEquals(source.uri, repr(self._tmp_uri))
106
108 source = self._db.add_source(self._tmp_uri, 'tmp') 109 m_uri = self._tmp_uri.join('foo.mp3') 110 source = self._db.get_source_for_uri(self._tmp_uri) 111 added = self._db.add_media(m_uri, "foo.mp3", source, 112 'file', format='audio') 113 self.assertEquals(added, True) 114 115 foo_media = self._db.get_media_information(m_uri) 116 self.assertEquals(added, True) 117 f = os.path.join(tempfile.gettempdir(), 'foo.mp3') 118 119 if platform.system() == 'Windows': 120 f = "file:///%s" % f.replace('\\', '/') 121 else: 122 f = "file://%s" % f 123 124 self.assertEquals(foo_media.uri, f) 125 self.assertEquals(foo_media.short_name, 'foo.mp3') 126 self.assertEquals(foo_media.format, 'audio') 127 self.assertEquals(foo_media.typ, 'file')
128 129 # TODO: test metadata 130
131 - def test_get_media_with_id(self):
132 source = self._db.add_source(self._tmp_uri, 'tmp') 133 m_uri = self._tmp_uri.join('foo.mp3') 134 source = self._db.get_source_for_uri(self._tmp_uri) 135 added = self._db.add_media(m_uri, "foo.mp3", source, 136 'file', format='audio') 137 self.assertEquals(added, True) 138 139 media = self._db.get_media_information(m_uri) 140 media_id = media.id 141 foo_media = self._db.get_media_with_id(media_id) 142 self.failUnless(foo_media) 143 144 self.assertEquals(foo_media.uri, repr(m_uri)) 145 self.assertEquals(foo_media.uri, media.uri) 146 self.assertEquals(foo_media.id, media.id)
147
148 - def test_update_media(self):
149 """ Update some attributes in database of the given media 150 """ 151 source = self._db.add_source(self._tmp_uri, 'tmp') 152 m_uri = self._tmp_uri.join('foo.mp3') 153 source = self._db.get_source_for_uri(self._tmp_uri) 154 155 media = self._db.get_media_information(m_uri) 156 self._db.del_media_node(media, force_drop=True) 157 158 added = self._db.add_media(m_uri, "foo.mp3", source, 159 'file', format='audio') 160 self.assertEquals(added, True) 161 media = self._db.get_media_information(m_uri) 162 163 self._db.update_media_metadata(media, artist='foo', album='bar') 164 infos = self._db.get_media_information(m_uri) 165 self.failUnless(infos) 166 self.assertEquals(infos.artist, 'foo') 167 self.assertEquals(infos.album, 'bar')
168