django-clickhouse/tests/test_migrations.py
M1ha d830b74bcb Created separate from infi MigrationHistory in order to:
1) inherit it from this library models
2) Use some extra functionality
2018-12-18 18:28:23 +05:00

56 lines
1.9 KiB
Python

from django.test import TestCase, override_settings
from django_clickhouse.migrations import MigrationHistory
from django_clickhouse.database import connections
from django_clickhouse.migrations import migrate_app
from django_clickhouse.routers import DefaultRouter
from tests.clickhouse_models import ClickHouseTestModel
class NoMigrateRouter(DefaultRouter):
def allow_migrate(self, db_alias, app_label, operation, model=None, **hints):
return False
def table_exists(db, model_class):
res = db.select(
"SELECT * FROM system.tables WHERE `database`='%s' AND `name`='%s'"
% (db.db_name, model_class.table_name())
)
res = list(res)
return bool(res)
@override_settings(CLICKHOUSE_MIGRATE_WITH_DEFAULT_DB=False)
class MigrateAppTest(TestCase):
def setUp(self):
self.db = connections['default']
# Clean all database data
self.db.drop_database()
self.db.db_exists = False
self.db.create_database()
def test_migrate_app(self):
migrate_app('tests', 'default')
self.assertTrue(table_exists(self.db, ClickHouseTestModel))
self.assertEqual(1, self.db.count(MigrationHistory))
# Migrations are already applied no actions should be done
migrate_app('tests', 'default')
self.assertEqual(1, self.db.count(MigrationHistory))
@override_settings(CLICKHOUSE_DATABASE_ROUTER=NoMigrateRouter)
def test_router_not_allowed(self):
migrate_app('tests', 'default')
self.assertFalse(table_exists(self.db, ClickHouseTestModel))
def test_no_migrate_connections(self):
migrate_app('tests', 'no_migrate')
self.assertFalse(table_exists(connections['no_migrate'], ClickHouseTestModel))
def test_readonly_connections(self):
migrate_app('tests', 'readonly')
self.assertFalse(table_exists(connections['readonly'], ClickHouseTestModel))