1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
import os
import shutil
import unittest
import subprocess
import shlex
import sys
def run_cmd(app, cmd):
"""Run a command and return a tuple with (stdout, stderr, exit_code)"""
os.environ['FLASK_APP'] = app
process = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
(stdout, stderr) = process.communicate()
print('\n$ ' + cmd)
print(stdout.decode('utf-8'))
print(stderr.decode('utf-8'))
return stdout, stderr, process.wait()
class TestMigrate(unittest.TestCase):
def setUp(self):
os.chdir(os.path.split(os.path.abspath(__file__))[0])
try:
os.remove('app.db')
except OSError:
pass
try:
shutil.rmtree('migrations')
except OSError:
pass
try:
shutil.rmtree('temp_folder')
except OSError:
pass
def tearDown(self):
try:
os.remove('app.db')
except OSError:
pass
try:
shutil.rmtree('migrations')
except OSError:
pass
try:
shutil.rmtree('temp_folder')
except OSError:
pass
def test_alembic_version(self):
from flask_migrate import alembic_version
self.assertEqual(len(alembic_version), 3)
for v in alembic_version:
self.assertTrue(isinstance(v, int))
def test_migrate_upgrade(self):
(o, e, s) = run_cmd('app.py', '%s -m flask db init -t ./custom_template' % sys.executable)
self.assertTrue(s == 0)
(o, e, s) = run_cmd('app.py', '%s -m flask db migrate' % sys.executable)
self.assertTrue(s == 0)
(o, e, s) = run_cmd('app.py', '%s -m flask db upgrade' % sys.executable)
self.assertTrue(s == 0)
from .app import app, db, User
with app.app_context():
db.engine.dispose()
db.session.add(User(name='test'))
db.session.commit()
with open('migrations/README', 'rt') as f:
assert f.readline().strip() == 'Custom template.'
with open('migrations/alembic.ini', 'rt') as f:
assert f.readline().strip() == '# Custom template'
with open('migrations/env.py', 'rt') as f:
assert f.readline().strip() == '# Custom template'
with open('migrations/script.py.mako', 'rt') as f:
assert f.readline().strip() == '# Custom template'
|