* increase: 1. Inspectdb adds DECIMAL, DOUBLE, CHAR, TIME data type matching; 2. Add exception handling, avoid the need to manually create the entire table because a certain data type is not supported. * fix: aerich inspectdb raise KeyError for double in MySQL * feat: support command `python -m aerich` * docs: update changelog * tests: verify mysql inspectdb for float field * fix mysql uuid field inspect to be charfield * refactor: use `db_index=True` instead of `index=True` for inspectdb * docs: update changelog --------- Co-authored-by: xiechen <xiechen@jinse.com> Co-authored-by: Waket Zheng <waketzheng@gmail.com>
107 lines
4.6 KiB
Python
107 lines
4.6 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
import re
|
|
from pathlib import Path
|
|
|
|
from tests._utils import Dialect, run_shell
|
|
|
|
|
|
def _append_field(*files: str, name="field_1") -> None:
|
|
for file in files:
|
|
p = Path(file)
|
|
field = f" {name} = fields.IntField(default=0)"
|
|
with p.open("a") as f:
|
|
f.write(os.linesep + field)
|
|
|
|
|
|
def test_fake(new_aerich_project):
|
|
if Dialect.is_sqlite():
|
|
# TODO: go ahead if sqlite alter-column supported
|
|
return
|
|
output = run_shell("aerich init -t settings.TORTOISE_ORM")
|
|
assert "Success" in output
|
|
output = run_shell("aerich init-db")
|
|
assert "Success" in output
|
|
output = run_shell("aerich --app models_second init-db")
|
|
assert "Success" in output
|
|
output = run_shell("pytest _tests.py::test_init_db")
|
|
assert "error" not in output.lower()
|
|
_append_field("models.py", "models_second.py")
|
|
output = run_shell("aerich migrate")
|
|
assert "Success" in output
|
|
output = run_shell("aerich --app models_second migrate")
|
|
assert "Success" in output
|
|
output = run_shell("aerich upgrade --fake")
|
|
assert "FAKED" in output
|
|
output = run_shell("aerich --app models_second upgrade --fake")
|
|
assert "FAKED" in output
|
|
output = run_shell("pytest _tests.py::test_fake_field_1")
|
|
assert "error" not in output.lower()
|
|
_append_field("models.py", "models_second.py", name="field_2")
|
|
output = run_shell("aerich migrate")
|
|
assert "Success" in output
|
|
output = run_shell("aerich --app models_second migrate")
|
|
assert "Success" in output
|
|
output = run_shell("aerich heads")
|
|
assert "_update.py" in output
|
|
output = run_shell("aerich upgrade --fake")
|
|
assert "FAKED" in output
|
|
output = run_shell("aerich --app models_second upgrade --fake")
|
|
assert "FAKED" in output
|
|
output = run_shell("pytest _tests.py::test_fake_field_2")
|
|
assert "error" not in output.lower()
|
|
output = run_shell("aerich heads")
|
|
assert "No available heads." in output
|
|
output = run_shell("aerich --app models_second heads")
|
|
assert "No available heads." in output
|
|
_append_field("models.py", "models_second.py", name="field_3")
|
|
run_shell("aerich migrate", capture_output=False)
|
|
run_shell("aerich --app models_second migrate", capture_output=False)
|
|
run_shell("aerich upgrade --fake", capture_output=False)
|
|
run_shell("aerich --app models_second upgrade --fake", capture_output=False)
|
|
output = run_shell("aerich downgrade --fake -v 2 --yes", input="y\n")
|
|
assert "FAKED" in output
|
|
output = run_shell("aerich --app models_second downgrade --fake -v 2 --yes", input="y\n")
|
|
assert "FAKED" in output
|
|
output = run_shell("aerich heads")
|
|
assert "No available heads." not in output
|
|
assert not re.search(r"1_\d+_update\.py", output)
|
|
assert re.search(r"2_\d+_update\.py", output)
|
|
output = run_shell("aerich --app models_second heads")
|
|
assert "No available heads." not in output
|
|
assert not re.search(r"1_\d+_update\.py", output)
|
|
assert re.search(r"2_\d+_update\.py", output)
|
|
output = run_shell("aerich downgrade --fake -v 1 --yes", input="y\n")
|
|
assert "FAKED" in output
|
|
output = run_shell("aerich --app models_second downgrade --fake -v 1 --yes", input="y\n")
|
|
assert "FAKED" in output
|
|
output = run_shell("aerich heads")
|
|
assert "No available heads." not in output
|
|
assert re.search(r"1_\d+_update\.py", output)
|
|
assert re.search(r"2_\d+_update\.py", output)
|
|
output = run_shell("aerich --app models_second heads")
|
|
assert "No available heads." not in output
|
|
assert re.search(r"1_\d+_update\.py", output)
|
|
assert re.search(r"2_\d+_update\.py", output)
|
|
output = run_shell("aerich upgrade --fake")
|
|
assert "FAKED" in output
|
|
output = run_shell("aerich --app models_second upgrade --fake")
|
|
assert "FAKED" in output
|
|
output = run_shell("aerich heads")
|
|
assert "No available heads." in output
|
|
output = run_shell("aerich --app models_second heads")
|
|
assert "No available heads." in output
|
|
output = run_shell("aerich downgrade --fake -v 1 --yes", input="y\n")
|
|
assert "FAKED" in output
|
|
output = run_shell("aerich --app models_second downgrade --fake -v 1 --yes", input="y\n")
|
|
assert "FAKED" in output
|
|
output = run_shell("aerich heads")
|
|
assert "No available heads." not in output
|
|
assert re.search(r"1_\d+_update\.py", output)
|
|
assert re.search(r"2_\d+_update\.py", output)
|
|
output = run_shell("aerich --app models_second heads")
|
|
assert "No available heads." not in output
|
|
assert re.search(r"1_\d+_update\.py", output)
|
|
assert re.search(r"2_\d+_update\.py", output)
|