Source code for frostmark.tests.test_database
'''
Module for creating a connection to SQLite DB
and SQLAlchemy declarative base home.
'''
import unittest
from os import listdir, remove
from os.path import join, dirname, abspath
[docs]class DBBaseTestCase(unittest.TestCase):
'''
TestCase for SQLite database backend.
'''
[docs] def test_db_base(self):
'''
Test all variables, locations, files for creating DB base.
'''
from frostmark import db_base
from frostmark import user_data
folder = dirname(abspath(user_data.__file__))
self.assertEqual(db_base.DB_PATH, join(folder, db_base.DB_NAME))
self.assertEqual(
str(db_base.ENGINE.url).replace('sqlite:///', ''),
db_base.DB_PATH
)
self.assertNotIn(db_base.DB_NAME, listdir(folder))
[docs] def test_db_create(self):
'''
Test creating SQLite3 DB only (without tables)
in the user_data section.
'''
from frostmark import db_base
from frostmark import user_data
folder = dirname(abspath(user_data.__file__))
self.assertNotIn(db_base.DB_NAME, listdir(folder))
db_base.BASE.metadata.create_all(db_base.ENGINE)
ses = db_base.SESSIONMAKER()
ses.close()
self.assertIn(db_base.DB_NAME, listdir(folder))
remove(join(folder, db_base.DB_NAME))
[docs] def test_db_session(self):
'''
Test getting session for SQLite DB which passively creates a new
DB (new .sqlite file) if it isn't present yet.
'''
from frostmark import user_data
from frostmark import db_base
from frostmark.db import get_session
from sqlalchemy.orm.session import Session
folder = dirname(abspath(user_data.__file__))
self.assertNotIn(db_base.DB_NAME, listdir(folder))
# two sessions to check whether SQLA raises an Exception
# e.g. if a table already exists and create_all() is called
ses_one = get_session()
self.assertIsInstance(ses_one, Session)
ses_two = get_session()
self.assertIsInstance(ses_two, Session)
ses_one.close()
ses_two.close()
self.assertIn(db_base.DB_NAME, listdir(folder))
remove(join(folder, db_base.DB_NAME))