def find_project_migrations(project_dir): migrations_dir = get_migrations_dir(project_dir) glob_pattern = os.path.join(migrations_dir, '*.py') migrations = [ os.path.relpath(migration_path, project_dir) for migration_path in glob.glob(glob_pattern) if is_valid_migration_filename(os.path.basename(migration_path)) ] return migrations
def test_load_project_migrations(project_dir, MATH): migrations_dir = get_migrations_dir(project_dir) migration_0001_file_path = os.path.join(migrations_dir, '0001_initial.py') migration_0002_file_path = os.path.join(migrations_dir, '0002_the_second_migration.py') migration_0003_file_path = os.path.join(migrations_dir, '0003_the_third_migration.py') class MigrationA(Migration): migration_id = '0001_initial' dependencies = [] operations = [] compiled_contracts = { 'Math': MATH, } class MigrationB(Migration): migration_id = '0002_the_second_migration' dependencies = ['0001_initial'] operations = [] compiled_contracts = { 'Math': MATH, } class MigrationC(Migration): migration_id = '0003_the_third_migration' dependencies = ['0002_the_second_migration'] operations = [] compiled_contracts = { 'Math': MATH, } with open(migration_0001_file_path, 'w') as migration_0001_file: write_migration(migration_0001_file, MigrationA) with open(migration_0002_file_path, 'w') as migration_0002_file: write_migration(migration_0002_file, MigrationB) with open(migration_0003_file_path, 'w') as migration_0003_file: write_migration(migration_0003_file, MigrationC) migration_classes = load_project_migrations(project_dir) assert len(migration_classes) == 3 actual_ids = {m.migration_id for m in migration_classes} expected_ids = { '0001_initial', '0002_the_second_migration', '0003_the_third_migration' } assert actual_ids == expected_ids
def test_load_project_migrations(project_dir, MATH): migrations_dir = get_migrations_dir(project_dir) migration_0001_file_path = os.path.join(migrations_dir, '0001_initial.py') migration_0002_file_path = os.path.join(migrations_dir, '0002_the_second_migration.py') migration_0003_file_path = os.path.join(migrations_dir, '0003_the_third_migration.py') class MigrationA(Migration): migration_id = '0001_initial' dependencies = [] operations = [] compiled_contracts = { 'Math': MATH, } class MigrationB(Migration): migration_id = '0002_the_second_migration' dependencies = ['0001_initial'] operations = [] compiled_contracts = { 'Math': MATH, } class MigrationC(Migration): migration_id = '0003_the_third_migration' dependencies = ['0002_the_second_migration'] operations = [] compiled_contracts = { 'Math': MATH, } with open(migration_0001_file_path, 'w') as migration_0001_file: write_migration(migration_0001_file, MigrationA) with open(migration_0002_file_path, 'w') as migration_0002_file: write_migration(migration_0002_file, MigrationB) with open(migration_0003_file_path, 'w') as migration_0003_file: write_migration(migration_0003_file, MigrationC) migration_classes = load_project_migrations(project_dir) assert len(migration_classes) == 3 actual_ids = {m.migration_id for m in migration_classes} expected_ids = {'0001_initial', '0002_the_second_migration', '0003_the_third_migration'} assert actual_ids == expected_ids
def test_makemigration(project_dir, write_project_file): runner = CliRunner() write_project_file( "contracts/Simple.sol", "contract Simple { function Simple() {}}" ) migrations_dir = get_migrations_dir(project_dir, lazy_create=False) assert not os.path.exists(migrations_dir) result = runner.invoke(main, ['makemigration']) assert result.exit_code == 0, result.output + str(result.exception) assert os.path.exists(migrations_dir) assert os.path.exists(os.path.join(migrations_dir, '0001_initial.py')) assert not os.path.exists(os.path.join(migrations_dir, '0002_auto.py')) result = runner.invoke(main, ['makemigration']) assert result.exit_code == 0, result.output + str(result.exception) assert os.path.exists(os.path.join(migrations_dir, '0002_auto.py')) assert not os.path.exists(os.path.join(migrations_dir, '0003_custom_name.py')) result = runner.invoke(main, ['makemigration', 'custom_name']) assert result.exit_code == 0, result.output + str(result.exception) assert os.path.exists(os.path.join(migrations_dir, '0003_custom_name.py')) project = Project() assert len(project.migrations) == 3 m1, m2, m3 = project.migrations assert m1.migration_id == '0001_initial' assert m1.dependencies == [] assert m2.migration_id == '0002_auto' assert m2.dependencies == ['0001_initial'] assert m3.migration_id == '0003_custom_name' assert m3.dependencies == ['0002_auto']
def test_makemigration_works_with_no_contracts(project_dir): runner = CliRunner() result = runner.invoke(main, ['makemigration', 'my_first_migration']) assert result.exit_code == 0, result.output + str(result.exception) migrations_dir = get_migrations_dir(project_dir, lazy_create=False) assert os.path.exists(migrations_dir) assert os.path.exists(os.path.join(migrations_dir, '0001_my_first_migration.py')) project = Project() assert len(project.migrations) == 1 m1 = project.migrations[0] assert m1.migration_id == '0001_my_first_migration' assert m1.dependencies == [] assert m1.compiled_contracts == {}
def migrations_dir(self): return get_migrations_dir(self.project_dir)