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);
});

12
pnpm-lock.yaml generated
View File

@@ -841,6 +841,9 @@ importers:
'@paralleldrive/cuid2':
specifier: ^2.2.2
version: 2.2.2
'@testcontainers/mysql':
specifier: ^10.13.1
version: 10.13.1
better-sqlite3:
specifier: ^11.3.0
version: 11.3.0
@@ -2986,6 +2989,9 @@ packages:
'@tanstack/virtual-core@3.8.3':
resolution: {integrity: sha512-vd2A2TnM5lbnWZnHi9B+L2gPtkSeOtJOAw358JqokIH1+v2J7vUAzFVPwB/wrye12RFOurffXu33plm4uQ+JBQ==}
'@testcontainers/mysql@10.13.1':
resolution: {integrity: sha512-G4I59inEQ37yxeMgXyNgLbGf+aUNGoQDdgrfNWpWC/s0z5fiFSROEngcp8ueGA4UgH9Jte8iXo0WrMgmBfwJEQ==}
'@tiptap/core@2.7.1':
resolution: {integrity: sha512-/sOJ3J2OWxQrho6MWgE9xaRBln5MC4BEuevTYIGia4zrc523lX9s+h/lUeLtCPhI0+J6z9Vz+v3G/uoEqWCL+A==}
peerDependencies:
@@ -9152,6 +9158,12 @@ snapshots:
'@tanstack/virtual-core@3.8.3': {}
'@testcontainers/mysql@10.13.1':
dependencies:
testcontainers: 10.13.1
transitivePeerDependencies:
- supports-color
'@tiptap/core@2.7.1(@tiptap/pm@2.7.1)':
dependencies:
'@tiptap/pm': 2.7.1