mirror of
https://github.com/ancsemi/Haven.git
synced 2026-10-27 17:15:24 +00:00
58 lines
2.1 KiB
JavaScript
58 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
// Which DMs the auto-cleanup sweep removes as orphaned (#5282). A DM with
|
|
// yourself has one member by design and must never be one; it used to be
|
|
// deleted within 15 minutes of being opened.
|
|
//
|
|
// node --test test/orphanDms.test.js
|
|
|
|
const assert = require('node:assert/strict');
|
|
const test = require('node:test');
|
|
const fs = require('node:fs');
|
|
const os = require('node:os');
|
|
const path = require('node:path');
|
|
|
|
const DATA = fs.mkdtempSync(path.join(os.tmpdir(), 'haven-orphan-dms-'));
|
|
process.env.HAVEN_DATA_DIR = DATA;
|
|
|
|
const { initDatabase } = require('../src/database');
|
|
const { findOrphanDms } = require('../src/orphanDms');
|
|
|
|
const db = initDatabase();
|
|
const user = (name) => db.prepare("INSERT INTO users (username, password_hash) VALUES (?, 'x')").run(name).lastInsertRowid;
|
|
const alice = user('od-alice'), bob = user('od-bob');
|
|
let n = 0;
|
|
const dm = (creator, members, extra = {}) => {
|
|
const id = db.prepare('INSERT INTO channels (name, code, created_by, is_dm, is_self_dm, is_group) VALUES (?, ?, ?, 1, ?, ?)')
|
|
.run('DM', `od${String(++n).padStart(6, '0')}`, creator, extra.self ? 1 : 0, extra.group ? 1 : 0).lastInsertRowid;
|
|
for (const m of members) db.prepare('INSERT INTO channel_members (channel_id, user_id) VALUES (?, ?)').run(id, m);
|
|
return id;
|
|
};
|
|
const orphaned = () => new Set(findOrphanDms(db).map((r) => r.id));
|
|
|
|
test.after(() => {
|
|
db.close();
|
|
fs.rmSync(DATA, { recursive: true, force: true, maxRetries: 5 });
|
|
});
|
|
|
|
test('a DM with yourself is never orphaned', () => {
|
|
const notes = dm(alice, [alice], { self: true });
|
|
assert.equal(orphaned().has(notes), false);
|
|
});
|
|
|
|
test('a 1:1 DM someone left is orphaned, a full one is not', () => {
|
|
const left = dm(alice, [alice]);
|
|
const full = dm(alice, [alice, bob]);
|
|
const set = orphaned();
|
|
assert.equal(set.has(left), true);
|
|
assert.equal(set.has(full), false);
|
|
});
|
|
|
|
test('a group DM is orphaned only once nobody is left', () => {
|
|
const waiting = dm(alice, [alice], { group: true });
|
|
const empty = dm(alice, [], { group: true });
|
|
const set = orphaned();
|
|
assert.equal(set.has(waiting), false);
|
|
assert.equal(set.has(empty), true);
|
|
});
|