2012-04-14 13:59:58 +00:00
|
|
|
import os
|
2021-02-19 23:44:02 +00:00
|
|
|
import unittest
|
2015-11-04 10:50:47 +00:00
|
|
|
from sqlite3 import OperationalError
|
- Replaced pipenv with poetry
- Updated min version check in setup.py to Python 3.6
- Updated isort config file and calls to align with v5.x
- Added init-hook for gi imports in .pylintrc to avoid invalid no-member issues
- Makefile: added lock, show-tree, bandit, black, mypy; updated test, cover, dev, isort, autopep8, check, isort-check, flake8, pylint; removed req, requirements;
- Updated .travis.yml to use poetry and make
- Added my email in AUTHORS
- Updated CONTRIBUTING.md
- Updated lint_python.yml to use poetry and make, reorganized instructions to have all install related steps first
- sorted imports: lutris, lutris-wrapper, cleanup_prefix.py and multiple files in tests dir
2021-10-24 18:42:06 +00:00
|
|
|
|
2021-02-19 23:44:02 +00:00
|
|
|
from lutris import settings
|
2020-08-09 03:39:25 +00:00
|
|
|
from lutris.database import games as games_db
|
- Replaced pipenv with poetry
- Updated min version check in setup.py to Python 3.6
- Updated isort config file and calls to align with v5.x
- Added init-hook for gi imports in .pylintrc to avoid invalid no-member issues
- Makefile: added lock, show-tree, bandit, black, mypy; updated test, cover, dev, isort, autopep8, check, isort-check, flake8, pylint; removed req, requirements;
- Updated .travis.yml to use poetry and make
- Added my email in AUTHORS
- Updated CONTRIBUTING.md
- Updated lint_python.yml to use poetry and make, reorganized instructions to have all install related steps first
- sorted imports: lutris, lutris-wrapper, cleanup_prefix.py and multiple files in tests dir
2021-10-24 18:42:06 +00:00
|
|
|
from lutris.database import schema, sql
|
2021-02-19 23:44:02 +00:00
|
|
|
from lutris.util.test_config import setup_test_environment
|
2012-04-14 13:59:58 +00:00
|
|
|
|
2021-02-19 23:44:02 +00:00
|
|
|
setup_test_environment()
|
2013-03-20 20:46:34 +00:00
|
|
|
|
2012-04-14 13:59:58 +00:00
|
|
|
|
2013-12-11 19:42:39 +00:00
|
|
|
class DatabaseTester(unittest.TestCase):
|
2013-03-20 20:46:34 +00:00
|
|
|
def setUp(self):
|
2021-02-19 23:44:02 +00:00
|
|
|
if os.path.exists(settings.PGA_DB):
|
|
|
|
os.remove(settings.PGA_DB)
|
2020-08-09 03:39:25 +00:00
|
|
|
schema.syncdb()
|
2013-03-20 21:20:46 +00:00
|
|
|
|
2021-12-14 22:03:59 +00:00
|
|
|
|
2013-12-11 19:42:39 +00:00
|
|
|
class TestPersonnalGameArchive(DatabaseTester):
|
2012-06-06 23:19:40 +00:00
|
|
|
def test_add_game(self):
|
2021-02-19 23:44:02 +00:00
|
|
|
games_db.add_game(name="LutrisTest", runner="Linux")
|
2020-08-09 03:39:25 +00:00
|
|
|
game_list = games_db.get_games()
|
2013-03-20 21:34:30 +00:00
|
|
|
game_names = [item['name'] for item in game_list]
|
2013-03-20 20:46:34 +00:00
|
|
|
self.assertTrue("LutrisTest" in game_names)
|
2012-06-06 23:19:40 +00:00
|
|
|
|
|
|
|
def test_delete_game(self):
|
2021-02-19 23:44:02 +00:00
|
|
|
game_id = games_db.add_game(name="LutrisTest", runner="Linux")
|
|
|
|
games_db.delete_game(game_id)
|
2020-08-09 03:39:25 +00:00
|
|
|
game_list = games_db.get_games()
|
2013-03-20 21:34:30 +00:00
|
|
|
self.assertEqual(len(game_list), 0)
|
|
|
|
|
|
|
|
def test_get_game_list(self):
|
2021-02-19 23:44:02 +00:00
|
|
|
self.game_id = games_db.add_game(name="LutrisTest", runner="Linux")
|
2020-08-09 03:39:25 +00:00
|
|
|
game_list = games_db.get_games()
|
2015-11-04 10:50:47 +00:00
|
|
|
self.assertEqual(game_list[0]['id'], self.game_id)
|
2013-03-20 21:34:30 +00:00
|
|
|
self.assertEqual(game_list[0]['slug'], 'lutristest')
|
|
|
|
self.assertEqual(game_list[0]['name'], 'LutrisTest')
|
|
|
|
self.assertEqual(game_list[0]['runner'], 'Linux')
|
2012-04-14 13:59:58 +00:00
|
|
|
|
2013-03-20 21:36:29 +00:00
|
|
|
def test_filter(self):
|
2020-08-09 03:39:25 +00:00
|
|
|
games_db.add_game(name="foobar", runner="Linux")
|
|
|
|
games_db.add_game(name="bang", runner="Linux")
|
2020-09-19 10:39:45 +00:00
|
|
|
game_list = games_db.get_games(searches={"name": 'bang'})
|
2013-03-20 21:36:29 +00:00
|
|
|
self.assertEqual(len(game_list), 1)
|
2013-03-20 21:38:46 +00:00
|
|
|
self.assertEqual(game_list[0]['name'], 'bang')
|
2013-06-26 15:22:22 +00:00
|
|
|
|
2013-12-12 21:48:05 +00:00
|
|
|
def test_can_filter_by_installed_games(self):
|
2020-08-09 03:39:25 +00:00
|
|
|
games_db.add_game(name="installed_game", runner="Linux", installed=1)
|
|
|
|
games_db.add_game(name="bang", runner="Linux", installed=0)
|
2020-08-10 06:36:18 +00:00
|
|
|
game_list = games_db.get_games(filters={'installed': 1})
|
2013-12-12 21:48:05 +00:00
|
|
|
self.assertEqual(len(game_list), 1)
|
|
|
|
self.assertEqual(game_list[0]['name'], 'installed_game')
|
|
|
|
|
2013-06-26 15:22:22 +00:00
|
|
|
def test_game_with_same_slug_is_updated(self):
|
2020-08-09 03:39:25 +00:00
|
|
|
games_db.add_game(name="some game", runner="linux")
|
|
|
|
game = games_db.get_game_by_field("some-game", "slug")
|
2013-06-26 15:22:22 +00:00
|
|
|
self.assertFalse(game['directory'])
|
2020-08-09 03:39:25 +00:00
|
|
|
games_db.add_or_update(name="some game", runner='linux', directory="/foo")
|
|
|
|
game = games_db.get_game_by_field("some-game", "slug")
|
2013-06-26 15:22:22 +00:00
|
|
|
self.assertEqual(game['directory'], '/foo')
|
2013-12-09 23:19:13 +00:00
|
|
|
|
|
|
|
|
2013-12-11 19:42:39 +00:00
|
|
|
class TestDbCreator(DatabaseTester):
|
2013-12-09 23:19:13 +00:00
|
|
|
def test_can_generate_fields(self):
|
2020-08-09 03:39:25 +00:00
|
|
|
text_field = schema.field_to_string('name', 'TEXT')
|
2013-12-09 23:19:13 +00:00
|
|
|
self.assertEqual(text_field, "name TEXT")
|
|
|
|
|
2020-08-09 03:39:25 +00:00
|
|
|
id_field = schema.field_to_string('id', 'INTEGER', indexed=True)
|
2013-12-09 23:19:13 +00:00
|
|
|
self.assertEqual(id_field, "id INTEGER PRIMARY KEY")
|
2013-12-11 19:42:39 +00:00
|
|
|
|
|
|
|
def test_can_create_table(self):
|
|
|
|
fields = [
|
2013-12-11 21:46:44 +00:00
|
|
|
{'name': 'id', 'type': 'INTEGER', 'indexed': True},
|
|
|
|
{'name': 'name', 'type': 'TEXT'}
|
2013-12-11 19:42:39 +00:00
|
|
|
]
|
2020-08-09 03:39:25 +00:00
|
|
|
schema.create_table('testing', fields)
|
2021-02-19 23:44:02 +00:00
|
|
|
sql.db_insert(settings.PGA_DB, 'testing', {'name': "testok"})
|
|
|
|
results = sql.db_select(settings.PGA_DB, 'testing',
|
2013-12-11 21:46:44 +00:00
|
|
|
fields=['id', 'name'])
|
2013-12-11 19:42:39 +00:00
|
|
|
self.assertEqual(results[0]['name'], "testok")
|
|
|
|
|
|
|
|
|
|
|
|
class TestMigration(DatabaseTester):
|
2013-12-11 21:46:44 +00:00
|
|
|
def setUp(self):
|
2021-02-19 23:44:02 +00:00
|
|
|
super().setUp()
|
2013-12-11 22:36:23 +00:00
|
|
|
self.tablename = "basetable"
|
2013-12-11 21:46:44 +00:00
|
|
|
self.schema = [
|
|
|
|
{
|
|
|
|
'name': 'id',
|
|
|
|
'type': 'INTEGER',
|
|
|
|
'indexed': True
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'name': 'name',
|
|
|
|
'type': 'TEXT',
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
def create_table(self):
|
2020-08-09 03:39:25 +00:00
|
|
|
schema.create_table(self.tablename, self.schema)
|
2013-12-11 21:46:44 +00:00
|
|
|
|
2013-12-11 19:42:39 +00:00
|
|
|
def test_get_schema(self):
|
2013-12-11 21:46:44 +00:00
|
|
|
self.create_table()
|
2020-08-09 03:39:25 +00:00
|
|
|
_schema = schema.get_schema(self.tablename)
|
|
|
|
self.assertEqual(_schema[0]['name'], 'id')
|
|
|
|
self.assertEqual(_schema[0]['type'], 'INTEGER')
|
|
|
|
self.assertEqual(_schema[1]['name'], 'name')
|
|
|
|
self.assertEqual(_schema[1]['type'], 'TEXT')
|
2013-12-11 21:46:44 +00:00
|
|
|
|
|
|
|
def test_add_field(self):
|
|
|
|
self.create_table()
|
|
|
|
field = {
|
|
|
|
'name': 'counter',
|
|
|
|
'type': 'INTEGER'
|
|
|
|
}
|
2021-02-19 23:44:02 +00:00
|
|
|
sql.add_field(settings.PGA_DB, self.tablename, field)
|
2020-08-09 03:39:25 +00:00
|
|
|
_schema = schema.get_schema(self.tablename)
|
|
|
|
self.assertEqual(_schema[2]['name'], 'counter')
|
|
|
|
self.assertEqual(_schema[2]['type'], 'INTEGER')
|
2013-12-11 21:46:44 +00:00
|
|
|
|
|
|
|
def test_cant_add_existing_field(self):
|
|
|
|
self.create_table()
|
|
|
|
field = {
|
|
|
|
'name': 'name',
|
|
|
|
'type': 'TEXT'
|
|
|
|
}
|
|
|
|
with self.assertRaises(OperationalError):
|
2021-02-19 23:44:02 +00:00
|
|
|
sql.add_field(settings.PGA_DB, self.tablename, field)
|
2013-12-11 22:36:23 +00:00
|
|
|
|
|
|
|
def test_cant_create_empty_table(self):
|
|
|
|
with self.assertRaises(OperationalError):
|
2020-08-09 03:39:25 +00:00
|
|
|
schema.create_table('emptytable', [])
|
2013-12-11 22:36:23 +00:00
|
|
|
|
|
|
|
def test_can_know_if_table_exists(self):
|
|
|
|
self.create_table()
|
2020-08-09 03:39:25 +00:00
|
|
|
self.assertTrue(schema.get_schema(self.tablename))
|
|
|
|
self.assertFalse(schema.get_schema('notatable'))
|
2013-12-11 22:36:23 +00:00
|
|
|
|
|
|
|
def test_can_migrate(self):
|
|
|
|
self.create_table()
|
2013-12-11 22:39:59 +00:00
|
|
|
self.schema.append({'name': 'new_field', 'type': 'TEXT'})
|
2020-08-09 03:39:25 +00:00
|
|
|
migrated = schema.migrate(self.tablename, self.schema)
|
|
|
|
_schema = schema.get_schema(self.tablename)
|
|
|
|
self.assertEqual(_schema[2]['name'], 'new_field')
|
2013-12-11 22:39:59 +00:00
|
|
|
self.assertEqual(migrated, ['new_field'])
|