You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
5.0 KiB
TypeScript
142 lines
5.0 KiB
TypeScript
import { expect } from 'chai';
|
|
import { beforeEach } from 'mocha';
|
|
import Sinon from 'sinon';
|
|
import * as DecryptedAttachmentsManager from '../../../../session/crypto/DecryptedAttachmentsManager';
|
|
import { TestUtils } from '../../../test-utils';
|
|
// tslint:disable: chai-vague-errors no-unused-expression
|
|
|
|
describe('DecryptedAttachmentsManager', () => {
|
|
// tslint:disable-next-line: no-empty
|
|
beforeEach(() => {
|
|
DecryptedAttachmentsManager.resetDecryptedUrlForTesting();
|
|
TestUtils.stubWindowLog();
|
|
Sinon.stub(DecryptedAttachmentsManager, 'getLocalAttachmentPath').returns('/local/attachment');
|
|
});
|
|
|
|
afterEach(() => {
|
|
Sinon.restore();
|
|
});
|
|
|
|
describe('getAlreadyDecryptedMediaUrl', () => {
|
|
describe('invalid url', () => {
|
|
it('url is null', () => {
|
|
expect(DecryptedAttachmentsManager.getAlreadyDecryptedMediaUrl(null as any)).to.be.null;
|
|
});
|
|
|
|
it('url is undefined', () => {
|
|
expect(DecryptedAttachmentsManager.getAlreadyDecryptedMediaUrl(undefined as any)).to.be
|
|
.null;
|
|
});
|
|
|
|
it('url is empty string', () => {
|
|
expect(DecryptedAttachmentsManager.getAlreadyDecryptedMediaUrl('')).to.be.null;
|
|
});
|
|
|
|
it('url starts with something not being the attachment path', () => {
|
|
expect(DecryptedAttachmentsManager.getAlreadyDecryptedMediaUrl('/local/notvalid')).to.be
|
|
.null;
|
|
});
|
|
});
|
|
it('url starts with "blob:" => returns the already decrypted url right away', () => {
|
|
expect(DecryptedAttachmentsManager.getAlreadyDecryptedMediaUrl('blob:whatever')).to.be.eq(
|
|
'blob:whatever'
|
|
);
|
|
});
|
|
|
|
describe('url starts with attachmentPath', () => {
|
|
let readFileContent: Sinon.SinonStub;
|
|
let getItemById: Sinon.SinonStub;
|
|
let decryptAttachmentBufferNode: Sinon.SinonStub;
|
|
|
|
beforeEach(() => {
|
|
readFileContent = Sinon.stub(DecryptedAttachmentsManager, 'readFileContent').resolves(
|
|
Buffer.from('this is a test')
|
|
);
|
|
getItemById = TestUtils.stubDataItem('getItemById')
|
|
.withArgs('local_attachment_encrypted_key')
|
|
.callsFake(async () => {
|
|
return { value: 'dfdf' };
|
|
});
|
|
|
|
decryptAttachmentBufferNode = TestUtils.stubUtilWorker(
|
|
'decryptAttachmentBufferNode',
|
|
new Uint8Array(5)
|
|
);
|
|
TestUtils.stubCreateObjectUrl();
|
|
});
|
|
|
|
it('url starts with attachment path but is not already decrypted', () => {
|
|
expect(
|
|
DecryptedAttachmentsManager.getAlreadyDecryptedMediaUrl('/local/attachment/attachment1')
|
|
).to.be.eq(null);
|
|
});
|
|
|
|
it('url starts with attachment path but is not already decrypted', async () => {
|
|
expect(
|
|
DecryptedAttachmentsManager.getAlreadyDecryptedMediaUrl('/local/attachment/attachment1')
|
|
).to.be.eq(null);
|
|
|
|
expect(readFileContent.callCount).to.be.eq(0);
|
|
expect(decryptAttachmentBufferNode.callCount).to.be.eq(0);
|
|
expect(getItemById.callCount).to.be.eq(0);
|
|
|
|
const resolved = await DecryptedAttachmentsManager.getDecryptedMediaUrl(
|
|
'/local/attachment/attachment1',
|
|
'image/jpeg',
|
|
false
|
|
);
|
|
|
|
expect(readFileContent.callCount).to.be.eq(1);
|
|
expect(decryptAttachmentBufferNode.callCount).to.be.eq(1);
|
|
expect(getItemById.callCount).to.be.eq(1);
|
|
|
|
const now = `${Date.now()}`;
|
|
expect(resolved).to.be.not.empty;
|
|
expect(resolved.startsWith(now.slice(0, 9))).to.be.true;
|
|
});
|
|
|
|
it('url starts with attachment path and is already decrypted', async () => {
|
|
expect(
|
|
DecryptedAttachmentsManager.getAlreadyDecryptedMediaUrl('/local/attachment/attachment1')
|
|
).to.be.eq(null);
|
|
|
|
expect(readFileContent.callCount).to.be.eq(0);
|
|
expect(decryptAttachmentBufferNode.callCount).to.be.eq(0);
|
|
expect(getItemById.callCount).to.be.eq(0);
|
|
|
|
const resolved = await DecryptedAttachmentsManager.getDecryptedMediaUrl(
|
|
'/local/attachment/attachment1',
|
|
'image/jpeg',
|
|
false
|
|
);
|
|
|
|
expect(readFileContent.callCount).to.be.eq(1);
|
|
expect(decryptAttachmentBufferNode.callCount).to.be.eq(1);
|
|
expect(getItemById.callCount).to.be.eq(1);
|
|
|
|
const now = `${Date.now()}`;
|
|
expect(resolved).to.be.not.empty;
|
|
expect(resolved.startsWith(now.slice(0, 9))).to.be.true;
|
|
|
|
const resolved2 = await DecryptedAttachmentsManager.getDecryptedMediaUrl(
|
|
'/local/attachment/attachment1',
|
|
'image/jpeg',
|
|
false
|
|
);
|
|
|
|
// should not try to decrypt nor read from file again
|
|
expect(readFileContent.callCount).to.be.eq(1);
|
|
expect(decryptAttachmentBufferNode.callCount).to.be.eq(1);
|
|
expect(getItemById.callCount).to.be.eq(1);
|
|
|
|
const now2 = `${Date.now()}`;
|
|
expect(resolved2).to.be.not.empty;
|
|
expect(resolved2.startsWith(now2.slice(0, 9))).to.be.true;
|
|
});
|
|
});
|
|
}); // tslint:disable: no-empty
|
|
|
|
it.skip('cleanUpOldDecryptedMedias', () => {});
|
|
it.skip('getDecryptedBlob', () => {});
|
|
});
|