// import fse from 'fs-extra'; // import path from 'path'; // import tmp from 'tmp'; // import { assert } from 'chai'; // import * as Attachments from '../../../../attachments/attachments'; // import { stringToArrayBuffer } from '../../../../session/utils/String'; // import { decryptAttachmentBuffer, encryptAttachmentBuffer } from '../../../../types/Attachment'; // import { TestUtils } from '../../../test-utils'; // import sinon from 'sinon'; const PREFIX_LENGTH = 2; const NUM_SEPARATORS = 1; const NAME_LENGTH = 64; const PATH_LENGTH = PREFIX_LENGTH + NUM_SEPARATORS + NAME_LENGTH; // tslint:disable-next-line: max-func-body-length describe('Attachments', () => { // describe('createWriterForNew', () => { // let tempRootDirectory: any = null; // let sandbox: sinon.SinonSandbox; // beforeEach(() => { // tempRootDirectory = tmp.dirSync().name; // TestUtils.stubWindow('textsecure', { // storage: { // get: () => '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef', // }, // }); // sandbox = sinon.createSandbox(); // sandbox.stub(window, 'callWorker').resolves([]); // }); // afterEach(async () => { // await fse.remove(tempRootDirectory); // sandbox.restore(); // TestUtils.restoreStubs(); // }); // it('should write file to disk and return path', async () => { // const input = stringToArrayBuffer('test string'); // const tempDirectory = path.join(tempRootDirectory, 'Attachments_createWriterForNew'); // const outputPath = await Attachments.createWriterForNew(tempDirectory)(input); // const output = await fse.readFile(path.join(tempDirectory, outputPath)); // assert.lengthOf(outputPath, PATH_LENGTH); // const outputDecrypted = Buffer.from(await decryptAttachmentBuffer(output.buffer)); // const inputBuffer = Buffer.from(input); // assert.deepEqual(inputBuffer, outputDecrypted); // }); // }); // describe('createWriterForExisting', () => { // let tempRootDirectory: any = null; // before(() => { // tempRootDirectory = tmp.dirSync().name; // TestUtils.stubWindow('textsecure', { // storage: { // get: () => '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef', // }, // }); // }); // after(async () => { // await fse.remove(tempRootDirectory); // TestUtils.restoreStubs(); // }); // it('should write file to disk on given path and return path', async () => { // const input = stringToArrayBuffer('test string'); // const tempDirectory = path.join(tempRootDirectory, 'Attachments_createWriterForExisting'); // const relativePath = Attachments.getRelativePath(Attachments.createName()); // const attachment = { // path: relativePath, // data: input, // }; // const outputPath = await Attachments.createWriterForExisting(tempDirectory)(attachment); // const output = await fse.readFile(path.join(tempDirectory, outputPath)); // assert.equal(outputPath, relativePath); // const outputDecrypted = Buffer.from(await decryptAttachmentBuffer(output.buffer)); // const inputBuffer = Buffer.from(input); // assert.deepEqual(inputBuffer, outputDecrypted); // }); // it('throws if relative path goes higher than root', async () => { // const input = stringToArrayBuffer('test string'); // const tempDirectory = path.join(tempRootDirectory, 'Attachments_createWriterForExisting'); // const relativePath = '../../parent'; // const attachment = { // path: relativePath, // data: input, // }; // try { // await Attachments.createWriterForExisting(tempDirectory)(attachment); // } catch (error) { // assert.strictEqual(error.message, 'Invalid relative path'); // return; // } // throw new Error('Expected an error'); // }); // }); // describe('createReader', () => { // let tempRootDirectory: any = null; // before(() => { // tempRootDirectory = tmp.dirSync().name; // TestUtils.stubWindow('textsecure', { // storage: { // get: () => '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef', // }, // }); // }); // after(async () => { // await fse.remove(tempRootDirectory); // TestUtils.restoreStubs(); // }); // it('should read file from disk', async () => { // const tempDirectory = path.join(tempRootDirectory, 'Attachments_createReader'); // const relativePath = Attachments.getRelativePath(Attachments.createName()); // const fullPath = path.join(tempDirectory, relativePath); // const input = stringToArrayBuffer('test string'); // const encryptedInput = await encryptAttachmentBuffer(input); // const inputBuffer = Buffer.from(encryptedInput.encryptedBufferWithHeader); // await fse.ensureFile(fullPath); // await fse.writeFile(fullPath, inputBuffer); // const outputDecrypted = await Attachments.createReader(tempDirectory)(relativePath); // assert.deepEqual(new Uint8Array(input), new Uint8Array(outputDecrypted)); // }); // it('throws if relative path goes higher than root', async () => { // const tempDirectory = path.join(tempRootDirectory, 'Attachments_createReader'); // const relativePath = '../../parent'; // try { // await Attachments.createReader(tempDirectory)(relativePath); // } catch (error) { // assert.strictEqual(error.message, 'Invalid relative path'); // return; // } // throw new Error('Expected an error'); // }); // }); // describe('createDeleter', () => { // let tempRootDirectory: any = null; // before(() => { // tempRootDirectory = tmp.dirSync().name; // }); // after(async () => { // await fse.remove(tempRootDirectory); // }); // it('should delete file from disk', async () => { // const tempDirectory = path.join(tempRootDirectory, 'Attachments_createDeleter'); // const relativePath = Attachments.getRelativePath(Attachments.createName()); // const fullPath = path.join(tempDirectory, relativePath); // const input = stringToArrayBuffer('test string'); // const inputBuffer = Buffer.from(input); // await fse.ensureFile(fullPath); // await fse.writeFile(fullPath, inputBuffer); // await Attachments.createDeleter(tempDirectory)(relativePath); // const existsFile = fse.existsSync(fullPath); // assert.isFalse(existsFile); // }); // it('throws if relative path goes higher than root', async () => { // const tempDirectory = path.join(tempRootDirectory, 'Attachments_createDeleter'); // const relativePath = '../../parent'; // try { // await Attachments.createDeleter(tempDirectory)(relativePath); // } catch (error) { // assert.strictEqual(error.message, 'Invalid relative path'); // return; // } // throw new Error('Expected an error'); // }); // }); // describe('createName', () => { // it('should return random file name with correct length', () => { // assert.lengthOf(Attachments.createName(), NAME_LENGTH); // }); // }); // describe('getRelativePath', () => { // it('should return correct path', () => { // const name = '608ce3bc536edbf7637a6aeb6040bdfec49349140c0dd43e97c7ce263b15ff7e'; // assert.lengthOf(Attachments.getRelativePath(name), PATH_LENGTH); // }); // }); // describe('createAbsolutePathGetter', () => { // const isWindows = process.platform === 'win32'; // it('combines root and relative path', () => { // const root = isWindows ? 'C:\\temp' : '/tmp'; // const relative = 'ab/abcdef'; // const pathGetter = Attachments.createAbsolutePathGetter(root); // const absolutePath = pathGetter(relative); // assert.strictEqual(absolutePath, isWindows ? 'C:\\temp\\ab\\abcdef' : '/tmp/ab/abcdef'); // }); // it('throws if relative path goes higher than root', () => { // const root = isWindows ? 'C:\\temp' : 'tmp'; // const relative = '../../ab/abcdef'; // const pathGetter = Attachments.createAbsolutePathGetter(root); // try { // pathGetter(relative); // } catch (error) { // assert.strictEqual(error.message, 'Invalid relative path'); // return; // } // throw new Error('Expected an error'); // }); // }); });