49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
import unittest
|
|
|
|
from app.data_platform.schema import (
|
|
_column_sql,
|
|
custom_definition_from_create_sql,
|
|
)
|
|
|
|
|
|
MYSQL_STYLE_USERS_SQL = """
|
|
CREATE TABLE users (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
username VARCHAR(50) NOT NULL,
|
|
password VARCHAR(255) NOT NULL,
|
|
email VARCHAR(100) UNIQUE,
|
|
phone VARCHAR(20),
|
|
age INT,
|
|
gender VARCHAR(10),
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
);
|
|
"""
|
|
|
|
|
|
class SqlCreateCompatibilityTests(unittest.TestCase):
|
|
def test_mysql_style_managed_columns_and_unique_are_supported(self) -> None:
|
|
definition, rows = custom_definition_from_create_sql(
|
|
{"sql": MYSQL_STYLE_USERS_SQL}
|
|
)
|
|
|
|
self.assertEqual(definition.code, "users")
|
|
self.assertEqual(
|
|
[field.code for field in definition.fields],
|
|
["username", "password", "email", "phone", "age", "gender"],
|
|
)
|
|
email = next(field for field in definition.fields if field.code == "email")
|
|
self.assertTrue(email.unique)
|
|
self.assertTrue(next(row for row in rows if row["code"] == "email")["unique"])
|
|
|
|
physical_sql = _column_sql(definition).as_string()
|
|
self.assertIn('"email" VARCHAR(100) UNIQUE', physical_sql)
|
|
self.assertIn("id UUID PRIMARY KEY", physical_sql)
|
|
self.assertIn("updated_at TIMESTAMPTZ NOT NULL DEFAULT now()", physical_sql)
|
|
self.assertNotIn("AUTO_INCREMENT", physical_sql)
|
|
self.assertNotIn("ON UPDATE", physical_sql)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|