mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-09-26 02:24:54 +00:00
async addon, tests
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
const core = require('../src/index');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
describe('Addon Tests', () => {
|
||||
const tmpDir = './tests/tmp';
|
||||
const dbPath = path.join(tmpDir, 'simplex_v1');
|
||||
|
||||
beforeEach(() => {
|
||||
fs.mkdirSync(tmpDir, {recursive: true});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
fs.rmSync(tmpDir, {recursive: true, force: true});
|
||||
});
|
||||
|
||||
it('should initialize controller', async () => {
|
||||
const ctrl = await core.chatMigrateInit(dbPath, "key", "yesUp");
|
||||
expect(typeof ctrl).toBe("bigint");
|
||||
await expect(core.chatCloseStore(ctrl)).resolves.toBe(undefined);
|
||||
|
||||
await expect(core.chatMigrateInit(dbPath, "wrong_key", "yesUp")).rejects.toMatchObject({
|
||||
message: 'Database or migration error (see dbMigrationError property)',
|
||||
dbMigrationError: expect.objectContaining({type: 'errorNotADatabase'})
|
||||
});
|
||||
await expect(core.chatMigrateInit(dbPath, "key", "invalidMigrationMode")).rejects.toMatchObject({
|
||||
message: 'Database or migration error (see dbMigrationError property)',
|
||||
dbMigrationError: expect.objectContaining({type: 'invalidConfirmation'})
|
||||
});
|
||||
});
|
||||
|
||||
it('should send command and receive event', async () => {
|
||||
const ctrl = await core.chatMigrateInit(dbPath, "key", "yesUp");
|
||||
|
||||
const sendRes1 = await core.chatSendCmd(ctrl, "/v");
|
||||
expect(typeof sendRes1).toBe('object');
|
||||
expect(sendRes1).toHaveProperty('result')
|
||||
|
||||
const sendRes2 = await core.chatSendCmd(ctrl, '/debug event {"type": "chatSuspended"}');
|
||||
expect(sendRes2).toMatchObject({result: {type: 'cmdOk'}});
|
||||
|
||||
const wait = 15_000_000;
|
||||
const recvRes = await core.chatRecvMsgWait(ctrl, wait);
|
||||
expect(recvRes).toMatchObject({result: {type: 'chatSuspended'}});
|
||||
|
||||
await core.chatCloseStore(ctrl);
|
||||
});
|
||||
|
||||
it('should write/read encrypted file from/to buffer', async () => {
|
||||
const ctrl = await core.chatMigrateInit(dbPath, "key", "yesUp");
|
||||
|
||||
const filePath = path.join(tmpDir, 'write_file.txt');
|
||||
const buffer = new Uint8Array([0, 1, 2]).buffer;
|
||||
const encRes1 = await core.chatWriteFile(ctrl, filePath, buffer);
|
||||
const key1 = encRes1.fileKey;
|
||||
const nonce1 = encRes1.fileNonce;
|
||||
expect(typeof key1).toBe('string');
|
||||
expect(typeof nonce1).toBe('string');
|
||||
|
||||
const buffer2 = await core.chatReadFile(filePath, key1, nonce1);
|
||||
expect(Buffer.from(buffer2).equals(Buffer.from(buffer))).toBe(true);
|
||||
|
||||
await expect(core.chatWriteFile(ctrl, path.join(tmpDir, 'unknown', 'unknown.txt'), buffer)).rejects.toThrow();
|
||||
await expect(core.chatReadFile(path.join(tmpDir, 'unknown.txt'), key1, nonce1)).rejects.toThrow();
|
||||
|
||||
core.chatCloseStore(ctrl);
|
||||
});
|
||||
|
||||
it('should encrypt/decrypt file', async () => {
|
||||
const ctrl = await core.chatMigrateInit(dbPath, "key", "yesUp");
|
||||
|
||||
const unencryptedPath = path.join(tmpDir, 'file_unencrypted.txt');
|
||||
fs.writeFileSync(unencryptedPath, "unencrypted\n");
|
||||
const encryptedPath = path.join(tmpDir, 'file_encrypted.txt');
|
||||
const encRes = await core.chatEncryptFile(ctrl, unencryptedPath, encryptedPath);
|
||||
const key = encRes.fileKey;
|
||||
const nonce = encRes.fileNonce;
|
||||
expect(typeof key).toBe('string');
|
||||
expect(typeof nonce).toBe('string');
|
||||
|
||||
const decryptedPath = path.join(tmpDir, 'file_decrypted.txt');
|
||||
const decryptRes = await core.chatDecryptFile(encryptedPath, key, nonce, decryptedPath);
|
||||
expect(decryptRes).toBeDefined(); // Assuming it returns something like 'ok'
|
||||
|
||||
const decryptedContent = fs.readFileSync(decryptedPath, 'utf8');
|
||||
expect(decryptedContent).toBe("unencrypted\n");
|
||||
|
||||
await expect(core.chatEncryptFile(ctrl, path.join(tmpDir, 'unknown.txt'), encryptedPath)).rejects.toThrow();
|
||||
await expect(core.chatDecryptFile(path.join(tmpDir, 'unknown.txt'), key, nonce, decryptedPath)).rejects.toThrow();
|
||||
|
||||
core.chatCloseStore(ctrl);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// data DBMigrationResult
|
||||
// = DBMOk
|
||||
// | DBMInvalidConfirmation
|
||||
// | DBMErrorNotADatabase {dbFile :: String}
|
||||
// | DBMErrorMigration {dbFile :: String, migrationError :: MigrationError}
|
||||
// | DBMErrorSQL {dbFile :: String, migrationSQLError :: String}
|
||||
Reference in New Issue
Block a user