UNPKG

pubnub

Version:

Publish & Subscribe Real-time Messaging with PubNub

211 lines (167 loc) 5.91 kB
/** */ import chaiAsPromised from 'chai-as-promised'; import chai, { expect } from 'chai'; import chaiNock from 'chai-nock'; import assert from 'assert'; import fs from 'fs'; import PubNub from '../../src/node'; chai.use(chaiAsPromised); chai.use(chaiNock); describe('File Upload API v1 tests', () => { const ORIGIN = undefined; const TEST_PREFIX = 'javascript-fileUploadApiV1-tests'; const UUID = `${TEST_PREFIX}-main`; const UUID_1 = `${TEST_PREFIX}-uuid-1`; const CHANNEL_1 = `demo-channel`; const FILE_1 = `${TEST_PREFIX}-file-1`; let pubnub: PubNub; describe('with encryption', () => { pubnub = new PubNub({ subscribeKey: process.env.SUBSCRIBE_KEY || 'demo', publishKey: process.env.PUBLISH_KEY || 'demo', uuid: UUID, origin: ORIGIN, cipherKey: 'abcdef', // logVerbosity: true, }); runTests(pubnub); }); describe('without encryption', () => { pubnub = new PubNub({ subscribeKey: process.env.SUBSCRIBE_KEY || 'demo', publishKey: process.env.PUBLISH_KEY || 'demo', origin: ORIGIN, uuid: UUID, }); runTests(pubnub); }); function runTests(pubnub: PubNub) { it('should export File class in PubNub instance', async () => { expect(pubnub.File).to.exist; }); it('should handle node.js streams', async () => { const testFile = fs.createReadStream(`${__dirname}/input.json`); const result = await pubnub.sendFile({ channel: CHANNEL_1, message: { test: 'message', value: 42 }, file: { stream: testFile, name: 'input.json' }, }); expect(result.name).to.equal('input.json'); const file = await pubnub.downloadFile({ name: result.name, id: result.id, channel: CHANNEL_1 }); const fileStream = await file.toStream(); const outputStream = fs.createWriteStream(`${__dirname}/output.json`); fileStream.pipe(outputStream); outputStream.once('end', () => { const expectedFileBuffer = fs.readFileSync(`${__dirname}/input.json`); const actualFileBuffer = fs.readFileSync(`${__dirname}/output.json`); expect(actualFileBuffer.toString('utf8')).to.equal(expectedFileBuffer.toString('utf8')); }); }).timeout(20000); it('should handle node.js buffers', async () => { const testContent = `Hello world! ${new Date().toLocaleString()}`; const result = await pubnub.sendFile({ message: { myMessage: 42 }, channel: CHANNEL_1, file: { data: Buffer.from(testContent), name: 'myFile.txt', mimeType: 'text/plain' }, }); expect(result.name).to.equal('myFile.txt'); const file = await pubnub.downloadFile({ channel: CHANNEL_1, id: result.id, name: result.name, }); const output = await file.toBuffer(); expect(output.toString('utf8')).to.equal(testContent); }).timeout(10000); let fileId: string; let fileName: string; it('should handle strings', (done) => { const testContent = `Hello world! ${new Date().toLocaleString()}`; pubnub.sendFile( { channel: CHANNEL_1, file: { data: testContent, name: 'someFile.txt', mimeType: 'text/plain' }, }, (err, result) => { try { expect(err.error).to.be.false; assert(result !== null); expect(result.name).to.equal('someFile.txt'); } catch (error) { done(error); return; } pubnub.downloadFile( { channel: CHANNEL_1, id: result.id, name: result.name, }, (err2, file) => { fileId = result.id; fileName = result.name; assert(file !== null); const output = file.toString('utf8').then((output) => { try { expect(output).to.equal(testContent); done(); } catch (error) { done(error); } }); }, ); }, ); }).timeout(10000); it('should list all available files on a channel', async () => { const result = await pubnub.listFiles({ channel: CHANNEL_1, limit: 10 }); expect(result.status).to.equal(200); expect(result.data).to.have.length.greaterThan(0); }); it('should handle file delete', async () => { const result = await pubnub.deleteFile({ channel: CHANNEL_1, id: fileId, name: fileName }); expect(result.status).to.equal(200); }); it('should handle encryption/decryption with explicit cipherKey', (done) => { const testContent = `Hello world! ${new Date().toLocaleString()}`; pubnub.sendFile( { channel: CHANNEL_1, file: { data: testContent, name: 'someFile.txt', mimeType: 'text/plain' }, cipherKey: 'cipherKey', }, (err, result) => { try { expect(err.error).to.be.false; assert(result !== null); expect(result.name).to.equal('someFile.txt'); } catch (error) { done(error); } pubnub.downloadFile( { channel: CHANNEL_1, id: result!.id, name: result!.name, cipherKey: 'cipherKey', }, (err2, file) => { fileId = result!.id; fileName = result!.name; assert(file !== null); const output = file.toString('utf8').then((output) => { try { expect(output).to.equal(testContent); done(); } catch (error) { done(error); } }); }, ); }, ); }).timeout(10000); } });