Files
Cloud-Tour-to-Libo/tests/test_data_platform_sql_create.py

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()