fix: mysql migration not working (#1138)

* fix: mysql migration not working

* test: add system integration test for mysql migration

* fix: format issues

* fix: deepsource issues

* chore: address bad name for mysql migration test
This commit is contained in:
Meier Lukas
2024-09-17 19:27:47 +02:00
committed by GitHub
parent 6f50f37462
commit 003cc5160c
14 changed files with 85 additions and 33 deletions

View File

@@ -1,14 +1,14 @@
CREATE TABLE `integrationGroupPermissions` (
`integration_id` varchar(64) NOT NULL,
`group_id` varchar(64) NOT NULL,
`permission` text NOT NULL,
CONSTRAINT `integrationGroupPermissions_integration_id_group_id_permission_pk` PRIMARY KEY(`integration_id`,`group_id`,`permission`)
`permission` varchar(128) NOT NULL,
CONSTRAINT `integration_group_permission__pk` PRIMARY KEY(`integration_id`,`group_id`,`permission`)
);
--> statement-breakpoint
CREATE TABLE `integrationUserPermission` (
`integration_id` varchar(64) NOT NULL,
`user_id` varchar(64) NOT NULL,
`permission` text NOT NULL,
`permission` varchar(128) NOT NULL,
CONSTRAINT `integrationUserPermission_integration_id_user_id_permission_pk` PRIMARY KEY(`integration_id`,`user_id`,`permission`)
);
--> statement-breakpoint

View File

@@ -2,5 +2,5 @@ ALTER TABLE `section` RENAME COLUMN `position` TO `y_offset`;--> statement-break
ALTER TABLE `section` ADD `x_offset` int NOT NULL;--> statement-breakpoint
ALTER TABLE `section` ADD `width` int;--> statement-breakpoint
ALTER TABLE `section` ADD `height` int;--> statement-breakpoint
ALTER TABLE `section` ADD `parent_section_id` text;--> statement-breakpoint
ALTER TABLE `section` ADD `parent_section_id` varchar(64);--> statement-breakpoint
ALTER TABLE `section` ADD CONSTRAINT `section_parent_section_id_section_id_fk` FOREIGN KEY (`parent_section_id`) REFERENCES `section`(`id`) ON DELETE cascade ON UPDATE no action;

View File

@@ -655,7 +655,7 @@
},
"permission": {
"name": "permission",
"type": "text",
"type": "varchar(128)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
@@ -683,8 +683,8 @@
}
},
"compositePrimaryKeys": {
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk",
"integration_group_permission__pk": {
"name": "integration_group_permission__pk",
"columns": ["integration_id", "group_id", "permission"]
}
},
@@ -819,7 +819,7 @@
},
"permission": {
"name": "permission",
"type": "text",
"type": "varchar(128)",
"primaryKey": false,
"notNull": true,
"autoincrement": false

View File

@@ -655,7 +655,7 @@
},
"permission": {
"name": "permission",
"type": "text",
"type": "varchar(128)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
@@ -683,8 +683,8 @@
}
},
"compositePrimaryKeys": {
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk",
"integration_group_permission__pk": {
"name": "integration_group_permission__pk",
"columns": ["integration_id", "group_id", "permission"]
}
},
@@ -819,7 +819,7 @@
},
"permission": {
"name": "permission",
"type": "text",
"type": "varchar(128)",
"primaryKey": false,
"notNull": true,
"autoincrement": false

View File

@@ -655,7 +655,7 @@
},
"permission": {
"name": "permission",
"type": "text",
"type": "varchar(128)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
@@ -683,8 +683,8 @@
}
},
"compositePrimaryKeys": {
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk",
"integration_group_permission__pk": {
"name": "integration_group_permission__pk",
"columns": ["integration_id", "group_id", "permission"]
}
},
@@ -819,7 +819,7 @@
},
"permission": {
"name": "permission",
"type": "text",
"type": "varchar(128)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
@@ -1109,7 +1109,7 @@
},
"parent_section_id": {
"name": "parent_section_id",
"type": "text",
"type": "varchar(64)",
"primaryKey": false,
"notNull": false,
"autoincrement": false

View File

@@ -655,7 +655,7 @@
},
"permission": {
"name": "permission",
"type": "text",
"type": "varchar(128)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
@@ -683,8 +683,8 @@
}
},
"compositePrimaryKeys": {
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk",
"integration_group_permission__pk": {
"name": "integration_group_permission__pk",
"columns": ["integration_id", "group_id", "permission"]
}
},
@@ -819,7 +819,7 @@
},
"permission": {
"name": "permission",
"type": "text",
"type": "varchar(128)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
@@ -1109,7 +1109,7 @@
},
"parent_section_id": {
"name": "parent_section_id",
"type": "text",
"type": "varchar(64)",
"primaryKey": false,
"notNull": false,
"autoincrement": false

View File

@@ -659,9 +659,9 @@
}
},
"compositePrimaryKeys": {
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
"integration_group_permission__pk": {
"columns": ["group_id", "integration_id", "permission"],
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk"
"name": "integration_group_permission__pk"
}
},
"uniqueConstraints": {}

View File

@@ -659,9 +659,9 @@
}
},
"compositePrimaryKeys": {
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
"integration_group_permission__pk": {
"columns": ["group_id", "integration_id", "permission"],
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk"
"name": "integration_group_permission__pk"
}
},
"uniqueConstraints": {}

View File

@@ -659,9 +659,9 @@
}
},
"compositePrimaryKeys": {
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
"integration_group_permission__pk": {
"columns": ["group_id", "integration_id", "permission"],
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk"
"name": "integration_group_permission__pk"
}
},
"uniqueConstraints": {}

View File

@@ -659,9 +659,9 @@
}
},
"compositePrimaryKeys": {
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
"integration_group_permission__pk": {
"columns": ["integration_id", "group_id", "permission"],
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk"
"name": "integration_group_permission__pk"
}
},
"uniqueConstraints": {}

View File

@@ -36,6 +36,7 @@
"@homarr/definitions": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0",
"@paralleldrive/cuid2": "^2.2.2",
"@testcontainers/mysql": "^10.13.1",
"better-sqlite3": "^11.3.0",
"dotenv": "^16.4.5",
"drizzle-kit": "^0.24.2",

View File

@@ -171,7 +171,7 @@ export const integrationUserPermissions = mysqlTable(
userId: varchar("user_id", { length: 64 })
.notNull()
.references(() => users.id, { onDelete: "cascade" }),
permission: text("permission").$type<IntegrationPermission>().notNull(),
permission: varchar("permission", { length: 128 }).$type<IntegrationPermission>().notNull(),
},
(table) => ({
compoundKey: primaryKey({
@@ -189,11 +189,12 @@ export const integrationGroupPermissions = mysqlTable(
groupId: varchar("group_id", { length: 64 })
.notNull()
.references(() => groups.id, { onDelete: "cascade" }),
permission: text("permission").$type<IntegrationPermission>().notNull(),
permission: varchar("permission", { length: 128 }).$type<IntegrationPermission>().notNull(),
},
(table) => ({
compoundKey: primaryKey({
columns: [table.integrationId, table.groupId, table.permission],
name: "integration_group_permission__pk",
}),
}),
);
@@ -276,7 +277,7 @@ export const sections = mysqlTable("section", {
width: int("width"),
height: int("height"),
name: text("name"),
parentSectionId: text("parent_section_id").references((): AnyMySqlColumn => sections.id, {
parentSectionId: varchar("parent_section_id", { length: 64 }).references((): AnyMySqlColumn => sections.id, {
onDelete: "cascade",
}),
});

View File

@@ -0,0 +1,38 @@
import path from "path";
import { MySqlContainer } from "@testcontainers/mysql";
import { drizzle } from "drizzle-orm/mysql2";
import { migrate } from "drizzle-orm/mysql2/migrator";
import mysql from "mysql2";
import { describe, test } from "vitest";
import * as mysqlSchema from "../schema/mysql";
describe("Mysql Migration", () => {
test("should add all tables and keys specified in migration files", async () => {
const mysqlContainer = await new MySqlContainer().start();
const connection = mysql.createConnection({
host: mysqlContainer.getHost(),
database: mysqlContainer.getDatabase(),
port: mysqlContainer.getPort(),
user: mysqlContainer.getUsername(),
password: mysqlContainer.getUserPassword(),
});
const database = drizzle(connection, {
schema: mysqlSchema,
mode: "default",
});
// Run migrations and check if it works
await migrate(database, {
migrationsFolder: path.join(__dirname, "..", "migrations", "mysql"),
});
// Check if users table exists
await database.query.users.findMany();
connection.end();
await mysqlContainer.stop();
}, 40_000);
});