# https://itnext.io/setting-up-transactional-tests-with-pytest-and-sqlalchemy-b2d726347629 import pytest import helpers from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker from app.models import Base, Tracks @pytest.fixture(scope="session") def db_engine(): engine = create_engine( "mysql+mysqldb://musicmuster_testing:musicmuster_testing@localhost/dev_musicmuster_testing" ) Base.metadata.create_all(engine) yield engine engine.dispose() @pytest.fixture(scope='function') def session(db_engine): connection = db_engine.connect() transaction = connection.begin() Session = sessionmaker(bind=connection) session = scoped_session(Session) yield session session.remove() transaction.rollback() connection.close() @pytest.fixture(scope='function') def track1(session): track_path = "testdata/isa.mp3" metadata = helpers.get_file_metadata(track_path) track = Tracks(session, **metadata) return track @pytest.fixture(scope='function') def track2(session): track_path = "testdata/mom.mp3" metadata = helpers.get_file_metadata(track_path) track = Tracks(session, **metadata) return track