diff --git a/tests/test_migrate.py b/tests/test_migrate.py index 76b7c3e..806e22e 100644 --- a/tests/test_migrate.py +++ b/tests/test_migrate.py @@ -836,55 +836,74 @@ def test_migrate(mocker: MockerFixture): ) elif isinstance(Migrate.ddl, PostgresDDL): - assert sorted(Migrate.upgrade_operators) == sorted( - [ - 'ALTER TABLE "category" ALTER COLUMN "name" DROP NOT NULL', - 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(100) USING "slug"::VARCHAR(100)', - 'ALTER TABLE "config" ADD "user_id" INT NOT NULL', - 'ALTER TABLE "config" ADD CONSTRAINT "fk_config_user_17daa970" FOREIGN KEY ("user_id") REFERENCES "user" ("id") ON DELETE CASCADE', - 'ALTER TABLE "config" ALTER COLUMN "status" DROP DEFAULT', - 'ALTER TABLE "configs" RENAME TO "config"', - 'ALTER TABLE "email" ADD "address" VARCHAR(200) NOT NULL', - 'ALTER TABLE "email" DROP COLUMN "user_id"', - 'ALTER TABLE "email" RENAME COLUMN "id" TO "email_id"', - 'ALTER TABLE "product" ALTER COLUMN "view_num" SET DEFAULT 0', - 'ALTER TABLE "product" RENAME COLUMN "image" TO "pic"', - 'ALTER TABLE "user" ALTER COLUMN "password" TYPE VARCHAR(100) USING "password"::VARCHAR(100)', - 'ALTER TABLE "user" DROP COLUMN "avatar"', - 'CREATE INDEX "idx_product_name_869427" ON "product" ("name", "type_db_alias")', - 'CREATE INDEX "idx_email_email_4a1a33" ON "email" ("email")', - 'CREATE TABLE "email_user" ("email_id" INT NOT NULL REFERENCES "email" ("email_id") ON DELETE CASCADE,"user_id" INT NOT NULL REFERENCES "user" ("id") ON DELETE CASCADE)', - 'CREATE TABLE IF NOT EXISTS "newmodel" (\n "id" SERIAL NOT NULL PRIMARY KEY,\n "name" VARCHAR(50) NOT NULL\n);\nCOMMENT ON COLUMN "config"."user_id" IS \'User\';', - 'CREATE UNIQUE INDEX "uid_product_name_869427" ON "product" ("name", "type_db_alias")', - 'CREATE UNIQUE INDEX "uid_user_usernam_9987ab" ON "user" ("username")', - ] - ) - assert sorted(Migrate.downgrade_operators) == sorted( - [ - 'ALTER TABLE "category" ALTER COLUMN "name" SET NOT NULL', - 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(200) USING "slug"::VARCHAR(200)', - 'ALTER TABLE "config" ALTER COLUMN "status" SET DEFAULT 1', - 'ALTER TABLE "config" DROP COLUMN "user_id"', - 'ALTER TABLE "config" DROP CONSTRAINT "fk_config_user_17daa970"', - 'ALTER TABLE "config" RENAME TO "configs"', - 'ALTER TABLE "email" ADD "user_id" INT NOT NULL', - 'ALTER TABLE "email" DROP COLUMN "address"', - 'ALTER TABLE "email" RENAME COLUMN "email_id" TO "id"', - 'ALTER TABLE "product" ALTER COLUMN "view_num" DROP DEFAULT', - 'ALTER TABLE "product" RENAME COLUMN "pic" TO "image"', - 'ALTER TABLE "user" ADD "avatar" VARCHAR(200) NOT NULL DEFAULT \'\'', - 'ALTER TABLE "user" ALTER COLUMN "password" TYPE VARCHAR(200) USING "password"::VARCHAR(200)', - 'DROP INDEX "idx_product_name_869427"', - 'DROP INDEX "idx_email_email_4a1a33"', - 'DROP INDEX "idx_user_usernam_9987ab"', - 'DROP INDEX "uid_product_name_869427"', - 'DROP TABLE IF EXISTS "email_user"', - 'DROP TABLE IF EXISTS "newmodel"', - ] - ) + expected_upgrade_operators = set([ + 'ALTER TABLE "category" ALTER COLUMN "name" DROP NOT NULL', + 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(100) USING "slug"::VARCHAR(100)', + 'ALTER TABLE "category" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', + 'ALTER TABLE "config" ADD "user_id" INT NOT NULL', + 'ALTER TABLE "config" ADD CONSTRAINT "fk_config_user_17daa970" FOREIGN KEY ("user_id") REFERENCES "user" ("id") ON DELETE CASCADE', + 'ALTER TABLE "config" ALTER COLUMN "status" DROP DEFAULT', + 'ALTER TABLE "config" ALTER COLUMN "value" TYPE JSONB USING "value"::JSONB', + 'ALTER TABLE "configs" RENAME TO "config"', + 'ALTER TABLE "email" ADD "address" VARCHAR(200) NOT NULL', + 'ALTER TABLE "email" DROP COLUMN "user_id"', + 'ALTER TABLE "email" RENAME COLUMN "id" TO "email_id"', + 'ALTER TABLE "email" ALTER COLUMN "is_primary" TYPE BOOL USING "is_primary"::BOOL', + 'ALTER TABLE "product" ALTER COLUMN "view_num" SET DEFAULT 0', + 'ALTER TABLE "product" RENAME COLUMN "image" TO "pic"', + 'ALTER TABLE "product" ALTER COLUMN "is_reviewed" TYPE BOOL USING "is_reviewed"::BOOL', + 'ALTER TABLE "product" ALTER COLUMN "body" TYPE TEXT USING "body"::TEXT', + 'ALTER TABLE "product" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', + 'ALTER TABLE "user" ALTER COLUMN "password" TYPE VARCHAR(100) USING "password"::VARCHAR(100)', + 'ALTER TABLE "user" DROP COLUMN "avatar"', + 'ALTER TABLE "user" ALTER COLUMN "is_superuser" TYPE BOOL USING "is_superuser"::BOOL', + 'ALTER TABLE "user" ALTER COLUMN "last_login" TYPE TIMESTAMPTZ USING "last_login"::TIMESTAMPTZ', + 'ALTER TABLE "user" ALTER COLUMN "intro" TYPE TEXT USING "intro"::TEXT', + 'ALTER TABLE "user" ALTER COLUMN "is_active" TYPE BOOL USING "is_active"::BOOL', + 'CREATE INDEX "idx_product_name_869427" ON "product" ("name", "type_db_alias")', + 'CREATE INDEX "idx_email_email_4a1a33" ON "email" ("email")', + 'CREATE TABLE "email_user" ("email_id" INT NOT NULL REFERENCES "email" ("email_id") ON DELETE CASCADE,"user_id" INT NOT NULL REFERENCES "user" ("id") ON DELETE CASCADE)', + 'CREATE TABLE IF NOT EXISTS "newmodel" (\n "id" SERIAL NOT NULL PRIMARY KEY,\n "name" VARCHAR(50) NOT NULL\n);\nCOMMENT ON COLUMN "config"."user_id" IS \'User\';', + 'CREATE UNIQUE INDEX "uid_product_name_869427" ON "product" ("name", "type_db_alias")', + 'CREATE UNIQUE INDEX "uid_user_usernam_9987ab" ON "user" ("username")', + + ]) + expected_downgrade_operators = set([ + 'ALTER TABLE "category" ALTER COLUMN "name" SET NOT NULL', + 'ALTER TABLE "category" ALTER COLUMN "slug" TYPE VARCHAR(200) USING "slug"::VARCHAR(200)', + 'ALTER TABLE "category" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', + 'ALTER TABLE "config" ALTER COLUMN "status" SET DEFAULT 1', + 'ALTER TABLE "config" DROP COLUMN "user_id"', + 'ALTER TABLE "config" DROP CONSTRAINT "fk_config_user_17daa970"', + 'ALTER TABLE "config" RENAME TO "configs"', + 'ALTER TABLE "config" ALTER COLUMN "value" TYPE JSONB USING "value"::JSONB', + 'ALTER TABLE "email" ADD "user_id" INT NOT NULL', + 'ALTER TABLE "email" DROP COLUMN "address"', + 'ALTER TABLE "email" RENAME COLUMN "email_id" TO "id"', + 'ALTER TABLE "email" ALTER COLUMN "is_primary" TYPE BOOL USING "is_primary"::BOOL', + 'ALTER TABLE "product" ALTER COLUMN "view_num" DROP DEFAULT', + 'ALTER TABLE "product" RENAME COLUMN "pic" TO "image"', + 'ALTER TABLE "user" ADD "avatar" VARCHAR(200) NOT NULL DEFAULT \'\'', + 'ALTER TABLE "user" ALTER COLUMN "password" TYPE VARCHAR(200) USING "password"::VARCHAR(200)', + 'ALTER TABLE "user" ALTER COLUMN "last_login" TYPE TIMESTAMPTZ USING "last_login"::TIMESTAMPTZ', + 'ALTER TABLE "user" ALTER COLUMN "is_superuser" TYPE BOOL USING "is_superuser"::BOOL', + 'ALTER TABLE "user" ALTER COLUMN "is_active" TYPE BOOL USING "is_active"::BOOL', + 'ALTER TABLE "user" ALTER COLUMN "intro" TYPE TEXT USING "intro"::TEXT', + 'ALTER TABLE "product" ALTER COLUMN "created_at" TYPE TIMESTAMPTZ USING "created_at"::TIMESTAMPTZ', + 'ALTER TABLE "product" ALTER COLUMN "is_reviewed" TYPE BOOL USING "is_reviewed"::BOOL', + 'ALTER TABLE "product" ALTER COLUMN "body" TYPE TEXT USING "body"::TEXT', + 'DROP INDEX "idx_product_name_869427"', + 'DROP INDEX "idx_email_email_4a1a33"', + 'DROP INDEX "idx_user_usernam_9987ab"', + 'DROP INDEX "uid_product_name_869427"', + 'DROP TABLE IF EXISTS "email_user"', + 'DROP TABLE IF EXISTS "newmodel"', + ]) + assert not set(Migrate.upgrade_operators).symmetric_difference(expected_upgrade_operators) + assert not set(Migrate.downgrade_operators).symmetric_difference(expected_downgrade_operators) + elif isinstance(Migrate.ddl, SqliteDDL): assert Migrate.upgrade_operators == [] - assert Migrate.downgrade_operators == []