"""Test db init.""" from flexmock import flexmock import pytest from territories import config from territories.connectors import sqlite from territories.db import db_init from territories.models import territory @pytest.fixture() def clean_db(): """Clean db.""" sqlite.BaseModel.metadata.drop_all(sqlite._db_engine) def test_init_database(clean_db): """Test initialization of in-memory DB.""" (flexmock(config).should_receive('TERRITORIES_CSV') .and_return('tests/data/territory.csv')) (flexmock(config).should_receive('TERRITORY_RELATIONS_CSV') .and_return('tests/data/territory_relationship.csv')) db_init.init_database() from sqlalchemy import MetaData md = MetaData() md.reflect(sqlite._db_engine) assert 'territory' in md.tables.keys() assert 'territory_relationship' in md.tables.keys() def test_data_backfill_success(clean_db): """Test backfill data function. Success variant. Filled database and count record in table. """ (flexmock(config).should_receive('TERRITORIES_CSV') .and_return('tests/data/territory.csv')) db_init.init_database() db_init.data_backfill() with sqlite.session_scope() as dbs: assert dbs.query(territory.Territory).count() == 6 dbs.query(territory.Territory).delete() def test_data_backfill_failed(clean_db): """Test failed scenario. CSV file is not full. Catch raise of TypeError. """ (flexmock(config).should_receive('TERRITORIES_CSV') .and_return('tests/data/territory_failed.csv')) db_init.init_database() with pytest.raises(TypeError): db_init.data_backfill()