|
@@ -143,6 +143,41 @@ test('migrates legacy data to the seeded admin user', () => {
|
|
|
assert.equal(getSmtpCredential(admin.id).username, 'legacy-smtp');
|
|
assert.equal(getSmtpCredential(admin.id).username, 'legacy-smtp');
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+test('migrates legacy inbound messages before creating folder indexes', () => {
|
|
|
|
|
+ const dataDir = tempDataDir();
|
|
|
|
|
+ const dbPath = path.join(dataDir, 'mailhub.sqlite');
|
|
|
|
|
+ const legacy = new DatabaseSync(dbPath);
|
|
|
|
|
+ legacy.exec(`
|
|
|
|
|
+ CREATE TABLE inbound_messages (
|
|
|
|
|
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
|
|
+ mailbox_id INTEGER NOT NULL,
|
|
|
|
|
+ user_id INTEGER NOT NULL,
|
|
|
|
|
+ domain_id INTEGER NOT NULL,
|
|
|
|
|
+ sender TEXT NOT NULL DEFAULT '',
|
|
|
|
|
+ recipients_json TEXT NOT NULL DEFAULT '[]',
|
|
|
|
|
+ subject TEXT NOT NULL DEFAULT '',
|
|
|
|
|
+ message_id TEXT NOT NULL DEFAULT '',
|
|
|
|
|
+ raw_message TEXT NOT NULL DEFAULT '',
|
|
|
|
|
+ text_body TEXT NOT NULL DEFAULT '',
|
|
|
|
|
+ html_body TEXT NOT NULL DEFAULT '',
|
|
|
|
|
+ preview TEXT NOT NULL DEFAULT '',
|
|
|
|
|
+ read_state TEXT NOT NULL DEFAULT 'false',
|
|
|
|
|
+ received_at TEXT NOT NULL,
|
|
|
|
|
+ created_at TEXT NOT NULL,
|
|
|
|
|
+ updated_at TEXT NOT NULL,
|
|
|
|
|
+ deleted_at TEXT
|
|
|
|
|
+ );
|
|
|
|
|
+ `);
|
|
|
|
|
+ legacy.close();
|
|
|
|
|
+
|
|
|
|
|
+ const database = initDatabase(dataDir, 'test-secret');
|
|
|
|
|
+ const columns = database.prepare('PRAGMA table_info(inbound_messages)').all().map((column) => column.name);
|
|
|
|
|
+ const indexes = database.prepare('PRAGMA index_list(inbound_messages)').all().map((index) => index.name);
|
|
|
|
|
+
|
|
|
|
|
+ assert.ok(columns.includes('folder'));
|
|
|
|
|
+ assert.ok(indexes.includes('idx_inbound_messages_mailbox_folder_received'));
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
test('migrates legacy send events with engagement tracking disabled', () => {
|
|
test('migrates legacy send events with engagement tracking disabled', () => {
|
|
|
const dataDir = tempDataDir();
|
|
const dataDir = tempDataDir();
|
|
|
const database = initDatabase(dataDir, 'test-secret');
|
|
const database = initDatabase(dataDir, 'test-secret');
|